前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动数据增强:概述和SOTA

自动数据增强:概述和SOTA

作者头像
deephub
发布2021-07-01 10:59:49
5020
发布2021-07-01 10:59:49
举报
文章被收录于专栏:DeepHub IMBA

想要一个最先进的计算机视觉模型?首先你需要一个粗糙的数据扩充管道。在人工智能开发的这一点上,这是不容置疑的。

但是,拼凑数据增强管道的过程通常是手动和迭代的;这是一种痛苦。但是,请注意我说的是“通常”。那是因为有大量关于自动化该粗糙增强管道的搜索过程的文献(迄今为止尚未得到很好的实施)。

自动化搜索概述

到目前为止,大致有两种方法。“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。下面是一个代码示例:

代码语言:javascript
复制
 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”.

作者:

原文地址:https://adam-mehdi23.medium.com/automatic-data-augmentation-an-overview-and-the-sota-109ffbf43a20

deephub翻译组

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动化搜索概述
  • 深入MuAugment
  • 总结
  • 引用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档