Grad-CAM原理

这篇是我对哔哩哔哩up主 @霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享

只要大家一提到深度学习

缺乏一定的解释性

比如说在我们之前讲的分类网络当中

网络它为什么要这么预测

它针对每个类别所关注的点在哪里呢

在great cam这篇论文当中呢

就完美的解决了在cam这篇论文当中存在一些问题

在great cam当中

我们既不需要修改网络的结构

也不需要对网络做进一步的训练

举个非常有意思的一个例子

这里呢我们也来简单的聊一聊

那么首先呢作者训练了一个二分类网络

也就是针对护士以及医生这两个类别的

那对于这个带有偏见的模型呢

首先对于护士这个类别

你会发现他预测的是正确的

然后通过我们绘制热力图呢

你会发现其实它主要关注的区域是在人脸的这个区域

大家想想你通过人脸就能分辨出他是医生还是护士吗

其实我个人觉得仅仅通过人脸是很难区分出来的

然后接下来我们再看下面这个图

也就是它的正确标签应该是医生

但是我们这个带有偏见的模型呢

它预测的结果是护士 预测错误

这个不带偏见的模型

它是根据不同职业所使用的器械或者说工具

以及它的穿着来得出最终预测结果的

那么很明显

这相比于我们仅仅通过人脸来判断他的职业要更加的科学一些

那么再看一下这个图

这个带偏见的模型呢

它学到特征其实是有问题的

那么作者呢有进一步分析这个带偏见模型它所对应的训练的数据集

然后作者发现在这个数据集当中

护士这个类别绝大多数都是女性

所以这就导致了训练得到这个模型

它是带有偏见的

那么为了解决这个问题呢

作者就调整了一下训练数据当中不同职业男女之间的一个比例

那么调整均衡之后再去训练网络

就得到了这个不带偏见的模型

那么它的测试集的准确率由原来的%多

提升到了%多的明显效果是变好了的

所以我觉得作者举这个例子呢是值得我们大家去思考以及借鉴

cam的适用性非常强的

然后我们来看一下我刚刚提供的关于这个pytorch实现cam这个仓库

那么在这个仓库下呢

还提供了比如说像目标检测以及语义分割的一些使用方法

其实作者有给出对应的一个使用教程啊

那么这里我给出针对目标检测的语义分割的

还有针对使用像transformer模型

它的一个使用的案例

那么大家有兴趣的话可以自己去看一下

那接着我们再回到我们的ppt当中

我们现在就以图像分类这个任务为例啊

那么黑色这个箭头呢代表的是我们正向传播的一个过程

蓝色这个箭头呢代表的是梯度反传的一个过程

那比如说针对我们图像分类这个任务

假设我想看一下对于tiger cat这个类别

我们网络究竟关注的区域在哪

那么他就根据网络预测的tiger cat这个类别的数据进行一个反向传播

这里的数据是没有通过softmax激活的

我们就能得到针对这个特征层A的一个反向传播的梯度信息

比如说我把它标记为A'

然后呢作者对这里的a撇在它的每一个通道位置上去求一个均值

那么就得到我们这里的每一个w

那这里的w呢就是针对我们这个特征层a每一个通道的一个权重

然后接下来做的再进行一个加权求和

通过relu函数得到我们最终的great cam【还要通过relu?】

那这里呢我简单的讲一下我个人的一个看法

首先是关于得到这个特征层A是网络对原图进行特征提取得到的结果

那一般呢越往后的特征层它的抽象程度越高

语义信息呢也是越来越丰富

并且利用cnn过去得到这个特征层

它是能够保留空间信息的

那么在我们得到的最终的这个特征层A上呢

它对应的激活区域差不多也是在这个位置

所以说我们声音网络它是能够保留空间信息的

其实不光是cnn

包括我们最近常用的transformer模型也是一样的

那么在原论文的图当中呢

我们一般所说的这个特征成层A都是指的卷一层当中最后一个卷积层

