Grad-CAM 笔记
Global Average Pooling
为了提到CAM,首先要从这里说起。
在 Network in Network 这篇论文里,作者扔掉了分类任务中喜闻乐见的全连接层,转而替换为了一个全局的平均池化。
假设 Backbone 部分最终得到了一个 的特征。记有 类, 不必 和 相等,全连接层有 个参数。第 个标签的置信度是从这 的所有数值得到的,每类最终汇聚得到一个 的数组。
现在,GAP的做法是在前一步就生成一个 的特征。而后直接对每一个 Channel 取在 上的平均值,最终得到一个 的数组。
在这种情况下,倒逼精品化特征图的每个通道都成为了对应到特定类别的置信。又由于卷积网络保留位置的特性,大可以认为这个置信度会成为一张很合理的图。
这种设计有一个很有趣的点,就是它不再关心输入图像的分辨率了。并且全连接层大量的参数被撤掉,对泛化有一定好处。不再展开。
回到 CAM
GAP 实现的分类网络最终也会通过一个 softmax 来得到最终的结果。
在 Learning Deep Features for Discriminative Localization 里,特征图没有直接一一对应到类的置信度上,而是又经过了一个全连接层。所以你能看到它给出的即将输入到 softmax 里的参数 长这个样子
所以 CAM 最终是多个特征图的加权。
Grad-CAM
很显然,原始的 CAM 必须在 特征[1]和 GAP 上才能使用。为了在以 CNN 为特征提取结构的任意网络上都能使用,基于梯度的 Grad-CAM 被提出。
不知道有没有必要提,Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization 算是证明了一下 Grad-CAM 是 CAM 的泛化。
Grad-CAM 的想法就是用梯度平均替换掉原公式中的 ,因为在缺少 GAP 后无法直接获取。
公式中的 仍然指代类别和通道, 为想要求出激活图的特征图, 则是置信度。虽然标准化会消除 softmax 的影响,但为了防止梯度消失的精度问题,建议使用 softmax 前的结果。
Grad-CAM++
有人认为这种整个通道取梯度平均作为 的想法还不够意思(事实上它的效果也确实不太好),所以给出了一个与位置也相关的加权方法。
代码
Under construction…
参考
- Review: NIN — Network In Network (Image Classification)
- Learning Deep Features for Discriminative Localization
- Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
- Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks
- 如果你乐意改的话,因为加入了额外的全连接层,实际上通道数现在已经不需要定死为 了。但 GAP 还是必不可少的。 ↩