其实我们都知道Pytorch的torchvision的transforms并非真正意义上的数据增强,它只是将图像做了变换,实际上图像数据集的总量是不变的。
现在我们使用Augmentor来做真正意义上的数据增强,首先安装Augmentor
pip install Augmentor
如果我们的ground truth,即mask图像是单通道的,需要转成3通道的RGB图像
from PIL import Image
import os
if __name__ == '__main__':
img_path = "/home/user/line/data_dataset_voc/SegmentationClassPNG/"
for im_name in os.listdir(img_path):
img_mode = Image.open(img_path + im_name)
print(img_mode.mode)
img = img_mode.convert('RGB')
img.save(img_path + im_name)
由于一般mask图像是png格式的,Augmentor需要保证原始图像和mask图像格式一致,我这里原始图像是jpg格式的
import cv2
import os
if __name__ == '__main__':
img_path = "/home/user/line/data_dataset_voc/JPEGImages/"
output_path = "/home/user/line/data_dataset_voc/JPEGImagespng/"
for im_name in os.listdir(img_path):
print(img_path + im_name)
img = cv2.imread(img_path + im_name)
im_name_new = im_name.split('.')[0]+'.png'
cv2.imwrite(output_path + im_name_new, img)
最后就是开始做数据增强处理了,当然我这里只做了旋转和翻转处理,你还可以作一些其他的数据增强。最后会得到20000张增强图像。
import Augmentor
if __name__ == '__main__':
p = Augmentor.Pipeline("/home/user/line/data_dataset_voc/JPEGImagespng/")
p.ground_truth("/home/user/line/data_dataset_voc/SegmentationClassPNG/")
p.rotate(probability=0.8, max_left_rotation=25, max_right_rotation=25)
p.flip_left_right(probability=0.5)
p.flip_top_bottom(probability=0.5)
p.sample(20000)
最后再分别拷贝到原始图像数据集以及mask数据集中即可开始训练。