人民币二分类
数据
- 数据收集-->Img,Label
- 数据划分-->train valid test
- 数据读取-->DataLoader(Sampler-->Index,Dataset-->Img,Label)
- 数据预处理-->transforms
torch.utils.data.DataLoader
功能:构建可迭代的数据装载器
- dataset:Dataset类,决定数据从哪读取及如何读取
- batchsize:批大小
- num_works:是否多进程读取数据
- shuffle:每个epoch是否乱序
- drop_last:当样本数不能被batchsize整除时,是否舍弃最后一批数据
epoch与Iteration
- Epoch:所有训练样本都已输入到模型中,称为一个Epoch
- Iteration:一批样本输入到模型中,称之为一个Interation
- Batchsize:批大小,决定一个Epoch有多少个Iteration
- 样本总数:80,Batchsize:8 1Epoch=10Iteration
- 样本总数:87,Batchsize:8 1Epoch=10Iteration,当drop_last=True否则1Epoch=11Iteration
torch.utils.data.Dataset
功能:Dataset的抽象类,所有自定义的Dataset需要继承它,并且复写__getitem__()
getitem:接收一个索引,返回一个样本。
读取数据流程图:
transforms运行机制
transforms
- torchvision.transforms:常用的图像预处理方法(数据中心化,标准化,缩放,裁剪,旋转,翻转,填充,噪声添加)。
- torchvision.transforms:常用数据集的dataset实现,MNIST,CIFAR-10,ImageNet等。
- torchvision.model:常用的模型预训练,AlexNet,VGG,ResNet,GoogleNet等。
transforms.Normalize
功能:逐channel的对图像进行标准化,均值变为0,标准差变为1。(可以加快模型的收敛)
output = (input - mean) / std
- mean:各通道的均值
- std:各通道的标准差
- inplace:是否原地操作
数据增强
数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。
transforms.CenterCrop
功能:从图像中心裁剪图片
- size:所需裁剪图片尺寸。
transforms.RandomCrop
功能:从图像中随机裁剪出尺寸为size的图片
- size:所需裁剪图片尺寸。
- padding:设置填充大小
- 当为a时,上下左右均填充a个像素
- 当为(a,b)时,上下填充b个像素,左右填充a个像素
- 当为(a,b,c,d)时,左上右下分别填充abcd。
- 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时,设置填充的像素值。
RandomResizedCrop
功能:随机大小长宽裁剪图片
- size:尺寸
- scale:裁剪面积比,默认(0.08, 1)
- ratio:随机裁剪长宽比,默认(3/4,4/3)
- interpolation:插值方法
- PIL.Image.NEAREST:最近邻插值
- PIL.Image.BILNEAR:双线性插值
- PIL.Image.BICUBIC:
FiveCrop
TenCrop
功能:在图像的上下左右以及中心裁剪出尺寸为size的5张图片;对上述5张图片在进行水平或者垂直镜像从而获得10张图片
- size:尺寸。
- vertical_flip:是否垂直翻转,设置了就做垂直镜像,不设置就做水平镜像。
- lambda可以把元组转换成张量的形式。
RandomHorizontalFlip
RandomVerticalFlip
功能:依概率进行水平/垂直翻转
- p:概率值
RandomRotation
功能:随机旋转
- degress:旋转角度。
- a时:旋转角度(-a到a)
- (a, b)时:旋转角度(a到b)
- resample:重采样方法。
- expand:是否扩大图片,以保持原图信息。
- center:设置旋转中心,默认中心旋转。
Pad
- padding:设置填充大小
- a时:上下左右填充a个像素
- (a, b)时:上下填充b, 左右填充a
- (a, b, c, d)时:左a, 上b, 右c,下d
- padding_mode:填充模式
- constant:由fill指定填充颜色
- edge:由图像边缘像素决定填充颜色
- reflect:镜像填充,最后一个像素不镜像
- symmetric:镜像填充,最后一个像素镜像
- fill:设置填充颜色
ColorJitter
功能:调整亮度、对比度、饱和度和色相
- brightness:设置亮度调整因子
- a时:从[max(0, 1-a),1+a]中选一个数
- (a, b)时:从(a,b)中选一个数
- contrast:设置对比度参数
- a时:从[max(0, 1-a),1+a]中选一个数
- (a, b)时:从(a,b)中选一个数
- saturation:饱和度参数
- a时:从[max(0, 1-a)—1+a]中选一个数
- (a, b)时:从(a,b)中选一个数
- hue:色相参数
- a时:(-a,a),0 <= a <= 0.5
- (a, b)时:(a,b)中选一个,-0.5 <= a <= b <= 0.5
Grayscale
RandomGrayscale
功能:将彩色图转换为灰度图
- num_output_channels:输出通道数,1–灰度,3–彩色
- p:被转换为灰度图的概率
RandomAffine
仿射变换,二维的线性变换,旋转,平移,缩放,错切,翻转
- degress:旋转角度
- translate:平移区间设置,如(a,b),a设置宽(width),b设置高(height),图像在宽维度平移的区间为-img_width*a < dx < img_width*a
- scale:缩放比例(以面积为单位)
- fill_color:填充颜色设置
- sheer:错切角度,有水平与垂直
- a时:在x轴上错切,角度在(-a,a)
- (a, b)时:a为x轴错切角度设置,b为y轴错切角度设置
- (a, b, c, d)时:x轴(a,b),y轴(c,d)
- resample:重采样方法
- PIL.Image.NEAREST:最近邻插值
- PIL.Image.BILNEAR:双线性插值
- PIL.Image.BICUBIC:
RandomErasing
功能:对图像进行随机遮挡
- p:遮挡概率
- scale:遮挡面积比例
- ratio:遮挡区域长宽比
- value:设置遮挡区域的像素值,(R,G,B)or(Gray)
transforms.Lambda
功能:用户自定义lambda方法
- lambd:lambda匿名函数
lambda[arg1[,arg2, ... , argn]]:expression
图像增强方法的选择策略
transforms.RandomChoice([tran1, tran2, tran3])
功能:从一组transforms中选择一个。
transforms.RandomApply([tran1, tran2], p=0.5)
功能:依据一定概率对一组图像处理方法进行选择。
transforms.RandomOrder([tran1,tran2])
功能:对一组图像处理方法进行打乱顺序,然后按照打乱的顺序对图像进行处理。
自定义transforms
自定义transforms要素:
- 仅接收一个参数,返回一个参数。
- 注意上下游的输出与输入。
通过类实现多参数传入:
椒盐噪声
椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑色为椒噪声。
信噪比(Singal-Noise Rate,SNR)是衡量噪声的比例,图像中为图像像素的占比。
数据增强实战
原则:让训练集与测试集更接近。
- 空间位置:平移。
- 色彩:灰度图,色彩抖动。
- 形状:放射变换。
- 上下文场景:遮挡,填充。、
- ......