训练一个优秀的神经网络需要上万的图片数据,而当自己目前的数据集数据不足时(只有几百张图片数据),可以使用数据增强(Data Augmentation)方法来扩充自己的图片数据集。Trochvision是PyTorch框架下的一个图像处理库,其中torchvision.transforms包中的函数可以对数据集中的图片进行处理,以实现数据增强的效果.
见https://blog.csdn.net/weixin_41978493/article/details/107126333.
transforms.Compose(transforms.Func)
transforms.RandomChoice(transforms.Func)
transforms.RandomApply(transforms, p=0.5)
transforms.RandomOrder(transforms)
transform.ToTensor()(img/ndarray)
PIL.Image
或维度为(H,W,C)的numpy.ndarray
转换成维度为[C,H,W],且三通道取值范围为[0,1]的Tensor.transforms.ToPILImage()(ndarray/tensor.float())
numpy.ndarray
或Tensor
转换成PIL.Image
.ndarray
的dtype=uint8,数据的维度为(H,W,C),且取值范围为[0,255];Tensor
只能为FloatTensor
,且维度为(C,H,W).transforms.Normalize(mean, std)
transform.ToTensor()
结合使用。将三通道的数值先归一化到[0,1],再归一化至[-1,1].transforms.RandomHorizontalFlip(p)
transforms.RandomVerticalFlip(p)
transforms.RandomRotation(degree,resample,expand,center)
transforms.CenterCrop(size)
transforms.RandomCrop(size, padding, pad_if_needed, fill, padding_mode)
size=(H,W)
,后者输入size=(size,size)
;padding=m
时,图像的四周均填充m个pixel;sequence类型padding=(a,b)
时,于图像左右填充a个pixel,于图像上下填充b个pixel;padding_mode=constant
时,int类型fill=n
时,三通道均根据padding类型填充n;tuple类型fill=(p,q,r)
时,分别在三通道按类型填充p、q、rpadding_mode=constant
常数;padding_mode=reflect
、padding_mode=symmetric
;padding_modeedge
按边缘的pixel进行填充.transforms.TenCrop(size, vertical_flip)
size=(H,W)
,后者输入size=(size,size)
;vertical_flip=False
则水平翻转;transforms.FiveCrop(size)
size=(H,W)
,后者输入size=(size,size)
;transforms.RandomResizedCrop(size, scale, ratio, interpolation)
scale=(a,b)
则裁剪后结果与原图的比例为a到b之间;interpolation=c
则插入c,插值方式默认为双线性插值.transforms.Pad(padding, fill, padding_mode)
padding=m
时,图像的四周均填充m个pixel;sequence类型padding=(a,b)
时,于图像左右填充a个pixel,于图像上下填充b个pixel;padding_mode=constant
时,int类型fill=n
时,三通道均根据padding类型填充n;tuple类型fill=(p,q,r)
时,分别在三通道按类型填充p、q、rpadding_mode=constant
常数;padding_mode=reflect
、padding_mode=symmetric
;padding_modeedge
按边缘的pixel进行填充.transforms.Resize(size, interpolation)
interpolation=a
则插入a,插值方式默认为双线性插值.transforms.Grayscale(num_output_channels)
transforms.RandomGrayscale(p)
transforms.ColorJitter(brightness, contrast, saturation, hue)
brightness=float
,生成亮度改变范围[max(0,1-brightness),1+brightness]
,下同;[-hue,hue]
;transforms.LinearTransformation(transformation_matrix)
[C*H*W,C*H*W]
;transforms.RandomAffine(degrees, translate, scale, shear, resample, fillcolor)
degrees=(a,b)
则度数范围为(a,b);若为int或float类型degrees=c
则度数范围为(-c,c);translate=(a,b)
则首先在[-Wa,Wa]的范围内随机采样水平平移,然后在[-Wb,Wb]的范围内随机采样竖直平移;scale=(a,b)
随机从该范围抽取一个数(比例)进行缩放,然后采样;degrees=(a,b)
则范围为(a,b);若为int或float类型degrees=c
则范围为(-c,c);resample=PIL.Image.NEAREST/PIL.Image.BILINEAR/PIL.Image.BICUBIC
;