Я пытаюсь создать сверточный рекуррентный автоэнкодер, как показано в этом документе на стр. 5. Для шумоподавления изображения. Входными данными являются кадры 1080 на 1920 с RGB.
https://research.nvidia.com/sites/default/files/publications/dnn_denoise_author.pdf][1]
У меня есть несколько вопросов.
При выполнении кода ниже я получаю одну ошибку:
Ожидается, что input_1 будет иметь 5 измерений, но получит массив с формой (2, 1080, 1920, 3)
первый - это количество кадров, 2-й и 3-й размеры и 4-й элемент - каналы Каким будет 5-й элемент?
Я использую генераторы для разбора данных:
train_datagen = ImageDataGenerator(
rescale=1./255,
)
generator_train = train_datagen.flow_from_directory(
train_data_dir,
target_size=(1080,1920),
batch_size=batch_size,
class_mode=classification_type,
shuffle=True)
autoencoder.fit_generator(generator_train, epochs=1, steps_per_epoch=number_samples_train//batch_size, shuffle=True,
validation_data=generator_validation, verbose=1)
Как я могу добавить 5-й предмет с генераторами?
Модель выглядит так
input_img = Input(shape=(None,1080,1920,3))
a = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True)(input_img)
a = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True )(a)
b = MaxPooling3D((2,2,2), padding='same')(a)
c = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True)(b)
c = ConvLSTM2D(32, (3, 3), activation='relu', padding='same',return_sequences=True)(c)
encoded = MaxPooling3D((2,2,2), padding='same')(c)
d = ConvLSTM2D(32, (3, 3), activation='relu', padding='same',return_sequences=True )(encoded)
d = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True)(d)
e= UpSampling3D((2, 2,2))(d)
#Skip connection
merge_one = concatenate([b, e])
f = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True) (merge_one)#(e)
f = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True) (f)#(e)
g = UpSampling3D((2, 2,2))(f)
decoded = Conv3D(3, (3, 3, 3), activation='sigmoid', padding='same')(g)# (merge_two)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')