【技术综述】 一文道尽深度学习中的数据增强方法(上)
【技术综述】 一文道尽深度学习中的数据增强方法(上)
今天带来一次有关于深度学习中的数据增强方法的分享。
00什么是数据增强
在深度学习项目中,寻找数据花费了相当多的时间。但在很多实际的项目中,我们难以找到充足的数据来完成任务。
为了要保证完美地完成项目,有两件事情需要做好:
1、寻找更多的数据;
2、数据增强。
本篇主要描述数据增强。
什么是数据增强呢?data augmentation,它的意思是让有限的数据产生更多的等价数据。
下面举个实际的例子:
上面的左侧大图为原图,右侧小图是对左图做了一些随机的裁剪、旋转操作得来的。右边的每张图对于网络来说都是不同的输入,这样就将数据扩充到10倍。
假如我们输入网络的图片的分辨率大小是256*256,若采用随机裁剪成224*224的方式,那么一张图最多可以产生32*32张图,数据量扩充将近1000倍。
但因许多图相似度太高,实际的效果并不等价。
如果再辅助其他的数据增强方法,将获得更多的数据集,这就是数据增强的本质。
01空间几何变换类
1.1 翻转
翻转包括水平翻转和垂直翻转。
1.2crop
裁剪图片的感兴趣区域(ROI),通常在训练的时候,会采用随机裁剪的方法,下图为随机裁剪4次的效果。
1.3 旋转
对图像做一定角度对旋转操作,看看效果。
1.4.缩放变形
随机选取图像的一部分,然后将其缩放到原图像尺度。
1.5 仿射类
仿射变换
同时对图片做裁剪、旋转、转换、模式调整等多重操作。
视觉变换
对图像应用一个随机的四点透视变换。
分段仿射(PiecewiseAffine)
分段仿射在图像上放置一个规则的点网格,根据正态分布的样本数量移动这些点及周围的图像区域。
02像素颜色变换类
2.1 噪声类
随机噪声是在原来的图片的基础上,随机叠加一些噪声。
高斯噪声
CoarseDropout
在面积大小可选定、位置随机的矩形区域上丢失信息实现转换,所有通道的信息丢失产生黑色矩形块,部分通道的信息丢失产生彩色噪声。
SimplexNoiseAlpha
产生连续单一噪声的掩模后,将掩模与原图像混合。
FrequencyNoiseAlpha
在频域中用随机指数对噪声映射进行加权,再转换到空间域。在不同图像中,随着指数值逐渐增大,依次出现平滑的大斑点、多云模式、重复出现的小斑块。
2.2 模糊类
减少各像素点值的差异实现图片模糊,实现像素的平滑化。
高斯模糊
ElasticTransformation
根据扭曲场的平滑度与强度逐一地移动局部像素点实现模糊效果。
2.3 HSV对比度变换
通过向HSV空间中的每个像素添加或减少V值,修改色调和饱和度实现对比度转换。
2.4 RGB颜色扰动
将图片从RGB颜色空间转换到另一颜色空间,增加或减少颜色参数后返回RGB颜色空间。
2.5 随机擦除法
对图片上随机选取一块区域,随机地擦除图像信息。
2.6超像素法(Superpixels)
在最大分辨率处生成图像的若干个超像素,并将其调整到原始大小,再将原始图像中所有超像素区域按一定比例替换为超像素,其他区域不改变。
2.7 转换法(invert)
按给定的概率值将部分或全部通道的像素值从v设置为255-v。
2.8边界检测(EdgeDetect)
检测图像中的所有边缘,将它们标记为黑白图像,再将结果与原始图像叠加。
2.9 GrayScale
将图像从RGB颜色空间转换为灰度空间,通过某一通道与原图像混合。
2.10 锐化(sharpen)与浮雕(emboss)
对图像执行某一程度的锐化或浮雕操作,通过某一通道将结果与图像融合。
下图分别是锐化与浮雕效果图。
上述两大类方法都是通过调用imgaug库操作实现的。
git地址:https://github.com/aleju/imgaug
官方文档:http://imgaug.readthedocs.io/en/latest/index.html
03多样本合成类
3.1 SMOTE
SMOTE,Synthetic Minority Over-sampling Technique,通过人工合成新样本来处理样本不平衡问题,提升分类器性能。
类不平衡现象是数据集中各类别数量不近似相等。如果样本类别之间相差很大,会影响分类器的分类效果。假设小样本数据数量极少,仅占总体的1%,所能提取的相应特征也极少,即使小样本被错误地全部识别为大样本,在经验风险最小化策略下的分类器识别准确率仍能达到99%,但在验证环节分类效果不佳。
基于插值的SMOTE方法为小样本类合成新的样本,主要思路为:
(1)定义好特征空间,将每个样本对应到特征空间中的某一点,根据样本不平衡比例确定采样倍率N;
(2)对每一个小样本类样本(x,y),按欧氏距离找K个最近邻样本,从中随机选取一个样本点,假设选择的近邻点为(xn,yn)。在特征空间中样本点与最近邻样本点的连线段上随机选取一点作为新样本点,满足以下公式:
(3)重复选取取样,直到大、小样本数量平衡。
在python中,SMOTE算法已经封装到了imbalanced-learn库中,如下图为算法实现的数据增强的实例,左图为原始数据特征空间图,右图为SMOTE算法处理后的特征空间图。
3.2 SamplePairing
SamplePairing方法的处理流程如下图所示,从训练集中随机抽取两张图片分别经过基础数据增强操作(如随机翻转等)处理后经像素取平均值的形式叠加合成一个新的样本,标签为原样本标签中的一种。
经SamplePairing处理后可使训练集的规模从N扩增到N*N,在CPU上也能完成处理。
训练过程是交替禁用与使用SamplePairing处理操作的结合:
(1)使用传统的数据增强训练网络,不使用SamplePairing 数据增强训练。
(2)在ILSVRC数据集上完成一个epoch或在其他数据集上完成100个epoch后,加入SamplePairing 数据增强训练。
(3)间歇性禁用 SamplePairing。对于 ILSVRC 数据集,为其中的300000 个图像启用SamplePairing,然后在接下来的100000个图像中禁用它。对于其他数据集,在开始的8个epoch中启用,在接下来的2个epoch中禁止。
(4)在训练损失函数和精度稳定后进行微调,禁用SamplePairing。
实验结果表明,因SamplePairing数据增强操作可能引入不同标签的训练样本,导致在各数据集上使用SamplePairing训练的误差明显增加,而在检测误差方面使用SamplePairing训练的验证误差有较大幅度降低。
尽管SamplePairing思路简单,性能上提升效果可观,符合奥卡姆剃刀原理,遗憾的是的可解释性不强,目前尚缺理论支撑。目前仅有图片数据的实验,还需下一步的实验与解读。
3.3 mixup
mixup是基于邻域风险最小化(VRM)原则的数据增强方法,使用线性插值得到新样本数据。
在邻域风险最小化原则下,根据特征向量线性插值将导致相关目标线性插值的先验知识,可得出简单且与数据无关的mixup公式:
其中(xn,yn)是插值生成的新数据,(xi,yi) 和 (xj,yj)是训练集中随机选取的两个数据,λ的取值满足贝塔分布,取值范围介于0到1,超参数α控制特征目标之间的插值强度。
mixup的实验丰富,实验结果表明可以改进深度学习模型在ImageNet数据集、CIFAR数据集、语音数据集和表格数据集中的泛化误差,降低模型对已损坏标签的记忆,增强模型对对抗样本的鲁棒性和训练对抗生成网络的稳定性。
mixup处理实现了边界模糊化,提供平滑的预测效果,增强模型在训练数据范围之外的预测能力。
随着超参数α增大,实际数据的训练误差就会增加,而泛化误差会减少。说明mixup隐式地控制着模型的复杂性。随着模型容量与超参数的增加,训练误差随之降低。
尽管有着可观的效果改进,但mixup在偏差—方差平衡方面尚未有较好的解释。在其他类型的有监督学习、无监督、半监督和强化学习中,mixup还有很大的发展空间。