基于深度学习的数据增广技术一览

加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~

Tips
◎作者系极市原创作者计划特约作者Happy
欢迎大家联系极市小编(微信ID:fengcall19)加入极市原创作者行列
周末在家无聊,偶然兴心想对CV领域常用的数据增广方法做个简单的调研与总结,重点是AI时代新兴的几种反响还不错的方法、各种第三方与官方实现代码等。那么今天由Happy来跟大家聊一聊深度学习中那些常用的数据增广方法。

在图像分类任务中,数据增广是一种常用的正则化方法,同时已成为提升模型性能所必不可少的步骤。从引领AI热潮的AlexNet到最近EfficientNet都可以看到数据增广的身影。数据增广的方法也由传统的裁剪、旋转、镜像等方式逐渐过渡到当前火热的AutoAug、RandAug等基于NAS搜索的数据增广方法。

以pytorch官方ImageNet训练中代码为例,如下所示。它基本上包含了CV中数据增广的几个比较关键的操作与节点:数据解析、数据尺寸变换、镜像变换、颜色空间变换、ToTensor、归一化等等。

train_dataset = datasets.ImageFolder( traindir, transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ColorJitter(brightness=0.4, contrast=0.4, saturation=0.4), transforms.ToTensor(), normalize, transforms.RandomErasing() ]))

为更好的对数据增广方法进行介绍说明,我们可以将数据增广方法按照其作用位置、作用方式进行简单的分类如下:

  • 标准数据增广:泛指深度学习前期或更早期的一些常用数据增广方法。
    • 数据IO;包含ToTensor、ToPILImage、PILToTensor等
    • 图像镜像类:包含RandomHorizontalFlip、RandomVerticalFlip、RandomRotation、Transpose等
    • 颜色空间变换:ColoeJitter、Grayscale、
    • 图像裁剪缩放类:Resize、CenterCrop、RandomResizedCrop、TenCrop、FiveCrop等
    • 图像线性变换类:LinearTransform、RandomRotation、RandomPerspective
  • 图像变换类:泛指基于NAS搜索到的一组变换组合,包含AutoAugment、RandAugment、Fast AutoAugment、Faster AutoAugment、Greedy Augment等;
  • 图像裁剪类:泛指深度学习时代提出的一些类似dropout的数据增广方法,包含CutOut、RandErasing、HideAndSeek、GridMask等;
  • 图像混叠类:泛指在batch层面进行的操作,包含Mixup、Cutmix、Fmix等

标准数据增广

本文介绍主要以ImageNet分类为例进行介绍,并假设最终输入到网络的数据维度为。ImageNet的训练阶段,数据增广方式可以分为下面几个步骤:

  • 图像解码:常用解码方式为opencv和PIL,需要注意的是两者皆吗后的数据排列方式有区别:一个是BGR,一个是RGB。虽然推理阶段不同解码方式不会很大程度影响模型的性能,但终归还是会造成影响,大概会有零点几个点的差别吧;
  • RandCrop/RandResize:对前述解码图像进行裁剪/Resize,以确保输入到后续阶段的图像大小统一;
  • RandFlip:在分类任务中,常用的镜像为水平镜像;
  • Normalize:数据归一化,经该步骤处理的数据类型由uint8变换为float;
  • Transpose:数据重拍,将输入数据维度由 转为;
  • Batch:它的作用是将前述处理数据进行最后的打包,一般由深度学习框架提供。

在前述标准数据增广基础上,研究者又提出了诸多改进的增广策略,这些策略主要是插入到上述不同操作后,基于所处阶段,我们可以简单的将其划分为例三类:

  • 对RandCrop后的图像进行的操作:比如AutoAugment、RandAugment;
  • 对Transpose后的图像进行的操作:比如CutOut、RandErasing、HideAndSeek、GridMask;
  • 对Batch后的数据进行的操作:比如Mixup、Cutmix

