torchvision.transforms
是
pytorch
中的图像预处理包。一般用
Compose
把多个步骤整合到一起。
Compose
会将
transforms
列表里面的
transform
操作进行遍历。
class torchvision.transforms.Compose(transforms):
# Composes several transforms together.
# Parameters: transforms (list of Transform objects) – list of transforms to compose.
\qquad 使用transform
操作之前需要导包:
import torchvision.transforms as transforms
\qquad 本文对transforms
中的各个预处理方法进行介绍和总结。官方文档只是将方法陈列,没有归纳总结,顺序很乱,这里总结一共有四大类,方便大家索引:
transforms.RandomCrop
transforms.CenterCrop
transforms.RandomResizedCrop
transforms.FiveCrop
transforms.TenCrop
transforms.RandomHorizontalFlip(p=0.5)
transforms.RandomVerticalFlip(p=0.5)
transforms.RandomRotation
PILImage
对象的尺寸:transforms.Resize
transforms.Normalize
tensor
,并归一化至[0-1]
:transforms.ToTensor
transforms.Pad
transforms.ColorJitter
transforms.Grayscale
transforms.LinearTransformation
transforms.RandomAffine
transforms.RandomGrayscale
PILImage
:transforms.ToPILImage
transform
策略:transforms.Lambda
transforms
操作,使数据增强更灵活transforms
中选一个进行操作:transforms.RandomChoice(transforms)
transforms
加上概率,依概率进行操作:transforms.RandomApply(transforms, p=0.5)
transforms
中的操作随机打乱:transforms.RandomOrder
# 功能:从图片中随机裁剪出尺寸为size的图片
torchvision.transforms.RandomCrop(size,padding=None,pad_if_need=False,fill=0,padding_mode='constant')
sequence
或int
,若为sequence
,则为(h,w)
,若为int
,则(size,size)
。a
时上下左右均填充a
个像素。(a, b)
时,左右填充a
个像素,上下填充b
个像素。(a, b, c, d)
时,左、上、右、下分别填充a,b,c,d
。size
时,是否填充,若为False
则可能引发异常。由于是在填充完成之后完成裁剪操作,因此会对填充后的图像进行随机裁剪。RGB
三通道需要填充的值。constant
。
# 功能:依据给定的size从中心裁剪
torchvision.transforms.CenterCrop(size)
sequence
或int
,若为sequence
,则为(h,w)
,若为int
,则(size,size)
。# 功能:按照随机大小、随机宽高比裁剪图片
torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)
sequence
或int
,若为sequence
,则为(h,w)
,若为int
,则(size,size)
。0.08
到1.0
倍。3/4
到4/3
倍。PIL.Image.BILINEAR
。
PIL.Image.NEAREST
\qquad 1PIL.Image.BILINEAR
\qquad 2PIL.Image.BICUBIC
\qquad 3PIL.Image.LANCZOS
\qquad 4# 功能:在图像的上下左右及中心裁剪出尺寸为size的图片,获得5张图片,返回一个4D-tensor
torchvision.transforms.FiveCrop(size)
sequence
或int
,若为sequence
,则为(h,w)
,若为int
,则(size,size)
。# 功能:对图片进行上下左右以及中心裁剪出尺寸为size的图片,然后全部翻转(水平或者垂直),获得10张图片,返回一个4D-tensor
torchvision.transforms.TenCrop(size, vertical_flip=False)
sequence
或int
,若为sequence
,则为(h,w)
,若为int
,则(size,size)
。False
,即默认为水平翻转。# 功能:依据概率p对PIL图片进行水平翻转
torchvision.transforms.RandomHorizontalFlip(p=0.5)
0.5
。# 功能:依据概率p对PIL图片进行垂直翻转
torchvision.transforms.RandomVerticalFlip(p=0.5)
0.5
。# 功能:按照degrees随机旋转一定角度
torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None)
sequence
或int/float
,若为sequence
,则范围为(min,max)
,若为int/float
,则范围为(size,size)
。1
”或“P
”,则将其设置为PIL.Image.NEAREST
。
PIL.Image.NEAREST
\qquad 1PIL.Image.BILINEAR
\qquad 2PIL.Image.BICUBIC
\qquad 3PIL.Image.LANCZOS
\qquad 4true
,则展开输出以使其足够大以容纳整个旋转图像。如果为false或省略,则使输出图像与输入图像的大小相同。请注意,扩展标志假定围绕中心旋转而不进行平移。(x,y)
,原点是图片左上角,默认值是图像的中心。RGB
三通道需要填充的值。# 功能:调整PILImage对象的尺寸
torchvision.transforms.Resize(size, interpolation=2)
sequence
或int
,若为sequence
,则为(h,w)
,若为int
,则(size,size)
。PIL.Image.BILINEAR
。
PIL.Image.NEAREST
\qquad 1PIL.Image.BILINEAR
\qquad 2PIL.Image.BICUBIC
\qquad 3PIL.Image.LANCZOS
\qquad 4# 功能:将数据转换为标准高斯分布,即逐个channel的对图像进行标准化(均值变为0,标准差变为1),可以加快模型的收敛。
# 对每个通道而言,Normalize执行以下操作:input[channel]=(input[channel]-mean[channel])/std[channel]
torchvision.transforms.Normalize(mean, std)
# 功能:将PIL或numpy(即cv2读取)格式,shape为(H,W,C)的图像转为shape为(C,H,W)的tensor,
# 同时将每一个[0,255]范围的数值除以255归一化到[0,1]范围
torchvision.transforms.ToTensor()
# 功能:使用给定的“pad”值在所有面上填充给定的PIL图像
torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
a
时上下左右均填充a
个像素。(a, b)
时,左右填充a
个像素,上下填充b
个像素。(a, b, c, d)
时,左、上、右、下分别填充a,b,c,d
。RGB
三通道需要填充的值。constant
。
# 功能:随机改变图像的属性:亮度(brightness)、对比度(contrast)、饱和度(saturation)和色调(hue)
torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
[max(0, 1-brightness), 1+brightness]
。[max(0, 1-contrast), 1+contrast]
。[max(0, 1-saturation), 1+saturation]
。[max(0, 1-hue), 1+hue]
。# 功能:将图像转换为灰度图
torchvision.transforms.Grayscale(num_output_channels=1)
num_output_channels=1
则转换为单通道灰度图,若num_output_channels=3
则返回三通道图像,且三通道数值相等。# 功能:用一个预先准备好的变换方阵(transformation_matrix)对图片张量做变换。
# 首先将原图像Flatten为一维向量,然后将一维向量逐元素与向量元素平均值mean_vector相减,
# 然后将计算结果与transformation_matrix计算点积(dot product),最后将shape转换成原始尺寸。
torchvision.transforms.LinearTransformation(transformation_matrix, mean_vector)
shape
为[D x D]
的tensor
,D = C x H x W
。shape
为[D]
的tensor
,D = C x H x W
。# 功能:图像保持中心不变的随机仿射变换
torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
degrees
是一个数字而不是像(min,max)
这样的序列,则度数范围将是(-degrees,+degrees)
。设置为 0 0 0 可停用旋转。1
”或“P
”,则将其设置为PIL.Image.NEAREST
。
PIL.Image.NEAREST
PIL.Image.BILINEAR
PIL.Image.BICUBIC
PIL.Image.LANCZOS
RGB
三通道需要填充的值。# 功能:以概率p(默认值0.1)随机转换输入图片为灰度图
torchvision.transforms.RandomGrayscale(p=0.1)
0.1
。# 功能:将shape为(C,H,W)的Tensor或shape为(H,W,C)的numpy.ndarray转换成PIL.Image
torchvision.transforms.ToPILImage(mode=None)
mode
是None
(默认),则会对输入图片作一些假设:
channel
,则mode
被假定为RGBA
。channel
,则mode
被假定为RGB
。channel
,则mode
被假定为LA
。channel
,则mode
由数据类型决定(比如int,float,short
)。# 功能:将用户自定义的lambda函数作为transform
torchvision.transforms.Lambda(lambd)
Lambda
函数。# 功能:从transforms(列表)中随机选择一个来使用
torchvision.transforms.RandomChoice(transforms)
# 功能:以概率p来决定是否使用transforms(列表)中的转换
torchvision.transforms.RandomApply(transforms, p=0.5)
transforms
(列表)的概率,默认值为0.5
。# 功能:随机打乱transforms中的顺序
torchvision.transforms.RandomOrder(transforms)