使用Keras进行物体检测 - 结合训练图像和目标掩模的问题

时间:2017-04-01 12:03:01

标签: image-processing deep-learning keras object-detection

我将我的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)

Outpu:

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中进行懒惰但同样的问题。

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

1 个答案:

答案 0 :(得分:0)

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