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

news2024/12/23 18:50:57

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

文章目录

  • 可解释机器学习笔记之Grad-CAM
    • Grad-CAM介绍
    • Grad-CAM是CAM的泛化形式
    • Gard-CAM可视化结果
    • Grad-CAM算法的优点
    • Grad-CAM算法的缺点
    • Grad-CAM变种
      • Grad-CAM++
      • Score-CAM
      • Layer-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

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 \alpha_k^c αkc, 可以通过下面的公式计算得到:
α k c = 1 Z ∑ i ∑ j ∂ y c ∂ A i j k \alpha_k^c=\frac{1}{Z}\sum\limits_{i}\sum\limits_{j}\frac{\partial y^c}{\partial A_{ij}^k} αkc=Z1ijAijkyc
参数解析:

  • Z: 特征图的像素个数;
  • y c y^c yc:第 c 类得分的梯度 (the gradient of the score for class c);
  • A i j k A_{ij}^k Aijk: 第 k 个特征图中, ( i , j ) (i,j) (i,j) 位置处的像素值;

然后再求得所有的特征图对应的类别的权重后进行加权求和,这样便可以得到最后的热力图,求和公式如下:
L G r a d − C A M c = R e L U ( ∑ k α k c A k ) L_{Grad-CAM}^c=ReLU(\sum\limits_k\alpha_k^cA^k) LGradCAMc=ReLU(kαkcAk)
下图是论文中给出的 Grad-CAM 整体结构图:

img

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

Gard-CAM可视化结果

可解释性分析

img

Image captioning task图像语义理解

img

VQA任务

img

弱监督定位

img

弱监督分割

img

可视化每一层的结果

img

消除偏见

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

img

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上的元素进行加权。

img

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

img

Score-CAM

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

img

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

img

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

img

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP S4 FICO 固定资产模块后台配置详解

1. 概述 资产会计(FI-AA)作为总帐模块(FI-GL)的子分类帐,对企业的固定资产、无形资产、在 建工程、低值易耗品、长期待摊、从购置、资本化、折旧、调拨到出售/报废的整个生命周期 进行全过程的管理,并和…

java实现给微信群中定时推送消息

大家好,我是雄雄。 前言 上一篇,我们介绍了如何通过调用接口的方式,将每日新闻发送到自己的博客中。我们会发现,将新闻以文章的形式发布,并且相关内容按照markdown的形式进行格式调整,有需要的可以点击这里…

获取小程序生产、开发、体验等环境、版本信息、appid等信息

