CNN可视化技术总结(一)--特征图可视化

article/2025/10/6 11:51:48

导言:

    在CV很多方向所谓改进模型,改进网络,都是在按照人的主观思想在改进,常常在说CNN的本质是提取特征,但并不知道它提取了什么特征,哪些区域对于识别真正起作用,也不知道网络是根据什么得出了分类结果。

    如在上次解读的一篇论文《Feature Pyramid Transformer》(简称FPT)中,作者提出背景信息对于识别目标有重要作用,因为电脑肯定是在桌上,而不是水里,大街上,背景中的键盘鼠标的存在也能辅助区分电脑与电视机,因此作者提出要使用特征金字塔融合背景信息。从人的主观判断来看,这点非常合理。但对于神经网络来说,FPT真的有融合背景信息,而普通CNN网络没有融合背景信息?又或者说,一般而言,除了提出的新模型,还会加上主观设计的各种tricks,确定最后是因为融合了背景信息而精度提高了,还是说背景确实融合了,但实际上对精度没有影响,而是各种tricks起了作用?这一切并不确定,因为并不确定CNN到底学到了什么。

    解决这个问题的办法有很多,一个是想办法看看CNN内部学到了什么,一个是控制变量法。提到这个控制变量法,在某一篇论文中(我对不起我的读者,论文累积量太大,忘记是哪一篇,只记得该论文的一些新颖之处),在设计了一个新的模型后,通过改变卷积层的某些通道,来看最后模型的精度的变化,从而确定哪些通道对这个模型是真正起作用的,而哪些是冗余的。按照这个思路,我们或许可以在数据预处理时,故意裁剪掉人主观认为有用的背景信息,例如裁剪辅助识别电脑的桌子,键盘鼠标,重新训练FPT,从而看最终精度有没有影响。很明显,这种方法理论上是可行的,但实际上工作量巨大,不现实。而CNN可视化是值得考虑的方法。

    除了上面提到的一点,CNN的作用还有哪些?

    在少数提出新模型或新methods的论文中,往往会给出这个模型的一些可视化图来证明这个模型或这个新methods对于任务的作用,这一点不仅能增加新模型或新methods可信度,也能起到增加工作量,增加论文字数的作用,如研究者想到一个method,一两页就介绍加推理加证明完了,效果明显,但作为一篇论文却字数太少,工作量不够多,就可以考虑可视化使用了这个methods的网络与没有使用这个methods的网络,进行对比,分析分析,就可以变成一篇完整的论文了。此外,CNN可视化还有一个作用,根据可视化某个网络的结果分析其不足之处,从而提出新的改进方法。例如:ZFNet正是对AlexNet进行可视化后改进而来,获得了ILSVRC2014的冠军。

CNN可视化方法

一、特征图可视化。特征图可视化有两类方法,一类是直接将某一层的feature map映射到0-255的范围,变成图像,但这样。另一类是使用一个反卷积网络(反卷积、反池化)将feature map变成图像,从而达到可视化feature map的目的。

二、卷积核可视化

三、类激活可视化。这个主要用于确定图像哪些区域对识别某个类起主要作用。如常见的热力图(Heat Map),在识别猫时,热力图可直观看出图像中每个区域对识别猫的作用大小。这个目前主要用的方法有CAM系列(CAM、Grad-CAM、Grad-CAM++)。

四、一些技术工具。通过一些研究人员开源出来的工具可视化CNN模型某一层。

    CNN技术总结将按照这四个方法,分成四个部分总结CNN可视化技术。对于以后出现新的技术,或者补充,将更新在公众号CV技术指南的技术总结部分。在本文,主要介绍第一类方法,特征图可视化。

直接可视化

单通道特征图可视化,由于feature map并不是在0-255范围,因此需要将其进行归一化。以pytorch为例,使用torchvision.utils.make_grid()函数实现归一化

def make_grid(tensor, nrow=8, padding=2,              normalize=True, range=None,               scale_each=False,pad_value=0):

多通道特征图的显示,即对某一层所有通道上的特征图融合显示,在使用make_grid函数后,pytorch环境下可使用tensorboardX下的SummerWriterh中的add_image函数。

本部分内容参考链接:https://zhuanlan.zhihu.com/p/607539

反卷积网络deconvnet

feature map可视化的另一种方式是通过反卷积网络从feature map变成图像。反卷积网络在论文《Visualizing and Understanding Convolutional Networks》中提出,论文中提出图像像素经过神经网络映射到特征空间,而反卷积网络可以将feature map映射回像素空间。

    如下图所示,反卷积网络的用途是对一个训练好的神经网络中任意一层feature map经过反卷积网络后重构出像素空间,主要操作是反池化unpooling、修正rectify、滤波filter,换句话说就是反池化,反激活,反卷积。

图片

   
    由于不可能获取标签数据,因此反卷积网络是一个无监督的,不具备学习能力的,就像一个训练好的网络的检测器,或者说是一个复杂的映射函数。