为更好的说明与对比上述方法,以下图为例,对变换后的效果进行可视化对比(注:图片来源网络,如侵权可联系删除)。

图像变换类

在这里,图像变换特指针对RandCrop后的图像进行的一些变换,主要包含:AutoAugment、Fast AutoAugment、RandAugment。当然还有其他方法,比如Faster AutoAugmeng、PBA等。但限于篇幅,这里仅对最知名的两种(AutoAugment与RandAugment)进行一些简单介绍与效果可视化。

AutoAugment

paper:https://arxiv.org/abs/1805.09501v1
code:https://github.com/DeepVoltaire/AutoAugment

在AutoAugment之前,无论是图像分类还是目标检测,抑或图像复原、语义分割所采用的数据增广方式均为人工设计,主要以传统方式为主。而AutoAugment则首个采用搜索技术进行数据增广的方法。

AutoAugment 是在一系列图像增广子策略的搜索空间中通过搜索算法找到的适合特定数据集的图像增广方案。针对 ImageNet 数据集,最终搜索出来的数据增广方案包含 25 个子策略组合,每个子策略中都包含两种变换:针对每幅图像都随机的挑选一个子策略组合,然后以一定的概率来决定是否执行子策略中的每种变换。AutoAugment处理后的效果如下所示。

RandAugment

paper: https://arxiv.org/pdf/1909.13719.pdf
code: https://github.com/heartInsert/randaugment

由于AutoAugment 的搜索方法比较暴力,直接在数据集上搜索针对该数据集的最优策略,这就导致了它的计算量很大。RandAugment 一文作者认为AutoAugment有以下两个缺陷:

  • 在大数据集上AutoAugment的性能增益有限;
  • 由于AutoAugment的数据强相关,其迁移能力比较差

RandAugment 中,作者提出了一种随机增广的方式,不再像 AutoAugment 中那样使用特定的概率确定是否使用某种子策略,而是所有的子策略都会以同样的概率被选择到,论文中的实验也表明这种数据增广方式即使在大模型的训练中也具有很好的效果。RandAugment处理后的效果如下所示。

注:除了上述所提到的两种基于搜索的到的数据增广方法外,还有其他基于NAS的数据增广方式,比如:

  • Fast AutoAugment:https://arxiv.org/abs/1905.00397
  • Faster AutoAugment:https://arxiv.org/abs/1911.06987
  • PBA:https://arxiv.org/pdf/1905.05393.pdf
  • Greedy AutoAugment:https://arxiv.org/abs/1908.00704

图像裁剪类

图像裁剪类主要是对Transpose 后的 224 的图像进行一些裁剪,并将裁剪区域的像素值置为特定的常数(默认为0),主要包括:

  • Cutout
  • RandErasing
  • HideAndSeek
  • GridMask

Cutout

Paper: https://arxiv.org/abs/1708.04552
Code: https://github.com/uoguelph-mlrg/Cutout

从某种程度上来讲,Cutout 可以理解为 Dropout 的一种扩展操作,不同的是 Dropout 是对图像经过网络后生成的特征进行遮挡,而 Cutout 是直接对输入的图像进行遮挡。经Cutout处理后的效果如下所示。

RandErasing

Paper: https://arxiv.org/pdf/1708.04896.pdf
Code: https://github.com/zhunzhong07/Random-Erasing

RandomErasingCutout 方法类似,同样是为了解决训练出的模型在有遮挡数据上泛化能力较差的问题,作者在论文中也指出,随机裁剪的方式与随机水平翻转具有一定的互补性。与Cutout不同的是,在RandomErasing中,图片以一定的概率接受该种预处理方法,生成掩码的尺寸大小与长宽比也是根据预设的超参数随机生成。注:笔者印象中,RandErasing还会添加噪声,一定程度上提升了模型的鲁棒性。

HideAndSeek

