Как использовать ConvLSTM2D с VGG16 - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь использовать convlstm2D вместе с VGG16, используя приведенный ниже код:

video = Input(shape=(no_of_frames, img_width, img_height, channels))
cnn_base = VGG16(input_shape=(img_width, img_height, channels), weights="imagenet", 
include_top=False)
cnn_base.trainable = False
encoded_frames = TimeDistributed(cnn_base)(video)
encoded_sequence = ConvLSTM2D(64, kernel_size=(7, 7), strides=(2, 2),padding='same', 
return_sequences=True)(encoded_frames)
hidden_layer_1 = Dense(activation="relu", units=512)(encoded_sequence)
hidden_layer_2 = Dense(activation="relu", units=20)(hidden_layer_1)
outputs = Dense(2, activation="softmax")(hidden_layer_2)
model = Model([video], outputs)

При запуске кода выдается следующее сообщение об ошибке:

Traceback (самый последний вызов последнее): файл "/home/vislab/PycharmProjects/Firefront/ConvLstm_Classification.py", строка 75, в обратных вызовах = [контрольная точка, ранее]) файл "/ home / vislab / anaconda3 / envs / Firefront / lib / python3. 6 / site-packages / keras / legacy / interfaces.py ", строка 91, в оболочке возвращает удовольствие c (* args, ** kwargs) Файл" / home / vislab / anaconda3 / envs / Firefront / lib / python3 .6 / site-packages / keras / engine / training.py ", строка 1418, в fit_generator initial_epoch = initial_epoch) Файл" /home/vislab/anaconda3/envs/Firefront/lib/python3.6/site-packages /keras/engine/training_generator.py ", строка 217, в файле fit_generator class_weight = class_weight) Файл" /home/vislab/anaconda3/envs/Firefront/lib/python3.6/site-packages/keras/engine/training. py ", строка 1211, в файле train_on_batch class_weight = class_weight)" /home/vislab/anaconda3/envs/Firefront/lib/python3.6/si te-packages / keras / engine / training.py ", строка 789, в файле _standardize_user_data exception_prefix = 'target') Файл" /home/vislab/anaconda3/envs/Firefront/lib/python3.6/site-packages/keras /engine/training_utils.py ", строка 128, в standardize_input_data 'with shape' + str (data_shape)) ValueError: Ошибка при проверке цели: ожидаемое time_distributed_5 имеет 3 измерения, но получило массив с формой (20, 2)

Процесс завершен с кодом выхода 134 (прерван сигналом 6: SIGABRT)

Может кто-нибудь посоветовать мне, как действовать дальше.

Спасибо.

1 Ответ

0 голосов
/ 06 марта 2020

Вам нужно return_sequences=False. Вы не классифицируете каждый кадр, вы классифицируете все видео.

Тогда вам также потребуется либо Flatten (только для изображений фиксированного размера), либо глобальное объединение перед слоями Dense, чтобы исключить дополнительные измерения.

...