1.5.2 ZFNet

2023-11-07

1.5.2 ZFNet

在前文中,我们对 AlexNet 的架构以及核心组件做了相关介绍,虽然 AlexNet 赢得了 ILSVRC2012 的冠军,相比传统技术取得辉煌的成就,然而技术绝不止步于此,AlexNet 为什么性能如此优越,它还能如何改进呢?带着这样的问题,在 ILSVRC2013 中,ZFNet1 利用反卷积可视化技术探讨上述问题,并对 AlexNet 网络加以改进,改进后的 ZFNet 性能已明显超越 AlexNet。

ZFNet 由 Matthew D. Zeiler 和他的博导 Rob Fergus 提出,网络命名来自于他们的名字首字母组合。ZFNet 实际上并不是这一届的冠军,而是由一个创业公司 Clarifai 获得,而 Zeiler 是该公司的 CEO,而我们通常讨论 ILSVRC2013 的获胜者,一般也指的是 ZFNet。

5.7 反卷积(Deconvnet)

在深度学习中提到的反卷积通常是指转置卷积(transposed convolution),卷积操作的一般步骤通常是将输入层的图像经过某个卷积核实现卷积操作,将其映射到输出空间中。而反卷积操作则是将输出空间的数据反向应用该卷积核,将其映射到输入像素空间中,这样在输入层的成像可以表明该卷积核从中提取了什么特征模式。

网络正向卷积的过程可以简化为:卷积、ReLU非线性激活、池化。则反卷积过程可以简化为反池化、ReLU非线性激活、反卷积。如下图所示,右侧自下而上是图像的正向卷积过程,左侧自上而下是反卷积过程。
【图 1】

5.7.1 上采样池化(UnPooling)

通常在卷积网络中的池化是指下采样(DownPooling)过程,而一般的池化网格为 2 × 2 2\times 2 2×2,如下图所示,最大池化是指在 2 × 2 2 \times 2 2×2 的单元格中挑选最大的数值,这个过程中,图像的高度和宽度均缩小一半,因此称为下采样,而上采样是将特征图在高度和宽度上放大一倍的操作,因此称之为上采样。然而从下采样到上采样,该过程是不可逆的,因此在执行下采样的期间需要记录单元格中最大局部值(max locations)的位置,以便用于上采样过程,其补充的新空间位置一般补 0。整个过程如下图所示:

【图 2】

在卷积过程中,我们使用 ReLU 激活函数保证所有的输出均为非负数,这个约束对于反卷积过程依然适用,这样映射到输入像素空间的图像值也均为非负,因此在反卷积过程中我们依然使用 ReLU 激活函数。

5.7.2 反卷积过程

如图 1 所示,在卷积过程中,我们使用的卷积核为 F F F,而在反卷积过程中,我们使用的卷积核为 F T F^T FT。这就是为什么此类的反卷积也被称为转置卷积。为了更好的理解转置过程,我们举例如下:

假设某特征图为 X = [ 1 2 3 4 5 6 7 8 9 ] X=\begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} X=147258369,卷积核 F = [ 1 2 1 2 1 3 3 1 2 ] F=\begin{bmatrix} 1 & 2 & 1\\ 2 & 1 & 3 \\ 3 & 1 & 2 \end{bmatrix} F=123211132,则卷积后的特征图为 [ 86 ] \begin{bmatrix} 86 \end{bmatrix} [86],一个 3 × 3 3 \times 3 3×3 的特征图与 3 × 3 3 \times 3 3×3 的卷积核操作得到 1 × 1 1 \times 1 1×1 大小的特征图,而反卷积是将得到的 1 × 1 1 \times 1 1×1 的特征图利用该卷积核还原为原始 3 × 3 3 \times 3 3×3 的特征图。为此,我们首先需要将 1 × 1 1\times 1 1×1 的卷积核扩展为 5 × 5 5\times 5 5×5,这样在与 3 × 3 3\times 3 3×3 大小的卷积核卷积后得到的图像大小为 3 × 3 3 \times 3 3×3。操作过程如下:

