NeurIPS 2020 丨 Google 开箱即用数据增强 RandAugment

技术讨论 邓布利多 ⋅ 于 1周前 ⋅ 77 阅读

本期分享Google发表在NeurIPS 2020的关于数据增强的一篇文章《RandAugment: Practical automated data augmentation with a reduced search space》。从标题可知,提出的自动数据增强方法相比以往减少了数据增强的搜索空间,具有工程实用性。

file

Contributions

总结主要贡献(靓点):
①数据增强的最佳强度取决于模型大小以及训练集大小。在较小的代理任务上单独优化增强策略对于学习和迁移数据增强策略可能不是最优的;
②引入了一种极大简化的搜索空间用于数据增强。该方法只包含两个可解释的超参;

③利用这个方法,对常见的数据集进行了验证,均有一定程度的提升。
论文地址:
https://arxiv.org/abs/1909.13719
代码地址:
https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/autoaugment.py

Abstract

大量的工作论证了使用数据增强(Data Augmentation)能够提升模型的鲁棒性和泛化能力。近期发表的使用自动增强策略进行训练的模型均能优于未使用该方法的baseline。在图像分类,目标检测等方向达到SOTA。但大规模使用自动数据增强其过程采用的是独立的搜索方式。这种独立的搜索方式增加了训练的复杂度和计算成本(obstacle①)。并且其无法根据模型和数据集的大小进行自动的调整(obstacle②)。自动数据增强的策略往往是先在较小的数据集 上训练较小的模型,然后在应用在大的模型上。
基于上述两个Obstacles,作者提出:在训练目标任务时,显著减少搜索空间而无需采用独立的额外代理任务;根据模型和数据集的大小定制化不同的超参数已进行不同程度(regularization strength)的数据增强。从Table1的结果易知,本文提出的RandAugment(RA),在 $10^{2}$ 的搜索空间下,能够达到和超越更大搜索空间 $\left(10^{32}, 10^{61}\right)$ 下进行数据增强的方法。
file

Introduction

数据增强毋庸置疑,在机器学习中如图像分类,目标检测,实例分割,语音识别等领域均对模型有不错的性能提升。但如何人为的去选择数据增强的方式,需要设计者在该领域有一定的先验知识(换句话说,不是随便用什么数据增强的方式都可以)。并且,这种这种方式也很难扩展到其他领域的应用(在A任务上使用的数据增强方式,也许在B任务上就行不通)。那么,自然而然的就诞生出Learning plicies,即通过学习的方式去选择合适的数据增强的方式。其具有潜在的可能性以解决传统数据增强方法的缺点。这种自动的数据增强方式不像网络结构(修改网络结构,增加其复杂度),不会增加inference时的耗时。
但自动学习的数据增强方式和神经网络结构搜索类似,具有非常高的复杂度和计算花销。研究者们后续也在朝着更高效,更简单的方向发展,但其结果大多依旧。
回顾原始的自动数据增强方式,先在一个单独的小数据集代理任务(可以理解成小/子数据集,子任务 )上进行,然后再迁移到更大数据的目标任务中去。这是基于一个很强的假设:小的代理任务的性能与在大更大的目标任务上的性能相似。直白的理解就是现在小数据上进行一些子任务的测试,然后类推到大数据集目标任务。这种迁移的假设就是两个任务,两种不同大小的数据集,其性能趋势是一致的。但作者经过试验证明,其核心假设不是最优的。数据增强的力度(可以理解为数据增强的方式的多样性以及随机增强的概率)与数据集合模型的大小强相关。这个试验的结论就指明了一个方向:能否删除掉单独的小代理任务,即不进行小数据集上的子任务搜索验证。基于上述结论,作者提出了一种实用的自动数据增强算法RandAugment。该方法无需在子任务上进行搜索验证。
但为了减少数据增强的参数搜索空间,作者设计了一种简单的格点搜索(simple grid search)方法以学习/获取一种数据增强的策略。通过实验证明,该方法优于目前所有的采用单独的子任务搜索方法进行自动学习的数据增强方法。

Method

先附赠代码:

