当前位置: 首页 > news >正文

【计算机视觉】CNN 可视化算法

文章目录

  • 一、CAM算法
    • 1.1 概述
    • 1.2 CAM算法介绍
  • 二、Grad-CAM算法
    • 2.1 概述
    • 2.2 Guided Backpropagation
    • 2.3 Occlusion Sensitivity
    • 2.4 Grad-CAM 整体结构和效果
    • 2.5 Grad-CAM 实现细节

一、CAM算法

1.1 概述

本文介绍 2016 年提出的 CAM (Class Activation Mapping) 算法,能够可视化卷积神经网络的特征图,并映射到原始图像中得到不同区域的重要性。

CAM 利用了全局平均池化 GAP (Global Average Pooling) 和最后一层 softmax 的参数将特征图线性加权起来,从而获得模型对于不同类别重点关注的区域。

在这里插入图片描述
CAM 算法是论文《Learning Deep Features for Discriminative Localization》中提出的,作者发现 CNN 网络虽然在训练时可能未提供对象的位置,但是仍然具有很强的定位特征能力,如上图所示。

上图是 CAM 运行的效果,可以看到对于刷牙这一类,CNN 能有效地定位到牙刷,而对于锯树,CNN 能有效定位到电锯。

但是 CNN 后面通常会接全连接层,作者认为全连接层会影响 CNN 的定位能力。因此提出了 CAM 算法,用全局平均池化 GAP 代替全连接层,从而保留模型的定位特征能力。全局平均池化 GAP 通常起到正则化的作用,防止训练时的过拟合,GAP 和其他池化方法的区别如下图所示,全局的池化方法就是把池化的范围扩大到整个特征图的尺寸。

在这里插入图片描述
作者也在 ILSVRC 数据集上测试了 CAM 的目标定位能力,CAM 使用的是弱监督目标定位训练,得到了 37.1% 的 top-5 错误率,而使用完全监督目标定位训练的 AlexNet 的 top-5 错误率为 34.2%,二者非常接近。

弱监督目标定位训练和完全监督目标定位训练的区别如下图所示,即弱监督时图片只有类别没有目标框,而完全监督图片是有目标框的。

img

1.2 CAM算法介绍

img

上图是 CAM 的模型示意图,最后一个卷积层后面采用了 GAP,GAP 后再利用 Softmax 层进行分类。图中最后一层卷积层的通道数为 nnn,因此 GAP 后得到的向量维度是 n,分别对应每个通道。图中的 w1w_1w1, ……, wnw_nwn 指 Softmax 层的权重,这里对应的是一个类 class 的权重 (图中的类是 Australian terrier 即澳大利亚梗犬)。

最后一层卷积层输出的特征图包含 nnn 个通道,利用该类的权重将特征图的 nnn 个通道加权求和,再映射到原始图片上即可得到不同区域的重要程度。这里是由于特征图和原始图尺寸不同,所以要映射,CAM 直接使用 resize 将特征图缩放到和原始图一样的大小。接下来介绍 CAM 的一些公式。

对于一幅图像,可以用下面的公式计算出其属于类别 ccc 的得分,其中 kkk 表示最后一个卷积层的通道,xxxyyy 表示特征图的坐标,fff 表示特征图,www 表示 Softmax 的权重:

Sc=∑kwkc∑x,yfk(x,y)=∑x,y∑kwkcfk(x,y)S_c=\sum_kw_k^c\sum_{x,y}f_k(x,y)\\ =\sum_{x,y}\sum_kw_k^cf_k(x,y) Sc=kwkcx,yfk(x,y)=x,ykwkcfk(x,y)

对于类别 ccc,我们可以得到图片各个区域重要性的映射图,公式如下,即将特征图加权求和得到:
Mc(x,y)=∑kwkcfk(x,y)M_c(x,y)=\sum_kw_k^cf_k(x,y) Mc(x,y)=kwkcfk(x,y)