它所输出的特征层

然后这里的A'是y(c)对A求得这个偏导

那么换句话说就是A'

它代表的是A中每个元素对我们最终这个y(c)结果一个贡献值

那么贡献越大就代表网络认为它有越重要

所以呢接下来我们对A'在每个通道上去取均值

就能得到针对特征层A每个通道的重要程度

然后我们再进行一个加权求和

以及通过relu函数就能得到我们这里的一个cam

那么这里呢我们用公式来进行表示的话

那么接下来我们来举个例子

方便大家理解

对cat类别进行反向传播

然后我们通过relu之后呢

就将那些小于零的数据全部给设置成零

就得到我们最终的great cam有输出了

那么讲呢肯定有人对这里的A'求解是抱有疑惑的

那如果你想了解这个A'怎么求解的话

你可以去看一下我写这个博文

(51条消息) Grad-CAM简介_gradcam_太阳花的小绿豆的博客-CSDN博客

当然在我们去实现的过程当中

其实我们不需要自己去计算

因为现有的新中学框架它都会自动帮我去计算

再对CAM进行resize变成原图大小

之后再将CAM转化成彩色形式(原CAM是单通道的非彩色)

然后将原图scale处理

将scale后的原图add已处理完的cam

将add后的结果再进行scale

即可得到覆盖了cam的输出图片

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

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

相关文章

java多线程(常用方法、实现方式、线程安全问题、生命周期、线程池)

多线程相关的三组概念 程序和进程 程序(program):一个固定的运行逻辑和数据的集合,是一个静态的状态,一般存储在硬盘中。简单来说就是我们编写的代码 进程(process):一个正在运行的…

游戏玩家升级不伤手之选,光威龙武系列超强性能

得益于国产存储芯片的崛起,现在的内存条价格太香了。要放在前几年,购买内存条时都会优先考虑国际一线品牌。随着内存条行业发生巨变,国产品牌光威GLOWAY,是全球前三的内存模组厂商嘉合劲威旗下品牌,它推出的内存条产品…

Zebec 推出由 Visa、万事达网络支持的即时支付卡,加密支付新征程

“Zebec现已推出全新的加密支付卡,该卡由Visa、万事达网络支持,具备即时、多链、非托管、无需KYC、免费等特性,其能够通过加密钱包与多条主流公链链接并直接调用支付,这将是加密支付领域的里程碑事件。” 在2023年的12月8日&#…

【python交互界面】实现动态观察图像在给定HSV范围的区域显示

HSV颜色空间 与RGB颜色空间相比,HSV颜色空间更适合进行颜色分析和提取特定颜色的目标。在HSV空间中,颜色信息被分布在不同的通道上,使我们能够更准确地定义颜色的范围,并使用阈值操作轻松地分离出我们感兴趣的区域部分。 HSV三个通…

二叉树查找值为x的结点(C语言)

目录 前言 查找值为x的结点 返回值为指针 返回值为布尔类型 整体代码 前言 在二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算(C语言)中,我们解决了关于二叉树的部分问题,但是还有一个问题我们放在本篇解决。 …

数据集成和人工智能驱动的见解

数字时代使数据成为人们关注的焦点,将其从单纯的二进制序列转变为有价值的组织资产。随着企业越来越多地转向数据驱动战略,数据管理的复杂性也随之增加。当前的任务不仅仅是存储甚至收集数据,而是将其转化为可操作的情报。本博客旨在剖析寻求…

Python中的selenium安装的步骤(浏览器自动化测试框架)

一、前言 我们今天要安装的selenium 就是浏览器自动化测试框架,是一个用于Web应用程序的测试工具,就是模拟用户操作。支持的浏览器包括Chrome,IE,Mozilla Firefox,Safari,Opera等。今天我们以Chrome为例讲…

STM32单片机项目实例:基于TouchGFX的智能手表设计(2)UI交互逻辑的设计

