使用 Keras 进行对象检测 - 结合训练图像和目标掩码的问题

Object detection with Keras - issue with combining training images and target masks

我正在将我的 keras 模型拟合到图像样本及其相应的二进制掩码上以进行对象检测。基本上,我遵循 this page 末尾的示例:

from keras.preprocessing.image import ImageDataGenerator
# we create two instances with the same arguments

data_gen_args = dict(
                     rotation_range=4.,
                     width_shift_range=0.05,
                     height_shift_range=0.05,
                     shear_range=0.05,
                     zoom_range=0.05,
                     horizontal_flip=True, fill_mode='nearest')

image_datagen = ImageDataGenerator(**data_gen_args)
mask_datagen = ImageDataGenerator(**data_gen_args)
seed = 2019

现在为图像和蒙版创建生成器:

target_size = (180, 320)
small_target_size = (11,20)
batch_size = 8 

image_generator_trn = image_datagen.flow_from_directory(
    path+'train',
    class_mode=None,
    target_size = target_size,
    batch_size = batch_size,
    shuffle= False,
    seed=seed)


mask_generator_trn = mask_datagen.flow_from_directory(
    path+'mask/train',
    class_mode=None,
    target_size = small_target_size,
    batch_size = batch_size,
    shuffle= False,
    seed=seed)

输出:

Found 3327 images belonging to 2 classes.
Found 3327 images belonging to 2 classes.

最后我们创建了一个生成器用于 model.fit_generator:

train_generator = zip(image_generator_trn, mask_generator_trn)

我的问题是最后一行(压缩);我要么得到内存异常,要么它没有完成执行。我怀疑它正在尝试压缩 2 个无限循环,并尝试在 model.fit_generator 中懒惰地压缩但同样的问题。

我能做些什么不同的事情?

问题在于 zip 试图耗尽两个发电机,当它们被设计为无限地产生输出时。这就是这种行为背后的原因。为了克服这个问题,使用 itertools.izip 函数。此外 - 请注意,如果您没有为两个生成器设置相同的 seed - 将对您的 xy 图像应用不同的增强。您需要关闭随机增强或设置相同的 seed.