干货 | 自动数据增强:概述和SOTA

目标检测与深度学习

共 3545字,需浏览 8分钟

 ·

2021-06-10 19:25

点击左上方蓝字关注我们



全网搜集目标检测相关,人工筛选最优价值内容

编者荐语
想要一个最先进的计算机视觉模型?不容置首先你需要一个粗糙的数据扩充管道。但是,拼凑数据增强管道的过程通常是手动和迭代的,这是一种痛苦。文章针对此问题,对已有的自动化粗糙增强管道(迄今为止尚未得到很好的实施)的搜索过程文献进行了整理。

作者 | deephub

链接 | https://zhuanlan.zhihu.com/p/377196888


自动化搜索概述

到目前为止,大致有两种方法。“AI 模型方法”试图搜索大量的增强策略空间,以使用强化学习或 GAN 找到最佳策略。它取得了显著的成果,Adversarial AutoAugment 实现了当前最先进的性能。我认为这种方法是自动化数据增强的未来;然而,它可能(还)不适合个人开发人员。在其中,我们必须训练一个完整的 GAN——一个需要棘手的实现和重要计算资源的过程。如果我们唯一的 GPU 能力来自 Kaggle 内核和 Colab 笔记本,那就不太好(尽管 Faster AutoAugment 有助于降低计算成本,我相信这种方法最多在几年内会变得更容易使用)。

我想要一个自动搜索过程,我可以放下并停止思考。幸运的是,这就是我们使用其他数据增强管道搜索策略“基于随机性的方法”所得到的结果,它减少了搜索空间(通过使用更少的参数)和随机采样策略。这种方法牺牲了速度的灵活性,体现在 RandAugment 算法中,产生了与 AI 模型方法竞争的性能......就像几年前一样。后一种方法进一步发展,现在优于 RandAugment。然而,RandAugment 仍然要快得多,如果你只需要一个“足够好”的数据增强管道——一个易于使用并且仍然比手动和迭代地拼凑在一起更好的管道——它是一个可行的选择。

还有另一种尚未广为人知的算法,它介于基于随机性和 AI 模型方法的两极之间。它确实使用深度学习模型来选择最佳转换;然而,该模型并不像一个单独的 GAN,而是被训练的模型。该算法比 RandAugment 慢得多,但仍比基于 AI 的最快方法 Faster AutoAugment 快几倍,同时在性能上匹配 Adversarial AutoAugment,这是性能最好的基于 AI 的方法。

我很想给你这个算法的名字,但它似乎缺乏一个,或者至少是一个好的。论文“On the Generalization Effects of Linear Transformations in Data Augmentation”(2020 年)将该算法称为“基于不确定性的变换采样方案”。

代表基于模型不确定性的增强的“MuAugment”怎么样?让我们一起去吧。

深入MuAugment

在做MuAugment之前,我们必须了解RandAugment。幸运的是,RandAugment非常简单。

我们有一个K变换列表(如HorizontalFlip, change亮度)。选择' K '变换的' N ' (' N ' < ' K ')一致随机而不替换,每个变换的大小为' M '。将这些“N”数组转换为合成,并将合成应用到传入图像。这是RandAugment。下面是一个代码示例:

 import numpy as np
 import albumentations as A
 
 # K=3 here
 transforms = [A.HorizontalFlip(p=1), 
              A.Rotate(M*9, p=1),  
              A.RandomBrightness(M/20, p=1)]
 def rand_augment(N, M):
    composition = np.random.choice(transforms, N, replacement=False)   
    return A.Compose(composition)

我说MuAugment是RandAugment和其他ai模型方法的混合。我没有撒谎。

我们在每个图像' C '上应用RandAugment 不同次数。使用正在训练的模型,从每个图像的' C '增强版本中选择最有用的' S ' (' S ' < ' C ')版本。只输入每个图像的“S”增强版本到模型中进行训练。我们如何确定哪些增广是最有用的?我们通过模型向前传递每个“C”增广,损失越高,增广越有用。这是MuAugment。

为什么高损耗意味着有用的增益?好的,一个小的损失意味着模型已经学会了如何很好地预测这类图像,所以如果对它进行进一步训练,模型将只会拟合偶然的情况,可能是虚假的模式-例如过拟合。反之,如果损失较大,则说明模型还没有掌握图像类型和目标之间的一般映射关系,因此我们需要对这类图像进行更多的训练。

MuAugment是一种挑选最困难的增强体并进行训练的方法。RandAugment不能很好地工作,因为它产生简单和困难的增强,并将两者都输入模型。因此,它更容易在容易的增广上过拟合,而在难的增广上欠拟合。当像MuAugment这样的算法保证对难的增广进行额外拟合而跳过简单的增广时,该模型学习更一般化的模式。

你可能已经想到了MuAugment的一个问题。有时,应用在图像上的变换是如此严重,以至于图像变得非常难以理解,完全失去了它的目标信息。所以我们最终给模型注入纯噪声。然而,当输入到模型中时,纯噪声会产生很高的损失,所以使用MuAugment可以选择那些创建时无法识别的图像。对于这个问题没有简单的解决方案,除了选择适当的超参数,以减少难以理解的图像的生成,所以保持合成中变换的数量“N”小于4,每个变换的大小“M”小于6是一个好的开始。

如果你有时间,试试网格搜索。为了减少搜索空间,只需在[2,4]范围内选取一个值为' N '即可。作为一种启发式,更大的模型和数据集需要更多的正则化,相应地,更大的“M”量级会表现得更好。这是因为更大的模型更容易过拟合,更长的数据集有更高的信噪比,这应该减少到一个最佳点。所以,在网格搜索中采样M的值时要记住这一点。

总结

我们对数据增强策略搜索算法的区系进行了调查。有些游戏在我们的任务之上叠加了另一个AI模型。其他的使用更少的参数和一个随机样本的集合变换。前者比后者表现得更准确,但速度要慢得多。进入MuAugment: ai模型和基于随机性的方法的混合。它从一个变换列表中随机采样合成,并且只使用最有用的(即损耗最大的)来训练数据。为了得到最好的结果,将变换大小的不同值放入网格搜索中。

如果您希望在您的项目中使用MuAugment或RandAugment,请考虑使用MuarAugment。它是一个包,提供了一个简单的API和为速度而优化的实现。

链接:https://github.com/adam-mehdi/MuarAugment

引用

  • Cubuk et al. 2019, “RandAugment: Practical automated data augmentation with a reduced search space”.

  • Zhang et al. 2020, “Automating the Art of Data Augmentation”.

  • Wu et al. 2020, “On the Generalization Effects of Linear Transformations in Data Augmentation”.

  • Zhang et al. 2019, “Adversarial AutoAugment”.

  • Hataya et al. 2019, “Faster AutoAugment: Learning Augmentation Strategies using Backpropagation”.


END



整理不易,点赞三连↓

浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报