【问题标题】:Keras for semantic segmentation, flow_from_directory() errorKeras 用于语义分割,flow_from_directory() 错误
【发布时间】:2018-01-12 14:31:03
【问题描述】:

我试图使用我对 Keras 文档中示例代码的修改,该文档显示了如何在使用图像掩码代替标签的情况下设置 image_datagen.flow_from_directory()(对于图像分割,我们在预测每个像素的类别)。

顺便说一句,我设置了 featurewise_center = True 以尝试从每个图像的颜色通道中减去所有训练图像的每个颜色通道的平均值,这样在整个训练集中,每个颜色通道的平均值将为 0。我认为这不是实现此目的的方法。

无论如何,这是我产生错误的代码:

image_datagen = ImageDataGenerator(featurewise_center = True)
mask_datagen = ImageDataGenerator()

image_generator = image_datagen.flow_from_directory(
    '/home/icg/Martin/train_data_graz/images_rect_r640x360',
    class_mode = None,
    batch_size = 1,
    seed = 123)

mask_generator = mask_datagen.flow_from_directory(
    '/home/icg/Martin/train_data_graz/labels_rect_r640x360',
    class_mode = None,
    batch_size = 1,
    seed = 123)

# combine generators into one which yields image and masks
train_generator = zip(image_generator, mask_generator)

model.fit_generator(
    train_generator,
    steps_per_epoch = 1000,
    epochs = 100)

这是错误消息:

Found 0 images belonging to 0 classes.
Found 0 images belonging to 0 classes.
Traceback (most recent call last):
  File "FCN_VGG16.py", line 178, in <module>
    train_generator = zip(image_generator, mask_generator)
  File "/home/icg/rafa/local/lib/python2.7/site-packages/keras/preprocessing/image.py", line 1026, in next
    index_array, current_index, current_batch_size = next(self.index_generator)
  File "/home/icg/rafa/local/lib/python2.7/site-packages/keras/preprocessing/image.py", line 720, in _flow_index
    current_index = (self.batch_index * batch_size) % n
ZeroDivisionError: integer division or modulo by zero

由于某种原因 n = 0。任何想法为什么会发生这种情况?

【问题讨论】:

    标签: runtime-error keras-2


    【解决方案1】:

    您需要将图像放入每个类的 子文件夹 中,放入 flow_from_directory() 函数的目录中。

    在你的情况下:

    /home/icg/Martin/train_data_graz/images_rect_r640x360/images_class01
    /home/icg/Martin/train_data_graz/images_rect_r640x360/images_class02
    …
    

    编辑:

    由于您已将 class_mode 设置为 None 并进行语义分割(请参阅 cmets 和帖子):

    /home/icg/Martin/train_data_graz/images_rect_r640x360/all_images
    

    【讨论】:

    • 我理解这个过程,就是人们通常进行分类的方式。然而,对于语义分割,一个有许多类都可以出现在任何图像中。因此,这并不是为猫和狗一个文件夹那么简单。需要将每个像素分类为属于一类或另一类。为此,使用掩码代替标签。对于训练集中的每张图像,都有一个掩码来指定每个像素所属的类别——如果它是属于汽车、猫或任何分类的像素的一部分。
    • 我明白了。但仍然 - 您需要将所有图像放在您指向 flow_from_directory 的目录的子目录中。这也适用于class_mode = None。你试过吗?
    • 啊哈,成功了。我已经放置了包含图像本身的文件夹的路径,而不是包含包含图像的文件夹的文件夹的路径。谢谢! :-)
    • 不客气。太棒了——我很高兴你能解决这个问题。
    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 2018-03-18
    • 2019-11-15
    • 2019-01-06
    • 2020-03-11
    • 2019-11-12
    • 2020-01-22
    • 2021-11-19
    相关资源
    最近更新 更多