背景
上一篇博客介紹了 pytorch
的 transforms
模塊,有需要的移步 研究一下 pytorch 的 transforms 模塊。現在,我想像 T.Normalise()
一樣,對每個圖片做一下對比度增強,而其他的轉換方法保持不變,依舊采用隨機處理。
實現方式是 采用 __call__
機制,具體如下:
-
from PIL import ImageEnhance
-
-
class Contrast(object):
-
def __init__(self,degree):
-
self.degree = degree
-
def __call__(self,img):
-
return contrast(img,self.degree)
-
def contrast(img,degree):
-
enh_contrast = ImageEnhance.Contrast(img)
-
enh_contrast.enhance(degree)
-
return img
上面定義了新的數據轉換方法:Contrast,使用方法如下,以開源的代碼為例 class ChaojieDataset(Dataset):
-
-
#2.define dataset
-
class ChaojieDataset(Dataset):
-
def __init__(self,label_list,transforms=None,train=True,test=False):
-
self.test = test
-
self.train = train
-
imgs = []
-
if self.test:
-
for index,row in label_list.iterrows():
-
imgs.append((row[ "filename"]))
-
self.imgs = imgs
-
else:
-
for index,row in label_list.iterrows():
-
imgs.append((row[ "filename"],row["label"]))
-
self.imgs = imgs
-
if transforms is None:
-
if self.test or not train:
-
self.transforms = T.Compose([
-
T.Resize((config.img_weight,config.img_height)),
-
T.ToTensor(),
-
T.Normalize(mean = [ 0.485,0.456,0.406],
-
std = [ 0.229,0.224,0.225])])
-
else:
-
self.transforms = T.Compose([
-
T.Resize((config.img_weight,config.img_height)),
-
T.RandomRotation( 30),
-
T.RandomHorizontalFlip(),
-
T.RandomVerticalFlip(),
-
T.RandomAffine( 45),
-
Contrast( 1.8), ## 在此添加 ##
-
T.ToTensor(),
-
T.Normalize(mean = [ 0.485,0.456,0.406],
-
std = [ 0.229,0.224,0.225])])
-
else:
-
self.transforms = transforms
-
def __getitem__(self,index):
-
if self.test:
-
filename = self.imgs[index]
-
img = Image.open(filename)
-
img = self.transforms(img)
-
return img,filename
-
else:
-
filename,label = self.imgs[index]
-
img = Image.open(filename)
-
img = self.transforms(img)
-
return img,label
-
def __len__(self):
-
return len(self.imgs)
這樣,每一張圖片除了進行歸一化和轉變成張量外,都做了對比度增強,當然也可以設置一個隨機數,每次隨機選擇要增強的對比度。