Pytorch学习——22种transforms数据预处理方法

一、图像增强

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

Pytorch学习——22种transforms数据预处理方法_第1张图片

二、transforms——裁剪

1. transforms.CenterCrop  
  • 功能:从图像中心裁剪图片
  • size:所需裁剪图片尺寸
2. 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时,设置填充的像素值
3. 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.Image.BICUBIC
4.transforms.FiveCrop(size)
5.transforms.TenCrop(size, vertical_flip=False)
  • 功能:在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片 进行水平或者垂直镜像获得10张图片
  • size:所需裁剪图片尺寸
  • vertical_flip:是否垂直翻转

三、transforms——翻转、旋转

1.RandomHorizontalFlip(p=0.5)
2.RandomVerticalFlip(p=0.5)
  • 功能:依概率水平(左右)或垂直(上下)翻转图片
  • p:翻转概率
3.RandomRotation (degrees,
                                resample=False,
                                expand=False,
                                center=None)
  • 功能:随机旋转图片
  • degrees:旋转角度
  • ——当为a时,在(-a,a)之间选择旋转角度
  • ——当为(a, b)时,在(a, b)之间选择旋转角度
  • resample:重采样方法
  • expand:是否扩大图片,以保持原图信息
  • center:旋转点设置,默认中心旋转

四、transforms ——图像变换

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)
2. 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

3.Grayscale(num_output_channels)

4.RandomGrayscale(num_output_channels, p=0.1)

  • 功能:依概率将图片转换为灰度图
  • num_ouput_channels:输出通道数 只能设1或3
  • p:概率值,图像被转换为灰度图的概率

5.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:填充颜色设置
  • shear:错切角度设置,有水平错切和垂直错切
    ——若为a,则仅在x轴错切,错切角度在(-a, a)之间
    ——若为(a,b),则a设置x轴角度,b设置y的角度
    ——若为(a, b, c, d),则a, b设置x轴角度,c, d设置y轴角度
  • resample:重采样方式,有NEAREST 、BILINEAR、BICUBIC
6. 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)
7. transforms.Lambda(lambd)
  • 功能:用户自定义lambda方法
  • lambd:lambda匿名函数 
  • 例如:
  • ——transforms.TenCrop(200, vertical_flip=True),
  • ——transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops])), 

五、transforms方法操作

1. transforms.RandomChoice([transforms1, transforms2, transforms3])
  • 功能:从一系列transforms方法中随机挑选一个
2.transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)
  • 功能:依据概率执行一组transforms操作
3. transforms.RandomOrder([transforms1, transforms2, transforms3])
  • 功能:对一组transforms操作打乱顺序
 

六、自定义transforms方法

自定义transforms要素:
  • 1. 仅接收一个参数,返回一个参数
  • 2. 注意上下游的输出与输入
class Compose(object):
       def __call__(self, img):
              for t in self.transforms:
                    img = t(img)
              return img

例如——椒盐噪声

  • 一种随机出现的白点或者黑点, 白点称为盐噪声, 黑色为椒噪声
  • 信噪比(Signal-Noise Rate, SNR)是衡量噪声的比例,图像中为图像像素的 占比
class AddPepperNoise(object):
    """增加椒盐噪声
    Args:
        snr (float): Signal Noise Rate
        p (float): 概率值,依概率执行该操作
    """

    def __init__(self, snr, p=0.9):
        assert isinstance(snr, float) and (isinstance(p, float))    # 2020 07 26 or --> and
        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()
            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.])
            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

七、汇总

  • 裁剪

  • 1. transforms.CenterCrop 
  • 2. transforms.RandomCrop 
  • 3. transforms.RandomResizedCrop 
  • 4. transforms.FiveCrop 
  • 5. transforms.TenCrop
  • 翻转和旋转 

  • 1. transforms.RandomHorizontalFlip 
  • 2. transforms.RandomVerticalFlip 
  • 3. transforms.RandomRotation
  • 图像变换

  • 1. transforms.Pad
  • 2. transforms.ColorJitter
  • 3. transforms.Grayscale
  • 4. transforms.RandomGrayscale
  • 5. transforms.RandomAffine
  • 6. transforms.LinearTransformation
  • 7. transforms.RandomErasing
  • 8. transforms.Lambda
  • 9. transforms.Resize
  • 10. transforms.Totensor
  • 11. transforms.Normalize
  • transforms的操作

  • 1. transforms.RandomChoice
  • 2. transforms.RandomApply
  • 3. transforms.RandomOrder

你可能感兴趣的:(深度学习,深度学习)