[ 0 0 0 0 0 0 0 0 0 0 0 0 86 0 0 0 0 0 0 0 0 0 0 0 0 ] ∗ [ 2 1 3 3 1 2 1 2 1 ] = [ 1 2 3 4 5 6 7 8 9 ] × 86 \begin{bmatrix} 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 86 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\0 & 0 & 0 & 0 & 0 \end{bmatrix} * \begin{bmatrix} 2 & 1 & 3\\ 3 & 1 & 2 \\ 1 & 2 & 1 \end{bmatrix} = \begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}\times 86 00000000000086000000000000231112321=147258369×86

在上述过程中,我们可以看到此处的卷积核实际为原卷积核 F F F 的转置。

5.8 ZFNet 架构设计

借助反卷积可视化技术,可以查看 AlexNet 卷积网络中存在的一些问题:

  • AlexNet 网络第一层卷积核混杂了大量的高频和低频信号,但是缺乏中频信息
  • AlexNet 第二卷积层跨度过大,产生了一些混叠失真等无意义特征

针对这两个缺陷,ZFNet 将 AlexNet 第一层的卷积核由 11 × 11 11\times 11 11×11 减小为 7 × 7 7 \times 7 7×7,强迫网络从更小的局部范围抽取特征,避免对中频信息的严重过滤,其次将 AlexNet 第一层的卷积步长由 4 降低为 2。

模块 卷积层 池化、正则
CONV1 [7×7 ~ 2 | 3→96] MAXPOOL[3×3 ~ 2]→LRN
CONV2 [5×5 ~ 2 | 96→256] MAXPOOL[3×3 ~ 2]→LRN
CONV3 [3×3 ~ 1 | 256→384] →LRN
CONV4 [3×3 ~ 1 | 384→384] →LRN
CONV5 [3×3 ~ 1 | 384→256] MAXPOOL[3×3 ~ 2]→LRN
FC1 [12544→4096] DROPOUT 50%
FC2 [4096→4096] DROPOUT 50%
Softmax [4096→1000]

5.9 ZFNet 的贡献

通过上面的介绍,我们知道 ZFNet 仅仅是 AlexNet 的一个微型改版,该网络本身的架构在目前的 CNN 家族中几乎被湮没了。然而抛开本身的网络架构,其可视化理解 CNN 网络的思路以及实验结果却对 CNN 架构的发展起到了至关重要的作用:

  • 通过对各层卷积核的可视化,我们可以直观的看出 CNN 网络各层的特征提取情况,底层主要对物理轮廓、边缘、纹理、颜色等特征进行提取,而高层逐渐通过低层的特征组合为具有明显分类性质的抽象特征,这表明 CNN 网络的高层与特定的分类任务有关,而低层卷积架构则可以理解为通用特征提取器,这也是预训练+微调模式的重要理论依据。
  • 在对图像进行一些位移、缩放及旋转操作后,实验证明 CNN 特征提取器检测到的特征具有平移和缩放不变性,但是不具有旋转不变性。
  • 在对网络架构的全连接层和卷积层进行增删等可以发现,全连接层对结果的影响较小但是增加一些卷积层会有一定的性能提升,这将作为一个 CNN 深度架构时代的开端,由此引发一场深度架构大战。

  1. Visualizing and Understanding Convolutional Networks ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1.5.2 ZFNet 的相关文章

  • 各版本Pytorch安装详解

    Pytorch安装教程 windows版本 conda安装 1 cuda9 0 python3 6 3 5 3 7 conda install pytorch c pytorch pip3 install torchvision 2 cud
  • AVFoundation 播放器实例

    播放器 使用苹果官方的 AVFoundation 框架 可以很容易的封装一个视频的播放器 在获取视频资源后 只需要将视频在播放图层中渲染即可 并且可以在图层中添加控件 以便对视频的播放和暂停进行控制 下面封装的库 主要包含两个类 HXJPl

随机推荐

  • FTP云盘

    参考 FTP云盘项目 作者 糯米啊啊 发布时间 2021 08 19 10 34 05 网址 https blog csdn net weixin 43732386 spm 1001 2014 3001 5509 参考 自制FTP云盘项目
  • 纯干货基于flinkcdc实现mysql到mysql/oracle/...... DML实时同步

    CDC 首先什么是CDC 它是Change Data Capture的缩写 即变更数据捕捉的简称 使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游 供下游使用 这些变更可以包括INSERT DELETE UPDATE等操作
  • c++实现冒泡排序

    用c 实现冒泡排序 include
  • 大数据分析实例:使用Python进行数据清洗与可视化

    大数据分析实例 使用Python进行数据清洗与可视化 随着大数据时代的到来 数据分析在各个领域中扮演着重要的角色 本文将介绍如何使用Python进行大数据分析的实例 包括数据清洗和可视化技术 我们将使用Python中一些常用的库 如NumP
  • Flask+MySQL学生信息维护系统

    Python课程期末项目 小白一个 学生信息维护系统项目概述 学生管理系统是一个基于 Python 的 Flask MySQL 项目 旨在实现对学生信息的管理和查询 该系统主要包括学生信息录入 信息查询 信息修改和信息删除 信息可视化等功能
  • 定时器的相关知识与运用定时器相关的程序

    一 定时器的介绍 1 定时器的介绍 51单片机的定时器属于单片机的内部资源 其电路的连接和运行均在单片机内部完成 2 定时器作用 1 用于计时系统 实现软件计时 或者使程序每隔一固定时间完成一项操作 2 替代长时间的Delay 提高CPU的
  • 如何解决IE浏览器主页被改为2345.com

    如何解决IE浏览器主页被改为2345 com 将桌面上IE图标删除 也将开始中的IE图标删除了 找到C Program Files Internet Explorer 将IE图标重新放在了桌面上 点击IE之后 终于好使了
  • 安装rpm软件,丢失库解决方案

    1 问题 root fei rpm ivh libevent 1 4 13 4 el6 i686 rpm error Failed dependencies libc so 6 is needed by libevent 1 4 13 4
  • go语言WaitGroup 实现原理

    Go语言中的WaitGroup是一种并发原语 用于等待一组goroutine的完成 它提供了三个方法 Add Done 和Wait Add delta int 向计数器添加或减去给定的值 delta可以为负数 Done 减少计数器的值 相当
  • [网络安全提高篇] 一二三.恶意样本分类之基于API序列和深度学习的恶意家族分类详解

    终于忙完初稿 开心地写一篇博客 网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但
  • SpringCloud -Nacos服务注册与发现

    Nacos简介 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据及流量管理 Nacos 具有如下特性 服务发现和服务健康监测 支持基于DNS和基于RPC
  • c++ 实现压缩

    简介 目标 使用c 压缩文件夹 方法 调用exe来实现的压缩 这里调用的是自己编译的minizip exe 环境 win10 win7 visual studio 2019 资源 https github com ltCodeW miniz
  • Big Endian与Little Endian区别

    author skatetime 2010 03 05 Big Endian与Little Endian区别 1 什么是Big Endian和Little Endian 在设计计算机系统的时候 有两种处理内存中数据的方法 一种叫为littl
  • CoreData 如新如故

    真正的陪伴不是你的所有绝望我都感同身受 而是有我在一切都会好起来 乱糟糟的一天 最近在为新项目做准备 想使用CoreData框架作为数据持久化的操作方式 因为没用过 之前直接用的SQLite 就研究了下 才发现这是一个比较大的内容 既然是骨
  • 在使用函数式 setState 时报错 this.setState is not a function

    在react中点击事件里面 setState 时会使this重新定义 所以在点击的函数里面使用this setState 时会报错this setState not a function 因此需要提前给点击事件的函数绑定this
  • Python爬虫——异常处理(try/except/else/finally)

    1 什么是异常 当程序运行中检测到一个错误时 无法继续执行 出现了一些错误的提示 这就是异常 常见错误类型 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户终端执行
  • PAT乙级练习题_1023“组个最小数”_python解题

    原题 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的数就是 10015558 现给定数字 请
  • maven项目建立pom.xml报无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3

    原文地址 http blog csdn net woshixuye article details 14661983 一 发现问题 建立maven项目后 pom xml在显示红叉 鼠标放上去 显示Execution default test
  • IEEE模板解决找不到引用文献错误 Citation ‘×××ב on page x undefined.

    IEEE模板解决找不到引用文献错误 Citation on page x undefined 使用官网下载的IEEEtrans模板 bib文件格式正确 发现使用winedt编译就正常 但是使用vscode texlive编译器编译出来一个参
  • 1.5.2 ZFNet

    目录 1 5 2 ZFNet 5 7 反卷积 Deconvnet 5 7 1 上采样池化 UnPooling 5 7 2 反卷积过程 5 8 ZFNet 架构设计 5 9 ZFNet 的贡献 1 5 2 ZFNet 在前文中 我们对 Ale