Visualizing and Understanding Convolutional Networks阅读笔记

news2024/9/22 7:36:14

Visualizing and Understanding Convolutional Networks阅读笔记

摘要

   CNN模型已经取得了非常好的效果,但是在大多数人眼中,只是一个“黑盒”模型,目前还不清楚为什么它们表现得如此好,也不清楚如何改进。在本文中,我们探讨了这两个问题。我们介绍了一种新的可视化技术,可以深入了解中间特征层的功能和分类器的操作。通过使用类似诊断的方式,作者还得到了比 AlexNet 更好的结构 ZFNet;最后,作者还通过在 ImageNet 上训练,然后在其他数据集上进行 fine-tuning,得到了非常好的结果。

1. 前言 [ 1 ] ^{[1]} [1]

   CNN在图像分类和物体检测领域大放异彩,主要是以下几项因素的作用:1).数以百万计带标签的训练数据的出现;2).GPU的强大计算能力,使得训练大的模型成为可能。

   尽管如此,从科学的角度来看,这是令人很不满意的。因为我们并不能解释这个复杂的模型,也就不理解为什么它能达到这么好的效果,而不了解这个模型如何工作和为什么有作用,我们改进模型就只能使用试错法。这篇论文提出了一种新的可视化技术,揭示了模型中任意层的feature map与输入之间的响应关系。

2. 使用反卷积网络可视化

   文中的卷积神经网络架构如下图所示:
在这里插入图片描述
   为了理解卷积网络,需要理解中间层的特征值,反卷积网络提供了办法。反卷积网络的每一层都可以看做卷积网络中对应层的逆过程,它们拥有相同的卷积核和池化索引,因此反卷积将特征值逆映射回了输入图片的像素空间,借此说明图片中的哪些像素参与激活了该特征值。下图将卷积网络和反卷积网络的过程合并,展示了两者各层之间的关系,且两者在整体上互为逆过程:首先,下图右下,卷积网络将一张图片作为输入,计算得到各层的特征表示;为了验证某层一个具体的特征值,我们将该层特征值之外的所有值置零后,将其作为反卷积网络的输入,经过反卷积网络每一层的操作,该特征值被映射回了输入图片的像素空间。下图中下面部分展示的是反池化过程。 [ 2 ] ^{[2]} [2]
在这里插入图片描述
反卷积网络的构成: [ 2 ] ^{[2]} [2]

  1. 反池化操作;理论上,卷积网络中的最大池化操作是不可逆的,但可以通过池化索引进行近似可逆。下图也是反池化操作的示意图。
    在这里插入图片描述
  2. 反激活函数;卷积网络中采用ReLU确保特征值非负,为了确保正逆过程的一致性,我们将反卷积网络每一层的重构特征也通过ReLU得到非负值。
  3. 反卷积操作;即为置换卷积,可参考[3]。

3. 卷积网络可视化 [ 2 ] ^{[2]} [2]

3.1 特征可视化

   下图展示了训练完成后,各层特征值的可视化结果。对于某一层某一个特定位置的特征,选取了9个最大的激活值(由9张输入图片经过卷积网络生成),并分别将其映射回输入图片的像素空间,可视化结果的旁边是特征对应的感受野的输入图片截图。从Layer1 特征图中选了9个位置的特征值,每个特征值选了最能激活该值的9张图片;从Layer2 特征图中选了16个位置的特征值,每个特征值选了最能激活该值的9张图片。 几点启示:

  1. 原图的截图比可视化结果的多样性更大,因为后者仅仅关注了截图中有判别能力的结构。举例来说:层5第1行第2列的9张输入原图差异很大,但同一特征值的可视化结果都关注了背景中的草地。
  2. 每层特征的可视化结构展示了各层的特点。层2展示了物体的轮廓和颜色的组合,每个特征的可视化结果大致相同(较小的不变性);层3有了更复杂的不变性,主要是相似的纹理(1行1列的网格特征、2行4列的文本特征);层4的不同特征对应的可视化结果有显著的差别,开始展现类与类之间的差异(1行1列都是狗狗的脸,4行2列都是鸟的腿);层5的不同特征对应的可视化结果对应了类别间的物体的整体差异(不再是局部)(1行1列键盘,4行的狗)。因为感受野相应的变大了。
  3. 层次越高,不变性越强。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

3.2 训练过程中特征的演化

   在每一层随机选取6个特征,在训练过程中的第[1,2,5,10,20,30,40,64]个epoch时,将样本中最强激活的特征映射回输入图片像素空间。可以看出:底层特征很快可以趋于稳定,但高层特征需要更多次的迭代才能收敛,证明了迭代次数的必要性。
