簡體   English   中英

使用Keras的flow_from_directory和FCNN

[英]using Keras' flow_from_directory with FCNN

我成功地使用Keras訓練了構造神經網絡進行圖像分割。 現在,我嘗試通過對圖像進行一些數據增強來提高性能。 為此,我使用ImageDataGenerator ,然后使用flow_from_directory僅將批處理加載到內存中(我嘗試了不帶但出現內存錯誤)。 代碼示例為:

training_images = np.array(training_images) 
training_masks = np.array(training_masks)[:, :, :, 0].reshape(len(training_masks), 400, 400, 1)

# generators for data augmentation -------
seed = 1
generator_x = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=180,
    horizontal_flip=True,
    fill_mode='reflect')

generator_y = ImageDataGenerator(
    featurewise_center=False,
    featurewise_std_normalization=False,
    rotation_range=180,
    horizontal_flip=True,
    fill_mode='reflect')

generator_x.fit(training_images, augment=True, seed=seed)
generator_y.fit(training_masks, augment=True, seed=seed)


image_generator = generator_x.flow_from_directory(
    'data',
    target_size=(400, 400),
    class_mode=None,
    seed=seed)

mask_generator = generator_y.flow_from_directory(
    'masks',
    target_size=(400, 400),
    class_mode=None,
    seed=seed)

train_generator = zip(image_generator, mask_generator)
model = unet(img_rows, img_cols)
model.fit_generator(train_generator, steps_per_epoch=int(len(training_images)/4), epochs=1)

但是,當我運行代碼時,出現以下錯誤(我正在使用Tensorflow后端):

InvalidArgumentError (see above for traceback): Incompatible shapes: [14400000] vs. [4800000]
     [[Node: loss/out_loss/mul = Mul[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](loss/out_loss/Reshape, loss/out_loss/Reshape_1)]]

在錯誤中,它抱怨不兼容的形狀為14400000(400x400x9)與4800000(400x400x3)。 我在這里使用自定義損失函數(如果您查看錯誤,它表示損失的某些方面)就是Dice系數,定義如下:

y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + 1.) / (K.sum(y_true_f) + K.sum(y_pred_f) + 1.)

在這里,我將(400,400,3)帶有遮罩的圖像用於1類形狀(400,400,1)。 我的NN的輸入定義為Input((img_rows, img_cols, 3))並輸出為Conv2D(1, (1, 1), activation='sigmoid', name='out')(conv9) (但這工作正常在沒有數據擴充的情況下進行訓練時)。

發生錯誤是因為您正在以RGB顏色模式讀取蒙版。

默認color_modeflow_from_directory'rgb' 因此,無需指定color_mode ,您的遮罩將被加載到(batch_size, 400, 400, 3) color_mode (batch_size, 400, 400, 3)數組中。 這就是為什么y_true_f大於3倍y_pred_f在您的錯誤信息。

要讀取灰度蒙版,請使用color_mode='grayscale'

mask_generator = generator_y.flow_from_directory(
    'masks',
    target_size=(400, 400),
    class_mode=None,
    color_mode='grayscale',
    seed=seed)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM