1.6 VGG GoogleNet

news/2024/7/3 12:09:21

目录

  • 1.6 VGG & GoogleNet
    • 1.6.1 VGGNet
    • 1.6.2 GoogleNet
      • 1.6.2.1 Bottleneck Layer
      • 1.6.2.2 Inception 模块
      • 1.6.2.3 Inception-v1 网络架构

1.6 VGG & GoogleNet

在前文中,我们提到,通过对 CNN 网络架构进行可视化研究,我们发现网络层次增多会带来一定的性能提升,为了继续探索 CNN 网络架构在深度层面的性能问题,在 ILSVRC2014 中,牛津大学团队提出的 VGG 网络架构和 Google 团队提出的 GoogleNet 分别获得图像分类任务的亚军和冠军,其识别误差率远低于 AlexNet 和 ZFNet,如下图所示:

【图 1】

在本章节,我们讲解 VGG 网络是如何在深度层次上进一步优化网络架构的。

1.6.1 VGGNet

在 VGG 中,我们几乎只使用 3 × 3 3\times 3 3×3 大小的卷积核(只有一个网络配置中使用了 1 × 1 1\times 1 1×1 卷积核), 3 × 3 3\times 3 3×3 是具有捕获方向感(上下左右中)的最小卷积核,在之前的 CNN 架构中,一般会采用卷积核+池化层的组合方式,而在该网络架构上,我们可以发现并不是所有的卷积层后面都会加入池化层。这么做的主要原因是多层连续的小卷积核实际等价于一个大卷积核的作用。

【图2】

例如上图,两层连续的 3 × 3 3\times 3 3×3 卷积核其实际等价于一层 5 × 5 5\times 5 5×5 卷积核的作用。而连续 3 层的 3 × 3 3\times 3 3×3 卷积核相当于一个 7 × 7 7\times 7 7×7 卷积核的作用。既然它们的作用等价,为何还要如此?

首先,我们更多的卷积层就可以从中引入更多的 ReLU 非线性激活函数,增加网络的模型容量,使得网络有能力解决更复杂的模式;其次从数学计算角度而言,可以显著降低参数量,避免过拟合,因此也可以理解为一种正则化手段。

举例而言,假设输入和输出空间通道数均为 C C C,则一层 11 × 11 11\times 11 11×11 的卷积核参数量为 11 × 11 C 2 = 121 C 2 11\times11 C^2=121C^2 11×11C2=121C2,而具有等价作用的连续 5 层 3 × 3 3\times 3 3×3 卷积核的参数量为 5 × ( 3 × 3 ) C 2 = 45 C 2 5\times(3\times3)C^2=45C^2 5×(3×3)C2=45C2,减少了 63% 的参数量。
【图 3】

在网络架构设计方面,VGG 实现了 6 种不同的网络配置,所有网络的最后由三个连续的全连接组成,前面由不同层次的卷积层和池化层组成。A 网络架构 VGG-11 是基准网络架构, A-LRN 是在 A 的基础上加入了 LRN,B 架构在 A 的基础上引入更多的卷积层,C 架构则引入了 1 × 1 1\times 1 1×1 卷积层,D架构将 C 中所有的 1 × 1 1\times 1 1×1 替换回 3 × 3 3\times 3 3×3,即被人所熟知的 VGG-16 架构,而 E 则进一步引入更多的网络层,即 VGG-19 架构。

1 × 1 1\times 1 1×1 的架构并不会降低网络参数量,表面上看并没有对原架构造成任何影响,但是引入的 1 × 1 1\times 1 1×1 卷积层也可以带来非线性激活。实际上, 1 × 1 1\times 1 1×1 的卷积核重在不同通道间的数据融合,因为卷积操作是基于输入空间的所有通道执行的,这一点的思想实际来自于 “Network in Network”1

通过观察网络架构中不同层的通道数可以发现,随着网络深度的加深,网络宽度(通道数)成倍增加,这种网络架构也对被后来网络发展所采用。其直观化解释为,网络的低层主要检测简单的纹理、颜色、边缘等简单特征,因此少量的卷积核便可以完成,而随着深度的加深,网络需要组合简单特征抽取更为复杂的特征形式,因此需要更多的卷积核来完成,当然这只是一种形式化理解。
【图 4】

