【PyTorch】03数据处理

3 PyTorch数据处理

3.1 数据读取机制DataLoader与Dataset

【PyTorch】2.1 DataLoader与Dataset

  • epoch:对训练集的全部数据进行一次完整的训练,即所有训练样本都已经输入到模型中,称为一次epoch
  • batch:由于硬件算力有限,实际训练时将训练集分成多个批次训练
  • batch_size:每批数据尺寸(大小),决定一个epoch有多少个iteration或step
  • iteration或step:对一个batch的数据训练的过程称为一个iteration或ste

假设训练集一共有50000个样本,batch_size=50,那么完整训练一次样本:iteration或step=1000

在这里插入图片描述

  • torch.utils.data.DataLoader()

    功能:构建可迭代的数据装载器

    参数说明:

    • dataset:DataSet类,决定数据从哪读取及如何读取

    • batch_size:批次尺寸(大小)

    • num_workers:是否多进程读取数据

    • shuffle:每个epoch是否乱序(打乱数据集)

    • pin_memory:省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上,即为True时是直接映射到GPU的相关内存块上

    • drop_last:当样本数不能被batch_size整除时,是否舍弃最后一批数据
      在这里插入图片描述

  • torch.utils.data.Dataset()
    在这里插入图片描述
    功能:决定数据从哪读取及如何读取,Dataset抽象类,所有自定义的Dataset需要继承它,并且重写__getitem__()方法:接受一个索引,返回一个样本

3.2 数据预处理transforms模块机制

torchvision:计算机视觉工具包

  • torchvision.transforms:常用的图像预处理方法,如数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换、亮度、饱和度及对比度变换等
  • torchvision.datasets:常用数据集的dataset实现,如MNIST、CIFAR-10、ImageNet等
  • torchvision.model:常用的预训练模型,如AlexNet、VGG、GoogleNet、ResNet等

【PyTorch】2.2 图像预处理——transforms

在这里插入图片描述
image-20220517101421716

  • transforms.Normalize()
    在这里插入图片描述
    功能:逐个channel(通道)对图像进行标准化【加速模型收敛速度】,即output=(input-mean)/std

    参数说明:

    • mean:各通道的均值
    • std:各通道的标准差
    • inplace:是否执行原地操作,若设为True,即不会改变内存地址

3.3 数据增强

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

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

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

【PyTorch】2.3 transforms图像增强(一)

【PyTorch】2.3 transforms图像增强(二)

