3 PyTorch数据处理
3.1 数据读取机制DataLoader与Dataset
【PyTorch】2.1 DataLoader与Dataset
epoch
:对训练集的全部数据进行一次完整的训练,即所有训练样本都已经输入到模型中,称为一次epochbatch
:由于硬件算力有限,实际训练时将训练集分成多个批次训练batch_size
:每批数据尺寸(大小),决定一个epoch有多少个iteration或stepiteration或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等
-
transforms.Normalize()
功能:逐个channel(通道)对图像进行标准化【加速模型收敛速度】,即output=(input-mean)/std参数说明:
- mean:各通道的均值
- std:各通道的标准差
- inplace:是否执行原地操作,若设为True,即不会改变内存地址
3.3 数据增强
数据增强
又称为数据增广、数据扩增,它是对训练集
进行变换,使训练集更丰富,从而让模型更具有泛化能力
原则:让训练集与测试集更接近
- 空间位置:平移
- 色彩:灰度图、色彩抖动
- 形状:仿射变换
- 上下文场景:遮挡、填充
- …
-
裁剪(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()
功能:进行水平或垂直镜像获得10张图片参数说明:
- size:裁剪图片尺寸
- vertical_flip:是否垂直翻转
-
-
翻转(Flip)
-
transforms.RandomHorizontalFlip()
功能:根据概率水平(左右)翻转图片参数说明:
- p:翻转概率
-
transforms.RandomVerticalFlip()
功能:根据概率垂直(上下)翻转图片参数说明:
- p:翻转概率
-
-
旋转(Rotation)
-
transforms.RandomRotation()
功能:随机旋转图片参数说明:
- degrees:旋转角度
- 当为a时,在(-a,a)之间选择旋转角度
- 当为(a,b)时,在(a,b)之间选择旋转角度
- resample:重采样方法
- expand:是否扩大图片,以保持原图信息
- center:旋转点设置,默认中心旋转
- degrees:旋转角度
-
-
图像变换
-
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]
- padding:设置填充大小
-
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
- brightness:亮度调整因子
-
transforms.RandomGrayscale()
功能:根据概率将图片转换为灰度图参数说明:
- num_output_channels:输出通道数只能设1或3
- p:概率值,图像被转换为灰度图的概率
-
transforms.Grayscale()
功能:将全部图片转换为灰度图参数说明:
- num_output_channels:输出通道数只能设1或3
-
transforms.RandomAffine()
功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转参数说明:
- 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)
-
-
-
transforms方法的选择操作
-
transforms.RandomChoice()
功能:从一系列transforms方法中随机挑选一个 -
transforms.RandomApply()
功能:根据概率执行一组transforms操作 -
transforms.RandomOrder()
功能:对一组transforms操作打乱顺序
-
-
自定义transforms方法
要素:
(1)仅接收一个参数,返回一个参数(2)注意上下游的输出与输入
自定义transforms结构:【通过类实现多参数传入】
实例:椒盐噪声椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑点称为椒噪声
信噪比(SNR)是衡量噪声的比例,图像中为原始图像像素的占比