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.mfbz.cn/a/232254.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringSecurity6 | 自定义登录页面

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏&#xf…

基于Vue框架的电子商城购物平台小程序的设计与开发

基于JavaWebSSMVue电子商城购物平台小程序系统的设计和实现 源码获取入口KaiTi 报告/Ren务书Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告/Ren务书 一、选题的目的和意义 自从微信推出了微信小程序…

1.cloud-微服务架构编码构建

1.微服务cloud整体聚合父工程 1.1 New Project 1.2 Maven选版本 1.3 字符编码 1.4 注解生效激活 主要为lombok中的Data 1.5 java编译版本选8 1.6 File Type过滤 *.hprof;*.idea;*.iml;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Store;.git;.hg;.svn;CVS;__pycache__;_svn;vssver.scc;v…

Web 开发的 20 个实用网站

Web 开发的 20 个实用网站 作为一名前端开发工程师,我们一定使用过很多工具来提高自己的工作效率。它们可以是网站、文档或 JavaScript 库。 本文将分享30个有趣的网站。 JavaScript正则表达式可视化工具 https://jex.im/regulex/#!flags&re%5E(a%7Cb)*%3F%…

金南瓜SECS/GEM C# SDK 快速使用指南

本文对如何使用金南瓜SECS/GEM C# SDK 快速创建一个满足SECS/GEM通信要求的应用程序,只需简单3步完成。 第一步:创建C# .NET程序 示例使用Visual Studio 2010,使用者可以选择更高级版本 Visual Studio 第二步:添加DLL库引用&am…

力扣37. 解数独(java回溯解法)

Problem: 37. 解数独 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题可以使用回溯来模拟穷举。回溯问题通常涉及到可选列表,决策阶段,决策路径,而对于本题目我们选择将棋盘的每一个格子作为决策阶段,为此我们应该解…

短视频ai剪辑分发矩阵系统源码3年技术团队开发搭建打磨

如果您需要搭建这样的系统,建议您寻求专业的技术支持,以确保系统的稳定性和安全性。 在搭建短视频AI剪辑分发矩阵系统时,您需要考虑以下几个方面: 1. 技术实现:您需要选择适合您的需求和预算的技术栈,例如使…

STM32 配置TIM定时中断常用库函数

单片机学习! 目录 ​编辑 1. 函数TIM_DeInit 2. 函数TIM_TimeBaseInit 配置时基单元 3. 函数TIM_TimeBaseStructInit 4. 函数TIM_Cmd 运行控制 5. 函数TIM_ITConfig 中断输出控制 6. 时基单元的时钟选择函数 6.1 函数TIM_InternalClockConfig 6.2 函数 TIM…

【图论笔记】克鲁斯卡尔算法(Kruskal)求最小生成树

【图论笔记】克鲁斯卡尔算法(Kruskal)求最小生成树 适用于 克鲁斯卡尔适合用来求边比较稀疏的图的最小生成树 简记: 将边按照升序排序,选取n-1条边,连通n个顶点。 添加一条边的时候,如何判断能不能添加…

python数据分析小案例:天猫订单数据综合分析

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 本数据集共收集了发生在一个月内的28010条数据,包含以下: 7个字段说明 订单编号:订单编号 总金额:订单总金额 买…

if语句和switch语句来确定金额之下的优惠折扣

一、优惠规则 输入相应的金额,可以获得规则之下,金额相应的享受的折扣,需要先定义金额,然后就是使用if语句进行判断,使用switch语句选择判断规则之下对应的优惠折扣。 二、相关代码 public class DiscountPrice {p…

Dockerfile文件

什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。 docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Docke…

ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders

1.关于稀疏卷积的解释:https://zhuanlan.zhihu.com/p/382365889 2. 答案: 在深度学习领域,尤其是计算机视觉任务中,遮蔽图像建模(Masked Image Modeling, MIM)是一种自监督学习策略,其基本思想…

rpc原理与应用

IPC和RPC? RPC 而RPC(Remote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式。 gRPC 是 Google 最近公布的开源软件,基于最新的 HTTP2.0 协议,并支持常见…

【计算机网络】HTTPS协议原理

目录 一. HTTPS的基础概念 二. 概念准备 1. 密码学 2. 为什么要加密 三. 常见加密方式 1. 对称加密 2. 非对称加密 四. HTTPS原理探究 五. CA认证 1. 数据指纹&&数据摘要 2. 证书 3. 签名与验证 4. 琐碎知识点 5. 总结——完整流程 结束语 一. HTTPS的基…

开发猿的平平淡淡周末---2023/12/9

上周回顾 完成了遗留的开发任务,基本全部完成进一步了解了系统当时设计的原理熟悉了代码的重构 2023.12.9 天气晴 温度适宜 前言 小伙伴们大家好,时间很快,又来到了周末,也是一个平平淡淡的周末。上周只更了一篇博客...原…

交换机基本原理和配置

目录 一、数据链路层功能 二、交换机的工作原理 三、交换机的四大功能 一、数据链路层功能 位于网络层与物理层之间 数据链路的建立、维护与拆除帧包装、帧传输、帧同步帧的差错恢复流量控制 二、交换机的工作原理 交换机通过数据帧的源 MAC 地址,学习到交换机端…

讲座 | 颠覆传统摄像方式乃至计算机视觉的“脉冲视觉”

传统相机拍摄视频时其实是以一定帧率进行采样,视频其实还是一串图片的集合,因此低帧率时会觉得视频卡,拍摄高速运动物体时会有运动模糊等等问题。然而你能想象这一切都可以被“脉冲视觉”这一前沿技术改变吗? 今天下午听了北京大学…

数据库数据恢复—Mysql数据库误删表数据的数据恢复案例

mysql数据库数据恢复环境: 本地服务器,windows server操作系统 ,部署有mysql单实例,数据库引擎类型为innodb,独立表空间,无数据库备份,未开启binlog。 mysql数据库故障: 工作人员使…

前端vue3——实现二次元人物拼图校验

文章目录 ⭐前言⭐vue3拖拽实现拼图💖 思路分解💖 布局结构💖 拖拽函数💖 校验函数💖 inscode整体代码 ⭐运行效果💖 随机顺序💖 拖拽中💖 校验失败💖 校验通过 ⭐总结⭐…