在这里插入图片描述

3.3 特征不变性

   下图第1列是5张示例图片的三种变换,分别为平移、缩放、旋转;列2和列3是层1和层7变换图和原图间的特征向量的欧几里得距离;列4是对应图片分类可能性的变化。总体来说:微小的变换对于低层的特征有显著地影响,而层越高,平移和缩放对结果的影响越小;但卷积网络无法对旋转操作产生不变性,除非物体有很强的不对称性。
在这里插入图片描述

3.4 架构选择

在这里插入图片描述
   可视化训练模型不但可以洞察CNN的操作,也可以帮助我们在前几层选择更好的模型架构。通过可视化AlexNet的前两层(图中b,d),我们就可以看出问题:

  1. 第一层filter是非常高频和低频的信息,中间频率的filter很少覆盖;
  2. 第二层的可视化有些具有混叠效应,由于第一层比较大的stride。

   为了解决这些问题:

  1. 将第一层的filter的尺寸从 11 × 11 11\times 11 11×11 减到 7 × 7 7\times 7 7×7
  2. 缩小间隔,从4变为2。

这两个改动形成的新结构,获取了更多的信息,而且提升了分类准确率。

3.5 遮挡敏感性

   当模型的分类性能提高时,一个自然而然的想法就是:分类器究竟基于什么信息做出了判断?是基于图片中的物体,还是图片中与物体无关的上下文信息。下图采用灰色矩形遮挡输入图片的不同部分,并将遮挡后的图片输入网络得到分类器的输出,1~3行分别是博美犬、车轮和阿富汗猎犬;a列是原图,b列是遮挡不同部位后得到的第五层的热力图(选取了不遮挡图片最大激活值所在的通道),c列是不遮挡原图第5层最大激活值的可视化结果,其余3张来自别的输入图片,d列是遮挡不同部位后,正确分类可能性的热力图,e列是遮挡不同部位后,最可能的分类结果。总体来说:

  1. b列说明:当遮挡了可视化结果对应的原图部位时,对应的特征值会急剧下降;
  2. d列说明:遮挡博美犬脸的部位、车轮部位、阿富汗犬部位,正确分类的可能性急剧下降。
    在这里插入图片描述

参考文章

[1] 知乎—Deep Visualization:可视化并理解CNN
[2] 知乎—“直观理解”卷积神经网络(一):反卷积(Deconvnet)
[3] CSDN—【机器学习】详解 转置卷积 (Transpose Convolution)

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

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

相关文章

Linux 5种IO模型

Linux IO模型 网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操…

【测试开发】基于 MeterSphere 的接口测试流程

基于 MeterSphere 的接口测试流程 MeterSphere 接口测试模块提供了 接口定义、接口自动化 等接口测试相关功能。 用户可以使用树状多级模块来分级分组管理项目下的接口列表,创建执行接口用例测试接口,组合编排多个接口用例进行场景自动化测试。 1 接口定…

caffe专题五——回归中——检测框架

一:Bounding-box regression回归 1.问题理解(为什么要做 Bounding-box regression? )如图 1 所示, 绿色的框为飞机的 Ground Truth, 红色的框是 Selective Search 提取的 Region Proposal。 那么即便红色的框被分类器识别为飞机,但…

Win10系统pytorch安装教程

前提:安装后Anaconda和NVIDIA显卡驱动 1. 确定支持的最高CUDA版本 确定支持的最高CUDA版本 记住这个CUDA版本,后面要用。 2. 新建conda虚拟环境 2.1 为conda配置清华镜像源 conda常用命令 打开Anaconda prompt窗口,使用如下命令&#xf…

学习心得01:STM32开发板

嵌入式开发也不难,相关知识需要学习。对于某个具体内容,需要反复测试、修改。 这是我买的一个开发板,各个范例都跑了一遍,有问题的还问过客服(更新代码后解决)。

[C++]笔记-函数的栈空间(避免栈空间溢出)

错误1 当数组的内存占用较大时,会引发异常 #include <iostream> using namespace std; int main() {char buff[2000000];cout << (int)buff[sizeof(buff) - 1] << endl; 错误 2 当调用次数较小的时候,栈内存还没有满,可以输出,该地址相减除以1024等于100,就…

​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位

​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位

T01西门子#将博图触摸屏中使用的外部图片全部导出

方法一&#xff1a;直接在博图软件WINCC中 点击图片右击 缺点&#xff1a;用自带的画图软件打开保存后无法保留透明。 方法二&#xff1a;使用官方软件导出 优点&#xff1a;快速批量全部导出&#xff0c;保留文件原格式。 下载地址&#xff1a; 将图形从 WinCC (TIA Portal) …

