学习打卡03可解释机器学习笔记之CAM类激活热力图

Posted 风信子的猫Redamancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习打卡03可解释机器学习笔记之CAM类激活热力图相关的知识,希望对你有一定的参考价值。

可解释机器学习笔记之CAM类激活热力图

文章目录


首先非常感谢同济子豪兄拍摄的可解释机器学习公开课,并且免费分享,这门课程,包含人工智能可解释性、显著性分析领域的导论、算法综述、经典论文精读、代码实战、前沿讲座。由B站知名人工智能科普UP主“同济子豪兄”主讲。 课程主页: https://github.com/TommyZihao/zihao_course/blob/main/XAI 一起打开AI的黑盒子,洞悉AI的脑回路和注意力,解释它、了解它、改进它,进而信赖它。知其然,也知其所以然。这里给出链接,倡导大家一起学习, 别忘了给子豪兄点个关注哦。

学习GitHub 内容链接:
https://github.com/TommyZihao/zihao_course/tree/main/XAI

B站视频合集链接:
https://space.bilibili.com/1900783/channel/collectiondetail?sid=713364

CAM介绍

一直以来,深度神经网络的可解释性都被大家诟病,训练一个神经网络被调侃为“炼丹”。所得的模型也像一个“黑盒”一样,给它一个输入,然后得到结果,却不知道模型是如何得出结论的,究竟学习到了什么知识。如果能将其训练或者推理过程可视化,那么可以对其更加深入的理解,目前深度神经网络可视化可以分为:

  • 可视化卷积核;

  • 可视化特征图;

  • 可视化激活热力图,也就是不同位置像素点对得出结果的影响程度

图 神经网络可视化汇总

其中,可视化卷积核 (a) 的方法最早出现,早在 2012 年的 AlexNet 就借助它来帮助解释 CNN 中卷积核的作用。

可视化特征图 (b) 方法出自 2014 年的《Visualizing and Understanding Convolutional Networks》一文,也就是上一期的学习的ZFNet的方法,这种方法通过反卷积和反池化对特征图进行了可视化,对于浅层网络的可视化效果良好。

可视化类激活热力图(Class Activation Map, CAM),也就是本文的主角,提出自 2015 年,它能够更进一步地可视化神经网络在预测某一类别时,具体关注了图像的哪些像素。在此基础上,近年来也一直有改进的方法被提出,比如Grad-CAM,ScoreCAM等等

image from woopets(activation maps created with a pretrained Resnet-18)

简单总结:

  1. 对深度学习实现可解释性分析、显著性分析

  2. 可扩展性强,后续衍生出各种基于CAM的算法

  3. 每张图片、每个类别,都能生成CAM热力图

  4. 弱监督定位:图像分类模型解决定位问题

  5. 潜在的“注意力机制"

  6. 使得Machine Teaching成为可能

CAM算法原理

首先我们可以看到,他的过程实际上就是一个新的CNN网络,从输入图像,到CNN网络,再到一个全局平均池化GAP。从最后一个GAP中我们可以得到512个平均值,得到512个feature之后,最后的线性层实际上就是对得到的512个feature让神经网络去学习哪个的权重更大,最后得到最后的预测结果。

GAP全局平均池化

在常见的卷积神经网络中,全连接层之前的卷积层负责对图像进行特征提取,在获取特征后,传统的方法是接上全连接层之后再进行激活分类,而GAP的思路是使用GAP来替代该全连接层(即使用池化层的方式来降维),更重要的一点是保留了前面各个卷积层和池化层提取到的空间信息\\语义信息,所以在实际应用中效果提升也较为明显!最早是在 Network In Network 中提出的。

这个全局平均池化,其实是对512x14x14的feature map进行做平均,这样就得到了512个平均值。实际上,GAP直接从 feature map 的通道信息下手,比如我们现在的分类有N种,那么最后一层的卷积输出的 feature map 就只有N个通道,然后对这个 feature map 进行全局池化操作,获得长度为N的向量,这就相当于直接赋予了每个通道类别的意义。

用GAP代替线性层是很有意义的,比如在VGG中,线性层的参数几乎占据所有参数的90%,所以进行替换是很有必要的;除此之外,我们会看到ResNet也有全局池化层。因为线性层不是起主要作用的,但是却占据了很多的参数,在ZFNet中也已经探究过了最后一层了,所以替换为GAP层既能减少参数,也不会太对模型造成影响。

GAP简单总结

  • 取代全连接层,避免使用全连接层导致参数量爆炸

  • 全局平均池化 (GAP) 减少参数量、防止过拟合

  • 而且每个GAP平均值,间接代表了卷积层最后一层输出的每个channel

GAP VS GMP

这里面作者讲了一下GAP和GMP,那为什么不用GMP呢,实际上GAP对关键区域范围内的特征都有影响,但在GMP中,非最大值的特征不影响模型分类性能,虽然GAP和GMP分类性能接近,但定位性能不同,所以最后还是选择了GAP。

