Keras 常用的图像增强方式

欢迎关注 “小白玩转Python”,发现更多 “有趣”

在使用神经网络和深度学习模型时,需要进行数据准备。对于更复杂的物体识别任务,也越来越需要增加数据量。

数据增加意味着增加数据量。换句话说,拥有更大的数据集意味着更健壮的模型。但是获取更多的数据并不总是那么容易,而且可能存在存储数据并将其提供给模型的问题。

为了缓解这个问题,我们可以通过做一些修改手动增加数据,或者我们可以使用一个 Keras 图像预处理类,只需几行代码就可以做到这一点。

在这篇文章中,我们将看到在使用 Keras 开发和评估 Python 中的深度学习模型时,如何使用图像数据集进行数据准备和数据增强。

读完这篇文章,你就会知道:

1. 关于Keras提供的图像增强API以及如何在模型中使用它。如何执行特征标准化;

2. 如何对图像执行 ZCA 白化;

3. 如何对图像数据随机旋转,移位和翻转增强;

4. 如何将增强图像数据保存到磁盘。

图像增强 API:ImageDataGenerator

它从原始批处理中生成批处理的增强数据。该算法首先对图像进行随机变换,然后生成一批新的图像进行训练。

注意: 这里需要注意的一点是 ImageDataGenerator 不返回原始图像,而只返回一批增强数据,这是对原始数据进行某些转换的结果。

加载数据集

我们将使用 MNIST 手写数字识别进行数据增强。执行下面的代码将从 keras.datasets 加载 MNIST 数据集:

将数据分解成训练街和测试集

像素标准化

像素标准化在两个级别上得到支持:每个图像(称为样本级)或每个数据集(称为特征级)。具体来说,标准化像素值所需的平均值和/或平均值和标准差统计量可以仅从每张图像中的像素值计算(按样本计算) ,也可以从整个训练数据集中计算(按特征计算)。

您可以通过在 ImageDataGenerator 类上设置 featurewise_center 和 featurewise_std_normalization 参数来执行标准化过程。

运行这个例子,您可以看到效果是不同的,似乎暗淡和亮化不同的数字。

ZCA 白化

图像的白化变换是一个线性代数运算,它减少了像素图像矩阵中的冗余。通常,图像增白是使用主成分分析分析技术进行的。最近,一种叫做 ZCA 的方法显示了更好的结果,在变换后的图像中保留了所有的原始维度,不像 PCA,结果变换后的图像仍然看起来像原始图像。

随机旋转

您可以训练您的模型,以更好地在训练期间人为处理数据集中图像旋转和随机旋转。下面的示例通过设置 rotation _ range 参数创建 MNIST 数字最高90度的随机旋转。

你可以看到图像被左右旋转到90度的极限。这对这个问题没有帮助,因为 MNIST 的数字有一个规范化的方向,但是这种转换可能有助于从物体可能有不同方向的照片中学习。

随机平移

图像中的对象可能不在框架中心。它们可能在各种不同的方面偏离中心。您可以通过人工创建训练数据的平移版本来训练深度学习网络。Keras 支持通过 width_shift_range 和 height_shift_range 参数对训练数据进行水平和垂直随机平移。

同样,由于手写数字已经居中,这对于 MNIST 来说是不必要的,但是您可以看到这在更复杂的问题域中是多么有用。

随机翻转

另一个增强图像数据的方法是在训练数据中创建随机的图像翻转,这样可以提高处理大型复杂问题的性能。Keras 支持使用 vertical_flip 和 horizontal_flip 参数沿垂直轴和水平轴进行随机翻转。

翻转数字不是很有用,因为它们总是有正确的左右方向,但是对于场景中可能有不同方向的物体的照片来说,这可能是有用的。

·  END  ·

HAPPY LIFE

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值