数据增强方法总结
本文转载自:https://mp.weixin.qq.com/s/HFBtRAtX3sU10fD0i04lkw
文章目录
前沿
在计算机视觉方向,数据增强的本质是人为地引入人视觉上的先验知识,可以很好地提升模型的性能,目前基本成为模型的标配。最近几年逐渐出了很多新的数据增强方法,在本文将对数据增强做一个总结。
本文介绍了数据增强的作用,数据增强的分类,数据增强的常用方法,一些特殊的方法,如Cutout,Random Erasing,Mixup,Hide-and-Seek,CutMix,GridMask,FenceMask和KeepAugment等方法,还介绍了一些基于多样本的增强方法,如SMOTE, mosaic和SamplePairing。
1.数据增强的作用
-
避免过拟合。当数据集具有某种明显的特征,例如数据集中图片基本在同一个场景中拍摄,使用Cutout方法和风格迁移变化等相关方法可避免模型学到跟目标无关的信息。
-
提升模型鲁棒性,降低模型对图像的敏感度。当训练数据都属于比较理想的状态,碰到一些特殊情况,如遮挡,亮度,模糊等情况容易识别错误,对训练数据加上噪声,掩码等方法可提升模型鲁棒性。
-
增加训练数据,提高模型泛化能力。
-
避免样本不均衡。在工业缺陷检测方面,医疗疾病识别方面,容易出现正负样本极度不平衡的情况,通过对少样本进行一些数据增强方法,降低样本不均衡比例。
2. 数据增强的分类
根据数据增强方式,可分为两类:在线增强
和离线增强
。这两者的区别在于离线增强
是在训练前对数据集进行处理,往往能得到多倍的数据集;在线增强
是在训练时对加载数据进行预处理,不改变训练数据的数量。
离线增强一般用于小型数据集,在训练数据不足时使用;在线增强一般用于大型数据集.
3. 数据增强的常用方法
比较常用的几何变换
方法主要有:翻转,旋转,裁剪,缩放,平移,抖动。值得注意的是,在某些具体的任务中,当使用这些方法时需要主要标签数据的变化,如目标检测中若使用翻转,则需要将gt框进行相应的调整。
比较常用的像素变换
方法有:加椒盐噪声,高斯噪声,进行高斯模糊,调整HSV对比度,调节亮度,饱和度,直方图均衡化,调整白平衡等。
这些常用方法都比较简单,这里不多赘述。
此外,还有一些在论文中提到的特定方法:
3.1 Cutout(2017)
在一些人体姿态估计,人脸识别,目标跟踪,行人重识别等任务中常常会出现遮挡的情况,为了提高模型的鲁棒性,提出了使用Cutout数据增强方法。该方法的依据是Cutout能够让CNN更好地利用图像的全局信息,而不是依赖于一小部分特定的视觉特征。
做法:对一张图像随机选取一个小正方形区域,在这个区域的像素值设置为0或其它统一的值。注:存在50%的概率不对图像使用Cutout。
效果图如下:
论文:Improved Regularization of Convolutional Neural Networks with Cutout
官方代码:https://github.com/uoguelph-mlrg/Cutout
3.2 Random Erasing(2017)
这个方法有点类似于Cutout,这两者同一年发表的。与Cutout不同的是,Random Erasing掩码区域的长宽,以及区域中像素值的替代值都是随机的,Cutout是固定使用正方形,替代值都使用同一个。
具体算法如下:
其效果图如下:
论文:Random Erasing Data Augmentation
官方代码:https://github.com/zhunzhong07/Random-Erasing
3.3 Mixup(2018)
主要思想是将在数据集中随机选择两张图片按照一定比例融合,包括标签值。在论文中给出了代码,看一眼代码即可很好的理解。
效果图如下:
一张海上帆船与熊猫的融合。
论文:mixup: BEYOND EMPIRICAL RISK MINIMIZATION
官方代码:https://github.com/facebookresearch/mixup-cifar10
3.4 Hide-and-Seek(2018)
其主要思想就是将图片划分为S x S的网格,每个网格按一定的概率(0.5)进行掩码。其中不可避免地会完全掩码掉一个完整的小目标。当这种思想用于行为识别时,做法是将视频帧分成多个小节,每一小节按一定的概率进行掩码。
注:论文提到掩码所使用的替代值会对识别有一定的影响,经过一些理论计算,采用整个图像的像素值的均值的影响最小。
效果:
论文:Hide-and-Seek: A Data Augmentation Technique for Weakly-Supervised Localization and Beyond
官方代码:https://github.com/kkanshul/Hide-and-Seek
3.5 CutMix(2019)
该方法结合了Cutout、Random erasing和Mixup三者的思想,做了一些中间调和的改变,同样是选择一个小区域,进行掩码,但掩码的方式却是将另一张图片的该区域覆盖到这里。看图更能理解这种方法。
效果如下:
论文:CutMix: Regularization Strategy to Train Strong Classififiers with Localizable Featuresd
官方代码:https://github.com/clovaai/CutMix-PyTorch
3.6 GridMask(2020)
主要思想是对前几种方法的改进,由于前几种对于掩码区域的选择都是随机的,因此容易出现对重要部位全掩盖的情况。而GridMask则最多出现部分掩盖,且几乎一定会出现部分掩盖。使用的方式是排列的正方形区域来进行掩码。
具体实现是通过设定每个小正方形的边长,两个掩码之间的距离d来确定掩码,从而控制掩码细粒度。
效果如下:
论文:GridMask Data Augmentation
官方代码:https://github.com/akuxcw/GridMask
3.7 FenceMask(2020)
该方法是对前面GridMask的改进,认为使用正方形的掩码会对小目标有很大的影响。因此提出了更好的形状,FenceMask具有更好的细粒度。
效果对比如下:
论文:FenceMask: A Data Augmentation Approach for Pre-extracted Image Features
3.8 KeepAugment(2020)
主要思想是对前几种方法中随机选择掩码区域的改进,通过得出Saliency map,分析出最不重要的区域,选择这个区域进行Cutout,或者分析出最重要区域进行CutMix。
saliency map区域的计算方式与类可视化的方法一致,通过计算回传梯度,获得每个像素值的梯度,从而确定每个像素值对类别的影响程度。而最重要区域和最不重要区域的划分是通过这个区域的所有梯度值之和大于或小于某个相应的阈值来确定。
具体如何计算saliency map请阅读《CNN可视化技术总结–类可视化》。
算法如下:(其中Selcetive-cut是使用Cutout, Selective-paste是使用CutMix)
效果如下:
论文:KeepAugment: A Simple Information-Preserving Data Augmentation Approach
官方代码:https://github.com/akuxcw/GridMask
3.9 其他数据增强方法
RandAugment,FastAugment,AutoAugment这几种方式都是属于构造一个数据增强方式的集合,采用强化学习的方式搜索适合指定数据集的数据增强方法。这些方法的最大特点是成本大,需要的时间很长很长,因此这里不多介绍。
注:前面提到的那些方法,基本都是接近零成本,更具有普遍使用的特性,这里几种只适合贵族。
此外还有通过GAN来实现风格迁移等数据增强方式。
3.10 多样本数据增强方法
前面提到的方法除了CutMix和Mixup外,基本都属于单样本增强,此外还有多样本增强方法,主要原理是利用多个样本来产生新的样本。
SMOTE–该方法来自遥远的2002年。主要应用在小型数据集上来获得新的样本,实现方式是随机选择一个样本,计算它与其它样本的距离,得到K近邻,从K近邻中随机选择多个样本构建出新样本。之所以不提论文中的构建方式,是因为该方法并不是用于图像,但读者可自主设计出图像的构建方式。
Mosaic–该方法来源于YOLO_v4,原理是使用四张图片拼接成一张图片。这样做的好处是图片的背景不再是单一的场景,而是在四种不同的场景下,且当使用BN时,相当于每一层同时在四张图片上进行归一化,可大大减少batch-size。
SamplePairing–该方法的原理是从训练集中随机选择两张图片,经过几何变化的增强方法后,逐像素取平均值的方式合成新的样本。具体如下图所示:
4. 总结
本文介绍了常用的数据增强方法,几种特殊的增强方法,几种多样本增强方法。
理论上来说,数据增强方法还应该包括对一些用于解决正负样本不均衡的方法,如hard negative example mining,focal loss等。
此外在网络中使用DropOut , DropConnect 和 DropBlock,也应该算是数据增强方法,因为它们与Cutout,Hide-and-Seek和GridMask等方法类似,同样是选择性丢弃一些数据。