CAM算法的缺点及改进

CAM算法确实很不错,但是他也存在一部分的缺点

1.必须得有GAP层,否则得修改模型结构后重新训练

2.只能分析最后一层卷积层输出,无法分析中间层

所以在后续的Grad-CAM中,针对这两个问题就进行了改进,利用求梯度的方法,这样就不需要对模型重新训练,并且也可以对每一层卷积层都能进行分析,得到最后的激活图,后续会对Grad-GAM进行学习。

CAM简单概括即为:修改网络全连接为GAP形式,利用GAP层与全连接的权重作为特征融合权重,对特征图进行线性融合获取CAM。

CAM可视化

通过线性分类权重,间接反映了类别对通道(channel)的关注程度,最后一层卷积层既保留了语义信息,又保留了位置信息。将某一类的线性分类权重与最后一层卷积层进行对应相乘,可得到该类的CAM类激活热力图。

假设 f k ( x , y ) f_k(x, y) fk(x,y) 表示最后一层卷积层输出的feature map中第 k k k 个channel上坐标为 ( x , y ) (x, y) (x,y) 的值,将 F k F^k Fk 记为全局平均池化GAP值,即:
F k = ∑ x , y f k ( x , y ) F^k=\\sum_x, y f_k(x, y) Fk=x,yfk(x,y)
对于某一类 c c c , softmax层的输入值记为 S c S_c Sc ,即:
S c = ∑ k w k c F k S_c=\\sum_k w_k^c F_k Sc=kwkcFk
其中, w k c w_k^c wkc 表示第 k k k 个channel的类 c c c 的权重。最后softmax层的输出值记为 P c P_c Pc ,即
P c = exp ⁡ ( S c ) ∑ c exp ⁡ ( S c ) P_c=\\frac\\exp \\left(S_c\\right)\\sum_c \\exp \\left(S_c\\right) Pc=cexp(Sc)exp(Sc)
M c M_c Mc 为类 c c c 的CAM值,记为:
M c ( x , y ) = ∑ k w k c f k ( x , y ) M_c(x, y)=\\sum_k w_k^c f_k(x, y) Mc(x,y)=kwkcfk(x,y)
S c = ∑ x , y M c ( x , y ) S_c=\\sum_x, y M_c(x, y) Sc=x,yMc(x,y)

所以最后其实是得到最后的 M c M_c Mc,按照权重,最后进行上采样回原图的shape,最后就可以得到我们的类激活热力图。

同张图,不同类别

除此之外,由于因为CAM基于分类,所以被激活的区域是根据分类决定的,即同一个特征图,只更新不同的权重。所以即使我们使用同一张input,就像下面这个例子,这一同一张图,查看不同的类别

示例图片的地面真值是圆顶。五张类激活映射分别是前五名预测类别和得分。我们可以看到如果输出是宫殿,网络关注的是整块区域的。如果输出是圆顶,网络只是关注宫殿顶部。

不同图,同个类别

我们还可以查看,不同图,同个类别的可视化,从中我们会发现,实际上抓取的信息都是类别的主要特征,比如狗主要的是头的特征等的,这些也可以体现出CAM的重要意义

CAM弱监督定位

所谓的弱监督定位,实际上是用图像分类标注训练定位、检测、分割。

在早期的方法中,有一些比如可使用图像遮挡测试进行定位,可使用重叠图块进行预测,但是这些工作需要多次前向预测,并且是非端到端的;也可使用全局最大池化,导致只能获得边缘点,而非物体范围。

但是提出了CAM之后,这个方法可以使用GAP全局平均池化后进行绘制CAM热力图,并进行物体定位,只需要取连通图的20%的区域画出框,就可以得到结果。

直观上来说,CAM表示出了神经网络较为关注的区域,并且确定了类别,所以我们就可以认为,神经网络关注的区域按理来说,应该是类别的区域,在下图,我们也可以看到出来的他的表现,可以看出来,表现的还是比较好的,论文中认为IOU的阈值为0.5,最后的准确率大概能达到41%以上,比随机框的0.5%好很多。

用语义特征编码进行分类

由于我们的GAP层后,学习到了一部分有用的特征,所以在这个时候,我们就可以取出这一部分语义特征,对语义特征进行分类,其实简单来说,就是把训练好的模型的GAP层的输出,放到SVM线性层进行分类,判断是否能学到知识,其实我觉得这个和线性层是类似的,是相同的。除此之外,作者还在很多数据集上进行了测试,都得到了不错的结果,也侧面说明,实际上GAP从中还是学习到了很多的知识的。

CAM各种有意思的应用

CAM还可以利用在很多有意思的区域,这里面列了几种,还是非常有意思有意义的,也侧面展示了CAM是非常非常有用的,让我也个人感觉是非常make sense的。

发现场景中有意义的物体