理解变分自编码器(VAE)

转载翻译自&#xff1a;https://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73 介绍 在过去几年中&#xff0c;基于深度学习的生成模型因为在该领域中取得了一些惊人的进展而越来越受到关注。依靠大量的数据、精心设计的网络架构和智能训…

日志系统——实用类设计,日志等级类设计,日志消息类设计

一&#xff0c;实用类设计 该类主要是提前完成一些后面会用到的零碎通用的功能接口&#xff0c;主要有下面几个 1.获取系统时间&#xff1a;这里我们直接用time()函数获取时间返回 2.判断文件是否存在&#xff1a;判断文件我们调用系统接口&#xff0c;stat()&#xff0c;如下所…

Linux命令200例:top是一个基于终端的实时系统监控工具(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

新款2023奥迪A5新车32.24,这款车怎么样?

奥迪公司近期发布了新款A5车型&#xff0c;全国起售价为32.24万元。这款新车凭借其精致的设计和出色的实用性&#xff0c;吸引了大量消费者的关注。本文将结合个人经验和市场调研&#xff0c;对这款新车的特性进行深入剖析。 首先&#xff0c;奥迪A5的外观设计完美融合了实用性…

16.5 【Linux】SELinux 初探

16.5.1 什么是 SELinux SELinux是“ Security Enhanced Linux ”的缩写&#xff0c;字面上的意义就是安全强化的 Linux。 当初设计的目标&#xff1a;避免资源的误用 SELinux 是由美国国家安全局 &#xff08;NSA&#xff09; 开发的&#xff0c;当初开发这玩意儿的目的是因…

Centos7完全卸载已安装的Nginx

查看服务器上安装的nginx版本号&#xff0c;主要是通过ngix的-v或-V选项 Linux下查看Nginx安装目录、版本号信息? -v 显示 nginx 的版本。 -V 显示 nginx 的版本&#xff0c;编译器版本和配置参数。 [rootwww ~]# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.…

移动硬盘已识别但无法读取怎么办?

移动硬盘已识别但无法读取问题是一个比较常见的问题&#xff0c;通常会以“硬盘无法访问”的提示弹窗形式出现&#xff0c;也曾让很多人苦闷烦恼不已。那么具体的移动硬盘无法读取原因是什么呢&#xff1f; 移动硬盘无法读取的原因 硬盘驱动器可能是没有分区的新驱动器。如果您…

记一次:线程池源码解析

前言&#xff1a;很多时候我们需要使用线程池来处理逻辑&#xff0c;但实际上线程池是如何添加线程&#xff0c;如何执行的呢&#xff1f; 0&#xff1a;创建线程池--略&#xff08;7个参数&#xff09; 1&#xff1a;提交线程池源码 public void execute(Runnable command)…

基于 spring boot 的毕业生信息招聘管理系统【源码在文末】

向上的路&#xff0c;并不拥挤&#xff0c;拥挤是因为大部分人选择了安逸 大学生嘛&#xff0c;论文写不出&#xff0c;代码搞不懂不要紧&#xff0c;重要的是&#xff0c;从这一刻就开始学习&#xff0c;立刻马上&#xff01; 今天带来的是最新的选题&#xff0c;基于 spring…

Python绘图系统5:自定义一个坐标设置控件

文章目录 封装成类数据输入方案设置数据源代码 Python绘图系统&#xff1a;将matplotlib嵌入到tkinter &#x1f4c8;简单的绘图系统 &#x1f4c8;数据导入&#x1f4c8;三维绘图系统 封装成类 xyz这三行其实从代码的角度来说是完全一样的&#xff0c;而且在写这三行组件的时…

Python学习笔记_基础篇(九)_面向对象编程

本篇内容: 1、反射2、面向对象编程3、面向对象三大特性4、类成员5、类成员修饰符6、类的特殊成员7、单例模式 反射 python中的反射功能是由以下四个内置函数提供&#xff1a;hasattr、getattr、setattr、delattr&#xff0c;改四个函数分别用于对对象内部执行&#xff1a;检…

VS2012+AO 10.2.2 项目错误 之内部编译器错误: 步骤“EMIT”

调试时异常消息&#xff1a; 内部编译器错误: 步骤“EMIT” 内部编译器错误: 步骤“COMPILE”的符号 内部编译器错误: 步骤“COMPILE”的符号“<全局命名空间>” 内部编译器错误(0xc0000005 位于地址 00C9FDDC 处): 可能的原因是“CODEGEN”。 好好的项目&…