CAM实现的流程--基于Pytorch实现

news2024/11/24 17:32:44

CAM实现的流程

  • CAM类激活映射
    • CAM是什么
    • CAM与CNN

CAM类激活映射

CAM是什么

  • 可视化CNN的工具, CAM解释网络特征变化,CAM使得弱监督学习发展成为可能,可以慢慢减少对人工标注的依赖,能降低网络训练的成本。通过可视化,就像往黑箱子里打了一个手电筒,让人们可以尝试去理解网络。
  • 在不同空间位置处存在这些视觉图案的加权线性和, 通过简单地将类激活映射上采样到输入图像的大小,我们可以识别与特定类别最相关的图像区域
    在这里插入图片描述
     GAP就是把特征图转换成特征向量,每一层特征图用一个值表示,所以如果这个特征图的深度是512,那么这个特征向量的长度就是512                                                                     Australian terrier这个类对应的权重乘上特征图对应的层,用热力图归一化,即下面一排热力图:W1*蓝色层+W2*红色层+…+Wn*绿色层=类激活映射(CAM),所以说CAM是一个加权线性和

[step1:选择可视化的特征层,例如尺寸为 16∗16∗1024 的特征图 step2:获取该特征的每个channel的权重,即长度为1024的向量; step3:通过线性融合的方式,把不同channel的权重赋回原特征图中,在依次的将各个通道的特征图线性相加获取尺寸为1616的新特征图; step4:对该新特征图进行归一化,并通过插值的方式还原到原图尺寸]:

  • CAM基于分类,所以被激活的区域是根据分类决定的在这里插入图片描述
  • 改变网络结构,例如把全连接层改成全局平均池化层,这不利于训练
  • 在弱标记图像中定位比较抽象的概念:
    在这里插入图片描述
  • CAM可视化这可以帮助我们理解网络,通过CAM技术,我们可以看到网络关注哪里,可以利用CAM帮助我们发现问题,改进结构

CAM与CNN

CNN的操作可以看做是滤波器对图片进行特征提取,被一层层卷积核提取后,基本就是卷积核判断是重要的信息,其值越大,特征越明显,得到卷积的关注度就越高。

一个深层的卷积神经网络,通过层层卷积操作,提取出语义信息和空间信息,我们一直都很希望可以打破深度神经网络的黑盒,可以溯源特征提取的过程,甚至可以知道特征所代表的语义内容, 通常每一层的特征图还会有很多的层,我们一般用channel表示,这些不同层(通道)特征图,我们可以认为理解为存放着卷积提取到不同的特征。随着卷积的逐层深入,该特征已经失去了原有的空间信息和特征信息,被进一步的集成压缩为具有高度抽象性的特征图。这些特征图所代表的语义信息我们不得而知,但是这些特征图的重要性我们却可以通过计算得出。所以我们的CAM主要作用就是根据不同通道的贡献情况,融合出一张CAM图,那么我们就可以更直观的了解到在图像中那些部分是在CNN中是高响应的重要信息,哪些信息是无关紧要的无聊信息

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

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

相关文章

HTML 和 CSS 来实现毛玻璃效果(Glassmorphism)

毛玻璃效果简介 它的主要特征就是半透明的背景,以及阴影和边框。 同时还要为背景加上模糊效果,使得背景之后的元素根据自身内容产生漂亮的“变形”效果,示例: 代码实现 首先,创建一个 HTML 文件,写入如下…

cuda编程day001

一、环境: ①、linux cuda-11.3 opecv4.8.0 不知道头文件和库文件路径,用命令查找: # find /usr/local -name cuda.h 2>/dev/null # 查询cuda头文件路径 /usr/local/cuda-11.3/targets/x86_64-linux/include/cuda.h # find /usr/…

【AUTOSAR应用层详细介绍|应知应会】

AUTOSAR应用层详细介绍 文章目录 AUTOSAR应用层详细介绍前言一、软件组件1.1 软件组件的分类二、数据类型三、端口与端口接口3.1 端口3.2 端口接口四、软件组件的内部行为五、AUTOSAR虚拟功能总线 VFB前言 AUTOSAR 包含一个分层的架构,其中最顶层抽象程度最高的是应用层,应用…

LeetCode42.接雨水

这道题呢可以按列来累加,就是先算第1列的水的高度然后再加上第2列水的高度……一直加到最后就是能加的水的高度,我想到了这里然后就想第i列的水其实就是第i-1列和i1列中最小的高度减去第i列的高度,但是其实并不是,比如示例中的第5…

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了,没用。删了依赖重装也没用。后面在issue中找到答案了 解决…

错题整理——2022小米测开

1. 算法的五个基本特性是:输入、输出、有穷性、确定性和可行性。 2. 网络端口范围与最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值; 端口范围是指操作系统支…

设计模式之职责链模式(ChainOfResponsibility)的C++实现