实验证明,引入 LRN 并没有带来性能的提升(甚至降低了),反而会消耗更多的内存及训练时间,因此,此后的主流网络架构受其影响均不再使用 LRN 技术,转而使用 BN 等正则化层技术。VGG-13(B架构)的误差率在 9.9%,说明引入新的卷积层可以带来性能的提升,VGG-16(Conv 1)因为引入了 1 × 1 1\times 1 1×1 的卷积核,其误差率进一步降低,证明了额外引入的三层 1 × 1 1\times 1 1×1 卷积核的确可以带来分类性能上的提升,且该技术在 GoogleNet 以及后来的 ResNet 网络中被大量使用。VGG-16 由于引入更多的卷积层,其性能进一步得到提升(8.8%),然而在 VGG-19 中,其性能没有得到进一步提升(9.0%)这说明,单纯的引入更多的卷积层,其性能不会被无限提高。目前提到的 VGG 网络主要有 VGG-16 和 VGG-19 两种架构。

VGG 作者随后采用多尺度训练、多尺度测试、密集测试以及模型消融实验,最终可以将误差率降低到 6.8%。

1.6.2 GoogleNet

GoogleNet,也称为 Inception-V1, 相比较之前的 LeNet-5、AlexNet、VGG 等网络架构,有了很大的不同,其核心技术主要是大量采用 1 × 1 1\times 1 1×1 卷积核,以及 Inception 模块的构建。其中 1 × 1 1\times 1 1×1 的主要思想主要来自于 “Network in network(NIN)”1。而网络之所以命名为 Inception,主要是受 NIN 影响及电影 Inception(盗梦空间)影视截屏表情包影响。

【图 5】

1.6.2.1 Bottleneck Layer

在 VGG 中,不仅网络的深度加深,且网络的宽度也不断加宽,这使得网络参数急剧性增长,参数增多不仅需要更多的训练数据及训练时间,而且存在过拟合的风险,因此这是一种投入与产出不成比例的做法,也限制了网络的规模,因此 1 × 1 1\times 1 1×1 卷积核在 GoogleNet 网络中被大量使用,其主要目的就是突破计算瓶颈,因此也被称为 “Bottleneck Layer”,这不仅允许我们在深度层面加深,也允许在宽度的增加且没有明显的性能损失。

【图 6】

例如在上图中,当我们仅使用 5 × 5 5\times 5 5×5 卷积核时,其计算量为 14 × 14 × 5 × 5 × 480 × 48 = 112.9 M 14\times 14 \times 5\times 5\times 480\times 48=112.9M 14×14×5×5×480×48=112.9M,当我们先使用 16 个 1 × 1 1\times 1 1×1 卷积核将维度降低到 16 后再次运用 5 × 5 5\times 5 5×5 卷积核时,其参数量为 14 × 14 × 1 × 1 × 480 × 16 + 14 × 14 × 5 × 5 × 16 × 48 = 1.5 M + 3.8 M = 5.3 M 14\times 14\times 1\times 1\times 480\times 16 + 14\times 14\times 5\times 5\times 16\times 48=1.5M+3.8M=5.3M 14×14×1×1×480×16+14×14×5×5×16×48=1.5M+3.8M=5.3M,将其计算量降低了 112.9M,如下图所示。此处的降维操作实际上是通过非线性映射将数据从高维映射到低维,不同于 PCA 等线性降维方式。

【图 7】

1.6.2.2 Inception 模块

在此之前,我们认为提高深度网络性能最直接的方式就是增加它们的深度或宽度,在拥有大量标注的训练集下,该方法往往更易实现且安全有效。然而这种做法存在两个致命缺陷:

  • 更大规模的网络往往意味着更多的网络参数,这就需要更多的标注数据集,而标注数据集的获取目前依然需要高昂的人工成本,且存在过拟合风险;
  • 第二个是计算成本的增加,这需要更多的计算资源及训练时间

为了解决这两个问题,一个基本的方式就是将密集的全连接层替换为稀疏性连接,甚至卷积操作中的局部密集连接也可以被替换为稀疏连接,然而目前的计算机硬件对稀疏矩阵的计算性能远不如密集矩阵。因此 Inception 架构的主要想法是用密集计算组件近似卷积网络的最优稀疏结构。Inception 模块的基本组成思路是用不同大小的卷积核及池化操作运用到同一特征输入空间,然后将不同的输出特征图聚合在一起,如下图所示。

【图 8】

结合我们上文的 1 × 1 1\times 1 1×1 卷积核,我们进一步把该卷积核引入到 3 × 3 3\times 3 3×3 5 × 5 5\times 5 5×5 及池化操作中,如下图所示:

【图 9】