Paper: https://arxiv.org/pdf/1811.02545.pdf
Code: https://github.com/kkanshul/Hide-and-Seek

HideAndSeek论文将图像分为若干块区域(patch),对于每块区域,都以一定的概率生成掩码。经HideAndSeek处理后的效果如下所示。

Gridmask

Paper: https://arxiv.org/abs/2001.04086
Code: https://github.com/akuxcw/GridMask

该文是香港中文贾佳亚老师团队在数据增广方面的成果,作者认为之前Cutout方式可能(1)过渡删除主体目标信息,导致信息过多丢失;(2)较少删除主体目标信息,有失增广意义。基于上述考虑,作者提出了GridMask方法。GridMask是通过生成一个与原图分辨率相同的掩码,并将掩码进行随机翻转,与原图相乘,从而得到增广后的图像,通过超参数控制生成的掩码网格的大小。注:GridMask中的掩码有规律的分布,并且不会过度删除主体目标。经GridMask处理后的效果如下。

图像混叠类

图像混叠主要对 Batch 后的数据进行混合,需要注意的是:这类数据增广方式不仅对输入进行调整,同时还进行lable的调整以及损失函数的调整。这类方法主要包括以下两种:

  • Mixup
  • Cutmix

前文所述的图像变换与图像裁剪都是针对单幅图像进行的操作,而图像混叠是对两幅图像进行融合,生成一幅图像。两种方法的主要区别为混叠的方式不太一样。

Mixup

Paper: https://arxiv.org/pdf/1710.09412.pdf
Code: https://github.com/facebookresearch/mixup-cifar10

Mixup是最早提出的一种图像混叠增广方案,它是对两幅不同的图像通过blending方式进行混叠,同时label也需要进行混叠。它有两种实现方式:(1) 同一batch内后混叠;(2)不同batch混叠。下图为同一batch内混叠效果图。

Cutmix

Paper: https://arxiv.org/pdf/1905.04899v2.pdf
Code: https://github.com/clovaai/CutMix-PyTorch

Mixup 直接对两幅图进行相加不一样,Cutmix 是从一幅图中随机裁剪出一个 ROI,然后覆盖当前图像中对应的区域.

注:除了所提到的Mixup与Cutmix外,还有不少其他相关的方法,比如Fmix,见链接:https://github.com/ecs-vlc/FMix,

Conclusion

该文以CV领域的数据增广为出发点,对几种比较经典的数据增广方法进行了介绍。除了上述介绍的数据增广方法外,还有其他数据增强方法,比如下面几种:

  • Cutblur:一种用于图像超分的数据增广方法,https://arxiv.org/abs/2004.00448
  • Attribute Mix:用于细粒度识别的数据增广方法,https://arxiv.org/abs/2004.02684
  • DADA:基于Low Data Regime classification的数据增广方法,https://arxiv.org/abs/1809.00981
  • Supermix:用于知识蒸馏的数据增广方法,https://arxiv.org/abs/2003.05034
  • BayerAug:用于raw数据增广的方法,https://arxiv.org/abs/1904.12945

除了上述所提到的数据增广方法外,这里还给各位CVers分享几个比较不错的数据增广库,相关连接如下:

  1. albumentations:该库包含大量的传统图像数据增广方法,链接:https://github.com/albumentations-team/albumentations
  2. UDA:无监督数据增广,链接:https://github.com/google-research/uda
  3. torchsample:基于pytorch的高层封装,含数据增广模型训练等,链接:https://github.com/ncullen93/torchsample
  4. image_augmentor: 又一个传统图像数据增广方法,链接:https://github.com/codebox/image_augmentor
  5. imgaug:一个适合分类、检测的数据增广库。https://github.com/aleju/imgaug1.vidaug:视频数据增广方法,链接:https://github.com/okankop/vidaug
  6. pytorch-官方数据增广:https://github.com/pytorch/vision/tree/master/torchvision/transforms
  7. 张航博士开源的FastAutoAugment:https://github.com/zhanghang1989/Fast-AutoAug-Torch
  8. FastAutoAugment官方实现:https://github.com/kakaobrain/fast-autoaugment
  9. AutoAugment的官方实现:https://github.com/tensorflow/models/tree/master/research/autoaugment
  10. Paddle官方数据增广:https://github.com/PaddlePaddle/PaddleClas/tree/master/ppcls/data/imaug

