2017-08-04 263 views
1

我試圖使用我的示例代碼修改的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的任何想法,爲什麼這可能發生嗎?

回答

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_modeNone並做語義分割(見註釋&後):

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

我明白過程,一般通常進行分類的方式。然而,對於語義分割,人們可以在任何圖像中出現多個類別。所以這不像貓有一個文件夾,另一個狗有文件夾那麼簡單。需要將每個像素分類爲屬於一個或另一個類。要做到這一點,人們使用掩碼代替標籤。在訓練組中的每個圖像,一個具有屏蔽,指定每個像素屬於哪個類別 - 如果它是一個像素,這是一個汽車,或貓,或任何類別的一個分類的一部分。 –

+3

我明白了。但是,仍然需要將所有圖像放在指向「flow_from_directory」所在目錄的子目錄中。這也適用於'class_mode = None'。你嘗試過嗎? – petezurich

+1

啊哈,這個伎倆。我已將路徑放到包含圖像本身的文件夾中,而不是包含包含圖像的FOLDER的文件夾的路徑。謝謝! :-) –