import numpy as np transforms = ['Identity', 'AutoContrast', 'Equalize', 'Rotate', 'Solarize', 'Color', 'Posterize', 'Contrast','Brightness', 'Sharpness', 'ShearX', 'ShearY', 'TranslateX', 'TranslateY']
def randaugment(N, M):
'''
Generate a set of distortions.
Args:
N: Number of augmentation transformations to apply sequentially. M: Magnitude for all the transformations.
'''
sampled_ops = np.random.choice(transforms, N)
return [(op, M) for op in sampled_ops] if name == 'main':
print(randaugment(2,3))

在仍保持图像数据的多样性的同时,为减少参数空间,作者用一个无参话的操作替换了需要进行学习的策略,即均匀选取1/K概率的图像增强变换。
直白理解:直接枚举出常见的 K=14 种数据增强的方法,根据数据集和模型的大小,随机选择 $\mathrm{N}$ 种进行模型的训练。那么潜在的训练策略就包含 $K^{N}$ 种。每个增强的方式包含一个 distortion magnitudes 参数 $\mathrm{M}$ ( 即每个图像形变的程度 ) 。这种简单粗暴的 naive grid search 实验证明非常有效!
identity
autoContrast
equalize
rotate
solarize
color
posterize
contrast
brightness
sharpness
shear-x
shear-y
translate-x
translate-y

Result

作者分别在CIFAR-10, CIFAR-100,SVHN, ImageNet 以及COCO数据集上进行了分类和目标检测等实验验证。
A. 多种数据增强方式的对比
file
B. 模型和数据集大小与形变程度的关系
file
C. ImageNet数据集实验结果
file
D. 目标检测任务实验结果
file
E. 增加数据增强方式对性能的提升
file
F. 不同增强方式对性能的影响
file
G. 数据集大小对数据增强性能的影响
file
H. 不同数据增强强度方式对准确率的影响
file
I. 不同Magntitude对准确率的影响
file
作者的实验目标:
展示设计的方法相对于以前的数据增强方法的收益。
结论梳理汇总:
1、首先证明通过在小数据集上训练代理任务(子任务)模型,然后在迁移到目标任务上的策略不是最优的。网络模型和数据集越大,需要进行更大的数据扭曲增强。
2、学习型的数据增强方法可以学习更适合的代理任务(子任务)增强的强度,而不是更大的目标任务。
3、通过设置两个超参N(选择数据增强方式的类别个数)和M(每种数据增强方式进行图像扭曲变形的强度),与其他增强方法进行对比分析。通过实验对比发现,在不同的任务上RandAugment均达到SOTA。这些实验也表明了RandAugment对数据类别极不敏感。为进一步研究其数据敏感性,作者在CIFAR-10训练WideResNet-28-2,并在14种数据增强的方法中随机删除了flips, pad-and-crop,or cutout等。实验发现数据增强方式的增多,将有助于进一步提升模型的准确率。即使用两种数据增强方式,模型的准确率也提升了1%。为进一步验证,作者分别对每种数据增强方式进行单独的评估,发现旋转的提升是最大的,色调分离似乎有副作用。
4、实验中,选择每种数据增强的方式的概率是相等的。那就存在一个开放的问题,每种数据增强方式被选择的概率是否对模型性能的提升有影响?作者通过设计的实验发现其有略微的影响。但这种方式的成本较高,也给大家留下一个开放的研究问题。

结语

Google大佬们从数据增强存在的问题开始,挖掘出导致该问题的原因,提出行之有效的方法,进行完备的实验设计和验证,并在最后引出新的,值得进一步挖掘的研究方向。从文章结构的角度来看,非常值得大家学习。大佬不愧为大佬!从工程实践的角度分析,只需要简单的从14种数据增强方式中随机选择N种数据增强的方法,进行M类不同强度的图像扭曲形变,就能在平衡计算成本和性能提升上能达到SOTA。真乃大道至简!膜拜了!

邓布利多

成为第一个点赞的人吧 :bowtie:
回复数量: 0
暂无回复~
您需要登陆以后才能留下评论!