弄浪的鱼

数据增强

在实际工作中有很大一个难题就是收集到足够的数据,而数据就像是燃料,没有足够的数据训练的模型效果不会太好。所以要保证完美完成任务,有两件事必须要做好:

  1. 寻找更多的数据
  2. 充分利用已有的数据进行数据增强

本文就来聊聊数据增强的话题。

覆盖主流数据增强算法

https://github.com/aleju/imgaug

数据增强注意事项:

  1. 在线使用,不要离线生产样本
  2. 不要过度使用,过多的数据增强可能增加训练难度和事件
  3. 有些任务某些增强不能做,比如姿态估计中随机反转,旋转

为什么要了解数据增强

Q: 多少数据才能满足项目要求?

  1. 任务类型有关,越精细任务要求越多(分类 > 检测 > 分割)
  2. 任务难度 ImageNet(每个类约500个),Place365(每个类约5000个)
  3. 精度要求有关(学术任务,工业级产品)

Q: 数据增强和泛化能力的关系?

增强模型泛化能力的方法:

  • 显示正则化(模型集成,参数正则化等)
  • 隐式正则化(数据增强,随机梯度下降等)

Q: 什么是数据增强?

数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。

eg. 分辨率大小为 256x256 的图像,随机裁剪成 224x224 的代销,一张图就可以产生 32x32 张不同的图,数据量将近扩充 1000 倍。

Q: 通过裁剪得到的很多图像相似度很高,那么这样的数据增强有效果么?

操作虽然简单,但是有效果,如果辅助其他数据增强的方法,将获得更好的多样性,这就是数据增强的本质。

常见数据增强的方法

单样本几何变换

翻转,旋转,裁剪,缩放

没有改变图像本身的内容,选择了图像的一部分或者像素的空间重分布

单样本像素内容变换

噪声,模糊,颜色扰动

内容改动大,多样性强

多样本插值 SMOT

Synthetic Minority Over-sampling Technique 方法,近邻样本(Xn,Yn)插值

Sample Pairing

随机抽取两张图片分别经过基础数据增强操作(如随机翻转等)处理后,直接叠加合成一个新的样本,标签为原样本标签中的一种

多样本插值 Mixup

ICLR2018, Facebook 的研究 Mixup,图像和标签都进行线性插值

自动选择数据增强方法

AutoAugmentation

学习已有数据增强操作的组合,不同的任务,需要不同的数据增强操作。

AutoAugmentation 原理

  • 从 16 个常用数据增强操作中选择 5 个操作,随机产生使用该操作的概率和相应的幅度,将其称为一个 sub-policy,一共产生 5 个 sub-polices
  • 对训练过程中每一个 batch 的图片,随机采用 5 个 sub-polices 操作中的一种
  • 通过模型在验证集上的泛化能力来反馈,使用的优化方法是增强学习方法
  • 经过 80~100 个 epoch 后网络开始学习到有效的 sub-policies
  • 之后串接这 5 个 sub-policies,然后再进行最后的训练

16 个常用的数据增强操作

从零制作新的样本

GAN

使用生成对抗网络,生成新的样本。

开源框架中的数据增强

  • caffe 中数据增强:
    • caffe.proto 中增加参数
    • Datatransform 中 .cpp 函数实现
    • Datatransform 中 .cpp 函数调用
    • train.prototxt 中网络配置
    • caffe.proto 中增加参数
  • TensorFlow 数据增强 —— tf.image API
  • pytorch 数据增强 —— torchvision.transforms API
  • mxnet 数据增强 —— mxnet.image API

参考文献

[1] Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2002, 16(1):321-357.

[2] Inoue H. Data Augmentation by Pairing Samples for Images Classification[J]. 2018.

[3] Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond Empirical Risk Minimization[J]. 2017.

[4] Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative Adversarial Networks[J]. Advances in Neural Information Processing Systems, 2014, 3:2672-2680.

[5] Cubuk E D, Zoph B, Mane D, et al. AutoAugment: Learning Augmentation Policies from Data.[J]. arXiv: Computer Vision and Pattern Recognition, 2018.