不需要梯度就能搞CAM之Score-CAM与Ablation-CAM

这一博文讨论关于今年CVPR workshop的Score-CAM方法和WACV的Ablation-CAM方法。两者的一大共同点就是不再像gradient-CAM那样依赖梯度生成类激活图谱,也就是他们文中宣称的gradient-free CAM。

在present新方法之前,我们先把之前的几种经典的CNN可视化解释方法过一下。包含有:梯度可视化(gradient visualization)、扰动型(perturbation)和类激活图谱(CAM-based)。

  • gradient-based:利用目标类对输入图像的导数作为可视化解释结果,即saliency map;这种方法最大的问题就是会有较大的noise,而且saliency map low quality不够obvious;
  • perturbation-based:对输入图像添加不同的有意义的扰动,然后观察模型输出的变化以确定有意义的区域;
  • CAM-based:将卷积层的feature map进行线性加权组合得到;常用的有CAM、Grad-CAM——CAM其实很简单,就是将GAP前的feature map拿出来,再将GAP后fc层与target class对应的权重拿出来,然后做linear combination就行。可以定义为:其中$\alpha_{k}^{c}=w_{l, l+1}^{c}[k]$ 也就是GAP后接的fc上拿出来的归属类别$c$的权重,$A_{l-1}^{k}$就是feature map。为什么可以这么做?因为GAP将feature map变成了$1*1$大小,紧接着的fc进行了一个映射,刚好这个映射就是针对feature map的channel映射到类别层的类别数,所以我们可以把这个$w_{l,l+1}^{c}$拿出来作为feature map的channel的重要性进行线性加权组合得到attention map。
    但是它的缺陷就是必须要求网络一定要有个GAP并且GAP后跟且仅跟一层全连接(不算最后的类别层)。为了解脱这个限制,Grad-CAM出来了。核心还是feature map进行线性加权组合的理念。这时,feature map不用动,还是提取最后一个卷积层的特征图(越往后的特征越有visual explanation,noise越少),然后就是怎么获得这个$\alpha_{k}^{c}$权重,发现在CAM中其实这个权重就是特征图$A_{l-1}^{k}$每个channel归属于类别$c$的weight。因此可以对$Y^{c}$求关于$A_{l-1}^{k}$的偏导,然后进行一次特征图大小的平均得到每个channel的weight,即:Grad-CAM
    还有Grad-CAM++ 方法是Grad-CAM的升级版,可参考Grad-CAM++: Generalized Gradient-based Visual Explanations for Deep Convolutional Networks

Score-CAM

CAM-based 方法很经典,也很好用。但是Score-CAM作者在这里宣称了CAM-based的一个问题$^*$:就是feature map进行线性加权组合时的权重$\alpha_{k}^{c}$并不总是有效。比如他说:high weight的feature map mask到input图像上后再进行输入得到的output并不一定比low weight的高。具体图示如下:
CAM not so good

The weights for activation maps (2)-(4) are 0.035, 0.027, 0.021 respectively. The values above are the increase on target score given (1)-(4) as input。

因此Score-CAM作者提出了一种他们的方法——
Score-CAM

具体的visualization流程图如上图所示。多看两眼很容易理解。首先将输入图像$X$送入trained CNN网络中得到feature maps $A_{l-1}$,将其上采样后mask到输入图像$X$上得到$k$个新输入图像$X’$,再次送入该trained CNN网络中得到属于类别$c$的预测概率作为$\alpha_{k}^{c}$然后与之前的feature maps $A_{l-1}$进行线性加权组合得到了最终的attention热图。其算法伪代码如图所示:
Alogrithm

其中有几个细节——

  1. feature maps $A_{l-1}$上采样(双线性插值)后mask到输入图像$X$上前首先进行了一个平滑操作,其实就是针对$A^{k}_{l-1}$的min max normalization;
  2. $\alpha_{k}^{c}$的表示,$\alpha_{k}^{c}=C\left(A_{l}^{k}\right)=f\left(X \circ H_{l}^{k}\right)-f\left(X_{b}\right)$,其实是输入$X’$的probability output与一个baseline输入的probability output的差。但是其实作者把baseline的输出置0了。。。 啥意思,就是$X’$的属于类别$c$的probability output作为$\alpha_{k}^{c}$;
  3. $k$个新输入图像$X’$的属于类别$c$的$\alpha_{k}^{c}$值并不在同一区间范围内,因此作者又针对$\alpha^{c}$做了$softmax$。最后来一手线性加权组合加ReLU得到attention热图。

实验评估

实验部分主要采用了一些可解释可视化领域的常用指标和方法:包括有多目标结果可视化对比、Average Drop、Average Increase、Deletion和Insertion、用检测框定量分析等。

Ablation-CAM

Ablation-CAM就不再写了。。。大体扫了一眼,和Score-CAM思路是一致的,都是从feature maps入手,只不过不是重定义输入,而是对feature maps中的一个进行remove后得到新的预测值$y’^c_k$,搞了个式子$1-\frac{y’^c_k}{y^c}$(其中$y^c$是正常没有任何remove的预测值)作为该channel的feature map的权重$\alpha_{k}^{c}$,然后继续线性加权组合得到attention热图。

Score-CAM和Ablation-CAM个人理解

  • $^*$Score-CAM作者宣称的Grad-CAM方法的弊端我个人是不敢苟同的,因为gard-cam的目标是所有feature maps的线性加权组合,而单个channel feature map的weight意义并不那么重要;以及,单个channel feature map mask到input上并不是CAM的方式,而只是Score-CAM作者为了引出他们自己方法的一个过渡手段。
  • 这里提出的Score-CAM和Ablation-CAM本身还是没有跳出特征线性加权组合的框架,甚至丢失了CAM以及grad-CAM方法的一个最重要特性:对attention map进行GAP后得到的值即为归属于类别$c$的预测值。
  • 最后,私人评论:这两篇都是乍看很惊喜,但是通读下来并没有太多热情的文章。还是Grad-CAM的方法更优美

参考文献