1、职责链模式的提出 在软件开发过程中,发送者经常发送一个数据请求给特定的接收者对象,让其对请求数据进行处理(一个数据请求只能有一个对象对其处理)。如果发送的每个数据请求指定特定的接收者, 将带来发送者与接收…

2023-08-22 LeetCode每日一题(到最近的人的最大距离)

2023-08-22每日一题 一、题目编号 849. 到最近的人的最大距离二、题目链接 点击跳转到题目位置 三、题目描述 给你一个数组 seats 表示一排座位,其中 seats[i] 1 代表有人坐在第 i 个座位上,seats[i] 0 代表座位 i 上是空的(下标从 0 …

第八章,帖子列表

8.1添加帖子列表 <script> import { mapState } from vuex . . . </script> computed: {...mapState([auth,user,articles]) }, <Message :sh

ubuntu18.04安装keil5并迁移stm32项目(踩坑)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装winewine的总结 二、安装Keil5总结 前言 切记看完再享用&#xff0c;别直接上手&#xff0c;不然安装的时候会和我一样踩坑的&#xff08;走了很多弯路…

【Spring】Spring循环依赖的处理

循环依赖是指两个或多个组件之间相互依赖&#xff0c;形成一个闭环&#xff0c;从而导致这些组件无法正确地被初始化或加载。这种情况可能会在软件开发中引起问题&#xff0c;因为循环依赖会导致初始化顺序混乱&#xff0c;组件之间的关系变得复杂&#xff0c;甚至可能引发死锁…

数学建模(四)整数规划—匈牙利算法

一、0-1型整数规划问题 1.1 案例 投资问题&#xff1a; 有600万元投资5个项目&#xff0c;收益如表&#xff0c;求利润最大的方案? 设置决策变量&#xff1a; 模型&#xff1a; 指派问题&#xff1a; 甲乙丙丁四个人&#xff0c;ABCD四项工作&#xff0c;要求每人只能做一项…

Linux系统安全——NAT(SNAT、DNAT)

目录 NAT SNAT SNAT实际操作 DNAT DNAT实际操作 NAT NAT: network address translation&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 请求报文&#xff1a;修改源/目标IP&#xff0c; 响应报文&#xff1a;修改源/目标…

【jvm】双亲委派机制

目录 一、说明二、工作原理三、图示 一、说明 1.java虚拟机对class文件采用的是按需加载的方式&#xff0c;当需要使用该类时才会将它的class文件加载到内存生成class对象 2.加载某个类的class文件时&#xff0c;java虚拟机采用双亲委派模式&#xff0c;即把请求交给由父类处理…

2023年计算机设计大赛国三 数据可视化 (源码可分享)

2023年暑假参加了全国大学生计算机设计大赛&#xff0c;并获得了国家三等奖&#xff08;国赛答辩出了点小插曲&#xff09;。在此分享和记录本次比赛的经验。 目录 一、作品简介二、作品效果图三、设计思路四、项目特色 一、作品简介 本项目实现对农产品近期发展、电商销售、灾…

【QT5-自我学习-线程qThread练习-两种使用方式-1:通过继承线程类来使用-基础样例】

【QT5-自我学习-线程qThread练习-两种使用方式-1&#xff1a;通过继承线程类来使用-基础样例】 1、前言2、实验环境3-1、学习链接-参考文章3-2、先前了解-自我总结&#xff08;1&#xff09;线程处理逻辑事件&#xff0c;不能带有主窗口的事件&#xff08;2&#xff09;一般考虑…

Debootstrap 教程

文章目录 Debootstrap 教程安装 debootstrap使用 debootstrap运行 debootstrap进入新的系统结束语 Debootstrap 教程 debootstrap 是一个用于在 Debian-based 系统上创建一个基本的 Debian 系统的工具。它可以用于创建 chroot 环境、容器或者为新的系统安装做准备。 安装 deb…

数学建模-模型详解(2)

微分模型 当谈到微分模型时&#xff0c;通常指的是使用微分方程来描述某个系统的动态行为。微分方程是描述变量之间变化率的数学方程。微分模型可以用于解决各种实际问题&#xff0c;例如物理学、工程学、生物学等领域。 微分模型可以分为两类&#xff1a;常微分方程和偏微分…

基于Linux操作系统中的shell脚本

目录 前言 一、概述 1、什么是shell&#xff1f; 2、shell脚本的用途有哪些&#xff1f; 3、常见的shell有哪些&#xff1f; 4、学习shell应该从哪几个方面入手&#xff1f; 4.1、表达式 1&#xff09;变量 2&#xff09;运算符 4.2、语句 1&#xff09;条件语句&am…

【LeetCode-中等题】3. 无重复字符的最长子串

题目 题解一&#xff1a;单指针&#xff0c;滑动窗口 思路&#xff1a; 设置一个左指针&#xff0c;来判断下一个元素是否在set集合中&#xff0c;如果不在&#xff0c;就加入集合&#xff0c;right继续&#xff0c;如果在&#xff0c;就剔除重复的元素&#xff0c;计算串的长度…