CAM来自Learning Deep Features for Discriminative Localization, CVPR2016;
GradCAM来自Grad-CAM: Visual Explanations From Deep Networks via Gradient-Based Localization, ICCV 2017;
CAM和GradCAM的提出是基于图像分类背景,但是我们应该学会其算法思想,这可以帮我们迁移到后期的其他深度学习研究中。
CAM-class activation mapping
CAM即类别激活映射,CAM是一个很简单的算法,对于一张图像,每个类别都可以得到一个CAM热力图,并且表现出视觉任务上的早期注意力机制。
- 每个类别都可以得到一个对应的CAM热力图(标注类别是dome,通过CAM解释后,发现网络其实可以感知出其他语义信息)
CAM算法非常简单,只要模型结构符合CAM的默认要求,就无需重新训练网络,可以做到直接使用:
- CAM很简单,但是要求必须要有一个GAP层(Global average pooling层),否则不能得到最后一个feature maps的每个channel的特征图(热力图)对应的权重。
- 如果没有GAP,需要把模型末端改成GAP+全连接层的形式,并重新训练网络。
GradCAM-Gradient-weighted Class Activation Mapping
GradCAM的提出是为了解决CAM对模型架构的要求限制,GradCAM方法如下:
- GradCAM概述:给定一张图像和一个感兴趣的类别(例如,"cat"或任何其他类别的输出)作为输入,我们通过模型的CNN部分前向计算图像,然后通过特定任务(task-specific)的计算获得该类别的原始分数。所有类别的梯度都设置为零,但所需类别"cat"除外,该类别设置为1。然后,该信号被反向传播到Rectified Conv Feature Maps,我们将其结合起来计算粗糙GradCAM(蓝色热图),该热力图表示模型决策的局部激活(类似CAM)。最后,我们将热图与引导反向传播(Guided Backprop,输入图像级的梯度)逐点相乘,以获得高分辨率和语义特定的Guided GradCAM可视化。
以图像分类为例,具体的GradCAM计算过程如下:
- 图像经过CNN得到特征图(灰色的Rectified Conv Feature Maps),然后不经过GAP,而是直接flatten,然后输入全连接层再输出logit类别概率。
- 此时,在不改变模型的情况下,我们不能使用CAM来解释,我们对类别,通过前向传播,我们可以知道模型预测图像属于类别的概率为,利用反向传播,获得类别关于上第张特征图的位置的梯度。
- 该梯度的物理意义是:上第张特征图的位置的激活值进行微小改变,会引起改变的变化量。
- 然后,对梯度特征图(彩色)进行GAP,得到CAM算法中需要的权重,通过将权重与(灰色的Rectified Conv Feature Maps)进行加权,得到类别对应的GradCAM。