下面是 CAM 可视化的效果,能够比较清晰地定位到图像中比较相关的地方。
img

同时 CAM 对于不同的类别 class 生成的热力图是有所区别的,如下所示,对于类别 dome (圆顶),热力图重点关注建筑的顶部。

img

二、Grad-CAM算法

2.1 概述

CAM 可以用于可视化 CNN,通过视觉解释 CNN 做出预测时重点关注的区域。但是 CAM 的实现依赖于全局平均池化层,通过全局平均池化得到 feature map 每一个通道的权重,然后线性加权求和得到网络关注区域的热力图。因此对于很多网络都不能直接使用,需要把网络后面的全连接层改为全局平均池化。CAM 算法的示意图如下:

img

本文介绍《Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization》论文提出的 Grad-CAM 算法,Grad-CAM 利用网络反向传播的梯度计算出 feature map 每一个通道的权重从而得到热力图。因此 Grad-CAM 可以直接用于各种 CNN 网络而无需重新训练 (如 VGG、ResNet),同时 Grad-CAM 也可以用于针对不同任务的网络 (如图像分类、看图说话、图像问答)。

在 Grad-CAM 论文里还提到了一些别的可视化方法,在这里先简单地介绍一下其中两种: Guided BackpropagationOcclusion Sensitivity

2.2 Guided Backpropagation

Guided Backpropagation 出自论文《Striving for Simplicity: The All Convolutional Net》,主要可视化网络反向传播的梯度,从而了解网络。这一种可视化方法具有很高的分辨率,能够展示图像中的细粒度细节,但是可视化的效果对于类别没有很好的判别性。

下图是 Guided Backpropagation 的原理以及可视化的效果:

img

img

2.3 Occlusion Sensitivity

Occlusion Sensitivity 出自论文《Visualizing and Understanding Convolutional Networks》,Occlusion Sensitivity (遮挡敏感) 主要是使用灰色的方块遮挡图片上的不同区域,并记录各个区域被遮挡后模型预测置性度的变化。如果说某一个位置被遮挡后,模型预测的置性度大幅度下降,则说明该区域是比较重要的。Occlusion Sensitivity 可视化的效果如下图所示,图中的第四列表示的就是遮挡不同区域后的置性度。

img

2.4 Grad-CAM 整体结构和效果

img

上面是 Grad-CAM 的示意图,右边的部分表示不同的计算机视觉任务,Image Classification、Image Captioning 等,即 Grad-CAM 可用于各式各样的任务。

图片左侧的部分表示可视化的过程,其中包括三个部分,其中 Grad-CAM 是本文介绍的重点:

  • Guided Backpropagation: 就是上一节中简要介绍的方法,具有高分辨率和高细粒度,但是可视化结果的判别性 (对于不同类别区分的能力) 较弱。
  • Grad-CAM: Grad-CAM 可视化的结果,分辨率不高,但是判别性强。
  • Guided Grad-CAM: Grad-CAM 和 Guided Backpropagation 的结果按位相乘得到,这样可以融合 Grad-CAM 和 Guided Backpropagation 的优点,使可视化即具有高分辨率也具有好的判别性。

img

上面是不同方法可视化效果的对比,第一行是针对 label 猫的可视化效果,第二行是针对 label 狗的可视化效果。

  • 第一列是原始图片。
  • 第二列是 Guided Backpropagation 的可视化,可以看到分辨率比较高,能够展示不少细粒度的细节,但是对于不同的类别 (猫和狗) 没有足够的判别性,二者的可视化效果很相近。
  • 第三列是 Grad-CAM 的可视化效果,具有比较好的判别性,能够区分猫和狗。
  • 第四列是 Guided Grad-CAM 即 Guided Backpropagation 和 Grad-CAM 相结合,既有高分辨率也有判别性。
  • 第五列是 Occlusion Sensitivity 的可视化效果,Occlusion Sensitivity 在第一节中介绍了。
  • 第六列是 Grad-CAM 可视化 ResNet 的效果。

