CAM系列

该篇博客介绍CAM系列的文章包括3个。CAM Grad_CAM Grad_CAM++

1 Learning Deep Features for Discriminative Localization

这篇文章2016年发表于CVPR。在flatten层使用全连接层能够破坏卷积层的特征(比如记住物体位置等)的基础上,研究了用GAP/GMP代替flatten层全连接层,用softmax作为输出层时,GAP与GMP的区别并且证明了GAP可以记住物体的位置,为了展示定位的效果,提出一直种新的可视化方法:CAM(class activation map)。

创新

  1. 证明了GAP不仅起到正则化、防止过拟合的作用,并且可以定位物体
  2. 试验表明GAP(global average pool)比GMP更适用于定位,GAP与GMP在分类问题上作用相似。
  3. 提出CAM。
  4. 实验表明对于定位任务来说,最后一层卷积层即在GAP之前,特征图分辨率越大,结果越精确。

缺点

可以生成CAM的网络必须符合: 网络的结构为Conv->GAP(flatten层)->[conn]->softmax.
其中conn负责将神经元是数量转为输出类别的数量。

CAM

class activation map。
过程:使用贡献正确预测类别的权重(w1、w2…)与最后一层特征图的每个通道分别相乘然后想加,最后在upsample到原图像大小即可。过程如下图所示。
CAM系列_第1张图片

2 Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization

这篇文章2017年发表于ICCV。分析了CAM的缺点,在CAM基础上进行改进,生成两种图Grad_CAM(gradient-weighted graded cam)和Guided Grad_CAM用于可视化对分类结果起到重要作用的区域。适用于基于CNN的分类网络,范围比CAM更广泛。Grad_CAM含有calss discriminative特性,Guided Grad_CAM组合了Grad_CAM和 Graded Backpropagation,不仅含有calss discriminative还包含high-resolution特性。代码可以参考我的简单复现Grad-CAM

创新

提出Grad_CAM和Guided Grad_CAM,适用于基于CNN的分类网络,可视化对分类结果起到重要作用的区域。

缺点

只适用于基于CNN的分类网络。

Grad_CAM

正确的分类结果对最后一层特征图的导数与该特征图分别相乘然后想加,最后经过RELU激活函数。
文中从画图和公式两方面展示生成Grad_CAM的过程。
生成Grad_CAM如下图:
CAM系列_第2张图片
公式:
生成CAM的公式: L C A M c = ∑ k w k c ∗ A k L^c_{CAM}=\sum_k w_k^c *A_k LCAMc=kwkcAk,其中 A A A表示最后一层特征图。
生成Grad_CAM公式: L G r a d _ C A M c = ∑ k α k c ∗ A k L^c_{Grad\_{CAM}}=\sum_k \alpha_k^c *A_k LGrad_CAMc=kαkcAk,其中 α k c \alpha^c_k αkc计算公式如下:CAM系列_第3张图片
通过公式中构造的gap,将权重 α k c \alpha^c_k αkc的形状转为 ( b s , c h a n n e l s , 1 ) (bs, channels, 1) (bs,channels,1),然后在与特征图按通道分别相乘最后相加。

Relu的作用

CAM与Grad_CAM除了权重表示不同外还有一个重要区别,Grad_CAM使用了Relu激活函数,这直接影响了结果。
作用:负值表示类别之间的噪声(不属于任何一类),Relu可以抑制负值。
CAM系列_第4张图片

Guided Grad_CAM

结合了Grad_CAM的优点可定位分类区域和guided Backpropagation或deconvolution的优点高分辨率,生成的一种图。实验结果表明使用guided Backpropagation的效果更优。

3 Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks

2018年发表于WACV会议的一篇文章, 官方tensorflow代码在Guided CAM基础上,在计算权重方面进行改进,体现在两个方面:

  1. Guided propagation的权重计算方法为正确得分值对最后一层的fmp求导,在每一个通道上求所有位置的平均值,然后与fmp相乘最后想加,Grad-CAM++并不是在每一个通道上求所有位置的平均值而是为每个位置赋予权重系数,该系数可以计算出来。
  2. Grad-CAM++为导数加了一个relu。

Guided propagation的权重表示方式为:
在这里插入图片描述
Grad-CAM++的权重表示方式为:
在这里插入图片描述
从这两个公式可以看出,这两种方法的区别。设:
在这里插入图片描述
其中 Y c Y^c Yc为输出得分,是一个关于需要求导的fmp的可导函数的值,该公式中省略了GAP步骤。

w k c w_k^c wkc代入该公式,两边对 A i j k A_{ij}^k Aijk两次求导,可以计算出
在这里插入图片描述

化简二次求偏导公式

化简 α i j k c \alpha_{ij}^{kc} αijkc需要的前提条件是:模型最后一层激活函数层是线性的或relu激活函数,只有这样二阶求导才是0。
模型部分图如下所示:

CAM系列_第5张图片
假设scores记作为 S c S^c Sc,经过exp后输出记作 Y c Y^c Yc,那么:
在这里插入图片描述
最后化简 α i j k c \alpha_{ij}^{kc} αijkc的值为:
在这里插入图片描述
因此只需要一次反向传播就可以计算出来。

总结

CAM系列的对比如下图:
CAM系列_第6张图片
简单来讲,CAM用的是conn层权重,Grad-CAM用的是得分对最后一层卷积层的导数,Grad-CAM++用的是加权的最后一层卷积层的导数。

你可能感兴趣的:(show,CNN,计算机视觉)