CAM
特征图经过 GAP 处理后每一个特征图包含了不同类别的信息,其具体效果如上图的 Class Activation Mapping 中的图片所示,其中的权重 w 对应分类时的权重。这样做的缺陷是因为要替换全连接层为 GAP 层,因此模型要重新训练,这样的处理方式对于一些复杂的模型是行不通的,Grad-CAM 很好的解决了这个问题,
绘制热力图:
- 提取出所有的权重,往回找到对应的特征图,然后进行加权求和即可
- 通常来说,最后一层卷积层的大小不等于输入大小,所以我们需要把这个类激活映射上采样到原图大小,再叠加在原图上,就可以观察到网络得到这个输出是关注图片的哪个区域.
CAM 的意义就是以热力图的形式告诉我们,模型通过哪些像素点得知图片属于某个类别。
缺点
- 需要修改网络结构并重新训练模型,导致在实际应用中并不方便!
Grad-CAM
效果图:
- Grad-CAM 和 CAM 基本思路一样,区别就在于如何获取每个特征图的权重,采用了梯度的全局平均来计算权重.
定义 Grad-CAM 中第个特征图对应类别 的权重:
其中,
- 表示特征图的像素个数
- 表示第类得分的梯度
- 表示第个特征图中,位置处的像素值
然后再求得所有的特征图对应的类别的权重后进行加权求和,这样便可以得到最后的热力图,求和公式如下:
代码实现
参考
- spytensor的博客:“卷积可视化”:Grad-CAM
- global-average-pooling-layers-for-object-localization
- 《Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization》
- https://bindog.github.io/blog/2018/02/10/model-explanation/
- Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization