CAM和GradCAM

时间:2022-10-04 16:51:36

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和GradCAM

  • 每个类别都可以得到一个对应的CAM热力图(标注类别是dome,通过CAM解释后,发现网络其实可以感知出其他语义信息)

CAM算法非常简单,只要模型结构符合CAM的默认要求,就无需重新训练网络,可以做到直接使用:
CAM和GradCAM

  • CAM很简单,但是要求必须要有一个GAP层(Global average pooling层),否则不能得到最后一个feature maps的每个channel的特征图(热力图)对应的权重。
  • 如果没有GAP,需要把模型末端改成GAP+全连接层的形式,并重新训练网络。

GradCAM-Gradient-weighted Class Activation Mapping

GradCAM的提出是为了解决CAM对模型架构的要求限制,GradCAM方法如下:
CAM和GradCAM

  • GradCAM概述:给定一张图像和一个感兴趣的类别(例如,"cat"或任何其他类别的输出)作为输入,我们通过模型的CNN部分前向计算图像,然后通过特定任务(task-specific)的计算获得该类别的原始分数。所有类别的梯度都设置为零,但所需类别"cat"除外,该类别设置为1。然后,该信号被反向传播到Rectified Conv Feature Maps,我们将其结合起来计算粗糙GradCAM(蓝色热图),该热力图表示模型决策的局部激活(类似CAM)。最后,我们将热图与引导反向传播(Guided Backprop,输入图像级的梯度)逐点相乘,以获得高分辨率和语义特定的Guided GradCAM可视化。

以图像分类为例,具体的GradCAM计算过程如下:
CAM和GradCAM

  • 图像经过CNN得到特征图 A \textbf{A} A(灰色的Rectified Conv Feature Maps),然后不经过GAP,而是直接flatten,然后输入全连接层再输出logit类别概率。
  • 此时,在不改变模型的情况下,我们不能使用CAM来解释,我们对类别 c c c,通过前向传播,我们可以知道模型预测图像属于类别 c c c的概率为 y c y^{c} yc,利用反向传播,获得类别 c c c关于 A \textbf{A} A上第 k k k张特征图的位置 ( i , j ) (i,j) (i,j)的梯度 ∂ y c ∂ A i j k \frac{\partial y^{c}}{\partial\textbf{A}_{ij}^{k}} Aijkyc
  • 该梯度的物理意义是: A \textbf{A} A上第 k k k张特征图的位置 ( i , j ) (i,j) (i,j)的激活值进行微小改变,会引起 y c y^{c} yc改变的变化量。
  • 然后,对梯度特征图(彩色)进行GAP,得到CAM算法中需要的权重,通过将权重与 A \textbf{A} A(灰色的Rectified Conv Feature Maps)进行加权,得到类别 c c c对应的GradCAM。