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

简介: 【学习打卡04】可解释机器学习笔记之Grad-CAM

Grad-CAM介绍

其实 CAM 得到的效果已经很不错了,但是由于其需要修改网络结构并对模型进行重新训练,这样就导致其应用起来很不方便。

CAM的缺点

  1. 必须得有GAP层,否则得修改模型结构后重新训练
  2. 只能分析最后一层卷积层输出,无法分析中间层
  3. 仅限图像分类任务

Grad-CAM解决了上述问题,基本思路和CAM是一致的,也是通过得到每对特征图对应的权重,最后求一个加权和。区别是求解权重的过程,CAM通过替换全连接层为GAP层,重新训练得到权重,而Grad-CAM另辟蹊径,用梯度的全局平均来计算权重。事实上,经过严格的数学推导,Grad-CAM与CAM计算出来的权重是等价的。

Grad-CAM是CAM的泛化形式

实际上Grad-CAM是CAM的泛化形式,论文中也给出了证明两种方式得到的权重是否等价的详细过程,如果有需要可以阅读论文进行推导。这里为了与 CAM 的权重进行区分,定义 Grad-CAM 中第 k个特征图对应类别 c 的权重为α k c

image.png

下图是论文中给出的 Grad-CAM 整体结构图:

提醒:

论文中对最终的加权结果进行了一次 ReLU 激活处理,目的是只考虑对类别 c 有正影响的像素点。

Gard-CAM可视化结果

可解释性分析

Image captioning task图像语义理解

VQA任务


弱监督定位

弱监督分割

可视化每一层的结果

消除偏见

这个问题非常有意思,在论文6.3章节中举了个非常有意思的例子,作者训练了一个二分类网络,Nurse和Doctor。如下图所示,第一列是预测时输入的原图,第二列是Biased model(具有偏见的模型)通过Grad-CAM绘制的热力图。第三列是Unbiased model(不具偏见的模型)通过Grad-CAM绘制的热力图。通过对比发现,Biased model对于Nurse(护士)这个类别关注的是人的性别,可能模型认为Nurse都是女性,很明显这是带有偏见的。比如第二行第二列这个图,明明是个女Doctor(医生),但Biased model却认为她是Nurse(因为模型关注到这是个女性)。而Unbiased model关注的是Nurse和Doctor使用的工作器具以及服装,明显这更合理。

Grad-CAM算法的优点

  1. 无需GAP层,无需修改模型结构,无需重新训练
  2. 可分析任意中间层
  3. 数学上是原生CAM的推广
  4. 细粒度图像分类、Machine Teaching

Grad-CAM算法的缺点

  1. 图像上有多个同类物体时,只能画出一块热力图,比如在一张图片有三只猫,他热力图对其中一只猫画热力图
  2. 不同位置的梯度值,GAP平均之后,影响是相同的
  3. 梯度饱和、梯度消失、梯度噪声
  4. 权重大的channel,不一定对类别预测分数贡献大
  5. 只考虑从后往前的反向传播梯度,没考虑前向预测的影响
  6. 深层生成的粗粒度热力图和浅层生成的细粒度热力图 都不够精准

Grad-CAM变种

在后续的发展中,刚刚介绍了Grad-CAM的缺点,而下面的变种就是为了解决上述的六个缺点的。

Grad-CAM++

Grad-CAM++相比Grad-CAM,定位更准确,能够适用于一张图片中的同类多目标的情况,也就是解决了上述第一个缺点

Grad-CAM++的提出是为了优化Grad-CAM的结果,定位会更精准,也更适用于目标类别物体在图像中不止一个的情况。Grad-CAM是利用目标特征图的梯度求平均(GAP)获取特征图权重,可以看做梯度map上每一个元素的贡献是一样。而本文认为梯度map上的「每一个元素的贡献不同」,因此增加了一个额外的权重对梯度map上的元素进行加权。

除此之外,还可以解决第二个缺点,通过基于每个梯度对应的权重,这样就不会导致不同位置的梯度值,GAP以后是一样的,比如中间的和角落位置的肯定是不同的。

Score-CAM

Score-CAM的方法是解决了以上的3,4,5缺点,首先对于第3个缺点,只要有求梯度,一般都会出现梯度的问题,可能来源于梯度本身,即梯度的饱和性(类似于Sigmoid函数,当特征强度超过一定程度,其梯度可能会变小),以及梯度本身的不稳定性(局部的梯度受噪声影响很大),甚至是梯度消失的影响。有可能出现关于输入的梯度或内部层激活可能在视觉上是有噪音的。而可以看到Score-CAM相较于此前的方法,可视化的结果明显更为聚焦,背景中的噪声减少。

除此之外,第四个缺点是权重大的channel,不一定对类别预测分数贡献大,这是因为有时候激活是不一定大的。

以及除了关注反向传播的梯度之外,也涉及了前向传播,通过设计以下的模型,Score-CAM也解决了第五个缺点。

Layer-CAM

还有就是最后的Layer-CAM,他解决了上述问题的第六个缺点,也就是深层生成的粗粒度热力图和浅层生成的细粒度热力图都不够精准,从下图我们可以看出,结果非常的好,甚至可以用来做分割任务了,从浅到深是越来越粗粒度的。

思考与总结

  • Grad-CAM有哪些应用? (提示:缺陷检测、弱监督定位、细粒度分类)
  • Grad-CAM相比CAM有哪些改进?
  • Grad-CAM和CAM为什么在数学上是等价的 ?
  • 取不同层做Grad-CAM可解释性分析,效果会有何不同 ?
  • 强化学习如何使用Grad-CAM做可解释性分析?
  • Grad-CAM有什么缺点?如何改进 ?
  • Grad-CAM++对Grad-CAM做了哪些改进?
  • ScoreCAM对Grad-CAM做了哪些改进?
  • LayerCAM对Grad-CAM做了哪些改进?
  • 你是否能想出更好的基于CAM的显著性分析方法?

看了大概的Grad-CAM,感觉上,GradCAM优点就是效果好,改进了CAM;缺点应该是在一张图片中存在多个相同物体的情况下,可能效果会不太好。但是不可否认的是,这种应用的前景广阔,比如在寻找对于网络最敏感的区域上,特别是说在一些machine teaching的任务上,比如缺陷检测中,因为标注成本是非常大的,但是有了Grad-CAM可以迅速寻找对于网络敏感的区域,那些区域可能就是缺陷的区域。

Grad-CAM的缺点上述已经列出来了,之后出现的Grad-CAM的变种Grad-CAM++,ScoreCAM,LayerCAM分别对Grad-CAM的三个缺点进行了改进,使得得到更好的结果。

从现在开始,我们只需要少量的代码,利用Grad-CAM,就可以识别对神经网络模型特征提取图实现可视化,然后使我们清楚地看到神经网络究竟是根据图像的那部分特征进行识别的,对我们的帮助是特别大的,减少了大量的训练成本。我觉得Grad-CAM在CAM的基础上,拥有了更好的泛化性,是非常make sense的,在学习之余,我也不禁开始惊呼,有时候我所认为的黑箱子,还能玩出这么有趣的东西,并且我认为,他们在弱监督的学习上,必将占据一席之地。

参考阅读

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


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