【PyTorch】数据读取和处理

news/2024/9/25 9:13:22/

数据读取机制DataLoader与Dataset

数据处理过程

在这里插入图片描述

DataLoader

torch.utils.data.DataLoader

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

  • dataset:Dataset类,决定数据从哪里读取及如何读取
  • batchsize:批大小
  • num_works:是否多进程读取数据
  • shuffle:每个epoch是否乱序
  • drop_last:当样本数不能被batchsize整除时,是否舍弃最后一批数据

在这里插入图片描述

概念区分

Epoch:所有训练样本都已输入到模型中,称为一个Epoch
Iteration:一批样本输入到模型中,称之为一个Iteration
Batchsize:批大小,决定一个Epoch有多少个Iteration

样本总数:80, Batchsize:8
1 Epoch = 10 Iteration

样本总数:87, Batchsize:8
1 Epoch = 10 Iteration ? drop_last = True
1 Epoch = 11 Iteration ? drop_last = False

Dataset

torch.utils.data.Dataset

功能:Dataset抽象类,所有自定义的Dataset需要继承它,并且复写_getitem_()
getitem:接受一个索引,返回一个样本

数据读取的流程

在这里插入图片描述

数据预处理transforms模块机制

transforms运行机制

torchvision:计算机视觉工具包

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

torchvision.datasets:常用数据集的dataset实现,MNIST,CIFAR-10,ImageNet等

torchvision.model:常用的模型预训练,AlexNet,VGG, ResNet,GoogLeNet等

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

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

数据标准化

transforms.normalize

功能:逐channel的对图像进行标准化
output = (input - mean ) / std

  • mean:各通道的均值
  • std:各通道的标准差
  • inplace:是否原地操作

transforms图像增强

数据增强

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

transforms —— 裁剪(Crop)

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时,设置填充的像素值

3. RandomResizedCrop

功能:随机大小、长宽比剪裁图片

  • size:所需要裁剪图片尺寸
  • scale:随机裁剪面积比例,默认(0.08, 1)
  • ratio:随机长宽比,默认(3/4, 4/3)
  • interpolation:插值方法
    PIL.Image.NEAREST
    PIL.Image.BILINEAR
    PIL.Image.BICUBIC

4. FiveCrop

5.TenCrop

功能:在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片进行水平或者垂直镜像获得10张图片

  • size:所需裁剪图片尺寸
  • vertical_flip:是否垂直翻转

transforms——翻转、旋转(Flip and Rotation)

1. RandomHorizontalFlip

2. RandomVertiocalFlip

功能:依概率水平(左右)或垂直(上下)翻转图片

  • p:翻转概率

3. RandomRotation

功能:随机旋转图片

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

transforms——图像变换

1. Pad

