Каков подходящий предпоследний слой для визуализации Grad-CAM в Inception V3? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытался визуализировать тепловые карты для Inception V3. Насколько я понимаю, предпоследний слой должен быть последним сверточным слоем, который будет conv2d_94 (idx 299). Однако это дает очень грубые карты (большие регионы). Я попытался использовать другой слой mixed10 (idx 310), как предложено в этом ноутбуке , для проблемы, как описано здесь , и хотя области меньше, он все равно не выглядит великолепно. Некоторые другие используют conv2d_94, например здесь .

Я понимаю, что это может указывать на то, что моя модель просто не обращает внимания на правильные вещи, но также концептуально я не понимаю, какой слой следует использовать. Что такое подходящий предпоследний слой?

Я использую Keras 2.2.0 с visualize_cam из keras-vis.

heatmap = visualize_cam(model, layer_idx, filter_indices=classnum, seed_input=preprocess_img, backprop_modifier=None)

Где layer_idx - это идентификатор dense_2.

Я пытался не определять penultimate_layer, который согласно документации устанавливает параметр для ближайшего предпоследнего Conv или Pooling слоя. Это дает те же результаты, что и penultimate_layer=299.

1 Ответ

0 голосов
/ 04 сентября 2018

Не могу ничего сказать о ваших собственных данных, но предпоследний уровень Inception V3 для визуализации Grad-CAM действительно mixed10 (idx 310), как сообщается в записной книжке, с которой вы связались:

310 - конкатенация до среднего глобального пула

Обоснование: поскольку выход conv2d_94 (299) связан вниз по потоку с другими сверточными слоями (или конкатенациями), такими как mixed9_1, concatenate_2 и т. Д., По определению он не может быть предпоследним сверточным слой; mixed10, с другой стороны, нет - напротив, это всего лишь один слой до окончательного среднего пула. Предполагается, что предпоследний слой должен быть сверточным, а не пулирующим, предлагает из Выставка Шолле , где для VGG он использует block5_conv3, а не block5_pool, что немедленно впоследствии (хотя на самом деле даже использование block5_pool, похоже, дает очень похожие визуальные результаты).

Позвольте мне немного пояснить и объяснить акцент на "предложенном" выше ...

Как и многие другие вещи в современных исследованиях и практиках глубокого обучения, Grad-CAM является эвристическим , а не "сложным" научным методом; как таковые, есть рекомендации и ожидания относительно того, как его использовать и каковы могут быть результаты, но нет жестких правил (и «подходящих» уровней). Рассмотрим следующий отрывок из оригинальной бумаги (конец раздела 2, выделено мое):

Мы ожидаем последних сверточных слоев до иметь лучший компромисс между семантикой высокого уровня и подробная пространственная информация, поэтому мы используем эти карты вычислить Grad-CAM и Guided Grad-CAM.

т.е. как я уже сказал, действительно есть рекомендации и ожидания, но ожидается определенная экспериментальная и свободная позиция ...


Теперь, если вы следите за записной книжкой Chollet по теме (то есть, используя чистый Keras, а не пакет Keras-vis), это изменения в коде, который вам нужен чтобы заставить его работать с Inception V3:

# cell 24
from keras import backend as K
from keras.applications.inception_v3 import InceptionV3
K.clear_session()
K.set_learning_phase(0) # needs to be set BEFORE building the model
model = InceptionV3(weights='imagenet')

# in cell 27
from keras.applications.inception_v3 import preprocess_input, decode_predictions
img = image.load_img(img_path, target_size=(299, 299)) # different size than VGG

# in cell 31:
last_conv_layer = model.get_layer('mixed10')
for i in range(2048):  # was 512 for VGG
    conv_layer_output_value[:, :, i] *= pooled_grads_value[i]

И полученная наложенная тепловая карта на исходное creative_commons_elephant.jpg изображение должно выглядеть следующим образом:

enter image description here

, который, возможно, не , что отличается от соответствующего изображения VGG, полученного в записной книжке Chollet (хотя по общему признанию тепловая карта действительно более распространена, и она, кажется, не соответствует повествованию Chollet о 'фокусировке на уши) ...

...