我们可以用CAM可以看到场景中的一些物体,我们可以看到CAM关注的区域,实际上就是,对于场景有重要意义的位置。

定位比较抽象的概念

还可以通过一个短语训练一个网络,通过检测文字的信息,这样可以得出图像和短语中有意义判断的区域

弱监督文字检测

还可以进行文字检测,进行文字检测,我们可以看到CAM图关注的还是文字的区域

VQA任务

我们还可以做VQA任务,我们可以对得到结果在图像中表现出来,比如brown是哪一部分,在图像中也会展示出来。

显著性分析的意义

在学习过程中,我发现很有意思的一个东西,就是从Machine Learning到Machine Teaching,在视频中讲解了一个博士做的一个工作的结果,在一定的训练和学习的时候,AI已经能够达到远超人类的能力了,这个时候,AI已经可以可以教一些工人去学习,告诉他们哪一部分是比较重要的了,去teach和帮助人类去学习了。

包括还有一篇比较有意思的论文,Making a Bird AI Expert Work for You and Me,AI已经可以教你去识别各种鸟类了,他可以帮助你成为专家,教你去学习

其实听到这一部分,我觉得很有意思,实际上AlphaGo不就是在做这样的事情么,包括腾讯的绝艺机器人成为国家的陪练,这时候AI已经超过了人类的,他可以反过来去教人类怎么下围棋,怎么跳出一个已有的框,得到更好的结果。

但是,有些人说的也对,这有什么意义呢,如果AI已经表现的很好,那我们的钻研可能就变成了没什么意义了,有些人苦练围棋三十载,准备一鸣惊人的时候,AI已经双手插兜,找不到对手了,那他可能苦练的意义就不大了,这也是一种悲哀。不过在某一方面,AI在学习,我们人也在学习,科技的进步一定是有意义的,一定会对我们的生活带来好处。

总结和思考

  • 为什么要对深度学习模型做可解释性分析和显著性分析?
  • CAM有哪些应用场景?
  • CAM方法,与基于梯度和反向传播的显著性分析方法,有什么区别?
  • 原始的CAM方法有什么缺点?后续有哪些算法做了什么样的改进?
  • 论文中,如何用CAM热力图实现物体的定位?这种定位方法的巧妙之处是什么?
  • 如何理解CAM的“弱监督定位” ?
  • 哪些经典的图像分类网络中用到了GAP层?
  • GAP层在普通卷积神经网络中的作用是什么?
  • GAP层在CAM中的作用是什么?
  • 原生CAM仅用于图像分类,针对目标检测、图像分割、关键点检测等涉及位置坐标的Dense Prediction任务,如何进行可解释性分析和显著性分析?
  • CAM方法有哪些缺点?如何改进?

对于CAM中的弱监督的物体定位,其实是用图像分类标注训练定位、检测、分割,可使用图像遮挡测试进行定位,可使用重叠图块进行预测,这些工作需要多次前向预测,并且是非端到端的;也可使用全局最大池化,导致只能获得边缘点,而非物体范围。可以使用GAP方式进行绘制CAM热力图,并进行物体定位,只需要取连通图的20%的区域画出框,就可以得到结果。

与反向传播的显著性分析方法来比,实际上CAM生成是一个粗粒度的矩阵,而基于反向传播的方法实际上生成的比较细粒度的矩阵,在CAM的附件中有,他的方法实际上是求了对于每一个像素的梯度,所以是比较细粒度的,这两者是不同的,从下图我们也可以看到一些比较。

在论文中,实际上是通过对CAM热力图的连通性进行操作,取最大值的20%的区域进行画框,这样就可以完成定位,这样定位的巧妙之处在于,实际上不需要通过更多的任务,我们只通过有图像分类的数据集就可以实现物体的定位,非常巧妙。

在一些经典的图像分类网络中,我所知道的Inception和ResNet其实就用到了GAP层,这其实极大的减少了参数,也提高了网络的泛化性,是一个很好的尝试和改进。

读了这篇论文后,让我知道,CAM 可视化可以帮助我们理解模型原理,分析预测错误的原因。但是需要注意的是,CAM 的可视化只能解释模型在分类时关注的区域;除此之外,CAM使得弱监督学习发展成为可能,可以慢慢减少对人工标注的依赖,能降低网络训练的成本。通过可视化,就像往黑箱子里打了一个手电筒,让人们可以尝试去理解网络,是非常好的一篇论文。

参考阅读

以上是关于学习打卡03可解释机器学习笔记之CAM类激活热力图的主要内容,如果未能解决你的问题,请参考以下文章

学习打卡05可解释机器学习笔记之CAM+Captum代码实战

学习打卡05可解释机器学习笔记之CAM+Captum代码实战

学习打卡05可解释机器学习笔记之CAM+Captum代码实战

学习打卡可解释机器学习之导论

学习打卡01可解释机器学习之导论

学习打卡04可解释机器学习笔记之Grad-CAM