反池化Unpooling

在上一篇文章《池化技术总结》中提到最大池化会记录最大值的坐标,在上图中就是switches,而反池化就只需要将最大值放到原位置,而其他位置的值并不知道,直接置零。如下图所示。

图片

修正Rectification

   CNN使用ReLU确保feature map上的值都是正的,因此在反卷积中也使用ReLU。这里所谓Rectification其实就是让unpooling后的值都是正的,换句话说就是使用ReLU。

Filtering

Filtering指的是反卷积,具体操作就是使用原网络的卷积核的转置作为卷积核,对Rectification后的输出进行卷积。

注:在以上重构过程中没有使用对比归一化操作。

反卷积网络特征可视化结果

图片

导向反向传播

在论文《Striving for Simplicity:The All Convolutional Net》中提出使用导向反向传播(Guided- backpropagation),导向反向传播与反卷积网络的区别在于对ReLU的处理方式。在反卷积网络中使用ReLU处理梯度,只回传梯度大于0的位置,而在普通反向传播中只回传feature map中大于0的位置,在导向反向传播中结合这两者,只回传输入和梯度都大于0的位置,这相当于在普通反向传播的基础上增加了来自更高层的额外的指导信号,这阻止了负梯度的反传流动,梯度小于0的神经元降低了正对应更高层单元中我们想要可视化的区域的激活值。

图片

使用导向反向传播与反卷积网络的效果对比

图片

明显使用导向反向传播比反卷积网络效果更好。

总结:分析反卷积网络的对各层feature map可视化的结果可知,CNN中会学到图像中的一些主要特征,如狗头,鼻子眼睛,纹理,轮廓等内容。但对特征图可视化有个明显的不足,即无法可视化图像中哪些区域对识别具体某个类别的作用,这个主要是使用CAM系列的方法,会在第三篇文章中介绍。下一篇将介绍可视化卷积核的方法。将放在公众号的技术总结部分。

参考论文:

《Visualizing and Understanding Convolutional Networks》

《Striving for Simplicity:The All Convolutional Net》

 本文来源于公众号 CV技术指南 的技术总结系列。

欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

 在公众号中回复关键字 “技术总结” 可获取以下文章的汇总pdf。

其它文章

北京大学施柏鑫:从审稿人视角,谈谈怎么写一篇CVPR论文

Siamese network总结

计算机视觉专业术语总结(一)构建计算机视觉的知识体系

欠拟合与过拟合技术总结

归一化方法总结

论文创新的常见思路总结

CV方向的高效阅读英文文献方法总结

计算机视觉中的小样本学习综述   

知识蒸馏的简要概述   

优化OpenCV视频的读取速度

NMS总结   

损失函数技术总结

注意力机制技术总结   

特征金字塔技术总结   

池化技术总结

数据增强方法总结   

CNN结构演变总结(一)经典模型

CNN结构演变总结(二)轻量化模型 

CNN结构演变总结(三)设计原则

如何看待计算机视觉未来的走向   

CNN可视化技术总结(一)-特征图可视化

CNN可视化技术总结(二)-卷积核可视化

CNN可视化技术总结(三)-类可视化

CNN可视化技术总结(四)-可视化工具与项目


http://chatgpt.dhexx.cn/article/WSY3tbfZ.shtml

相关文章

机器学习可视化技术(Towards Data Science)

介绍 作为任何数据科学项目的一部分,数据可视化在了解更多可用数据和识别任何主要模式方面发挥着重要作用。 如果能够使分析中的机器学习部分尽可能直观,那不是很好吗? 在本文中,我们将探讨一些可以帮助我们应对这一挑战的技术&am…

大数据可视化技术面临的挑战及应对措施

来源:科技导报 本文约5400字,建议阅读10分钟 本文介绍了适用于大数据的数据可视化技术,讨论了针对大数据可视化应用需求自主研发的交互式可视化设计平台AutoVis及其应用。 [ 导读 ]本文从大数据本身的特点及其应用需求出发,结合数…

大数据可视化技术应用学习目标与复习小结

大数据可视化技术与应用 一、大数据可视化概述学习目标1.1 什么是大数据可视化:1.2 大数据可视化的类型1.3大数据可视化的标准 1.4大数据可视化的作用1.5大数据可视化的特征 二、大数据可视化原理学习目标2.1 光源种类,原色、间色、复色概念,…

三维可视化技术都有哪些运用

伴随着数据在当前互联网技术迅速发展壮大下变的层面更广,总数更大、构造愈来愈繁杂,大家如果想要更加清楚,迅速的认识和了解一份数据,传统化的二维平面图数据图表现已不能够满足需求,三维可视化技术越融合多媒体技术、…

【可视化开发】数据大屏可视化技术汇总

