Pytorch-Grad-CAM—特征图可视化

论文:

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

链接:论文链接

0.CAM和Grad-CAM基于1个假设:

  • 类别c获得的softmax分数yc,是最后1层卷积特征图A(可以包含多个通道)的全局均值池化后的线性组合。

1.原理

Grad-CAM是使用任何目标概念的梯度,流入最后一卷积层,生成1个粗略的定位图来显示和【预测区域】关联性更高的区域。

Pytorch-Grad-CAM—特征图可视化_第1张图片

2.实现方式:

以上图的【猫】为例:

最后一层的特征图有:N个通道(每个通道用k表示)

1.求偏导数

计算最后一层softmax输出中【猫类】概率yc对最后一层特征图的每个通道上所有像素点Aij的偏导数,即:

在这里插入图片描述

y:是Softmax输出的概率向量,
c:是猫那一类的序号,
A:是最后一层卷积层输出的特征图,
k:是特征图的通道维度的序号,
i和j:表示特征图的某一通道上的,宽、高位置。

2.求各通道k上的敏感性权重α

在每个通道上,把yc对特征图每个像素的偏导数求出来之后,取一次宽高维度上的全局平均
Pytorch-Grad-CAM—特征图可视化_第2张图片

  • 得到所有通道k上的α,就是c类相对于最后一层卷积层输出特征图的各个通道的敏感程度权重。

3.用第二步得到的敏感性权重α,与对应通道相乘,再求和,经过ReLu层,即可得到【类激活热力图】(二维的)

Pytorch-Grad-CAM—特征图可视化_第3张图片

3.总结

第三步加ReLU,是为了得到和【c类得分】正相关的【热力图】,特征图A的某如果某个位置通过α加权值为负数,则说明这个位置不可能属于c类。
基于这个前提,我们是不是也可以加1个f(x) = min(0,x)?
这样,来看看图片中哪些位置最抑制预测c类的分数的提高呢?

你可能感兴趣的:(pytorch学习笔记,可视化)