Pytorch之图像预处理transforms(常⽤操作汇总)
Pytorch Transforms操作汇总
数据增强(Data Augmentation)
数据增强⼜称为数据增⼴,数据扩增,它是对训练集进⾏变换,使训练集更
丰富,从⽽让模型更具泛化能⼒,在pytorch中我们使⽤transforms这⼀⼯具包对图像数据进⾏增强
torchvision计算机视觉⼯具包
该⼯具包主要包含以下三种常⽤的类
torchvision.datasets :常⽤数据集的dataset实现,MNIST, CIFAR-10, ImageNet等
本⽂主要对第⼀种类ansforms进⾏介绍
数据中⼼化
数据标准化
缩放
裁剪
旋转
翻转
填充
噪声添加
灰度变换
线性变换
仿射变换
亮度、饱和度及对⽐度变换
下⾯介绍⼏种常⽤的transforms⽅法,以后遇到会再补充
transforms.Compose (transforms)
功能:将多个变换⽅式逐步实现。
例:transforms.Compose(transforms.ToTensor(), transforms.Normalize())
1.图像裁切(Crop)
transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode=‘constant’)功能:从图⽚中随机裁剪出尺⼨为size的图⽚
size :所需裁剪图⽚尺⼨
padding :设置填充⼤⼩
当为a时,上下左右均填充a个像素
当为(a, b)时,上下填充b个像素,左右填充a个像素
当为(a,b,C,d)时,左,上,右,下分别填充a,b,C,d
pad_ if_ need :若图像⼩于设定size,则填充
padding_mode :填充模式,有4中模式
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]
fill constant时, 设置填充的像素值
transforms.CenterCrop(size)
功能:从图像中⼼裁剪图⽚
size:所需裁剪图⽚尺⼨
transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation)
功能:随机⼤⼩、长宽⽐裁剪图⽚
size:所需裁剪图⽚尺⼨
scale:随机裁剪⾯积⽐例,默认(0.08,1)
ratio:随机长宽⽐,默认(3/4, 4/3)
interpolation:插值⽅法
PIL. Image. NEAREST
PIL. Image. BILINEAR
resizedPIL. /mage. BICUBIC
transforms.FiveCrop(size)
功能:在图像的上下左右以及中⼼裁剪出尺⼨为size的5张图⽚
size:所需裁剪图⽚尺⼨
transforms.TenCrop(size,vertical_ flip=False)
功能:在图像的上下左右以及中⼼裁剪出尺⼨为size的5张图⽚,TenCrop对这5张图⽚进⾏⽔平或者垂直镜像获得10张图⽚size:所需裁剪图⽚尺⼨
vertical_ flip: 是否垂直翻转
2.图⽚翻转、旋转(Flip, Rotation)
transforms.RandomHorizontalFlip(p=0.5)
功能:依概率⽔平(左右)翻转图⽚
p:翻转概率
transforms.RandomVerticalFlip(p=0.5)
功能:依概率垂直(上下)翻转图⽚
p:翻转概率
transforms.RandomRotation(degrees, resample=False, expand=False, center=None )
功能:随机旋转图⽚
degrees :旋转⾓度
当为a时,在(-a,a)之间选择旋转⾓度
当为(a,b)时,在(a,b)之间选择旋转⾓度
resample :重采样⽅法
expand :是否扩⼤图⽚,以保持原图信息
3.图像变换
transforms.Normalize (mean, std, inplace=False)
功能:逐channel的对图像进⾏标准化
output = (input - mean) / std
mean:各通道的均值
std:各通道的标准差
inplace:是否原地操作
transforms.Resize(size, interpolation=2)
功能:改变图⽚⼤⼩为指定的尺⼨
size: 输出图⽚的⼤⼩,如果size为(h,w)则输出尺⼨和(h,w)⼀致,若为单值x,输出⼆维值图⽚时,则较⼩的边长为该单值x,以x为基准按⽐例同步较⼤的边长。
interpolation:默认为PIL.Image.BILNEAR
transforms.ToTensor()
功能:图⽚归⼀化将0 ~ 255转换成0 ~ 1区间
transforms.Pad(padding, fill=0, padding_mode=‘constant’)
功能:⽤给定的填充数值对图像边缘进⾏填充。
padding:设置填充⼤⼩
当为a时,上下左右均填充a个像素
当为(a,b)时,上下填充b个像素,左右填充a个像素
当为(a,b, c, d)时,左,上,右,下分别填充a,b, c, d
padding_ mode:填充模式,有4种模式,constant、edge、reflect和symmetric
fill: constant时, 设置填充的像素值,(R, G, B) or
(Gray)
transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0 )
功能:调整亮度、对⽐度、饱和度和⾊相
brightness:亮度调整因⼦
当为a时,从[max(0, 1-a), 1 + a]中随机选择
当为(a, b)时,从[a, b]中
contrast:对⽐度参数,同brightness
saturation:饱和度参数,同brightness
hue:⾊相参数,当为a时,从[-a,a]中选择参数,
注:0<= a <= 0.5
当为(a, b)时,从[a, b]中选择参数, 注: -0.5<= a=<=b<=0.5
transforms.RandomGrayscale ( num_ output_ channels, p=0.1)
功能:依概率将图⽚转换为灰度图
num_ouput_channels: 输出通道数只能设1或3
p:概率值,图像被转换为灰度图的概率
transforms.Grayscale(num_ output_ channels)
功能:依概率将图⽚转换为灰度图
num_ouput_channels: 输出通道数只能设1或3
transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
功能:对图像进⾏仿射变换,仿射变换是⼆维的线性变换,由五种基本原⼦变换构成,分别是旋转、平移、缩放、错切和翻转degrees:旋转⾓度设置
translate:平移区间设置,如(a, b), a设置宽(width) ,b设置⾼(height)
图像在宽维度平移的区间为-img_width * a< dx < img_width * a
scale:缩放⽐例(以⾯积为单位)
fill color: 填充颜⾊设置
transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)功能:
对图像进⾏随机遮挡
p:概率值,执⾏该操作的概率
scale:遮挡区域的⾯积
ratio:遮挡区域长宽⽐
value:设置遮挡区域的像素值,(R, G, B) or (Gray)
transforms.Lambda( lambd)
功能:⽤户⾃定义lambda⽅法
lambd: lambda匿名函数
lambda [arg1 [arg2, … argn]] : expression
例:
⾃定义⽅法将10张图⽚依次转化成0~1的张量并堆栈到列表
transforms.TenCrop(200, vertical_flip=True)
transforms.Lambda(lambda crops:torch.stack([transforms.Totensor()(crop)for crop in crops]))
4.Transforms的操作
transforms . RandomChoice([transforms1, transforms2, transforms3])
功能:从⼀系列transforms⽅法中随机挑选⼀个
transforms . RandomApply([transforms1, transforms2, transforms3], p=0.5)功能:依据概率执⾏-组transforms操作
transforms . RandomOrder([transforms1, transforms2, transforms3] )
功能:对⼀组transforms操作打乱顺序
5.⾃定义Transforms
⾃定义transforms要素:
1.仅接收⼀个参数,返回⼀个参数
2.注意上下游的输出与输⼊
class Compose(object):
def__call__(self, img):
for t ansforms:
img = t(img)
return img
通过类实现多参数传⼊
class YourTransforms(object):
def__init__(self,...):
...
def__call__(self, img):
.
..
return img
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论