如何使用ImageDataGenerator类生成训练并将其标记为keras模型的图像?

时间:2019-02-11 13:23:56

标签: python image-processing keras generator

我想训练一个使用Keras生成新图像的模型,我将使用ImageDataGenerator类来生成一批图像。

问题是我找不到使用此类来生成训练并将批次标签标记为图像的方法。我想传递给模型以训练一些图像并标记其他图像。

此外,我需要从硬盘读取每批图像,因为数据集太大而无法加载到内存中。

还可以使用ImageDataGenerator方法的替代方法。

我希望问题很清楚,希望您能为我提供帮助。

2 个答案:

答案 0 :(得分:0)

您可以构建您的自定义数据生成器类。该链接应该对data generators with Keras有帮助。您可以将图像标签存储在一个较大的csv文件中,并根据需要在每批中加载所需的图像。

答案 1 :(得分:0)

您可以将ImageDataGenerator类与您喜欢的任何类型的标签一起使用,也可以将图像(图像)用作多维数组。这是使用虚拟numpy图片的示例:

from keras.preprocessing.image import ImageDataGenerator
import numpy as np

# Create fake images
n, width, height = 1000, 28, 28
images_data = np.random.randint(low=0, high=256, size=(n, height, width, 3))
images_labels = np.random.randint(low=0, high=256, size=(n, height, width, 3))

image_gen = ImageDataGenerator()
batch_size = 100
batch_gen = image_gen.flow(images_data, images_labels, batch_size=batch_size)

例如,您然后可以将batch_gen传递到fit_generator,它将产生(images_data, images_labels)的元组,两者的形状均为(batch_size, height, width, 3)。您可以使用以下方法进行检查:

batch = batch_gen.next()
print(len(batch))
print(batch[0].shape)
print(batch[1].shape)

如果您的数据集不适合存储在内存中并存储为文件,则也可以使用flow_from_directory。 Keras官方文档中有examples

如果编写自己的批处理生成器函数,也可以在批处理之前对批处理做些事情:

def _generate_batches(image_gen, images_data, images_labels, batch_size):
    for batch in image_gen.flow(images_data, images_labels,
                                batch_size=batch_size):
        # Here you can do whatever you like to your batch
        yield (batch[0], batch[1])

最后,如果您需要ImageDataGenerator中非常特定的功能,则可以随时构建自定义ImageDataGenerator类:

class ImageDataGeneratorCustom(ImageDataGenerator): 
...

尤其是,您可能想覆盖flow()函数,甚至构建自定义的Iterator