功能:对图片边缘进行填充

  • padding:设置填充大小
    当为a时,上下左右均填充a个像素
    当为(a, b)时,上下填充b个像素,左右填充a个像素
    当为(a, b, c, d)时,左,上,右,下分别填充a, b, c, d
  • padding_mode:填充模式,有4种模式,constant、edge、reflec t和symmetric
  • fill:constant时,设置填充的像素值,(R, G, B) o r (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

3. Grayscale

4. RandomGrayscale

功能:依概率将图片转换为灰度图

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

5. RandomAffine

功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转平移缩放错切翻转

  • 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:概率值,执行该操作的概率
  • scale:遮挡区域的面积
  • ratio:遮挡区域长宽比
  • value:设置遮挡区域的像素值,(R, G, B) or (Gray)

参考文献:《Random Erasing Data Augmentation》

7. transforms.Lambda

功能:用户自定义lambda方法

  • lambd:lambda匿名函数

lambda [arg1 [,arg2,…, argn]] : expression

transforms——方法操作

1. transforms.RandomChoice

功能:从一系列transforms方法中随机挑选一个

python">transforms.RandomChoice([transforms1, transforms2, transforms3])

2. transforms.RandomApply

功能:依据概率执行一组transforms操作

python">transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)

3. transforms.RandomOrder

功能:对一组transforms操作打乱顺序

python">transforms.RandomOrder([transforms1, transforms2, transforms3])

自定义transforms方法

自定义transforms要素

python">class Compose(object):def __call__(self, img):for t in self.transforms:img = t(img)return umg
  1. 仅接收一个参数,返回一个参数
  2. 注意上下游的输出与输入

通过类实现多参数传入:

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

总结——transforms方法

一、裁剪

  1. transforms.CenterCrop
  2. transforms.RandomCrop
  3. transforms.RandomResizedCrop 4. transforms.FiveCrop
  4. 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

数据增强实战

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

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

http://www.ppmy.cn/news/1530221.html

相关文章

《AI办公类工具表格处理系列之二——Excell-AI》

一.简介 官网:https://excelly-ai.io/index.html 将文本转换成Excel或Google sheets公式 二.功能介绍 1. 智问公式 功能描述:当用户想要写一个公式但不确定如何下手时,可以通过“智问公式”功能,简单描述自己的需求,AI将自动生成相应的Excel公式。例如,用户可以输入“…

【JVM】一篇文章彻底理解JVM的组成,各组件的底层实现逻辑

文章目录 JVM 的主要组成部分类加载器&#xff08;Class Loader&#xff09;1. 加载&#xff08;Loading&#xff09;2. 链接&#xff08;Linking&#xff09;3. 初始化&#xff08;Initialization&#xff09; Execution Engine&#xff08;执行引擎&#xff09;1. 解释器&…

爬虫技术初步自学

目的 本篇文章实际上自学爬虫技术的学习一份学习笔记&#xff0c;希望可以对后学的小白起到帮助&#xff0c;也希望得到大佬的指点&#xff0c;若有错漏希望大佬指出。 初步认知 爬虫实际上是一个计算机程序。开发爬虫程序的常用语言是Python。&#xff08;Python我已经在五…

Linux 进程2

环境变量 再Linux操作系统中一切皆文件&#xff0c;这个环境变量自然也是一个文件&#xff0c;它的作用是辅助我们使用操作系统还可以辨识我们是什么用户(一般用户&#xff0c;root用户)。 env是读取完整环境变量的指令&#xff0c;里面记录了许多我登录操作系统所用的用户的信…

工业边缘计算网关和普通网关的区别-天拓四方

随着物联网&#xff08;IoT&#xff09;和工业4.0的快速发展&#xff0c;网关作为连接不同网络和设备的关键设备&#xff0c;其角色和功能日益凸显。在工业环境中&#xff0c;工业边缘计算网关和普通网关虽然都扮演着重要的角色&#xff0c;但它们在功能、应用场景和性能上存在…

物理学基础精解【16】

文章目录 参数方程曲线的参数方程概述曲线的参数方程一、定义二、公式三、计算四、例子1. 圆的参数方程2. 椭圆的参数方程3. 抛物线的参数方程 五、例题摆线概述 直线的参数方程一、定义二、公式三、计算四、例子五、例题 摆线的参数方程一、摆线的定义二、摆线的参数方程三、摆…

在虚幻引擎中创建毛发/头发

在虚幻引擎中创建毛发/头发 , 首先开启两个插件 Groom 和 Alembic Groom Importer 打开蒙皮缓存 导出人物模型 将人物导入Blender , 选择需要种植头发的点 指定并选择 点击毛发 这里变成爆炸头了 , 把数量和长度调一下 切换到梳子模式 调整发型 导出为abc , 文件路径不…

针对考研的C语言学习(定制化快速掌握重点1)

1.printf函数的几个要点 printf函数中所有的输出都是右对齐的&#xff0c;除非在%后面添加负号&#xff0c;则表示左对齐 #include<stdio.h> int main() {int num 10;int nums 100;float f 1000.2333333333;printf("%3d\n", nums);//%3d表示输出的总宽度至…