pytorch学习五 --数据增强transforms

数据增强

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

      数据增强 --->                      

如我们高考之前做的五年高考,三年模拟

一 、 transforms. -- crop

1. transforms.CenterCrop(size)

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

transforms.CenterCrop(512)

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种模式(constant:像素值由fill设定
  •                                                                  edge:像素值由图像边缘像素决定
  •                                                                  reflect:镜像填充,最后一个像素不镜像,eg:[1,2,3,4] -> [3,2,1,2,3,4,3,2]
  •                                                                  symmetric:镜像填充,最后一个像素镜像,eg:[1,2,3,4] -> [2,1,1,2,3,4,4,3])
  • fill:constant时,设置填充的像素值
 transforms.RandomCrop(224, padding=16)

transforms.RandomCrop(224, padding=(16, 64))

transforms.RandomCrop(224, padding=16, fill=(255, 0, 0))

transforms.RandomCrop(512, pad_if_needed=True)

transforms.RandomCrop(224, padding=64, padding_mode='edge')

transforms.RandomCrop(224, padding=64, padding_mode='reflect')

transforms.RandomCrop(1024, padding=1024, padding_mode='symmetric')

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)

transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5))

4. transforms.FiveCrop(size)

功能:在图像的左上角、右上角、左下角、右下角以及中心进行裁剪5张图片

5. transform.TenCrop(size,vertical_flip=False)

  • 功能:在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片进行水平或垂直镜像获得10张图片
  • size:所需裁剪图片尺寸
  • vertical_flip:是否垂直翻转
transforms.FiveCrop(112), #TypeError: pic should be PIL Image or ndarray. Got <class 'tuple'>
transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops]))

    transforms.TenCrop(112, vertical_flip=True),
    transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

翻转、旋转

1.RandomHorizontalFlip(p=0.5)

2.RandomVerticalFlip(p=0.5)

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

transforms.RandomVerticalFlip(p=1)

3. RandomRotation(degrees,resample=False,expand=False,center=None)

  • 功能:随机旋转图片
  • degree:旋转角度,当为a时,在(-a,a)之间旋转角度;当为(a,b)时,在(a,b)之间旋转角度
  • resample:重采样方法
  • expand:是否扩大图片,以保持原图信息
  • center:旋转点设置,默认中心点旋转
transforms.RandomRotation(90)

transforms.RandomRotation((90), expand=True)

transforms.RandomRotation(30, center=(0, 0))

transforms.RandomRotation(30, center=(0, 0), expand=True)

图像变换

1.transforms.Pad(padding,fill=0,padding_mode="constant")

  • 功能:对图片边缘进行填充
  • padding:设置填充大小
  •                 当为a时,上下左右均填充a个像素;
  •                 当为(a,b)时,上下填充b个像素,左右填充a个像素
  •                 当为(a,b,c,d)时,左、上、右、下分别填充a个像素
  • padding_mode:填充模式,有4中模式,constant,edge、reflect和symmetric
  • fill:constant时,设置填充的像素值,(R,G,B)or(gray)
transforms.Pad(padding=32, fill=(255, 0, 0), padding_mode='constant')

transforms.Pad(padding=(8, 64), fill=(255, 0, 0), padding_mode='constant')

transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='constant')

transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='symmetric')

2. transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)

  • 功能:调整亮度、对比度、饱和度和色相
  • brightness:亮度调整因子;
    • 当为a时,从[mas(0,1-a),1+a]中随机选择;
    • 当为(a,b)时,从[a,b]中选择
  • constant:对比度参数,同brightness
  • saturation:饱和度参数,同brightness
  • hue:色相参数
    • 当为a时,从[-a,a]中选择参数,注:0<= a <= 0.5
    • 当为(a,b)时,从[a,b]中选择参数,注:-0.5<= a <=b <= 0.5
transforms.ColorJitter(brightness=0.5)

transforms.ColorJitter(contrast=0.5)

transforms.ColorJitter(saturation=0.5)

transforms.ColorJitter(hue=0.3)

3. transforms.Grayscale(num_output_channels)

4.transforms.RandomGrayscale(num_output_channels,p=0.1)

  • 功能:依概率将图片转换为灰度图
  • num_output_channels:输出通道数只能设置为1或3
  • p:概率值,图像被转换为灰度图的概率
transforms.Grayscale(num_output_channels=3)

5. transforms.RandomAffine(degrees,translate=None,scale=None,shear=None,resample=False,fillcolor=0)

  • 功能:对图像进行仿射变换,仿射变换是二维线性变换,由五种基本原子构成,分别是选择、平移、缩放、错切和翻转
  • degree:旋转角度设置
  • 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轴角度
  • rasample:重采样方式,有Nearest、bilinear、Bicubic
transforms.RandomAffine(degrees=30)

​transforms.RandomAffine(degrees=0, translate=(0.2, 0.2), fillcolor=(255, 0, 0)),​

transforms.RandomAffine(degrees=0, scale=(0.7, 0.7))

transforms.RandomAffine(degrees=0, shear=(0, 0, 0, 45))

transforms.RandomAffine(degrees=0, shear=90, fillcolor=(255, 0, 0))

6. transforms.RandomErasing(p=0.5,scale=(0.02,0.33),ratio=(0.3,0.3),value=0,inplace=False)

  • 功能:对图像进行随机遮挡
  • p:概率值,执行该操作的概率
  • scale:遮挡区域的面积
  • ratio:遮挡区域长宽比
  • value:设置遮挡区域的像素值,(R,G,B)or(Gray)
    transforms.ToTensor(),
    transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=(254/255, 0, 0)),

    transforms.ToTensor(),
    # transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=(254/255, 0, 0)),
    transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value='1234'),

7. transforms.Lambda(lambda)

  • 功能:用户自定义lambda方法
  • lambda:lambda匿名函数;lambda[arg1,[arg2,...,argn]]:expression
transforms.Lambda(lambda crops:torch.stack([transforms.Totensor()(crop) for crop in crops]))

transforms.TenCrop(200,vertical_filp=True)

transfroms的选择操作

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.RandomChoice([transforms.RandomVerticalFlip(p=1), transforms.RandomHorizontalFlip(p=1)])

  transforms.RandomApply([transforms.RandomAffine(degrees=0, shear=45, fillcolor=(255, 0, 0)),
                            transforms.Grayscale(num_output_channels=3)], p=0.5),

  transforms.RandomOrder([transforms.RandomRotation(15),
                            transforms.Pad(padding=32),
                            transforms.RandomAffine(degrees=0, translate=(0.01, 0.1), scale=(0.9, 1.1))]),

自定义transforms方法

自定义transforms要素:

  • 仅接受一个参数,返回一个参数
  • 注意上下游的输出与输入
class Compose(object):
    def __call__(self,img):
        for t in self.transfroms:
            img = t(img)
        return img

通过类实现多参数输入(下面结构是自定义transfrom是基本结构):

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

椒盐噪声

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

信噪比(signal-noice rate,SNR)是衡量噪声的比例,图像中为图像像素的占比

class AddPepperNoice(object):
    def __init__(self,snr,p):
        self.snr = snr
        self.p = p
    def __call__(self,img):
        """
        添加椒盐噪声具体实现过程
        """
        return img

class Compose(object):
    def __call__(self,img):
        for t in self.transforms:
            img = t(img)
        return img

 

数据增强实战

原则:让训练集与测试更接近

  • 空间位置:平移
  • 色彩:灰度图、色彩抖动
  • 形状:仿射变换
  • 上下文场景:遮挡、填充
  • .......

 

### 回答1: Transforms 中常用的数据增强方法有: 1. 翻转 (flip): 上下翻转或者左右翻转 2. 旋转 (rotation): 选择一个角度随机旋转 3. 平移 (translation): 在水平或者竖直方向平移 4. 放缩 (scale): 尺寸缩放 5. 剪切 (crop): 从图像中随机剪切一部分 6. 归一化 (normalization): 对图像数据进行归一化处理 7. 噪声 (noise): 在图像上添加随机噪声 8. 色彩变化 (color jittering): 随机调整图像的亮度、对比度、饱和度和色调 ### 回答2: transforms数据增强是指在数据预处理过程中使用各种方法来生成新的训练样本,以增加数据的多样性和数量,从而提高模型的性能。除了transforms数据增强外,还有其他一些常见的数据增强方法,如下: 1. 图像翻转:通过沿着水平或垂直方向翻转图像,可以增加数据样本的多样性。 2. 随机裁剪:随机选择图像的一部分作为训练样本,可以增加数据样本的多样性,并且使模型对于图像的位置变化具有鲁棒性。 3. 尺度变换:将图像缩放到不同的尺寸,可以使模型对于不同尺度的图像具有鲁棒性。 4. 旋转:通过旋转图像一定角度,可以增加数据样本的多样性,并且使模型对于图像旋转变化具有鲁棒性。 5. 高斯模糊:在图像上应用高斯模糊,可以模糊图像的细节,从而增加模型对于噪声的鲁棒性。 6. 颜色变换:改变图像的颜色空间,如将RGB图像转换为灰度图像、HSV图像等,可以增加数据样本的多样性,并且使模型对于颜色变化具有鲁棒性。 7. 添加噪声:在图像上添加随机噪声,如椒盐噪声、高斯噪声等,可以增加数据样本的多样性,并且使模型对于噪声的鲁棒性。 8. 形态学操作:例如腐蚀、膨胀、开闭操作等,可以改变图像的形态结构,增加数据样本的多样性。 通过使用这些数据增强方法,可以有效地增加数据样本的多样性和数量,提高模型的性能和鲁棒性。 ### 回答3: transforms数据增强是指通过对图像进行各种变换操作来扩充数据集,从而提高深度学习模型的泛化能力。除了transforms数据增强,还有以下几种常用的数据增强方法: 1. 图像裁剪(Crop):随机或定位地从图像中裁剪出不同尺寸的子图像,以增加样本的多样性。 2. 图像翻转(Flip):可以沿着水平或垂直方向对图像进行翻转,以增加数据集的样本数量和多样性。 3. 图像旋转(Rotation):通过对图像进行旋转操作,可以模拟不同角度下的样本,增加数据集的多样性。 4. 图像缩放(Scale):将图像按照一定比例进行放大或缩小,以适应不同尺寸的输入要求。 5. 亮度、对比度和颜色调整(Brightness/Contrast/Color Adjustments):通过调整图像的亮度、对比度和颜色等参数,可以增加数据集的多样性。 6. 噪声添加(Noise Addition):在图像中添加随机噪声,例如高斯噪声或椒盐噪声,以模拟真实世界中存在的各种噪声情况。 7. 随机遮挡(Random Occlusion):在图像中随机生成遮挡区域,以模拟真实场景中的遮挡情况,从而提高模型对于遮挡物的鲁棒性。 8. 预处理(Preprocessing):对图像进行一系列的预处理操作,例如归一化、去噪等,以减少数据集中的噪声和冗余信息。 通过综合应用以上各种数据增强方法,可以大大增加训练数据集的多样性和数量,从而提高深度学习模型对于不同场景和样本的泛化能力。同时,数据增强还可以缓解过拟合问题,提高模型的鲁棒性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值