STM32单片机项目实例:基于TouchGFX的智能手表设计(2)UI交互逻辑的设计 目录 一、UI交互逻辑的设计 1.1 硬件平台的资源 1.2 界面切换功能 ​​​​​​​1.3 表盘界面 1.4 运动界面 ​​​​​​​1.6 设置界面 ​​​​​​​1.7 应…

不一样的年会彩瞳推荐,绮芙莉多款彩瞳彰显个性

临近年底,各种公司年会、跨年晚会活动也逐渐排上日程,出席这种正式场合,每个人都有自己的“杀手锏”,从发型妆容到穿搭都是变美小细节,作为心灵之窗的双眸,更需要一副彩瞳来提升我们的眼妆质感,…

【SpringBoot】解析Springboot事件机制,事件发布和监听

解析Springboot事件机制,事件发布和监听 一、Spring的事件是什么二、使用步骤2.1 依赖处理2.2 定义事件实体类2.3 定义事件监听类2.4 事件发布 三、异步调用3.1 启用异步调用3.2 监听器方法上添加 Async 注解 一、Spring的事件是什么 Spring的事件监听(…

持续集成交付CICD:使用Jenkins插件上传Nexus制品

目录 一、实验 1.使用Jenkins插件上传Nexus制品 一、实验 1.使用Jenkins插件上传Nexus制品 (1)Jenkins安装插件Nexus Artifact Uploader (2)添加凭据 (3)使用片段生成器生成DSL (4&#xf…

docke网络之bridge、host、none

一、bridge网络 1.创建一个测试容器 [rootlocalhost ~]# docker run -d -it --name busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" 03b308c847edd23f21ba69afb825d92f7aaeb05b1ff4431dd47ccee439a0361a 2.查看当前机器docker有哪些网络 [rootlocal…

2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

AI材料专题报告:AI革命催生新需求国产替代推动新方向

今天分享的AI系列深度研究报告:《AI材料专题报告:AI革命催生新需求国产替代推动新方向》。 (报告出品方:光大证券) 报告共计:25页 1、算力需求增长催生 800G 光模块需求 算力是数字经济时代新生产力&…

2023年10月9日 Go生态洞察:深入了解类型推断及其更多细节

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

【C++ Primer Plus学习记录】if语句

目录 一、if语句 二、if else语句 三、格式化if else语句 四、if else if else结构 一、if语句 if语句让程序能够决定是否应执行特定的语句。 if有两种格式:if和if else。 if语句的语法与while相似: if(test-condition)statement; 如果test-con…

Android 从assets读取文件装载成Bitmap,Kotlin

Android 从assets读取文件装载成Bitmap,Kotlin /*** fileName assets里面图片文件名*/fun readBitmapFromAssets(ctx: Context, fileName: String): Bitmap? {val assetManager: AssetManager ctx.assetsvar bitmap: Bitmap? nulltry {val inputStream assetMa…

Java预科知识

以下内容是根据狂神的Java说、chatgpt和csdn相关博客,结合自己的理解完成的。 Java了解 基于Java 开发了巨多的平台,系统,工具 构建工具: Ant, Maven, Jekins应用服务器:Tomcat, Jetty, Jboss, Websphere, weblogic…

程序员入门:打造抖音同城外卖小程序的技术解析

在当今数字化时代,外卖平台已经成为人们生活中不可或缺的一部分,而抖音作为一款社交媒体平台,也开始涉足同城外卖服务。本文将为初学者提供一份关于如何打造抖音同城外卖平台的技术解析,探讨其中的关键技术和步骤。 一、项目规划…

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )

文章目录 一、cin.ignore() 函数1、cin.ignore() 函数简介2、cin.ignore() 函数原型3、代码示例 - cin.ignore() 函数 二、cin.peek() 函数1、cin.peek() 函数简介2、代码示例 - cin.peek() 三、cin.putback() 函数1、cin.putback() 函数简介2、代码示例 - cin.putback() 一、c…