本文主要是介绍大杀器!攻克目标检测难点秘籍四,数据增强大法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击上方“AI算法修炼营”,选择加星标或“置顶”
标题以下,全是干货
前面的话
在前面的秘籍一:模型加速之轻量化网络、秘籍二:非极大抑制算法和回归损失优化之路、秘籍三:多尺度检测中,我们主要关注了轻量化网络,非极大值抑制算法、回归损失优化以及目标检测中的小目标检测。
但是以笔者参加计算机视觉相关竞赛的经验(接下来会更新相关竞赛系列)来看,数据增强和模型融合是比赛涨分的大杀器,好的数据增强可以有效地抑制模型的过拟合,同时对于小样本量的数据集的训练往往有理想的效果。
数据增强(Data Augmentation)是一种通过让有限的数据产生更多的等价数据来人工扩展训练数据集的技术。它是克服训练数据不足的有效手段,目前在深度学习的各个领域中应用广泛。但是由于生成的数据与真实数据之间的差异,也不可避免地带来了噪声问题。
本文主要介绍秘籍四:数据增强。
秘籍四. 数据增强
参考文章《A survey on Image Data Augmentation for Deep Learning》:https://link.springer.com/article/10.1186/s40537-019-0197-0
(向公众号发送:数据增强,即可获得论文原文)
参考工程代码(imgaug库):https://github.com/aleju/imgaug
深度神经网络在许多任务中表现良好,但这些网络通常需要大量数据才能避免过度拟合。遗憾的是,许多场景无法获得大量数据,例如医学图像分析。数据增强技术的存在是为了解决这个问题,这是针对有限数据问题的解决方案。数据增强一套技术,可提高训练数据集的大小和质量,以便您可以使用它们来构建更好的深度学习模型。
数据增强从问题的根源(训练数据集)着手过度拟合。这是在可以通过扩充从原始数据集中提取更多信息的假设下完成的。这些扩充通过数据扭曲或过采样人为地增加了训练数据集的大小。
数据扭曲增强可以转换现有图像,从而保留其标签。这包括几何和颜色转换,随机擦除,对抗训练和神经样式转换等增强功能。
过度采样增强会创建综合实例,并将其添加到训练集中。这包括混合图像,特征空间增强和生成对抗网络(GAN)。过采样和数据扭曲增强不会形成相互排斥的二分法。例如,GAN样本可以通过随机裁剪进行堆叠以进一步扩大数据集。
目前,数据增强主要方法有:基于基本图像处理的数据增强、基于几何与光度转换的数据增强、基于深度学习的数据增强。下面将详细介绍:
1 基于基本图像处理的数据增强
几何变换(Geometric Transformations):由于训练集与测试集合中可能存在潜在的位置偏差,使得模型在测试集中很难达到训练集中的效果,几何变换可以有效地克服训练数据中存在的位置偏差,而且易于实现,许多图像处理库都包含这个功能。但是,为每个非安全数据扩充构建精炼标签是一个计算量巨大的过程。由于为扩充后数据构建精炼标签的挑战,因此必须考虑扩充的“安全性”。
几何转换的缺点:占用额外的内存,转换操作消耗计算成本和额外的训练时间。所以,必须手动观察某些几何变换,例如平移或随机裁剪,以确保它们没有改变图像的标签。
翻转变换(Flipping):通常是关于水平或者竖直的轴进行图像翻转操作,这种扩充是最容易实现的扩充,并且已经证明对ImageNet数据集有效。
裁剪(Cropping):如果输入数据集合的大小是变化的,裁剪可以作为数据预处理的一个手段,通过裁剪图像的中央色块,可以得到新的数据。在实际使用过程之中,这些数据增强算法不是只使用一种,而是使用一套数据增强策略,在AutoAugment这篇文章中,作者尝试让模型自动选择数据增强策略。
旋转 / 反射变换(Rotation/Reflection):选择一个角度,左右旋转图像,可以改变图像内容朝向。关于旋转角度需要慎重考虑,角度太大或者太小都不合适,适宜的角度是1度 到 20度。
缩放变换(Zoom):图像按照一定的比例进行放大和缩小并不改变图像中的内容,可以增加模型的泛化性能。
移动(Translation):向左,向右,向上或向下移动图像可以避免数据中的位置偏差,比如在人脸识别数据集合中,如果所有图像都居中,使用这种数据增强方法可以避免可能出现的位置偏差导致的错误。
噪声注入(Noise Injection):从高斯分布中采样出的随机值矩阵加入到图像的RGB像素中,通过向图像添加噪点可以帮助CNN学习更强大的功能。
色彩空间(Color Space):图片在输入计算机之前,通常会被编码为张量(高度×宽度×颜色通道),所以可以在色彩通道空间进行数据增强,比如将某种颜色通道关闭,或者改变亮度值,或者更改图片的颜色直方图信息。目前色彩空间主要有:RGB颜色空间、CMY/CMYK颜色空间、HSV/HSB颜色空间、HSI/HSL颜色空间、Lab颜色空间、YUV/YCbCr颜色空间。
色彩空间转换(Color space transformations):照明偏差是图像识别问题中最常见的挑战之一。因此,色彩空间转换(也称为光度转换)的有效性在概念上相当直观。
与几何变换类似,颜色空间变换的缺点是增加了内存,变换成本和训练时间。另外,颜色转换可能会丢弃重要的颜色信息,因此并不总是保留标签的转换。例如,当减小图像的像素值以模拟更暗的环境时,可能无法看到图像中的对象。
2 基于几何和光度转换的数据增强
内核过滤器(Kernel Filters):内核滤镜是在图像处理中一种非常流行的技术,比如锐化和模糊。将特定功能的内核滤镜与图像进行卷积操作,就可以得到增强后的数据。直观上,数据增强生成的图像可能会使得模型面对这种类型的图像具有更高的鲁棒性。此技术的缺点是,它与CNN的内部机制非常相似,可以将内核过滤器更好地实现为网络层,而不是通过数据增强对数据集进行附加。
混合图像(Mix):通过平均图像像素值将图像混合在一起是一种非常违反直觉的数据增强方法。对于人来说,混合图像生成的数据似乎没有意义。从混合图像中发现的性能提升非常难以理解或解释。对此的一种可能解释是,数据集大小的增加导致了诸如线和边之类的低级特征的更可靠表示。虽然这种方法缺乏可解释性,但是作为一种简单有效的数据增强算法,有一系列的工作进行相关的研究。例如,Inoue在图像每个像素点混合像素值来混合图像,Summers和Dinneen又尝试以非线性的方法来混合图像,Takahashi和Matsubara通过随机图像裁剪和拼接来混合图像,以及后来的mixup方法均取得了不错的成果。
随机擦除(Random Erasing):随机擦除是Zhong等人开发的数据增强技术,旨在通过更改输入空间来直接防止过拟合。他们受到Dropout机制的启发,随机选取图片中的一部分,将这部分图片删除,这项技术可以提高模型在图片被部分遮挡的情况下性能,除此之外还可以确保网络关注整个图像,而不只是其中的一部分。随机擦除的一个缺点是,它并不总是保留标签。
3 基于深度学习的数据增强
特征空间增强(Feature Space Augmentation):神经网络可以将图像这种高维向量映射为低维向量,之前讨论的所有图像数据增强方法都应用于输入空间中的图像。现在可以在特征空间进行数据增强操作,例如:SMOTE算法,它是一种流行的增强方法,通过将k个最近的邻居合并以形成新实例来缓解类不平衡问题。自动编码器的使用对于在数据上执行特征空间增强特别有用。自动编码器通过使网络的一半(编码器)将图像映射为低维矢量表示来工作,从而使网络的另一半(解码器)可以将这些矢量重新构造回原始图像。但是,特征空间增强的一个缺点是很难解释矢量数据。
对抗生成(Adversarial Training):对抗攻击表明,图像表示的健壮性远不及预期的健壮性,Moosavi-Dezfooli等人充分证明了这一点。对抗生成可以改善学习的决策边界中的薄弱环节,提高模型的鲁棒性。
基于GAN的数据增强(GAN-based Data Augmentation):使用 GAN 生成模型来生成更多的数据,可用作解决类别不平衡问题的过采样技术。
神经风格转换(Neural Style Transfer):通过神经网络风格迁移来生成不同风格的数据,防止模型过拟合。
4 相关实践工作
下面将总结目前为止,我们在实践过程中遇到的数据增强工作,前面提到的GAN_based等方法,我们在实际应用中并未涉及到,暂时便不做归纳总结,以后若有需要再添加上,读者可自行参阅前面分享的综述文章。感谢chenyh作者的知乎文章:CNN中的数据增强简单总结。
(文章链接地址:https://zhuanlan.zhihu.com/p/104992391?utm_source=wechat_session&utm_medium=social&utm_oi=1175137573872345088)
一、SSD数据预处理
参考文章:https://blog.csdn.net/Dlyldxwl/article/details/88355465
SSD做了丰富的数据增强策略,这部分为模型的mAP带来了8.8%的提升,尤其是对于小物体和遮挡物体等难点,数据增强起到了非常重要的作用。SSD的数据增强整体流程如下图所示,总体上包括光学变换与几何变换两个过程。
光学变换包括亮度和对比度等随机调整,可以调整图像像素值的大小,并不会改变图像尺寸;几何变换包括扩展、裁剪和镜像等操作,主要负责进行尺度上的变化,最后再进行去均值操作。大部分操作都是随机的过程,尽可能保证数据的丰富性。
二、生成遮挡类方法
这类方法通过生成mask,然后遮挡原图片部分区域,并不改变label 进行训练。
当目标有识别力的部位被遮挡后,网络会被迫使根据遗留的部分去寻找其它关键性部位,从而提升模型性能。
(1)Cutout 算法(随机将一块或者多块位置置为黑)[1] 和 Random Erase 算法[2]是比较类似的方法,如下图所示。
这类方法要注意的是,生成的mask区域有可能会完全覆盖掉目标,这种情况可能会给模型训练带来坏处。
Cutout代码:https://github.com/uoguelph-mlrg/Cutout
Random-Erasing代码:https://github.com/zhunzhong07/Random-Erasing
(2)HaS算法[3] 通过将图片划分为S*S个格子,在每个epoch内,对每个格子以一定概率随机进行遮挡,如下图。相较于Cutout,HaS生成多个遮挡块,产生更多类型的遮挡形式,对遮挡的鲁棒性更强。
HaS代码:https://github.com/kkanshul/Hide-and-Seek
(3)GridMask算法 [4]通过定量计算生成多个遮挡块来提升模型性能,如下图。这样做一可以避免类似于Cutout生成一个大的遮挡块从而完全覆盖掉目标,二相对于HaS可以更好的控制原图片中遮挡与保留的比例。GridMask 在多个task和benchmark上都表现出了SOTA的水平。
GridMask代码:https://github.com/akuxcw/GridMask
三、图片混合类方法
这类方法中最出名的便数Mixup [5],通过线性叠加两张图片生成新的图片,对应label也进行线性叠加用以训练,多个benchmark上证明了Mixup 的有效性。
同期还有个SamplePairing [6]工作,直接对两幅图片像素相加求平均,监督的label不变。训练时间歇使用SamplePairing,待精度稳定后,停止使用SamplePairing。本质上来说,SamplePairing和Mixup区别还是比较大的,Mixup是在训练集不涵盖的空间用线性关系去约束模型,SamplePairing则更像是人为引入错误样本,相当于定期添加噪声来防止过拟合。遗憾的是,SamplePairing没有被ICLR2018录用。
基于Mixup,后续涌现出一些很棒的工作。Mixmatch [7]将Mixup引入到半监督学习中,仅用少量的标记数据,就使半监督学习的预测精度逼近监督学习。Manifold mixup [8]通过对Hidden States进行插值,取得了优于Mixup的效果。
CutMix [9]可以说是图片混合类工作,也可以说是生成遮挡类工作。不同于遮挡类工作一般使用零像素黑布来遮挡图片,CutMix使用另一张图片的一个区域来覆盖遮挡区域。因此CutMix可以看成Cutout和Mixup的结合体,既使用了遮挡的思想,又使用了mixup的逐像素线性叠加,当然此处的线性矩阵只含有0,1两个元素。生成图片的标签,和mixup一样,也使用线性叠加的label。CutMix 在多个task和benchmark上也都展现了杰出的效果。CutMix示意图如下图所示。
Mixup代码:https://github.com/hongyi-zhang/mixup
Manifold mixup代码:https://github.com/vikasverma1077/manifold_mixup
CutMix代码:https://github.com/clovaai/CutMix-PyTorch
四、搜索类方法
这一块的工作目前还算比较多。推荐Quoc V. Le大神的两篇工作[10]和 [11]。这两篇工作比较类似,[10]主要用于分类任务,[11]则是用在目标检测中。
AutoAugment数据增强policy
变换方法:[10]定义了16中图像变换操作,包括PIL库中提供的14个操作和Cutout和SamplePairing。[11]从 Color operations、 Geometric operations和 Bounding box operations三个角度定义了22中图像变换操作。
搜索空间:预测的data aug policy共包含K个sub-policy,每个sub-policy包含N个图像变换方法,每个方法有两个属性:概率P和幅度magnitude。其中P离散为M个值,magnitude离散为L个值。因此[10][11]搜索空间分别为 和 。
[10]和[11]均使用了常见的 RNN 控制器+RL的方法,proximal policy optimization (PPO) 算法。
除了对train data进行aug,还有很多通过学习generator来生成data达到aug的搜索工作,这里不展开讨论,具体可参见论文。
AutoAugment代码链接:https://github.com/tensorflow/models/tree/master/research/autoaugment
文献[11]代码链接:
https://github.com/tensorflow/tpu/tree/master/models/official/detection
Reference
[1] Terrance Devries and Graham W. Taylor. Improved regularization of convolutional neural networks with cutout. arXiv preprint arXiv:1708.04552(2017).
[2] Zhun Zhong, Liang Zheng, Guoliang Kang, Shaozi Li, and Yi Yang. Random erasing data augmentation. arXiv preprint arXiv:1708.04896(2017).
[3] Krishna Kumar Singh, Hao Yu, Aron Sarmasi, Gautam Pradeep, and Yong Jae Lee. Hide-and-seek: A data aumentation technique for weakly-supervised localization and beyond. arXiv preprint arXiv:1811.02545(2018).
[4] Pengguang Chen, Shu Liu, Hengshuang Zhao and Jiaya Jia. GridMask Data Augmentation. arXiv preprint arXiv:2001.04086(2020).
[5] Hongyi Zhang, Moustapha Cisse, Yann N. Dauphin and David Lopez-Paz.mixup: Beyond empirical risk minimization. arXiv preprint arXiv:1710.09412(2017).
[6] Hiroshi Inoue. Data Augmentation by Pairing Samples for Images Classification. arXiv preprint arXiv:1801.02929(2018).
[7] David Berthelot, Nicholas Carlini, Ian Goodfellow, Nicolas Papernot, Avital Oliver and Colin Raffel. MixMatch: A Holistic Approach to Semi-Supervised Learning arXiv preprint arXiv:1905.02249(2019).
[8] Vikas Verma, Alex Lamb, Christopher Beckham, Amir Najafi, Ioannis Mitliagkas, David Lopez-Paz and Yoshua Bengio. Manifold Mixup: Better Representations by Interpolating Hidden States.arXiv preprint arXiv:1806.05236(2018).
[9] Sangdoo Yun, Dongyoon Han, Seong Joon Oh, Sanghyuk Chun, Junsuk Choe and Youngjoon Yoo. CutMix: Regularization Strategy to Train Strong Classifier with Localizable Features. arXiv preprint arXiv:1905.04899(2019).
[10] Ekin D. Cubuk, Barret Zoph, Dandelion Mané, Vijay Vasudevan and Quoc V. Le. AutoAugment: Learning Augmentation Policies from Data. arXiv preprint arXiv:1805.09501(2018).
[11] Barret Zoph, Ekin D. Cubuk, Golnaz Ghiasi, Tsung-Yi Lin, Jonathon Shlens and Quoc V. Le. Learning Data Augmentation Strategies for Object Detection. arXiv preprint arXiv:1906.11172(2019).
注意:目标检测系列历史文章
秘籍一:模型加速之轻量化网络
秘籍二:非极大抑制算法和回归损失优化之路
秘籍三:多尺度检测
-END-
扫描个人微信号,
拉你进AI算法修炼营学习交友群。
目标检测、图像分割、自动驾驶、机器人、面试经验
福利满满,名额已不多…
▲长按关注我们
觉得好看对你有帮助,就点个在看吧
这篇关于大杀器!攻克目标检测难点秘籍四,数据增强大法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!