数据预处理-transform[ToTensor,Normalizer]
常⽤的数据预处理⽅法:
包括:数据中⼼化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换、亮度、饱和度及对⽐度变换等
数据标准化
transforms.Normalize()
功能:逐channel的对图像进⾏标准化(均值变为0,标准差变为1),可以加快模型的收敛
output = (input – mean) / std
mean:各通道的均值
std:各通道的标准差
inplace:是否原地操作
transforms.ToTensor()
说的是ToTesnor会,⽽且将数据归⼀化到均值为0,⽅差为1(是将数据除以255),那么归⼀化后为什么还要接⼀个Normalize()呢?Normalize()是对数据按通道进⾏标准化,即减去均值,再除以⽅差
数据如果分布在(0,1)之间,可能实际的bias,就是神经⽹络的输⼊b会⽐较⼤,⽽模型初始化时b=0的,这样会导致神经⽹络收敛⽐较慢,经过Normalize后,可以加快模型的收敛速度。
因为对RGB图⽚⽽⾔,数据范围是[0-255]的,需要先经过ToTensor除以255归⼀化到[0,1]之后,再通过Normalize计算过后,将数据归⼀化到[-1,1]。
那transform.Normalize()是怎么⼯作的呢?以上⾯代码为例,ToTensor()能够把灰度范围从0-255变换到0-1之间,⽽后⾯的transform.Normalize()则把0-1变换到(-1,1).具体地说,对每个通道⽽⾔,Normalize执⾏以下操作:
image=(image-mean)/std
其中mean和std分别通过(0.5,0.5,0.5)和(0.5,0.5,0.5)进⾏指定。原来的0-1最⼩值0则变成(0-0.5)/0.5=-1,⽽最⼤值1则变成(1-0.5)/0.5=1.
transforms——裁剪
1. transforms.CenterCrop
1. 功能:从图像中⼼裁剪图⽚
2. size:所需裁剪图⽚尺⼨
2. transforms.RandomCrop
1. 功能:从图⽚中随机裁剪出尺⼨为size的图⽚
2. size:所需裁剪图⽚尺⼨
3. padding:设置填充⼤⼩。当为a时,上下左右均填充a个像素,当为(a,b)时,上下填充b个像素,左右填充a个像素。当为
(a,b,c,d)时,左上右下分别填充abcd
4. pad_if_need:若图像⼩于设定size,则填充
5. padding_mode:填充模式:(1)constant像素值由fill设定(默认模式);(2)edge像素值由图像边缘像素决定
(3)reflect镜像填充,最后⼀个像素不镜像,eg,[1,2,3,4]->[3,2,1,2,3,4,3,2];(4)symmetric镜像填充,最后⼀个像素镜像,eg,[1,2,3,4]->[2,1,1,2,3,4,4,3]
6. fill:constant时,设置填充的像素值
3. RandomResizedCrop
1. 功能:随机⼤⼩、长宽⽐裁剪图⽚
2. size:所需裁剪图⽚尺⼨
3. scale:随机裁剪⾯积⽐例,默认(0.08,1)
4. ratio:随机长宽⽐,默认(3/4,4/3)
5. interpolation:插值⽅法,PIL.Image.NEAREST最近邻,PIL.Image.BILINEAR双线性,PIL.Image.BICUBIC
4. FiveCrop
1. 在图⽚的左上⾓、左下⾓、右上⾓、右下⾓和中⼼裁剪出尺⼨为size的5张图⽚
2. size:所需裁剪图⽚尺⼨
3. 注意:返回的数据为tuple格式,需要转换为张量形式或者PIL.Image形式
5. TenCrop
1. 在图像的上下左右以及中⼼裁剪出尺⼨为size的5张图⽚,TenCrop对着5张图⽚进⾏⽔平或者垂直镜像获得10张图⽚
2. size:所需裁剪图⽚尺⼨
3. vertical_flip:是否垂直翻转
transforms——翻转和旋转
1. RandomHorizontalFlip⽔平翻转
1. p:翻转概率
2. RandomVerticalFlip垂直翻转
1. p:翻转概率
3. RandomRotation
1. 功能:随机旋转图⽚
2. degrees:旋转⾓度。当为a时,在(-a, a)之间选择旋转⾓度;当为(a, b)时,在(a, b)之间选择旋转⾓度
3. resample:重采样⽅法,⼀般不需要设置,使⽤默认值
4. expand:是否扩⼤图⽚,以保持原图信息
5. center:旋转点设置,默认中⼼旋转。如果设置为(0,0),则为左上⾓旋转
在这⾥插⼊图⽚描述
4.1 图像变换
1. Pad
1. 功能:对图⽚边缘进⾏填充
2. padding:设置填充⼤⼩。当为a时,上下左右均填充a个像素,当为(a,b)时,上下填充b个像素,左右填充a个像素。当为
(a,b,c,d)时,左上右下分别填充abcd
3. padding_mode:填充模式。(1)constant像素值由fill设定(默认模式);(2)edge像素值由图像边缘像素决定
(3)reflect镜像填充,最后⼀个像素不镜像,eg,[1,2,3,4]->[3,2,1,2,3,4,3,2];(4)symmetric镜像填充,最后⼀个像素镜像,eg,[1,2,3,4]->[2,1,1,2,3,4,4,3]
4. fill:constant时,设置填充的像素值,(R, G, B)或者(Gray)
2. ColorJitter
1. 功能:调整亮度、对⽐度、饱和度和⾊相
2. brightness:亮度调整因⼦。当为a时,从[max(0, 1-1), 1+a]中随机选择;当为(a, b)时,从[a, b]中随机选择。
3. contrast:对⽐度参数,同brightness
4. saturation:饱和度参数,同brightness
5. hue:⾊相参数,当为a时,从[-a, a]中选择参数,注:0<= a <=0.5;当为(a, b)时,从[a, b]中选择参数-0.5 <= a <= b <=
0.5
3. Grayscale
1. 是RandomGrayscale的特例,概率为1。
4. RandomGrayscale
1. 功能:依概率将图⽚转换为灰度图
2. num_output_channels:输出通道数,只能设1或3
3. p:概率值,图像被转换为灰度图的概率
在这⾥插⼊图⽚描述
resized5. RandomAffine
1. 功能:对图像进⾏仿射变换,仿射变换是⼆维的线性变换,由五种基本原⼦变换构成,分别是旋转、平移、缩放、错切和翻转。
2. degrees:旋转⾓度设置
3. translate:平移区间设置,如(a, b),a设置宽(width),b设置⾼(height),图像在宽维度平移的区间为-img_width * a <
dx < img_width * a
4. scale:缩放⽐例(以⾯积为单位),0到1之间
5. fill_color:填充颜⾊设置,默认为⿊⾊(0)
6. shear:错切⾓度设置,有⽔平错切和垂直错切。若为a,则仅在x轴错切,错切⾓度在(-a,a)之间;若为(a,b),则a设置
x轴⾓度,b设置y的⾓度;若为(a,b,c,d),则a,b设置x轴⾓度,c,d设置y轴⾓度
7. resample:重采样⽅式,有NEARSET,BILINEAR,BICUBIC
在这⾥插⼊图⽚描述
6. RandomErasing
1. 功能:对图像进⾏随机遮挡
2. p:概率值,执⾏该操作的概率
3. scale:遮挡区域的⾯积
4. ratio:遮挡区域长宽⽐
5. value:设置遮挡区域的像素值,(R,G,B)或(Gray)。如果value值设置为字符串,则填充随机的像素
在这⾥插⼊图⽚描述
在这⾥插⼊图⽚描述
7. transforms.Lambda
1. 功能:⽤户⾃定义lambda⽅法
2. lambd:lambd:lambda匿名函数 lambda [arg1 [, arg2, …, argn]] : expression
在这⾥插⼊图⽚描述
4.2 transforms⽅法操作
1. transforms.RandomChoice
2. 功能:从⼀系列transforms⽅法中随机挑选⼀个
transforms.RandomChoice([transforms1, transforms2, transforms3])
1. transforms.RandomApply
2. 功能:依据概率执⾏⼀组transforms操作
transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)
1. transforms.RandomOrder
1. 功能:对⼀组transforms操作打乱顺序
transforms.RandomOrder([transforms1, transforms2, transforms3])
4.3 ⾃定义transforms⽅法
在这⾥插⼊图⽚描述
transforms⽅法是在Compose类的call⽅法中被调⽤的,对⼀组transforms⽅法进⾏for循环,每次循序的挑选并执⾏transforms⽅法
⾃定义transforms要素:
1. 仅接收⼀个参数,返回⼀个参数
2. 注意上下游的输出和输⼊,数据类型必须匹配
通过类实现多参数传⼊,下图为⾃定义transforms的基本参数,⼀个init,⼀个call
在这⾥插⼊图⽚描述
椒盐噪声
椒盐噪声⼜称为⼜称为脉冲噪声,是⼀种随机出现的⽩点或者⿊点,⽩点称为盐噪声,⿊点称为椒噪声。
信噪⽐(SNR):衡量噪声的⽐例,图像中为图像像素的占⽐
下图为不同信噪⽐的椒盐噪声效果图:
在这⾥插⼊图⽚描述
class AddPepperNoise(object):
def __init__(self, snr, p):
self.snr = snr
self.p = p
def __call__(self, img):
'''
添加椒盐噪声具体实现过程
'''
return img
5. 数据增强策略
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论