概念
数据增强(Data Augmentation)是一种通过利用算法来扩展训练数据的技术。人工智能三要素之一为数据,但获取大量数据成本高,但数据又是提高模型精度和泛化效果的重要因素。当数据量不足时,模型很容易过拟合,精度也无法继续提升,因此数据增强技术应运而生:利用算法,自动增强训练数据。
数据增强有一系列简单方法可供选择:
几何变换:翻转、旋转、缩放、裁剪、平移等
颜色变换:对比度调节、颜色反转、直方图均衡、色彩平衡、亮度等
Cutout:在图片中挖掉一个矩形块补0
Mixup:把两张图片线性叠加,label转换为one-hot形式进行相同的线性叠加
Cutmix:Cutout和Mixup的综合版本,在图片中挖掉的矩形块补另一张图片,label也叠加
AutoAugment:采用搜索的方式,搜出最适合的变换组合,复杂度高5000 GPU hours
RandAugment:减小搜索空间,所有变换采用相同的幅度
Refinement:在增强训练后再用原始数据训练一段时间
基于GAN的数据增强:利用原始数据分布生成新的数据
神经风格转换:图片风格转换
添加噪声:高斯噪声、椒盐噪声等
看起来效果一般的增强方式:
Sample pairing:两张图片直接平均,label取随意一张图片
FMix:采用Fourier变换选取挖掉和补充的区域
数据增强最简单的方式是各种几何变换和颜色变换,在imgaug库(https://github.com/aleju/imgaug)中有非常多的函数。但一个关键问题是:针对特定的数据集、网络,哪一种增强方式是最适合的?
为了回答这个问题,Google使用和AutoML类似的RL搜索方法进行优化,CIFAR-10上就花费了5000 GPU Hours,获得了不错的结果,但复杂度太高,没有实用化的可能。后来出现了RandAugment,发现牺牲一定的自由度,缩小搜索空间,效果也还可以,也可以获得一定收益。但RandAugment远远不是最优解,仍然需要一定量的搜索,优化仍然在继续。
数据增强是增大数据规模,减轻模型过拟合的有效方法,最近的研究也特别活跃。但目前的研究显示,最优的增强方式和数据集、网络都有关系,如何低成本地找到最优的增强方式,是一个非常难的问题。我也会持续跟踪这个领域的最新进展,欢迎讨论。
A survey on Image Data Augmentation for Deep Learning https://link.springer.com/article/10.1186/s40537-019-0197-0
https://github.com/guanxs/data-augmentation