以图像领域为例,先答一波,参考
数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。
比如上图,第1列是原图,后面3列是对第1列作一些随机的裁剪、旋转操作得来。
每张图对于网络来说都是不同的输入,加上原图就将数据扩充到原来的10倍。假如我们输入网络的图片的分辨率大小是256×256,若采用随机裁剪成224×224的方式,那么一张图最多可以产生32×32张不同的图,数据量扩充将近1000倍。虽然许多的图相似度太高,实际的效果并不等价,但仅仅是这样简单的一个操作,效果已经非凡了。
如果再辅助其他的数据增强方法,将获得更好的多样性,这就是数据增强的本质。
数据增强可以分为,有监督的数据增强和无监督的数据增强方法。其中有监督的数据增强又可以分为单样本数据增强和多样本数据增强方法,无监督的数据增强分为生成新的数据和学习增强策略两个方向。
有监督数据增强,即采用预设的数据变换规则,在已有数据的基础上进行数据的扩增,包含单样本数据增强和多样本数据增强,其中单样本又包括几何操作类,颜色变换类。
2.1. 单样本数据增强
所谓单样本数据增强,即增强一个样本的时候,全部围绕着该样本本身进行操作,包括几何变换类,颜色变换类等。
(1) 几何变换类
几何变换类即对图像进行几何变换,包括翻转,旋转,裁剪,变形,缩放等各类操作,下面展示其中的若干个操作。
水平翻转和垂直翻转
随机旋转
随机裁剪
变形缩放
翻转操作和旋转操作,对于那些对方向不敏感的任务,比如图像分类,都是很常见的操作,在caffe等框架中翻转对应的就是mirror操作。
翻转和旋转不改变图像的大小,而裁剪会改变图像的大小。通常在训练的时候会采用随机裁剪的方法,在测试的时候选择裁剪中间部分或者不裁剪。值得注意的是,在一些竞赛中进行模型测试时,一般都是裁剪输入的多个版本然后将结果进行融合,对预测的改进效果非常明显。
以上操作都不会产生失真,而缩放变形则是失真的。
很多的时候,网络的训练输入大小是固定的,但是数据集中的图像却大小不一,此时就可以选择上面的裁剪成固定大小输入或者缩放到网络的输入大小的方案,后者就会产生失真,通常效果比前者差。
(2) 颜色变换类
上面的几何变换类操作,没有改变图像本身的内容,它可能是选择了图像的一部分或者对像素进行了重分布。如果要改变图像本身的内容,就属于颜色变换类的数据增强了,常见的包括噪声、模糊、颜色变换、擦除、填充等等。
基于噪声的数据增强就是在原来的图片的基础上,随机叠加一些噪声,最常见的做法就是高斯噪声。更复杂一点的就是在面积大小可选定、位置随机的矩形区域上丢弃像素产生黑色矩形块,从而产生一些彩色噪声,以Coarse Dropout方法为代表,甚至还可以对图片上随机选取一块区域并擦除图像信息。
添加Coarse Dropout噪声
颜色变换的另一个重要变换是颜色扰动,就是在某一个颜色空间通过增加或减少某些颜色分量,或者更改颜色通道的顺序。
颜色扰动
还有一些颜色变换,本文就不再详述。
几何变换类,颜色变换类的数据增强方法细致数来还有非常多,推荐给大家一个git项目:
https://github.com/aleju/imgaug
预览一下它能完成的数据增强操作吧。
2.2. 多样本数据增强
不同于单样本数据增强,多样本数据增强方法利用多个样本来产生新的样本,下面介绍几种方法。
(1) SMOTE[1]
SMOTE即Synthetic Minority Over-sampling Technique方法,它是通过人工合成新样本来处理样本不平衡问题,从而提升分类器性能。
类不平衡现象是很常见的,它指的是数据集中各类别数量不近似相等。如果样本类别之间相差很大,会影响分类器的分类效果。假设小样本数据数量极少,如仅占总体的1%,则即使小样本被错误地全部识别为大样本,在经验风险最小化策略下的分类器识别准确率仍能达到99%,但由于没有学习到小样本的特征,实际分类效果就会很差。
SMOTE方法是基于插值的方法,它可以为小样本类合成新的样本,主要流程为:
第一步,定义好特征空间,将每个样本对应到特征空间中的某一点,根据样本不平衡比例确定好一个采样倍率N;
第二步,对每一个小样本类样本(x,y),按欧氏距离找出K个最近邻样本,从中随机选取一个样本点,假设选择的近邻点为(xn,yn)。在特征空间中样本点与最近邻样本点的连线段上随机选取一点作为新样本点,满足以下公式:
第三步,重复以上的步骤,直到大、小样本数量平衡。
该方法的示意图如下。
在python中,SMOTE算法已经封装到了imbalanced-learn库中,如下图为算法实现的数据增强的实例,左图为原始数据特征空间图,右图为SMOTE算法处理后的特征空间图。
(2) SamplePairing[2]
SamplePairing方法的原理非常简单,从训练集中随机抽取两张图片分别经过基础数据增强操作(如随机翻转等)处理后经像素以取平均值的形式叠加合成一个新的样本,标签为原样本标签中的一种。这两张图片甚至不限制为同一类别,这种方法对于医学图像比较有效。
经SamplePairing处理后可使训练集的规模从N扩增到N×N。实验结果表明,因SamplePairing数据增强操作可能引入不同标签的训练样本,导致在各数据集上使用SamplePairing训练的误差明显增加,而在验证集上误差则有较大幅度降低。
尽管SamplePairing思路简单,性能上提升效果可观,符合奥卡姆剃刀原理,但遗憾的是可解释性不强。
(3) mixup[3]
mixup是Facebook人工智能研究院和MIT在“Beyond Empirical Risk Minimization”中提出的基于邻域风险最小化原则的数据增强方法,它使用线性插值得到新样本数据。
令(xn,yn)是插值生成的新数据,(xi,yi)和(xj,yj)是训练集随机选取的两个数据,则数据生成方式如下
λ的取指范围介于0到1。提出mixup方法的作者们做了丰富的实验,实验结果表明可以改进深度学习模型在ImageNet数据集、CIFAR数据集、语音数据集和表格数据集中的泛化误差,降低模型对已损坏标签的记忆,增强模型对对抗样本的鲁棒性和训练生成对抗网络的稳定性。
SMOTE,SamplePairing,mixup三者思路上有相同之处,都是试图将离散样本点连续化来拟合真实样本分布,不过所增加的样本点在特征空间中仍位于已知小样本点所围成的区域内。如果能够在给定范围之外适当插值,也许能实现更好的数据增强效果。
无监督的数据增强方法包括两类:
(1) 通过模型学习数据的分布,随机生成与训练数据集分布一致的图片,代表方法GAN[4]。
(2) 通过模型,学习出适合当前任务的数据增强方法,代表方法AutoAugment[5]。
3.1 GAN
关于GAN(generative adversarial networks),我们已经说的太多了。它包含两个网络,一个是生成网络,一个是对抗网络,基本原理如下:
(1) G是一个生成图片的网络,它接收随机的噪声z,通过噪声生成图片,记做G(z) 。
(2) D是一个判别网络,判别一张图片是不是“真实的”,即是真实的图片,还是由G生成的图片。
GAN的以假乱真能力就不多说了。
3.2 Autoaugmentation[5]
AutoAugment是Google提出的自动选择最优数据增强方案的研究,这是无监督数据增强的重要研究方向。它的基本思路是使用增强学习从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法,流程如下:
(1) 准备16个常用的数据增强操作。
(2) 从16个中选择5个操作,随机产生使用该操作的概率和相应的幅度,将其称为一个sub-policy,一共产生5个sub-polices。
(3) 对训练过程中每一个batch的图片,随机采用5个sub-polices操作中的一种。
(4) 通过模型在验证集上的泛化能力来反馈,使用的优化方法是增强学习方法。
(5) 经过80~100个epoch后网络开始学习到有效的sub-policies。
(6) 之后串接这5个sub-policies,然后再进行最后的训练。
总的来说,就是学习已有数据增强的组合策略,对于门牌数字识别等任务,研究表明剪切和平移等几何变换能够获得最佳效果。
而对于ImageNet中的图像分类任务,AutoAugment学习到了不使用剪切,也不完全反转颜色,因为这些变换会导致图像失真。AutoAugment学习到的是侧重于微调颜色和色相分布。
除此之外还有一些数据增强方法,篇幅有限不做过多解读,请持续关注。
数据增强的本质是为了增强模型的泛化能力,那它与其他的一些方法比如dropout,权重衰减有什么区别?
(1) 权重衰减,dropout,stochastic depth等方法,是专门设计来限制模型的有效容量的,用于减少过拟合,这一类是显式的正则化方法。研究表明这一类方法可以提高泛化能力,但并非必要,且能力有限,而且参数高度依赖于网络结构等因素。
(2) 数据增强则没有降低网络的容量,也不增加计算复杂度和调参工程量,是隐式的规整化方法。实际应用中更有意义,所以我们常说,数据至上。
我们总是在使用有限的数据来进行模型的训练,因此数据增强操作是不可缺少的一环。从研究人员手工定义数据增强操作,到基于无监督的方法生成数据和学习增强操作的组合,这仍然是一个开放的研究领域,感兴趣的同学可以自行了解更多。
参考文献
[1] Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2002, 16(1):321-357.
[2] Inoue H. Data Augmentation by Pairing Samples for Images Classification[J]. 2018.
[3] Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond Empirical Risk Minimization[J]. 2017.
[4] Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative Adversarial Networks[J]. Advances in Neural Information Processing Systems, 2014, 3:2672-2680.
[5] Cubuk E D, Zoph B, Mane D, et al. AutoAugment: Learning Augmentation Policies from Data.[J]. arXiv: Computer Vision and Pattern Recognition, 2018.
更多实战和细节,可以去我们数据使用课程中看看。
看了其他大佬的回答,总结的很好。本篇回答就补充一些前沿的研究成果,如Feature space augmentation;然后介绍了半监督学习中的几种数据增强;最后,介绍几种解决数据问题的训练方法。
首先,这里将数据增强分为以下几类:
Geometric Transformations:就是图像翻转,裁剪,旋转和平移等等,
Color Space Transformations:对比度,锐化,白平衡,色彩抖动,随机色彩处理和许多其他技术来更改图像的色彩空间。
Mixup就是将两张图像进行mix操作,提供数据的丰富性;
Cutmix就是将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配。
Mosaic:是将四张图片进行随机裁剪,再拼接到一张图上作为训练数据,这样做的好处是丰富了图片的背景。
Paper:On Feature Normalization and Data Augmentation(MoEx)
Arxiv:https://arxiv.org/abs/2002.11102
Github:https://github.com/Boyiliee/MoEx
MoEx的实验包括:ImageNet、Speech Commands、IWSLT 2014、ModelNet40等。可以说涵盖了图像、NLP、语音三大领域,可见其优点很明显,由于是在特征空间做数据增强,所以不受输入数据类型的限制,对于图像、音频以及文本等数据具有通用性。
生成模型学习数据的分布,因此,可以生成全新的图像。常用的是GAN,其由两个网络组成:生成器和鉴别器。生成器的对仅具有噪声作为输入生成伪造数据。鉴别器接收真实图像和伪图像(由发生器产生)作为输入,并学会识别图像是伪图像还是真实图像。随着两个网络相互竞争,在对抗训练的过程中,生成器在生成图像方面变得越来越好,因为其最终目标是欺骗鉴别器,而鉴别器在区分伪造品和真实图像方面变得越来越好,因为它的目标是不被欺骗,最终生成器生成了令人难以置信的真实伪数据。需要说明的是,GAN生成的数据是要因地制宜,据说点赞的同学训练过程会有奇效(哈哈)。
下面的这篇文章就就是一个很好的例子:
Paper:Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro.
Arxiv:https://arxiv.org/abs/1701.07717
Github:https://github.com/layumi/Person-reID_GAN
这篇文章想法在当时情况下还是比较好的。没有ReID的GAN,那就用原始数据训练一个GAN,然后生成图片,没有标签就用ReID网络生成pseudo label。这样一来,就从监督学习转化为了半监督学习。
这类方法的出发点是:不同的数据的特征不同,因此,不同的数据增强方法带来的收益是不一样的。例如:由于不同数据集中存在不同的对称性要求,在CIFAR-10数据集上训练阶段水平翻转图像是的有效数据增强方法,但对MNIST却不适用。 因而,让网络自主的寻找数据增强方法逐渐成为一种无论是学术或者工程上都不可或缺的需求。
Google DeepMind 率先提出了利用NAS的方法AutoAugment,在数据增强的策略搜索空间中利用数据集上评定特定策略的质量,自动搜索出合适的数据增强的策略。相关的文献还有:Fast AutoAugment以及DADA等等。
Paper:AutoAugment: Searching for best Augmentation policies Directly on the Dataset of Interest
Arxiv:https://arxiv.org/abs/1805.09501
Github:https://github.com/tensorflow/models/tree/master/research/autoaugment
AutoAugment是Google提出的自动选择最优数据增强方案的研究,它的基本思路是使用强化学习从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法。
在实验中发现:
这也说明了不同数据,乃至不同任务都需要不同的数据增强策略。
AutoAugment的方法在很多数据集上达到state-of-the-art的水平。在CIFAR-10上,实现了仅1.48%的错误率,比之前state-of-the-art 的方法又提升了0.65%;在SVHN上,将state-of-the-art的错误率从1.30%提高到1.02%;在一些reduced数据集上,在不使用任何未标记数据的情况下实现了与半监督方法相当的性能;在ImageNet上,实现了前所未有的83.54%的精度。
除了上面的内容,还有一些半监督技术中的数据增强方法。
Paper:MixMatch: A Holistic Approach to Semi-Supervised Learning
Arxiv:https://arxiv.org/pdf/1905.02249.pdf
github:https://github.com/google-research/mixmatch
FeatMatch: Feature-Based Augmentation for Semi-Supervised Learning
arxiv:https://arxiv.org/pdf/2007.08505.pdf
在上面我们介绍了一些对有监督的数据进行数据增强的方法,但是对有监督训练中进行数据增强大多被认为是“蛋糕上的樱桃”,因为虽然它提供了稳定但是有限的性能提升,还有以下几种方法解决中数据的问题,提高模型能力:
本人做了一个半监督学习的总结,用于整理半监督学习的方法和进展,欢迎点击并关注专栏。
之前回答的几位大佬对数据增强的原理介绍都很详细了,这里我就直接介绍这几个方面:
介绍的内容主要来自这个 github 项目,可以去 star 一下:
https:// github.com/CrazyVertigo /awesome-data-augmentation
imgaug
这个项目的 star 数量是已经有 8k 多了,显示使用的数量也有 2k多,克隆仓库的有1k多,的GitHub地址:
它可以实现的效果包括添加噪音、仿射变换、裁剪、翻转、旋转等,其效果图如下所示:
Albumentations
这第二个项目是 2018年的一篇论文《Albumentations: fast and flexible image augmentations》的实现代码,论文地址:
github 项目已经有 4k 的star,地址如下:
albumentations-team/albumentations
该项目的特点有:
其效果如下所示,可以看到能实现的方法包括颜色空间的变换、亮度调整、模糊、压缩、黑白
Augmentor
第三个项目同样来自一篇论文《Biomedical image augmentation using Augmentor》,其论文地址:
GitHub 的 star 的数量也有 3.8k了,其地址:
官方文档:
实现的效果如下所示:
这里介绍的总共 13 篇论文,都可以添加我的公众号--【算法猿的成长】,后台回复“数据增强”获取。
来自 ICLR 2018 的论文:《Mixup: BEYOND EMPIRICAL RISK MINIMIZATION》
论文地址: https://arxiv.org/abs/1710.09412
GitHub 地址:https://github.com/facebookresearch/mixup-cifar10
效果如下所示:
2017年的论文:《Improved Regularization of Convolutional Neural Networks with Cutout》
论文地址: https://arxiv.org/abs/1708.04552
github 地址:https://github.com/uoguelph-mlrg/Cutout
ICCV 2019 的论文:《CutMix:Regularization Strategy to Train Strong Classifiers with Localizable Features》
论文地址:https://arxiv.org/pdf/1905.04899.pdf
github地址: https://github.com/clovaai/CutMix-PyTorch
ICLR 2020 的论文:《AUGMIX: A SIMPLE DATA PROCESSING METHOD TO IMPROVE ROBUSTNESS AND UNCERTAINTY》
论文地址:https://arxiv.org/pdf/1912.02781.pdf
github 地址: https://github.com/google-research/augmix
NeurlIPS 2019 的论文《 Fast AutoAugment》
论文地址: https://arxiv.org/abs/1905.00397 github 地址: https://github.com/kakaobrain/fast-autoaugment
CVPR 2019 的论文 《AutoAugment:Learning Augmentation Strategies from Data》
论文地址: https://arxiv.org/pdf/1805.09501v3.pdf
github地址: https://github.com/DeepVoltaire/AutoAugment
ICLR 2020 的论文《RandAugment: Practical automated data augmentation with a reduced search space》
论文地址:https://arxiv.org/pdf/1912.02781.pdf github地址: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
2020年的论文题目《GridMask Data Augmentation》
论文地址: https://arxiv.org/abs/2001.04086 github地址: https://github.com/akuxcw/GridMask 知乎的论文解读: https://zhuanlan.zhihu.com/p/103992528
2019 年的论文《Benchmarking Robustness in Object Detection:Autonomous Driving when Winter is Coming》
论文地址: https://arxiv.org/pdf/1912.02781.pdf
github 地址:https://github.com/CrazyVertigo/imagecorruptions
ICCV 2017 年的一篇论文《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networkss》,也是 GAN 领域非常有名的一篇论文
论文地址:https://arxiv.org/pdf/1703.10593.pdf
github 地址:
2019 年的论文《Augmentation for small object detection》
论文地址:https://arxiv.org/pdf/1902.07296.pdf
github 地址:https://github.com/gmayday1997/SmallObjectAugmentation
知乎阅读笔记:https://zhuanlan.zhihu.com/p/64635490
2017 年的一个标注工具,目前有超过 9k star 的github项目,地址为:
https:// github.com/tzutalin/lab elImg
它可以进行图片的标注,以及绘制边界框,如下所示:
同样是2017年开源的一个标注工具,目前有 4k+ 的star,github 地址:
https:// github.com/wkentaro/lab elme
这是一个可以实现多种形状的标注,比如多边形、圆形、矩形、直线、点等,如下所示: