CAM算法介绍

本篇文章主要讲解基于类激活映射CAM的热度图绘制。算法原理出自论文: Learning Deep Features for Discriminative Localization(CVPR 2016)。其精妙之处在于:

  1. 对深度学习实现可解释性分析、显著性分析
  2. 可扩展性强,后续衍生出各种基于CAM的算法
  3. 假令每张图片的每个类别,都能生成对应类的CAM热力图
  4. 弱监督定位:使用图像分类模型解决定位问题,将定位信息保留到模型的最后一层
  5. 潜在的“注意力机制”,可体现出某一类下主要关注的特征
  6. 可用于Machine Teaching,实现以人为核心的应用。

CAM的可视化解释性分析

输入一张image,由CAM及其衍生算法,我们可以通过热力图准确得知神经网络提取到的图像特征。以狗为例,可见信息提取范围相差不大,且符合我们日常识别的标准。

值得一提的是,CAM衍生算法各有各的优劣,如GradCAM加入了梯度,同时可以将GAP(Global Average Pooling)层换为全连接层,能够在一定程度上优化网络架构。

从这张图就能清晰地明确GradCAM、GradCAM++等衍生算法的异同,相比之下LayerCAM关注的范围更大,而EigenGradCAM关注点更加集中。结合对CAM衍生算法的说明,例如EigenGra-dCAM利用了激活梯度的第一主成分,因此自然提取特征范围较小以达到clean的目的。

利用CAM,还可以通过对同一张图片标注不同类别,呈现出对应的热力图,以明确神经网络具体怎么提取特征。当label为宫殿时,显然应关注到整张图片的主体部分,可以发现神经网络以0.459的置信水平能够认为输入图片是一个宫殿,根据呈现的热力图,能够认为与人类识别的主观意识相差不大。

CAM的网络架构

原始输入image首先进入全卷积神经网络,将图像的所有特征聚集于最后一个conv层上,此时为512个channel的14×14 feature map,之后通过GAP形成512个平均数,再和与之对应的线性分类权重相乘,将结果最后通过softmax则得到每一个类的后验概率,最大值即为识别结果。

通过Class Activation Mapping,可以看出某一类别对各个feature map的注意力机制,通过与对应的系数乘积,即可以识别图像的方法进行图像的定位。

假设 f_k(x,y) 表示最后一层卷积层输出的feature map且经过GAP后第k个channel上坐标为(x, y)的值,将 F^k 记为全局平均池化GAP值,即:

对于某一类c,softmax层的输入值记为 S_c ,即:

​其中, w_k^c ​表示第k个channel的类c的权重。

最后softmax层的输出值记为 P_c ​,即:

CAM中引入了GAP,对于池化层的应用当前众说纷纭,随着当前模型越来越复杂,人们更多认为池化起着防止过拟合的作用,以下以CAM为例简述池化的作用。

池化的引入能够在保持原有信息特征的基础上减少计算量,而相比之下更重要的是考虑其平移不变性的作用。

将原始数据图像平移,可见最终池化层输出的结果不变,即池化对图像的平移不敏感,这意味着将丢失长宽方向的位置信息,因此这也解释了为什么在CAM提取特征信息的过程中,主体部分均由卷积神经网络组成,而并没有从中穿插池化层。

GAP与FC的对比

在图中,GAP中的每个feature map代表每一个channel,相比之下,利用GAP代替FC,好处在于能够减少参数量、防止过拟合。同时也显现出CAM算法的缺点:

1. 必须存在GAP层,否则需修改模型重新训练

2. 只能分析最后一层卷积层输出,无法对中间层进行可解释性分析

GradCAM

GradCAM在CAM基础上,将GAP用FC代替,同时加入梯度的思想,如某类C为Tiger Cat时,通过反向传播得到的梯度与之前最后一层卷积层的输出结果做相关运算,求和之后再通过ReLU,即可得到GradCAM的结果。

文章以CVPR 2016的CAM算法为例,重点讲解了网络模型架构及可视化的可解释性分析,从基础推导层面分析了池化层的作用,GAP与FC的异同以及以GradCAM为例的衍生算法分析,并提出了更进一步的思考 resnet152 python class _ activat ion _ map .py --model_name resnet18 --input_image data/ ca r.jpg在results /目录中生成输出 CA M覆盖图像。 要另外保存gif动画,请执行以下操作: python class _ activat ion _ map .py --model_name resnet18 --input_image data/ ca r.jpg --save_gif | | | | CVRP 2015,原文链接:http://arxiv.org/abs/1512.04150 官方开源代码:http://cnnlo ca lizat ion .csail.mit.edu/ 本文总结: 1、池化(最大池化,平均池化,全局平均池化【GAP】)的作用:正则化(防止过拟合,降低维度,保留主要特征的同时减少计算量,减少了参数数量) 2、使用GAP来代替FC,优点是最小化参数数量的同时保持高性能
本篇博客是转载,目的是学习记录,同时可以让更多有此学习需求的人看到,若有侵权,联系必删! 以下已经将全部内容移植过来,供学习参考,并在此附上原文链接,欢迎各位到原博关注点赞!! 0,可视化的重要性: 深度学习 很多方向所谓改进模型、改进网络都是在按照人的主观思想在改进,常常在说模型的本质是提取特征,但并不知道它提取了什么特征、哪些区域对于识别真正起作用、也不知道网络是根据什么得出了分类结果。为了增强结果的可解释性,需要给出模型的一些可视化图来证明模型或新methods对于任务的作用,这一点不仅能增加新模型或新