干货 | 自动数据增强:概述和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
整理不易,点赞三连↓