简单粗暴PyTorch之transforms详解(二)

这里写目录标题

  • 一、数据增强
  • 二、裁剪
  • 三、翻转和旋转
  • 四、图像变换
  • 五、transforms的操作
  • 六、自定义transforms

一、数据增强

数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更 丰富,从而让模型更具泛化能力

从:
简单粗暴PyTorch之transforms详解(二)_第1张图片
到:
简单粗暴PyTorch之transforms详解(二)_第2张图片

二、裁剪

  1. transforms.CenterCrop
    功能:从图像中心裁剪图片
    • size:所需裁剪图片尺寸

  2. transforms.RandomCrop
    功能:从图片中随机裁剪出尺寸为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时,设置填充的像素值
    简单粗暴PyTorch之transforms详解(二)_第3张图片

  3. RandomResizedCrop
    功能:随机大小、长宽比裁剪图片
    • size:所需裁剪图片尺寸
    • scale:随机裁剪面积比例, 默认(0.08, 1)
    • ratio:随机长宽比,默认(3/4, 4/3)
    • interpolation:插值方法
    PIL.Image.NEAREST 最近邻
    PIL.Image.BILINEAR 双线性
    PIL.Image.BICUBIC 双三次差值方法
    简单粗暴PyTorch之transforms详解(二)_第4张图片

  4. FiveCrop

  5. TenCrop
    功能:在图像的上下左右以及中心裁剪出尺 寸为size的5张图片,TenCrop对这5张图片 进行水平或者垂直镜像获得10张图片
    • size:所需裁剪图片尺寸
    • vertical_flip:是否垂直翻转
    简单粗暴PyTorch之transforms详解(二)_第5张图片

三、翻转和旋转

1.RandomHorizontalFlip
2.RandomVerticalFlip
功能:依概率水平(左右)或垂直(上下)
翻转图片
• p:翻转概率

RandomHorizontalFlip(p=0.5)
RandomVerticalFlip(p=0.5)

3.RandomRotation
功能:随机旋转图片
• degrees:旋转角度
当为a时,在(-a,a)之间选择旋转角度
当为(a, b)时,在(a, b)之间选择旋转角度
• resample:重采样方法
• expand:是否扩大图片,以保持原图信息
简单粗暴PyTorch之transforms详解(二)_第6张图片

四、图像变换

  1. Pad
    功能:对图片边缘进行填充
    • 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)
    在这里插入图片描述

  2. ColorJitter
    功能:调整亮度、对比度、饱和度和色相
    • 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
    简单粗暴PyTorch之transforms详解(二)_第7张图片

  3. Grayscale

  4. RandomGrayscale
    功能:依概率将图片转换为灰度图
    • num_ouput_channels:输出通道数只能设1或3
    • p:概率值,图像被转换为灰度图的概率
    简单粗暴PyTorch之transforms详解(二)_第8张图片

  5. RandomAffine
    功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转
    • degrees:旋转角度设置
    • translate:平移区间设置,如(a, b), a设置宽(width),b设置高(height) 图像在宽维度平移的区间为 -img_width * a < dx < img_width * a
    • scale:缩放比例(以面积为单位)
    • fill_color:填充颜色设置
    简单粗暴PyTorch之transforms详解(二)_第9张图片

  6. RandomErasing
    功能:对图像进行随机遮挡
    • p:概率值,执行该操作的概率
    • scale:遮挡区域的面积
    • ratio:遮挡区域长宽比
    • value:设置遮挡区域的像素值,(R, G, B) or (Gray)

  7. transforms.Lambda
    功能:用户自定义lambda方法
    • lambd:lambda匿名函数

五、transforms的操作

  1. transforms.RandomChoice
transforms.RandomChoice([transforms1, transforms2, transforms3])
  1. transforms.RandomApply
transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)
  1. transforms.RandomOrder
transforms.RandomOrder([transforms1, transforms2, transforms3])

六、自定义transforms

自定义transforms要素:

  1. 仅接收一个参数,返回一个参数
  2. 注意上下游的输出与输入

用自定义方法增加椒盐噪声

椒盐噪声
椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点, 白点称为盐噪声, 黑色为椒噪声

信噪比(Signal-Noise Rate, SNR)是衡量噪声的比例,图像中为图像像素的占比

class AddPepperNoise(object):
    """增加椒盐噪声
    Args:
        snr (float): 信噪比
        p (float): 概率值,依概率执行该操作
    """

    def __init__(self, snr, p=0.9):
        assert isinstance(snr, float) or (isinstance(p, float))
        self.snr = snr
        self.p = p

    def __call__(self, img):
        """
        Args:
            img (PIL Image): PIL Image
        Returns:
            PIL Image: PIL image.
        """
        if random.uniform(0, 1) < self.p:
            img_ = np.array(img).copy() # image --> numpy
            h, w, c = img_.shape
            signal_pct = self.snr
            noise_pct = (1 - self.snr)
            mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.])
            # 0 原始图像 1 盐噪声 2椒噪声
            mask = np.repeat(mask, c, axis=2)
            img_[mask == 1] = 255   # 盐噪声,白色
            img_[mask == 2] = 0     # 椒噪声,黑色
            return Image.fromarray(img_.astype('uint8')).convert('RGB')
        else:
            return img

你可能感兴趣的:(简单粗暴Pytorch学习,pytorch,深度学习)