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

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

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类激活热力图。

image.png

所以最后其实是得到最后的M c按照权重,最后进行上采样回原图的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使得弱监督学习发展成为可能,可以慢慢减少对人工标注的依赖,能降低网络训练的成本。通过可视化,就像往黑箱子里打了一个手电筒,让人们可以尝试去理解网络,是非常好的一篇论文。

参考阅读

  • 可以根据按照代码教程:https://github.com/TommyZihao/Train_Custom_Dataset,用pytorch训练自己的图像分类模型,基于torch-cam实现各个类别、单张图像、视频文件、摄像头实时画面的CAM可视化
  • torch-cam库的github https://github.com/frgfm/torch-cam


相关文章
|
1月前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
59 1
|
1月前
|
机器学习/深度学习 算法
【机器学习】迅速了解什么是集成学习
【机器学习】迅速了解什么是集成学习
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】机器学习、深度学习、强化学习和迁移学习简介、相互对比、区别与联系。
机器学习、深度学习、强化学习和迁移学习都是人工智能领域的子领域,它们之间有一定的联系和区别。下面分别对这四个概念进行解析,并给出相互对比、区别与联系以及应用场景案例分析。
87 1
|
3月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
67 7
|
3月前
|
机器学习/深度学习 运维 算法
【阿里天池-医学影像报告异常检测】3 机器学习模型训练及集成学习Baseline开源
本文介绍了一个基于XGBoost、LightGBM和逻辑回归的集成学习模型,用于医学影像报告异常检测任务,并公开了达到0.83+准确率的基线代码。
68 9
|
3月前
|
机器学习/深度学习
【机器学习】模型融合Ensemble和集成学习Stacking的实现
文章介绍了使用mlxtend和lightgbm库中的分类器,如EnsembleVoteClassifier和StackingClassifier,以及sklearn库中的SVC、KNeighborsClassifier等进行模型集成的方法。
55 1
|
3月前
|
机器学习/深度学习 人工智能 算法
AI人工智能(ArtificialIntelligence,AI)、 机器学习(MachineLearning,ML)、 深度学习(DeepLearning,DL) 学习路径及推荐书籍
AI人工智能(ArtificialIntelligence,AI)、 机器学习(MachineLearning,ML)、 深度学习(DeepLearning,DL) 学习路径及推荐书籍
127 0
|
4月前
|
机器学习/深度学习 算法 前端开发
集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
|
5月前
|
机器学习/深度学习 人工智能 算法
人工智能平台PAI产品使用合集之在执行shade打包后遇到“类找不到”的错误,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 人工智能 缓存
人工智能平台PAI使用问题之如何配置学习任务
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。