ImageDataGenerator是否向我的数据集中添加更多图像?

时间:2018-08-08 13:54:35

标签: python tensorflow machine-learning keras computer-vision

我正在尝试使用Inception V3模型进行图像分类。 Keras的ImageDataGenerator是否会创建新图像并添加到我的数据集中?如果我有1000张图像,是否可以使用此功能将其翻倍到用于训练的2000张图像?有没有办法知道已经创建了多少图像,现在将它们输入到模型中?

8 个答案:

答案 0 :(得分:6)

在每个时期,ImageDataGenerator对您拥有的图像进行转换,并使用转换后的图像进行训练。转换集包括旋转,缩放等。通过这种方式,您以某种方式创建了新数据(即也称为数据增强),但是显然生成的图像与原始图像并没有完全不同。这样,当在相同图像的不同变体上对其进行训练时,所学习的模型可能更加健壮和准确。

您需要将steps_per_epoch方法的fit参数设置为n_samples / batch_size,其中n_samples是您拥有的训练数据的总数(即您的情况下为1000) 。这样,在每个纪元中,每个训练样本仅增加一次,因此每个纪元中将生成1000个变换图像。

答案 1 :(得分:3)

正式写成的here ImageDataGenerator是具有实时数据增强功能的张量图像数据的批量生成器。数据将被循环(分批)。这意味着可以即时将转换应用于批量随机的图像。例如:

train_datagen = ImageDataGenerator(
    rescale=1./255, #scale images from integers 0-255 to floats 0-1.
    shear_range=0.2,
    zoom_range=0.2, # zoom in or out in images
    horizontal_flip=True) #horizontal flip of images

在每个新纪元,都会应用新的随机变换,这样我们一次训练的图像数量会有所不同。并非总是能够获得或可能获得更多数据,使用ImageDataGenerator这样是有帮助的。

答案 2 :(得分:0)

还请注意:这些增强图像未存储在内存中,它们是在训练过程中即时生成的,在训练后丢失。您无法再次阅读这些增强图像。

不存储这些图像是一个好主意,因为我们很快就会用光内存,无法存储大量图像

答案 3 :(得分:0)

当我们尝试解决数据量少的问题时,通过添加增强图像来增加数据集不是一个好主意吗?

https://medium.com/nanonets/how-to-use-deep-learning-when-you-have-limited-data-part-2-data-augmentation-c26971dc8ced

将上面的链接作为参考,其中作者提到了在我们的训练数据集中添加增强图像的功能。

那应该怎么做,我们应该增加图像并 save_to_dir 而不是训练模型,还是应该只使用 steps_per_epoch = 2 *(n_samples / batch_size ),并在每个时期训练两倍的数据量?

答案 4 :(得分:0)

这一切都取决于您运行了多少个时期,正如@today回答的那样,将模型与生成器拟合将使生成器提供所需数量的图像,具体取决于steps_per_epoch

为了使事情更容易理解,请将20张图像放入两个文件夹中(模仿分类数据),从父文件夹中创建一个生成器并运行一个简单的for循环

count = 0
for image, label in my_test_generator:
    count += 1
    print(count)

首先,您应该确认您看到了消息Found 20 images belonging to 2 classes.,并且循环本身不会在20次迭代后停止,但是它只会不断地递增和不断打印(我的工作量为10k,并手动停止了它)。生成器将根据需要提供尽可能多的图像,无论它们是否被放大。

答案 5 :(得分:0)

这是我的回答,因为我也想到了这个问题。

ImageDataGenerator在某种程度上不会将新图像添加到您的数据集中,因为这不会使您的时代变得更大。取而代之的是,在每个纪元中,它将提供略有变化的图像(取决于您的配置)。无论您拥有多少个历元,它都将始终生成新图像。

因此,在每个纪元中,模型将在不同的图像上训练,但不会不同。这样可以防止过度拟合,并在某种程度上模拟在线学习。

所有这些更改都发生在内存中,但是如果您想查看这些图像,则可以将其保存到光盘中,进行检查,查看其中的许多图像是如何生成的,并了解ImageDataGenerator的工作方式。为此,将save_to_dir=/tmp/img-data-gen-outputs传递给功能flow_from_directory。参见docs

答案 6 :(得分:0)

ImageDataGenerator类确保模型收到新的 每个时期的图像变化。但它只会返回 转换后的图像,并且不会将其添加到的原始语料库 图片。如果确实如此,那么该模型将会看到 原始图像多次,这肯定会适合我们 模型。

https://www.analyticsvidhya.com/blog/2020/08/image-augmentation-on-the-fly-using-keras-imagedatagenerator/

答案 7 :(得分:0)

让我试着用一个例子以最简单的方式告诉你。
例如:

  • 您有一组 500 张图片
  • 您使用 ImageDataGeneratorbatch_size = 25 应用到数据集
  • 现在你运行你的模型,让我们说 5 个时代
    steps_per_epoch=total_samples/batch_size
  • 所以,steps_per_epoch 将等于 20
  • 现在您的模型将在每个时期的所有 500 张图像上运行(根据提供给 ImageDataGenerator 的说明随机转换)