GradCam применяется к классификации видеопоследовательностей с TimeDistributed CNN и LSTM - PullRequest
0 голосов
/ 22 января 2020

после нескольких дней работы над этим я нашел какой-то разумный способ сделать, так что вот и я. У меня есть сеть, которая предназначена для прогнозирования следующего видео класса, учитывая особенности текущего. Каждое видео состоит из 30 кадров. Идея состоит в том, чтобы применить метод извлечения объектов к каждому входу, а затем ввести их в слой LSTM + Dense для прогнозирования. Вот код:

video = Input(shape=(30,299,299,3))
inc = InceptionV3(weights='imagenet', include_top=False, input_shape=(299, 299, 3))
cnn_out = GlobalAveragePooling2D()(inc.output)
cnn = Model(inputs=inc.input, outputs=cnn_out)
encoded_frames = TimeDistributed(cnn)(video)
encoded_sequence = LSTM(128, activation='relu', return_sequences=False, kernel_initializer=he_uniform(), bias_initializer='zeros', dropout=0.5)(encoded_frames)
hidden_layer = Dense(1024, activation='relu', kernel_initializer=he_uniform(), bias_initializer='zeros')(encoded_sequence)
outputs = Dense(4, activation="softmax", kernel_initializer=glorot_normal(), bias_initializer='zeros')(hidden_layer)
model = Model(inputs=[video], outputs=outputs)
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])

Я хотел бы визуализировать активацию функции на этапе CNN для каждого изображения. Поэтому, если я посмотрю на карту достоверности для каждого входного изображения, я пойму, какие функции более важны, чем другие, для такого прогноза. Все примеры на inte rnet сталкиваются только с одним CNN и одним входным изображением, есть ли способ сделать это? Любая помощь очень ценится, спасибо!

...