以上是本人今天关于数据增广的一点总结,并由此查找到一些数据增广相关方法与代码库,该搜索肯定是不完善的,如有其他优秀的数据增广方法,可以留言进行补充完善。

码字不易,给个在看可否?

Reference paper

1.Cubuk E D, Zoph B, Mane D, et al. Autoaugment: Learning augmentation strategies from data[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2019: 113-123.
2.Cubuk E D, Zoph B, Shlens J, et al. Randaugment: Practical automated data augmentation with a reduced search space[J]. arXiv preprint arXiv:1909.13719, 2019.
3.DeVries T, Taylor G W. Improved regularization of convolutional neural networks with cutout[J]. arXiv preprint arXiv:1708.04552, 2017.
4.Zhong Z, Zheng L, Kang G, et al. Random erasing data augmentation[J]. arXiv preprint arXiv:1708.04896, 2017.
5.Singh K K, Lee Y J. Hide-and-seek: Forcing a network to be meticulous for weakly-supervised object and action localization[C]//2017 IEEE international conference on computer vision (ICCV). IEEE, 2017: 3544-3553.
6.Chen P. GridMask Data Augmentation[J]. arXiv preprint arXiv:2001.04086, 2020.
7.Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond empirical risk minimization[J]. arXiv preprint arXiv:1710.09412, 2017.
8.Yun S, Han D, Oh S J, et al. Cutmix: Regularization strategy to train strong classifiers with localizable features[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 6023-6032

(0)

相关推荐

  • ECCV 2020 论文大盘点-图像增强与图像恢复篇

    编辑:CV君 本文盘点 ECCV 2020 中底层图像处理方向相关的论文,包含:图像增强.图像恢复.去摩尔纹.去噪和质量评价论文,总计 29 篇,去摩尔纹 2 篇,去噪 10 篇,图像增强 7 篇,图 ...

  • 2020年,那些「引爆」了机器学习社区的热门论文、库和基准

    仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 2020 年出现了哪些引爆机器学习社区的论文和库呢?哪些模型和方法登顶各领域基准排行榜呢?这篇文章给你答案. 不平凡的 2020 年终 ...

  • 【干货】2020史上最全自动驾驶资源大合集!

    2020-06-292020-06-29 17:00:34 [导读]本文为大家整理了自动驾驶方面的一些资源,主要包括视频课程学习.书籍资料.顶会论文.开源项目.常用数据集等等!下图是自动驾驶的技术栈展 ...

  • CVPR 2021 论文大盘点-去阴影、去反光、去高光、去伪影篇

    OpenCV中文网 OpenCV技术布道,CV实用教程,业界前沿资讯 36篇原创内容 公众号 本篇文章继续总结CVPR 2021 底层图像处理相关论文,方向包含去阴影.去反光.去高光.去伪影等.共计 ...

  • 工业视觉中的目标检测——兼谈天池大赛优胜方案

    目标检测是计算机视觉领域研究最火热的方向,这从计算机视觉顶会CVPR相关论文数量就能看得出来. 目标检测应用范围广泛,上至卫星遥感,下至自动驾驶,大到鲸鱼保护,小到生物细胞分析,都有其用武之地. 我们 ...

  • CVPR 2021 论文大盘点-文本图像篇

    OpenCV中文网 OpenCV技术布道,CV实用教程,业界前沿资讯 36篇原创内容 公众号 本文收集文本检测与识别相关论文,包含任意形状文本检测.场景文本识别.手写文本识别.文本分割.文本图像检索. ...

  • 【AutoML】如何选择最合适的数据增强操作

    大家好,欢迎来到专栏<AutoML>.在这个专栏中,我们会讲述AutoML技术在深度学习中的应用.这一期讲述在数据增强中的应用,这也是AutoML技术最早期的应用之一. 作者&编辑 ...

  • CVPR 2021 论文大盘点-超分辨率篇

    本文总结超分辨率相关论文,包括图像.视频.盲超分辨率.无参考型图像超分辨率以及基于参考的超分辨率等.共计 32 篇. 其中大量的论文在研究超分辨率算法的加速和训练.真实世界超分辨率问题,说明学界算法在 ...

  • 信息可视化领域八大前沿趋势(年度观察2020)

    .  信息可视化领域八大前沿趋势 www.thepaper.cn 2021-02-13 16:33 原创 一头倭瓜精 一头倭瓜精 收录于话题#年终总结1#学术前沿1#案例分享1 . 信息可视化(Inf ...

  • 【隐创119期】基于深度学习的自动目标识别技术研究(一)

    编者按: 深度学习算法正重新定义目标检测和分类技术.算法训练需要大量数据集,而数据集搜集通常是复杂和耗时的.在国防和安全领域,如果数据具有敏感性,例如军用舰船红外图像,训练可能难以实现.算法开发和训练 ...

  • 【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)

    上一篇提到文字数据集的合成,现在我们手头上已经得到了3755个汉字(一级字库)的印刷体图像数据集,我们可以利用它们进行接下来的3755个汉字的识别系统的搭建.用深度学习做文字识别,用的网络当然是CNN ...

  • 【基于深度学习的脑电图识别】数据集篇:脑电信号自动判读的大数据

    更多技术干货第一时间送达 本文是由CSDN用户[Memory逆光]授权分享.主要介绍了<THE TUH EEG CORPUS: A Big Data Resource for Automated ...

  • 基于深度学习的脑电图识别 综述篇(二)数据采样及处理

    更多技术干货第一时间送达 作者|Memory逆光 本文由作者授权分享 导读 脑电图(EEG)是一个复杂的信号,一个医生可能需要几年的训练并利用先进的信号处理和特征提取方法,才能正确解释其含义.而如今机 ...

  • 最新!基于深度学习的盲图像超分技术一览

    作者丨happy 编辑丨极市平台 极市导读 本文系统综述了盲图像超分的近期进展,对现有方案按照退化建模.数据等进行了分类划分以帮助研究人员归纳判别现有方案. >>加入极市CV技术交流群,走 ...

  • 基于深度学习的图像匹配技术一览

    重磅干货,第一时间送达 作者丨梦寐mayshine@知乎 来源丨https://zhuanlan.zhihu.com/p/108858079 转载自丨极市平台 极市导读 本文对图像匹配的各类方法进行了 ...

  • 深度学习中的知识蒸馏技术(下)

    本文概览: 写在前面: 这是一篇介绍知识蒸馏在推荐系统中应用的文章,关于知识蒸馏理论基础的详细介绍,请看上篇文章: 1. 背景介绍 1.1 简述推荐系统架构 如果从传统角度来看实际的工业推荐系统,粗略 ...

  • 深度学习中的知识蒸馏技术

    本文概览: 1. 知识蒸馏介绍 1.1 什么是知识蒸馏? 在化学中,蒸馏是一种有效的分离不同沸点组分的方法,大致步骤是先升温使低沸点的组分汽化,然后降温冷凝,达到分离出目标物质的目的.化学蒸馏条件:( ...

  • 基于深度学习的特征提取和匹配方法介绍

    转载于 :黄浴博士知乎 https://zhuanlan.zhihu.com/p/78053406 计算机视觉需要图像预处理,比如特征提取,包括特征点,边缘和轮廓之类.以前做跟踪和3-D重建,首先就得 ...