2.5 Grad-CAM 实现细节

img

接下来重点介绍 Grad-CAM 的实现细节,如上图所示。和 CAM 算法类似,对于一个类别 c,首先需要获得 feature map 每一个通道的权重,然后线性加权求和得到热力图,权重就是图中的 w1w_1w1, …, wnw_nwn

Grad-CAM 利用反向传播的梯度计算权重,因此不用把网络最后一层改为全局平均池化,公式如下,其中 ccc 表示类别,ycy_cyc 是该类别对应的 logits (即还没经过 Softmax 的值),AAA 表示卷积输出的 feature map,kkk 表示 feature map 的通道,iiijjj 表示 feature map 的横纵坐标,ZZZ 表示 feature map 的尺寸 (即长乘宽)。这一过程相当于求 feature map 上梯度的均值,等价于一个全局平均池化操作。

img

得到权重后将 feature map 的通道线性加权融合在一起即得到热力图,公式如下,Grad-CAM 对融合后的热力图增加一个 Relu 操作,只保留对于类别 ccc 有正作用的区域。

img

相关文章:

【计算机视觉】CNN 可视化算法

文章目录一、CAM算法1.1 概述1.2 CAM算法介绍二、Grad-CAM算法2.1 概述2.2 Guided Backpropagation2.3 Occlusion Sensitivity2.4 Grad-CAM 整体结构和效果2.5 Grad-CAM 实现细节一、CAM算法 1.1 概述 本文介绍 2016 年提出的 CAM (Class Activation Mapping) 算法&#xff0…...

自动抓取服务器巡检、登录、执行命令记录+备份脚本

文章目录 引抓取【巡检日志】语言&时区设置语言设置时区巡检脚本执行效果抓取【登录信息】登录脚本登录脚本低版本的last命令执行效果抓取【history记录】说明配置history授权日志文件显示时间戳持久化到日志未配置history的配置过history的执行脚本执行脚本...

如何用Python求解微分方程组

文章目录odeint简介示例odeint简介 scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API,是scipy早期使用的微分方程求解器,但由于是Fortran实现的,尽管使用起来并不方便,但速度没得说,所以有的时候还挺推荐…...

【微信小程序】-- 自定义组件 - behaviors(三十九)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

Java Web 实战 11 - 多线程进阶之常见的锁策略

常见的锁策略常见的锁策略1. 乐观锁 VS 悲观锁2. 普通的互斥锁 VS 读写锁3. 重量级锁 VS 轻量级锁4. 自旋锁 VS 挂起等待锁5. 公平锁 VS 非公平锁6. 可重入锁 vs 不可重入锁7. 常见面试题大家好 , 这篇文章给大家带来的是多线程中常见的锁策略 , 我们会给大家讲解 6 种类别的锁…...

(20)目标检测算法之YOLOv5计算预选框、详解anchor计算

目标检测算法之YOLOv5计算预选框、详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置文件config中的预设还是很重要yolo算法作为on…...

3-1 SpringCloud快速开发入门: Ribbon 是什么

接上一章节Eureka 服务注册中心自我保护机制,这里讲讲Ribbon 是什么 Ribbon 是什么 通常说的负载均衡是指将一个请求均匀地分摊到不同的节点单元上执行,负载均和分为硬件负载均衡和软件负载均衡: **硬件负载均衡:**比如 F5、深信…...

Java【lambda表达式】语法及使用方式介绍

相关文章目录 第一篇: Java【EE初阶】进程相关知识 进程管理 内存管理 文章目录相关文章目录前言一、lambda表达式 是什么?1, lambda表达式 的背景2, 什么是 函数式接口3, lambda表达式 的语法二、lambda表达式 的使用方式1, 无参无返回值2, 有一个参…...

【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)

目录 写在前面: 题目:94. 递归实现排列型枚举 - AcWing题库 读题: 输入格式: 输出格式: 数据范围: 输入样例: 输出样例: 解题思路: 代码: AC &…...

‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。

Anaconda环境搭建常见问题 conda不是内部或外部命令,也不是可运行的程序或批处理文件。 解决方案:配置环境变量 1.找到Anaconda Nvaigator单机右键 2.更多 3.打开文件所在位置 4.继续Anaconda Nvaigator单机右键,更多,选择文件…...

HTTP 3.0来了,UDP取代TCP成为基础协议,TCP究竟输在哪里?

TCP 是 Internet 上使用和部署最广泛的协议之一,多年来一直被视为网络基石,随着HTTP/3正式被标准化,QUIC协议成功“上位”,UDP“取代”TCP成为基础协议,TCP究竟“输”在哪里? HTTP/3 采用了谷歌多年探索的基…...

《JavaCV从入门到实战教程合集》介绍和目录

前言 《JavaCV从入门到实战教程合集》是2016年《JavaCV开发实战教程》和2018年《JavaCV入门教程》2022年《JavaCV音视频实战宝典》三合一汇总合集,完整包含JavaCV入门教程》、《JavaCV开发实战教程》系列和《JavaCV音视频实战宝典》系列所有付费内容。 《JavaCV入…...

Form Generator扩展 文本 组件

一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…...

【C/C++】必知必会知识点大总结

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…...

【JavaScript 逆向】百度旋转验证码逆向分析

声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标爱企查百度安全验证百度搜索:aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS8以上均做了脱敏处理,B…...

PCL 点云投影到直线(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示1、原始点云2、投影结果一、算法原理 直线方程有三种表示法:一般式、点向式、参数式。PCL中统一采用的是点向式,直线的点向式方程为: x − x 0 m = y −...

中缀表达式转后缀表示式,及后缀表达式的运算规则

后缀表达式又称为逆波兰表达式 一,中缀表达式如何转后缀表达式 假定给出以下中缀表达式 132*2-1; 要将该表达式转为后缀表达式,我们要按照一定的规则去走,并且用到栈。 先来看规则中缀转后缀的规则: 前提&#x…...

【C++】STL简介

文章目录什么是STLSTL版本 原始版本(HP版本) P.J.版本 RW版本 SGI版本STL六大组件 容器 算法 仿函数 空间配置器 迭代器 配接器STL缺陷什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不…...

(小甲鱼python)文件永久存储(上)总结 python文件永久存储(创建打开文件、文件对象的各种方法及含义)

一、文件永久存储 如何将数据永久的存放在硬盘上,具体如下。 1.打开文件 定义:往大了讲计算机系统中由操作系统管理的具有名称的存储区域,往小了讲是生活中的PPT、Excel、word三剑客、视频文件、音频文件等。 创建打开文件: open…...

甲酸溶液除钠离子,丙酸溶液除钾离子,医药液体除钾

水是医药行业中用量大、使用 泛的一种原料,它在生产过程中和药剂药品的制备中发挥着极其重要的作用。制药用水的原水通常为自来水或深井水,原水不能直接用作制剂用水或实验用水。因为原水中含有各类盐类和化合物,溶有CO2,还存在大…...

操作系统(2.2)--进程的描述与控制

目录 二、进程的描述 1.进程的定义和特征 1.1进程的定义 1.2进程的特征 2.进程的基本状态及转换 2.1进程的三种基本状态 2.2 三种基本状态的转换 2.3创建状态和中止状态 3.挂起操作和进程状态的转换 3.1 挂起状态的引入 3.2 引入挂起操作后三个进程状态的转换 …...

Python连接es笔记四之创建和删除操作

这一篇笔记介绍一下索引和数据的创建和删除。 其实对于索引来说,如果可以接触到 kibana 的话,可以很方便的在界面进行操作,这里简单介绍一下如何使用代码来操作索引的创建和删除。 索引的创建和删除操作 使用的还是 es 的连接:…...

字符串填充到指定长度

一、需求 在传输一个文件的时候,传输的是二进制数据,整个数据文件的结构为: 文件名称 文件本身 其中文件名称固定占30个byte,存在的情况就是,有的文件名比较长,有的文件名比较短,所有要补足30…...

macOS虚拟机安装全过程(VMware)

作为一名忠实果粉,我最大的愿望就是能够拥有一台Macbook,体验macOS,但是作为学生党,这价钱,贵到离谱啊~~~ 不过,VMware这个神器,可以解决一切问题:既然macOS可以在Macbook上运行&…...

第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)

