PyTorch图像预处理

在深度学习中,数据的数量和分布对模型的性能有很大的影响,因此我们常常需要对已有的数据做预处理和增强操作。PyTorch在torchvision.transforms模块中提供了我们一些常用的图像预处理方法。

一、裁剪

1、 中心裁剪

transforms.CenterCrop(size)

2、 随机裁剪

transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode=’constant’)

padding:填充大小,为a时,上下左右均填充a个像素;为(a,b)时,左右填充a个像素,上下填充b个像素;为(a,b,c,d)时左上右下分别填充a,b,c,d。
pad_if_needed:裁剪后图片小于size时是否填充
fill:填充像素值
padding_mode:像素值设置(constant:像素值由fill设置,edge:像素值由图像边缘像素
设定,reflect:镜像填充,最后一个像素不镜像,symmetric:全部镜像填充)

3、 随机长宽比裁剪

transforms.RandomResizedCrop(size,scale=(0.08,1),ratio=(0.75,1.33333333),interpolation)

scale:随机缩放面积比例,默认随机选取(0.08,1)
ratio:随机长宽比,默认随机选取(3/4,3/4)
interpolation:裁剪后图片小于size,使用插值方法resize

4、 上下左右中心裁剪

transforms.FiveCrop(size)

在图像上下左右以及中心裁剪出尺寸为size的5张图片

transforms.TenCrop(size, vertical_flip=False)

对5张图片进行镜像操作获得10张图片
vertical_fip:是否垂直翻转,默认为False
注:输出返回tuple,需转换为tensor

二、翻转和旋转

1、水平/竖直翻转

transforms.RandomHorizontalFlip( p)
transforms.RandomVerticalFlip( p)

p:翻转概率

2、随机旋转

transforms.RandomRotation(degrees,resample=False,expend=False,center=None,Fill=None)

degrees:旋转角度
resample:重采样方法
expand:是否扩大矩形框,以保证原图信息
center:旋转点

三、图像变换

1、填充边缘

transforms.Pad(padding=32,fill=(255,0,0),padding_mode=’constant)

2、调整亮度(brightness)、对比度(contrast)、饱和度(saturation)、色相(hue)

transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)

注 :1. brightness、contrast、saturation参数,当为a时,从[max(0,1-a),1+a]随机选择;当为(a,b)时,从[a,b]选择。
2.hue参数:当为a时,从[-a,a]中随机选择,0<=a<=0.5当为(a,b)时,从[a,b]中随机选择,0<=a<=b<=0.5

3、 转换为灰度图

transforms.Grayscale(num_output_channels=1)
transforms.RandomGrayscale(p=0.1,num_output_channels=1)

p:转换概率
nu_output_channels:输出通道数(1或3)

4、 仿射变换(二维线性变换)

transforms.RandomAffine(degrees,translate=None,scale=None,shear=None,resample=False,fillcolor=0)

由旋转、平移、缩放、错切、翻转五种操作组成。
degrees:旋转角度
translate:平移区间设置(a,b),a为宽,b为高。
scale:缩放比例(以面积为单位)
fillcolor:填充颜色
shear:错切角度(水平错切/垂直错切),eg:(a,b,c,d):x轴在(a,b)随机选角度,y轴在(c,d)随机选角度;(a,b):x轴(-a,a),y轴(-b,b)
resample:重采样(NEAREST,BILINEAR,BICUBIC)

5、随机遮挡图像

transforms.RandomErasing(p=0.5,scale=(0.02,0.33),ratio=(0.3,3.3),value=0,inplace=False)

注:接受tensor,需先transforms.ToTensor()
p:执行概率
scale:遮挡面积,随机选择(a,b)中的一个遮挡比例
ratio:长宽比,随机选择(a,b)中的一个长宽比
value:像素值,(R,G,B)或Gray或任意字符串。由于ToTensor对像素值归一化,因此(R,G,B)要除以255

6、线性变换

transforms.LinearTransformation(transformation_matrix)

常用于白化处理

7、ToTensor

transforms.ToTensor

8、重置图像分辨率

transforms.Resize(size, interpolation=2)

interpolation:插值方法选择,默认为PIL.Image.BILINEAR

9、标准化

transforms.Normalize(mean,std,inplace=False)

mean:各通道均值
std:各通道标准差
inplace:是否原地操作

10、自定义transforms

transforms.Lambda()

11、转换为PILImage

transforms.ToPILImage(mode=None)

mode=1:单通道
mode=3:RGB
mode=4:RGBA

四、针对transforms的操作

1、 从一系列transforms方法中随机选择一个

transforms.RandomChoice([transforms1 , transforms2 , transforms3])

2、根据概率整体执行一组transforms

transforms.RandomApply([transforms1 , transforms2 , transforms3] , p=0.5)

3、 打乱一组transforms顺序

transforms.RandomOrder([transforms1,transforms2,transforms3])