在 Keras 中使用 imagedatagenerator 添加更多的训练数据集
Posted
技术标签:
【中文标题】在 Keras 中使用 imagedatagenerator 添加更多的训练数据集【英文标题】:using imagedatagenerator in Keras to add more training dataset 【发布时间】:2020-09-05 15:20:23 【问题描述】:我有汽车图像,我的目标是扩展我的训练数据集,我想将新生成的图像和原始图像结合起来,并基于它们训练一个深度神经网络来执行分类任务。
来自这篇博文: https://www.pyimagesearch.com/2019/07/08/keras-imagedatagenerator-and-data-augmentation/
“Keras ImageDataGenerator 类不是“加法”操作。它不会获取原始数据,随机变换它,然后返回原始数据和变换后的数据。”
你建议用什么方法来扩展数据集?
【问题讨论】:
【参考方案1】:虽然 Keras ImageDataGenerator 不是您所说的加法运算,但如果您想在增强图像上训练模型,它仍然可以帮助您。以下是 ImageDataGenerator 的工作原理:您指定图像的目录和增强参数,然后在每个训练阶段,生成器获取图像并对其进行转换。因此,这意味着如果您总共有 300 张图像,那么使用 ImageDataGenerator 您将在每个 epoch 中获得 300 张不同的转换图像。
如果不是您想要的方式,您可以尝试其他方式。使用 OpenCV 库读取图像并通过一些转换(例如缩放、剪切等)将其副本保存到一个目录中。这样,您可以在每个 epoch 制作任意数量的图像。当您制作它们时,请使用不带任何参数的 ImageDataGenerator。这里有一个问题 - 图像总是相同的。在第一种情况下,每个时期的图像都应该不同。
要保存新的增强图像,您可以使用:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from PIL import Image
import numpy as np
image = Image.open('asd.png')
image = np.array(image)
image = np.expand_dims(image, 0)
data_generator = ImageDataGenerator(
rotation_range=30,
)
for _, _ in zip(data_generator.flow(
image,
save_to_dir=<DIR_NAME>,
save_prefix=<PREFIX>,
save_format='png'
), range(N)):
pass
其中 N 是您要使用 1 个基本图像创建的增强图像的数量
【讨论】:
“这里有一个问题 - 图片总是一样的”是什么意思? 例如,您想旋转图像。在第二种情况下,您可以创建其他图像。因此,最终数据集可以包含您的图像,以及旋转 10、20 和 30 度的图像。在这种情况下,您的模型将从旋转 4 次的图像中学习。在第一种情况下,您只需指定rotation=30
。在这种情况下,ImageDataGenerator
将创建以 随机 角度从 0 到 30 度旋转的图像。因此,在这种情况下,您的模型将在旋转 11、29、8.5 等度的图像上进行训练。每个时期不同的随机角度
谢谢。这些生成的图像是否可以添加到原始图像中并保存在训练目录中?我的一个班级有 300 张图片,其他班级有 4000 张图片,我正在努力平衡它们。
我们可以使用图像处理技术吗?使用“ImageDataGenerator”有什么好处?我可以轻松地从目录图像生成新图像,然后将它们保存到同一个文件夹中。然后我可以使用该文件夹来训练我的网络。使用 ImageDataGenerator 有什么好处?
是的,你可以。 ImageDataGenerator 只是可以让您的工作更轻松的东西。如果您对其他技术感到满意,请继续以上是关于在 Keras 中使用 imagedatagenerator 添加更多的训练数据集的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 tensorflow 在 keras 中禁用 GPU?
如何在具有使用@tf.keras.utils.register_keras_serializable 注册的自定义函数的 Tensorflow Serving 中提供模型?