由于工作原因,需要用到一些大屏可视化技术,于是通过网上整理、自我学习等多途径,汇总了一份大屏可视化技术的思维导图,如下: 这里主要汇总的是: 大屏可视化技术! 大屏可视化技术! …

基于BIMFILM虚拟施工系统进行可视化技术交底的应用

基于BIMFILM虚拟施工系统进行可视化技术交底的应用 赵飞摘 要:目前技术交底还是以传统施工管理模式下的纸质的二维技术交底为主,而纸质的二维技术交底,技术方案无法细化、不直观,再有纸质的二维技术交底对于结构复杂的项目&#…

技术15期:4种常用的可视化技术【web前端】

说到可视化这个词,可能有的人会一脸懵逼,感觉很陌生,有的人会觉得索然无味,感觉这又是程序员闲暇之余想出的噱头而已。 no,no,no,如果这么想你就错了。 可视化的应用已经深入我们的生活中&#…

windows环境下如何进入到mysql命令行界面

第一步:打开cmd,进入到mysql安装目录下的bin目录 第二步:输入mysql -hlocalhost -uroot -p 第三步:输入mysql的数据库连接密码 看到如下界面就是进入到了mysql 因为我安装的是MariaDB数据库,所以如果出现mysql>也是正确的

mysql篇:如何进入mysql

1、单击windows图标–搜索框内输入cmd,点击运行。 2、在弹出的CMD命令框中输入: “net start mysql”,按下回车。 3、再次输入"mysql -hlocalhost -uroot -p"命令回车 进入mysql数据库。 4、当显示下面的界面时表示成功链接到了…

cmd中怎么进mysql

第一步:启动mysql服务,可以通过“net start myql”命令实现; 第二步:先使用DOS命令进入mysql的安装目录下的bin目录中; (dos命令的基本操作: 盘符: 例如想进入D盘 d: cd 进入到当前盘…

win系统进入mysql

1,使用管理员身份运行cmd 2,进入到mysql所在的bin目录 3,执行mysql -u root -p输入pw 4,查询已存在的数据库show databases;

Windows下cmd进入MySql的命令界面

winR快捷键打开运行,输入cmd,进入cmd若未将MySql加入环境变量,切换到mysql的安装目录下的bin目录;若已加入环境变量,则不必切换目录。输入主机名、数据库名、密码 mysql -h localhost -u root -p输入数据库密码

进入mysql命令行之后,怎么退出

展开全部 进入mysql命令行之后可以按键ctrlc来退出mysql命令客户端; 也可以在命令行输入quit按回车键来62616964757a686964616fe4b893e5b19e31333431366338退出命令行。 扩展资料 mysql命令行常用命令使用方法介绍: 1、连接和断开服务器 shell>…

linux开启并进入Mysql

rootubuntu-server: /etc# ./init.d/mysql start rootubuntu-server: /etc# mysql -uroot -p111111 mysql> show databases; mysql> show tables;

CMD命令进入MySQL数据库的方法

第一步:以管理员身份打开cmd 第二步:进入存放mysql的磁盘(我存放在E盘) 第三步:cd到bin目录 命令:cd 路径 第四步:输入命令 mysql -hlocalhost -uroot -p 第五步:输入密码 没有设置密码&…

在cmd中怎么进入mysql?

在cmd中进入mysql的步骤: 1、按winr打开,输入cmd,快速打开命令行界面,然后进入cmd 2、启动MySQL服务 使用以下命令:net start myql 3、进入mysql数据库 输入以下命令:mysql -hlocalhost -uroot -p 执行上…

MySQL入门指南1(进入命令行,数据库,数据表操作)

目录 进入mysql命令行步骤:常用MySQL命令一、数据库操作二、数据表操作三、最后的话 进入mysql命令行步骤: 1.以管理员身份进入命令提示符 2.通过命令: net start mysql 启动mysql服务 3.通过命令:mysql -u root -p 回车后输入…

如何进入 mysql?

目录 1. win r 2. 输入cmd点确定 3. 输入 mysql -u -p 4. 点回车出现 下面的 就代表已经进入 mysql 退出 mysql的 方法: 1. win r 2. 输入cmd点确定 3. 输入 mysql -u -p -u :代表你的用户名,如果是本地登录 则为 -uroot-p &am…

进入MySQL的两种方法

1.打开MySQL 5.5 Command Line Client,输入密码即可进入 2.打开cmd命令窗口,输入mysql -u__ -p__ u:用户名 p:密码 如mysql -uroot -p123456回车可直接进入数据库 若不想让别人看到自己的密码,可输入mysql -uroot -p回车,再键入…

小程序页面向组件传数组为空

微信小程序给自定义组件传递数组 显示为空 踩坑一、 传的值必须为数组,而不是对象,弄了一下午发现传字符可以,但是数组一接收就为空[],后改为传数组就接收到了 that.setData({avatar: res.data[0].avatar,bgimage:res.data[0].b…