直观上理解,此处我们不再严格限制卷积核的大小以及应该进行卷积或池化操作,而是由网络并行在不同尺度的卷积核上进行学习,以实现近似密集计算组件的稀疏连接结构。

1.6.2.3 Inception-v1 网络架构

网络整体架构设计如下表所示:
【图 10】

其中 “# 3 × 3 3\times 3 3×3 reduce” 和 “# 5 × 5 5\times 5 5×5 reduce” 表示在 3 × 3 3\times 3 3×3 5 × 5 5\times 5 5×5 卷积核之前使用的 1 × 1 1\times 1 1×1 卷积核的数量。“pool proj” 表示在 Inception 模块内池化后应用的 1 × 1 1\times 1 1×1 卷积核数量。

另外网络最后将连接层替换为全局平均池化层,并提高了约 0.6% 的准确率,然而 Dropout 正则化层仍必不可少。

全局平均池化:

全连接层或全局平均池化操作的目的都是将卷积操作输出特征图展开,以便于网络最终的输出层连接,但是全连接层需要引入大量的计算参数,

【图 8】

如上图所示,如果采用全连接操作,则参数量为 7 × 7 × 1024 × 1024 = 51.3 M 7\times 7\times 1024\times 1024=51.3M 7×7×1024×1024=51.3M,该参数量是巨大的。而全局平均池化是基于每一个通道特征图( 7 × 7 7\times 7 7×7)求平均值,该过程没有引入任何参数。

另外网络在训练阶段还加入一些辅助分类器层,作者声称具有一定的正则化作用,且缓解了梯度消失问题,该策略在测试和推理阶段没有被使用。


  1. Lin, M., Chen, Q., and Yan, S. Network in network. In Proc. ICLR, 2014. ↩︎ ↩︎


http://www.niftyadmin.cn/n/3657482.html

相关文章

生成 RSS2.0 文档可能犯错误的一些地方

手下有个人在创建一个RSS2.0文档时,对RSS2.0的一些项的规范不是很了解,把数据放错了地方,我下面就整理一些他犯错误的地方。避免其他人也犯这个错误。完整的RSS2.0规范可以看以下链接地址:http://tonyqus.cnblogs.com/archive/200…

2.1 目标检测简介

目录2.1 目标检测简介[^1]2.1.1 传统的目标检测方法2.1.2 深度学习时代的目标检测2.1 目标检测简介1 目标检测是另一项非常重要的计算机视觉任务,图像分类的目的是辨别图片中所包含的主体对象是什么,而目标检测的目标是检测图像中某对象的位置所在。简单…

从HTTP状态 301,302,200 来看页面跳转

301和302 Http状态有啥区别?301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved), 302 redirect: 302 代表暂时性转移(Temporarily…

3.1 EGBIS

目录3.1 EGBIS3.1.1 算法基础概念3.1.2 EGBIS 算法3.1.3 算法应用参考资料3.1 EGBIS 在本章内容中,我们将介绍基于图的高效图像分割(Efficient Graph-Based Image Segmentation, EGBIS)算法,该算法是基于图的贪婪聚合算法&#x…

推荐阅读《Applications = Code + Markup》

最近在通过一边动手做一个智能客户端的WPF应用,一边在学习WPF技术。 WPF技术跟之前的Windows Form应用两者给我的感觉是:这两个技术是一个非常大的跨越。很多Windows Form的心得,想法,思想在WPF中都不再有用了。 我最近几年学习新…

2.2 Selective Search

目录2.2 Selective Search2.2.1 算法设计原则2.2.2 层次聚合2.2.3 多元化采样策略参考资料2.2 Selective Search 在目标检测任务中,我们不仅需要判断出图像中包含的对象类别,还需要检测出目标所在位置,理论上图片任何位置都可能存在任意尺度…

Html Encode时的单引号的替换

我们在Html Encode 时候&#xff0c;需要把单引号、双引号"&#xff0c;尖括号<> 作替换。 在替换单引号的时候&#xff0c;我们有两个选择&#xff1a; 1、替换成 2、替换成 如果你使用的是IE浏览器&#xff0c;你会看到第一种替换方式不可用。 但是你如果用的是…

2.3 OverFeat

目录2.3 OverFeat2.3.1 任务与评估指标2.3.2 OverFeat 模型设计2.3.3 多尺度分类2.3.4、OverFeat 视图参考文献2.3 OverFeat OverFeat 是 ILSVRC2013 中目标定位任务的冠军&#xff0c;它提出了一种集成式框架&#xff0c;将图像分类、目标定位以及目标检测三种任务的学习过程…