Pytorch之图像预处理transforms(常用操作汇总)

Pytorch Transforms操作汇总

    • 数据增强(Data Augmentation)
    • torchvision计算机视觉工具包
    • torchvision.transforms :常用的图像预处理方法
      • transforms.Compose (transforms)
    • 1.图像裁切(Crop)
      • transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
      • transforms.CenterCrop(size)
      • transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation)
      • transforms.FiveCrop(size)
      • transforms.TenCrop(size,vertical_ flip=False)
    • 2.图片翻转、旋转(Flip, Rotation)
      • transforms.RandomHorizontalFlip(p=0.5)
      • transforms.RandomVerticalFlip(p=0.5)
      • transforms.RandomRotation(degrees, resample=False, expand=False, center=None )
    • 3.图像变换
      • transforms.Normalize (mean, std, inplace=False)
      • transforms.Resize(size, interpolation=2)
      • transforms.ToTensor()
      • transforms.Pad(padding, fill=0, padding_mode=‘constant’)
      • transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0 )
      • transforms.RandomGrayscale ( num_ output_ channels, p=0.1)
      • transforms.Grayscale(num_ output_ channels)
      • transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
      • transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
      • transforms.Lambda( lambd)
    • 4.Transforms的操作
      • transforms . RandomChoice([transforms1, transforms2, transforms3])
      • transforms . RandomApply([transforms1, transforms2, transforms3], p=0.5)
      • transforms . RandomOrder([transforms1, transforms2, transforms3] )
    • 5.自定义Transforms

数据增强(Data Augmentation)

数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更
丰富,从而让模型更具泛化能力,在pytorch中我们使用transforms这一工具包对图像数据进行增强

torchvision计算机视觉工具包

  • 该工具包主要包含以下三种常用的类
    torchvision.transforms :常用的图像预处理方法
    torchvision.datasets :常用数据集的dataset实现,MNIST, CIFAR-10, ImageNet等
    torchvision.model :常用的模型预训练,AlexNet, VGG, ResNet, GoogLeNet等

  • 本文主要对第一种类torchvision.transforms进行介绍

torchvision.transforms :常用的图像预处理方法

数据中心化
数据标准化
缩放
裁剪
旋转
翻转
填充
噪声添加
灰度变换
线性变换
仿射变换
亮度、饱和度及对比度变换

下面介绍几种常用的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
    PIL. /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 in self.transforms:
			img = t(img)
		return img

通过类实现多参数传入

class YourTransforms( object): 
	def __init__(self, ...):
	...
	def __call__(self, img):
	...
		return img

你可能感兴趣的:(从零开始学习Pytorch)