Keras用于语义分割,flow_from_directory()错误

问题描述:

我试图使用我的示例代码修改的Keras文档,显示如何设置image_datagen.flow_from_directory()在图像掩模代替正在使用的情况下,在标签(用于图像分割,我们预测每个像素的类)。Keras用于语义分割,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的任何想法,为什么这可能发生吗?

您需要将您的图像放入子文件夹,每个类放入您的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_modeNone并做语义分割(见注释&后):

/home/icg/Martin/train_data_graz/images_rect_r640x360/all_images 
+2

我明白过程,一般通常进行分类的方式。然而,对于语义分割,人们可以在任何图像中出现多个类别。所以这不像猫有一个文件夹,另一个狗有文件夹那么简单。需要将每个像素分类为属于一个或另一个类。要做到这一点,人们使用掩码代替标签。在训练组中的每个图像,一个具有屏蔽,指定每个像素属于哪个类别 - 如果它是一个像素,这是一个汽车,或猫,或任何类别的一个分类的一部分。 –

+3

我明白了。但是,仍然需要将所有图像放在指向“flow_from_directory”所在目录的子目录中。这也适用于'class_mode = None'。你尝试过吗? – petezurich

+1

啊哈,这个伎俩。我已将路径放到包含图像本身的文件夹中,而不是包含包含图像的FOLDER的文件夹的路径。谢谢! :-) –