if (typeof __wxConfig "object"){const version __wxConfig.envVersion;console.log("当前环境:" version)if (version "develop"){cosole.log(测试 开发环境)}else if (version "trial"){cosole.log(测试 体验版)}else if (versio…

【电力系统】基于YALMIP+CPLEX求解带储能的微电网优化调度问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

【树莓派不吃灰】兄弟连篇② 文件编辑器vim与RPM软件包管理、yum

目录1、文件编辑器Vim1.1 工作模式1.2 插入命令1.3 定位命令1.4 删除命令1.5 复制和剪切命令1.6 替换和取消命令1.7 搜索和搜索替换命令1.8 保存和退出命令1.9 使用技巧2、yum包管理2.1 网络yum源2.2 yum命令2.3 rpm包与源码包安装位置❤️ 博客主页 单片机菜鸟哥,一…

联盛德W801开发板流水灯示例

联盛德W801开发板流水灯示例📺📽🎞🎬本实验通过利用开发板中间的7个led,控制对应的IO实现流水灯效果。 📜W801 32位WiFi蓝牙双模SoC开发板 🛠开发工具以及示例Demo工程 参考:《W801…

【数学模型】基于ARMR模型模拟风速附matlab完整代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

图计算的学习与思考

好的软件不是靠程序分析、查错查出来的,而是由正确的人构建出来的。图成为日益重要的运算对象,图结构是对群体关系的一种抽象,可以描述丰富的对象和关系。图计算的核心是如何将数据建模为图结构以及如何将问题的解法转化为图结构上的计算问题…

MySQL高级【存储引擎】

目录 1:Mysql体系结构图: 2:存储引擎简介 3:存储引擎特点 InnoDB存储引擎: MyISAM存储引擎: Memory存储引擎: 4:存储引擎选择 5:存储引擎小结 1:Mysq…

.net core 在arm linux 上运行

一、环境 开发板:OKMX6ULL 硬件:cortex A7 软件环境:Linux version 4.1.15-00041-g92e8c0f (zsdeveloper-RH2485-V2) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Mon May 24 17:20:23 CST 2021 .net core 版本: 二、问题 1…

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了。 ShellPhish是一个可定制的网络 go-fish 工具,基于SocialFish。 支持以下社交平台: Instagram Facebook Twitter Snapchat Github Yahoo…

Linux学习笔记——Linux基础命令

02、Linux基础命令 2.1、Linux的目录结构 1、学习目标 掌握Linux系统的目录结构掌握Linux系统的路径表达式 2、Linux的目录结构是一个树型结构 Windows系统可以拥有多个盘符,如C盘、D盘、E盘 Linux没有盘符这个概念,只有一个根目录/,所有…

【大数据趋势】趋势在发生变化,稍安勿躁。

昔日(12月以前)行情核心源头 : 纳斯达克指数主连日线,趋势预测准确,继续筑底可能中 回顾一下上周大数据预测的趋势,指数用上引线方式神奇完成目标 【12.3趋势模拟情况】 预计:趋势不变情况下,预测反弹到黄金分割线…

基于预训练和对比学习的新意图发现

前言 从对话人的语句中发现新意图是一个研究方向 一般来说就是对句子通过聚类来解决这一问题,所以这里通常会涉及到两个问题: (1)怎么表征好一个句子 (2)怎么更好的聚类 今天就给大家介绍本篇~&…

通信技术对自动驾驶发展的关键作用

【摘 要】随着自动驾驶的快速发展,新技术逐渐涌现,通信技术被产业认为是未来网联化自动驾驶发展的关键技术。从通信角度出发,分析通信技术为自动驾驶在技术及可靠性、成本控制、以及社会效益方面带来的提升,详细介绍了3GPP R16 5G-V2X在自动驾驶业务方面带来的技术优化,并…

Spring Boot整合分布式搜索引擎ElasticSearch 实现相关基本操作

文章目录一、ElasticSearch 介绍二、环境准备三、创建Spring Boot项目导入依赖四、创建高级客户端五、基本操作索引操作文档操作批量插入数据其他操作六、总结一、ElasticSearch 介绍 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据…

【MySQL】史上最全的MySQL高性能优化总结

【MySQL】史上最全的MySQL高性能优化总结 【1】深入理解MySQL索引底层数据结构与算法 1. 为什么不使用二叉树、红黑树、B树来作为索引? 2. MyISAM 与 Innodb存储引擎有什么区别? 3. MySQL 的索引按照功能分类可以分几种? 4. MySQL 的的聚…

《领导力就是不装》——读书摘要

最近阅读的这本领导力就是不装–游戏化思维引领管理变革,分析问题的视角有新意,值得一看。以下是我的一点读书摘要。 领导力的三个关键点 具备进行管理变革、引领大家去解决难题的能力。具备成就他人、成就团队,让人才涌现,引领…

100天精通Python(数据分析篇)——第69天:Pandas常用数据筛选方法(between、isin、loc、iloc)

文章目录每篇前言一、布尔索引二、between()三、isin()1. 单列筛选2. 多列筛选3. 通过字典的形式传递多个条件4. 删除异常值所在行5. isnotin实现四、loc、iloc(重要)0. 创建DataFrame1. 提取行数据2. 提取列数据3. 提取多列数据4. 提取指定行、指定列数…

vmware16安装windows server 2008 VMware Tools

vmware16安装windows server 2008,安装完成后不会自动安装VMware Tools。而是出现如下提示: 简易安装正在安装Windows Server 2008 R2 x64。安装完操作系统后,需要手动安装VMware Tools。请参阅 https://kb.vmware.com/s/article/78708 附件下载 本文…