[蓝桥杯 2022 省 A] 选数异或 题目描述 给定一个长度为 nnn 的数列 A1,A2,⋯,AnA_{1}, A_{2}, \cdots, A_{n}A1​,A2​,⋯,An​ 和一个非负整数 xxx, 给定 mmm 次查询, 每次询问能否从某个区间 [l,r][l, r][l,r] 中选择两个数使得他们的异或等于 xxx 。 输入格式 输入的第一…...

【CTF】CTF竞赛介绍以及刷题网址

CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今&…...

Springboot怎么优雅实现大文件的上传

前言在软件工程里,在处理“大”的时候一直是一个难点和难点,如并发大、数据量大、文件大,对硬件进行升级可以解决一些问题,但这并不最聪明的办法,而对于老板来说,这也不是成本最小的办法。作为开发人员来说…...

2月编程语言排行榜新鲜出炉,谁又摘得桂冠?

近日,TIOBE公布了2023年2月编程语言排行榜,本月各个语言表现如何?谁又摘得桂冠?一起来看看吧! TIOBE 2月Top15编程语言: 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴…...

机器学习中的数学原理——模型评估与交叉验证

惭愧惭愧!机器学习中的数学原理这个专栏已经很久没有更新了!前段时间一直在学习深度学习,paddlepaddle,刷题专栏跟新了,这个专栏就被打入冷宫了。这个专栏名为白话机器学习中数学学习笔记,主要是用来分享一…...

wordpress播放m3u8/站长之家最新网站

1、Advanced Installer 2、Setup Factory 3、Smart Install Maker 企业应用的推荐: Nullsoft、InstallShield,Advanced Installer...

自已建网站微信登录/app推广实名认证接单平台

windows 远程桌面连接使用性技术分享 1、mstsc的介绍? Mstsc (Microsoft terminal services client) Mstsc还有一种说法,Microsoft Telnet Screen Control ,即“微软远程桌面控制”。 mstsc 与远程客户端之间是用Microsoft的远程桌面协议(…...

做网站基本语言/昭通网站seo

部署集群的时候运用weblogic自带的代理,也就是相当于一个war包,会经常报错,最后还是使用apache作为代理。 1. 今天在备份服务器上面讲weblogic的代理删除之后发现访问不了原来的服务了,连其他的服务在单节点下面也无法访问&#x…...

勉费申请做网站/关键词搜索神器

关于Spring中基于xml文件配置bean的详细总结(spring 4.1.0) 一、Spring中的依赖注入方式介绍 依赖注入有三种方式 属性注入构造方法注入工厂方法注入(很少使用,不推荐,本文不再介绍)属性注入 通过 setter…...

竞猜网站模板/企业qq多少钱一年

考虑在每个点的出边中删除哪些。如果其出边所指向的点中存在某点能到达另一点&#xff0c;那么显然指向被到达点的边是没有用的。于是拓扑排序逆序处理&#xff0c;按拓扑序枚举出边&#xff0c;bitset维护可达点集合即可。 #include<iostream> #include<cstdio> …...

广州web网站开发培训班/百度用户服务中心人工24小时电话

小信号分析法重点笔记开关电源的反馈环路设计是开关电源设计的一个非常重要的部分&#xff0c;它关系到一个电源性能的好坏。要设计一个好的环路&#xff0c;必须要知道主回路的数学模型&#xff0c;然后根据主回路的数学模型&#xff0c;设计反馈补偿环路。开关电源是一个非线…...