[译] 在深度学习训练过程中如何设置数据增强?
- 原文地址:How to Configure Image Data Augmentation When Training Deep Learning Neural Networks
- 原文作者:Jason Brownlee
- 译文出自:翻译计划
- 本文永久链接:github.com/xitu/gold-m…
- 译者:ccJia
- 校对者:lsvih, Minghao23
图像数据增强是人工增加训练集的一种方式,主要是通过修改数据集中的图片达成。
更多的训练数据带来的是更有效的深度学习模型,同时,数据增强技术会产生更多的图片变体,这些变体会提高模型对新图片的泛化能力。
在 Keras 框架中,ImageDataGenerator 类提供了数据增强的相关功能。
在本教程中,你将学会如何在训练模型时使用图像数据增强技术。
在完成本教程后,你将明白下面几点:
- 图像数据增强是为了扩展训练数据集从而提高模型的精度和泛化能力。
- 在 Keras 框架中,你可以通过 ImageDataGenerator 类使用图像数据增强方法。
- 如何使用平移、翻转、亮度以及缩放的数据增强方法。
让我们开始吧。
教程总览
本教程被分为以下八个部分,他们分别是:
- 图像数据增强
- 样本图片
- 使用 ImageDataGenerator 进行数据增强
- 水平和垂直方向的平移增强
- 水平和垂直方向的翻转增强
- 随机旋转增强
- 随机亮度增强
- 随机缩放增强
数据增强
深度学习网络的表现总是和数据量成正比的。
数据增强是一种人工的在原有数据基础上增加新训练数据的方法,是利用特定领域的技术将训练集的数据转变成一个新的数据达成的。
图像数据增强大概是最众所周知的一种数据增强方法,主要是涉及创建一个和原始图片属于同一类别的变形后的图片。
从图像处理领域我们可以获得很多的变形方法,比如:平移、翻转、缩放等等。
这么做的主要意图是用合理的新数据去扩展训练数据。换句话说,我们可以让模型看到更多样性的训练数据。举个例子,如果我们对一只猫进行水平的翻转,这个是有意义的,因为摄像头的拍摄角度可能是左边也可能是右边。但是做垂直翻转就没什么意义并且不太适合,因为模型不太会接收到一个头上脚下的猫。
所以,我们应该明白,我们一定要根据训练数据和问题领域的具体场景来慎重的选择应用于训练集的数据增强方法。此外,有一种比较有效的方法,就是在小的原型数据集上做一些独立的实验来度量增强后的模型是否在性能上有所提升。
现代的深度学习方法,像卷积神经网络(CNN),都可以学习到图片中的位置无关性特征。数据增强可以帮助模型去学习这种性质并且可以使得模型对一些变化也不敏感,比如左到右和上到下的顺序、照片的光照变化等等。
这些图片数据的增强一般是应用于训练集而不是验证集和测试集。这些数据增强方法不同于那些需要在各个与模型交互的数据集上都保持一致的预处理方法,比如调整图片大小与缩放像素值等。
想要计算机视觉方向的结果?
现在就参加我的7天电子邮件速成课(包含示例代码)。
点击注册还有可以获得课程的免费 PDF 版本。
下载你的免费迷你课程
样本图片
我们需要一个样本图片来展示标准的数据增强技术。
本教程中,我们会用到一个已经获得使用许可,由 AndYaDontStop 拍摄,名为 Feathered Friend的鸟类照片。
下载这张照片,并保存在你的工作目录命名为 ‘bird.jpg‘。
![d7e9fb64e4ad56406c02f0f9fae8d5b8.png](https://i-blog.csdnimg.cn/blog_migrate/083b810c55e24f14ac0e4dc79a50acc8.jpeg)
Feathered Friend,作者 AndYaDontStop。
保留部分权力.
- 图片下载链接 (bird.jpg)
使用 ImageDataGenerator 进行图像数据增强
Keras 框架可以在训练模型时,自动使用数据增强。
可以利用 ImageDataGenerator 类 达到这一目的。
首先,可以在类实例化时传入特定的参数到构造函数来配置对应的增强方法。
该类支持一系列的增强方法,包括像素值的缩放,但是我们只关注以下五种主要的图像数据增强方法:
- 通过 width_shift_range</