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])
















