推荐链接:https://blog.youkuaiyun.com/qq_43433255/article/details/94411842
我们将介绍另一种可视化技术,它有助于理解给定图像的哪些部分引导convnet做出最终的分类决策。这有助于“调试”convnet的决策过程,特别是在分类错误的情况下。它还允许您在图像中定位特定对象。
这类技术被称为“类激活图”(CAM)可视化,它包括在输入图像上生成“类激活”的热图。“类激活”heatmap是与特定输出类相关联的二维分数网格,针对任何输入图像中的每个位置进行计算,表明每个位置对所考虑的类有多重要。例如,假设一个图像输入到我们的“猫对狗”convnet中,类激活映射可视化允许我们为类“cat”生成一个heatmap,指示图像中猫的不同部分是怎样的,同样,对于类“dog”,指示图像中狗的不同部分是怎样的。
我们将使用的具体实现是Grad Cam中描述的:您为什么这么说?通过基于梯度的定位从深层网络进行可视化解释。它非常简单:它包括获取给定输入图像的卷积层的输出特征映射,并通过类相对于通道的梯度来加权该特征映射中的每个通道。直观地说,理解这个技巧的一种方法是,我们通过“每个通道对类的重要性”来加权“输入图像激活不同通道的强度”的空间图,从而得出“输入图像激活类的强度”的空间图。
from keras.applications.vgg16 import VGG16
K.clear_session()
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np
import cv2
#注意,我们在顶部包括了密接分类器;
#以前,我们一直在丢弃它。
model = VGG16(weights='imagenet')
'''
让我们将此图像转换为VGG16模型可以读取的内容:该模型是在224x244大小的图像上训练的,根据实用程