[可解释性分析]GradCAM
1. 前言
出自《Visual Explanations From Deep Networks via Gradient-Based Localization》,对原生CAM(类激活热力图)改进,计算“特定类别预测分数相对于最后一层卷积层输出特征图每个元素的偏导数”,进而计算特征图每个channel对模型预测为特定类别的影响程度。无需修改模型,无需重新训练,即可对已有卷积神经网络模型绘制特定类别的Grad-CAM热力图,展示指定类别在原图上重点关注的特征区域,并用图像分类实现弱监督定位。可推广至图像分类、图像描述、视觉问答等多个任务。
2. CAM的局限
在CAM中,存在几个局限与缺点:
- 网络中不能使用池化,不然会丢失长宽方向位置信息。
- 网络中必须有GAP层,如果没有,需要修改网络重新训练。
- 只能分析最后一层卷积输出,无法分析中间层。
GradCAM解决了以上几个问题,并提出了好的可解释性算法的两个标准:
- 高分辨率。
- 类别判别性。
3. GradCAM的基本原理
如上图所示以一般的卷积神经网络为例,首先网络进行正向传播,得到特征层A(一般指的是最后一个卷积层的输出)和网络预测值y(注意,这里指的是softmax激活之前的数值)。假设我们想看下网络针对Tiger Cat这个类别的感兴趣区域,假设网络针对Tiger Cat类别的预测值为y^c。接着对y^c进行反向传播,能够得到反传回特征层A的梯度信息A’ 。通过计算(按每个通道求平均)得到针对特征层A每个通道的重要程度,然后进行加权求和通过ReLU就行了,最终得到的结果即是Grad-CAM。
至于为什么梯度能够代表feature map的重要性,我觉得以下的说法比较有道理:
首先得到的特征层A是网络对原图进行特征提取得到的结果,越往后的特征层抽象程度越高,语义信息越丰富,而且利用CNN抽取得到的特征图是能够保留空间信息的(Transformer同样)。所以Grad-CAM在CNN中一般A都指的是最后一个卷积层的输出(参考下图实验,越往后的特征层效果越好)。当然特征层A包含了所有我们感兴趣目标的语义信息,但具体哪些语义信息对应哪个类别我们并不清楚。接着通过对类别c的预测值 y^c进行反向传播,得到反传回特征层A的梯度信息Aˊ ,那么A’就是y^c对A求得的偏导,换句话说,A ˊ 代表A中每个元素对y^c的贡献,贡献越大网络就认为越重要。然后对Aˊ在w,h上求均值就能得到针对A每个通道的重要程度(这里是对于类别c而言的)。最后进行简单的加权求和在通过ReLU就能得到文中所说的Grad-CAM。
每个feature map通道的权重公式:
最终的Grad-CAM结果:
实验证明,加了RELU函数后可以过滤无关特征,效果更好。
除此之外,GradCAM也能直接运用到其他任务中,如图像描述视觉问答等,如下图所示。
不过GradCAM虽然能够判别类别,但是它是粗粒度的,为了得到既有类别判别性又是高分辨率的可视化结果,作者提出了Guided Grad-CAM,即混合了Guided Backpropagation和GradCAM,具体做法是将GradCAM双线性插值到256*256,再与Guided Backpropagation的结果进行逐元素相乘,最后的结果,既具备高分辨率(显示条纹等细节),又有类别判别性(显示猫而不是狗)
4. GradCAM的优缺点及后续工作
4.1. 优点
- 无需GAP层,无需修改模型结构,无需重新训练。
- 可分析任意中间层。
- 数学上是原生CAM的推广。
- 细粒度图像分类、Machine Teaching。
4.2. 缺点
- 图像上有多个同类物体时,只能画出一块热力图。
- 不同位置的梯度值,GAP平均之后,影响是相同的。
- 梯度饱和、梯度消失、梯度噪声。
- 权重大的channel,不一定对类别预测分数贡献大。
- 只考虑从后往前的反向传播梯度,没考虑前向预测的影响。
- 深层生成的粗粒度热力图和浅层生成的细粒度热力图 都不够精准。
为了解决GradCAM的以上缺点,后续又出了很多变种算法。
4.3. 后续CAM变种算法
Grad-CAM++
解决的缺点:
- 图像上有多个同类物体时,只能画出一块热力图。
- 不同位置的梯度值,GAP平均之后,影响是相同的。
ScoreCAM
解决的缺点:
- 梯度饱和、梯度消失、梯度噪声。
- 权重大的channel,不一定对类别预测分数贡献大。
- 只考虑从后往前的反向传播梯度,没考虑前向预测的影响。
LayerCAM
解决缺点:
深层生成的粗粒度热力图和浅层生成的细粒度热力图都不够精准。
5. 参考
[2] Grad-CAM简介
(完)