我一直在尝试可视化Inception V3的热图。据我了解,倒数第二层应该是最后一个卷积层,即conv2d_94(idx 299)。但是,这会产生非常粗糙的 map (大区域)。我尝试使用this notebook中建议的另一层mixed10(idx 310)来解决here中所述的问题,尽管区域较小,但看起来仍然不太好。其他一些人似乎确实使用了conv2d_94,例如here

我知道这可能表明我的模型只是没有注意正确的事情,但是从概念上讲,我对应该使用哪一层感到困惑。什么是合适的倒数第二层?

我正在将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_idxdense_2的IDx。

我尝试过不定义penultimate_layer,根据documentation它将参数设置为最接近的倒数第二个ConvPooling层。这给出了与penultimate_layer=299相同的结果。

最佳答案

无法说出您自己的数据,但是用于Grad-CAM可视化的Inception V3倒数第二层确实是mixed10(idx 310),正如您在笔记本中链接到的那样:



原理:由于conv2d_94(299)的输出在下游与其他卷积层(或它们的级联)相连,例如mixed9_1concatenate_2等,因此根据定义,它不能是倒数第二个卷积层;另一方面,mixed10不是-相反,它只是最终平均池化之前的一层。倒数第二层应该是卷积的,而不是集合的,是Chollet's exchibition建议的,在VGG中,他使用block5_conv3,而不是紧随其后的block5_pool(尽管事实是,即使使用block5_pool似乎也提供了非常相似的视觉效果结果)。

让我详细说明一下,并在上面解释对“建议”的强调。

与当前深度学习研究和实践中的许多其他事情一样,Grad-CAM是一种启发式方法,而不是“硬性”科学方法。因此,对于如何使用它以及可能产生的结果有一些建议和期望,但没有硬性规则(和“适当的”层)。请考虑original paper的以下摘录(第2节的结尾,重点是我的):



即,正如我已经说过的那样,确实存在建议和期望,但是期望会有一定的试验和随心所欲的态度...

现在,假设您在主题上关注Chollet's notebook(即使用纯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图像上产生的叠加热图应如下所示:

machine-learning - 在Inception V3上,用于Grad-CAM可视化的倒数第二层是什么?-LMLPHP

可以说,这与乔尔莱特笔记本上的VGG所产生的图像没有什么不同(尽管可以肯定的是,热图确实散布了很多,而且似乎不符合乔尔莱特关于``专注于耳朵''的叙述)。

关于machine-learning - 在Inception V3上,用于Grad-CAM可视化的倒数第二层是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52162467/

10-12 21:09