在这里插入图片描述

  1. 裁剪(Crop)

    • transforms.CenterCrop()

      功能:从图像中心裁剪图片

      参数说明:

      • size:裁剪图片尺寸
    • transforms.RandomCrop()
      在这里插入图片描述
      功能:从图片中随机剪裁出尺寸为size的图片

      参数说明:

      • size:裁剪图片尺寸
      • padding:设置填充大小
        • 当为a时,左右上下均填充a个像素
        • 当为(a,b)时,左右填充a个像素,上下填充b个像素
        • 当为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d个像素
      • pad_if_need:若图像小于设定size,则填充全0像素值;若图像大于设定size时,需设为True
      • fill:constant时,设置填充的像素值
      • padding_more:填充模式,有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]
    • transforms.RandomResizedCrop()
      在这里插入图片描述
      功能:随机大小、长宽比裁剪图片

      参数说明:

      • size:裁剪图片尺寸
      • scale:随机裁剪面积比例,默认(0.08,1)
      • ratio:随机长宽比,默认(3/4,4/3)
      • interpolation:插值方法
        • PIL.Image.NEAREST
        • PIL.Image.BILINEAR
        • PIL.Image.BICUBIC
    • transforms.FiveCrop()
      在这里插入图片描述
      功能:在图像的上下左右以及中心裁剪出尺寸为size的5张图片

      参数说明:

      • size:裁剪图片尺寸
    • transforms.TenCrop()
      image-20220516204940678
      功能:进行水平或垂直镜像获得10张图片

      参数说明:

      • size:裁剪图片尺寸
      • vertical_flip:是否垂直翻转
  2. 翻转(Flip)

    • transforms.RandomHorizontalFlip()
      image-20220516210055934
      功能:根据概率水平(左右)翻转图片

      参数说明:

      • p:翻转概率
    • transforms.RandomVerticalFlip()
      在这里插入图片描述
      功能:根据概率垂直(上下)翻转图片

      参数说明:

      • p:翻转概率
  3. 旋转(Rotation)

    • transforms.RandomRotation()
      在这里插入图片描述
      功能:随机旋转图片

      参数说明:

      • degrees:旋转角度
        • 当为a时,在(-a,a)之间选择旋转角度
        • 当为(a,b)时,在(a,b)之间选择旋转角度
      • resample:重采样方法
      • expand:是否扩大图片,以保持原图信息
      • center:旋转点设置,默认中心旋转
  4. 图像变换

    • transforms.Pad()
      在这里插入图片描述
      功能:对图片边缘进行填充

      参数说明:

      • padding:设置填充大小
        • 当为a时,左右上下均填充a个像素
        • 当为(a,b)时,左右填充a个像素,上下填充b个像素
        • 当为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d个像素
      • fill:constant时,设置填充的像素值,(R,G,B)or (Gray)
      • padding_more:填充模式,有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]
    • transforms.ColorJitter()
      在这里插入图片描述
      功能:调整亮度、对比度、饱和度和色相

      参数说明:

      • brightness:亮度调整因子
        • 当为a时,从[max(0,1-a),1+a]中随机选择
        • 当为(a,b)时,从[a,b]中
      • constrast:对比度参数,同brightness
      • saturation:饱和度参数,同brightness
      • hue:色相参数
        • 当为a时,从[-a,a]中选择参数,注:0<=a<=0.5
        • 当为(a,b)时,从[a,b]中选择参数,注:-0.5<=a<=b<=0.5
    • transforms.RandomGrayscale()
      image-20220517085414260
      功能:根据概率将图片转换为灰度图

      参数说明:

      • num_output_channels:输出通道数只能设1或3
      • p:概率值,图像被转换为灰度图的概率
    • transforms.Grayscale()
      在这里插入图片描述
      功能:将全部图片转换为灰度图

      参数说明:

      • num_output_channels:输出通道数只能设1或3
    • transforms.RandomAffine()
      image-20220517090526376
      功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转

      参数说明:

      • degrees:旋转角度设置,必须设置此参数,若不旋转,即设为degrees=0
      • translate:平移区间设置,如(a,b),a设置宽(width),b设置高(height),图像在宽维度平移的区间为-img_width*a<dx<img_width*a,图像在高维度平移的区间为-img_height*b<dy<img_height*b
      • scale:缩放比例(以面积为单位)
      • 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
      • fillcolor:填充颜色设置,默认黑色(0像素)填充
    • transforms.RandomErasing()
      在这里插入图片描述
      功能:针对张量数据类型的图像【像素值为0~1之间】进行随机遮挡

      参数说明:

      • p:概率值,执行该操作的概率
      • scale:遮挡区域的面积
      • ratio:遮挡区域长宽比
      • value:设置遮挡区域的像素值,(R,G,B) or (Gray),若value=‘random’, 则区域进行随机彩色遮挡

      参考文献:《Random Erasing Data Augmentation》
      在这里插入图片描述

    • transforms.Lambda()
      在这里插入图片描述
      功能:用户自定义lambda方法

      参数说明:

      • lambd:lambda匿名函数

        实现形式:lambda [input_arg1 [,input_arg2 , .. , input_argn]] : expression

        示例:转换数据类型(TenCrop输出返回的是tuple–>tensor)
        在这里插入图片描述

  5. transforms方法的选择操作

    • transforms.RandomChoice()
      image-20220517094435795
      功能:从一系列transforms方法中随机挑选一个

    • transforms.RandomApply()
      在这里插入图片描述
      功能:根据概率执行一组transforms操作

    • transforms.RandomOrder()
      image-20220517094801930
      功能:对一组transforms操作打乱顺序

  6. 自定义transforms方法
    在这里插入图片描述
    要素:
    (1)仅接收一个参数,返回一个参数

    ​(2)注意上下游的输出与输入

    自定义transforms结构:【通过类实现多参数传入】
    在这里插入图片描述
    实例:椒盐噪声

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

    信噪比(SNR)是衡量噪声的比例,图像中为原始图像像素的占比
    在这里插入图片描述
    在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值