Going deeper with convolutions

原文链接

摘要

研究提出了一个名为“Inception”的深度卷积神经网结构,其目标是将分类、识别ILSVRC14数据集的技术水平提高一个层次。这一结构的主要特征是对网络内部计算资源的利用进行了优化。这一目标的实现是通过细致的设计,使得在保持计算消耗稳定不变的同时增加网络的宽度与深度

引言

在物体识别方面,最大的收获其实并不来自于深度网络或是大型模型的单独使用,而是来自深度结构和传统机器视觉的协同作用,比如R-CNN算法
此处关注的是一个应用于计算机视觉的深度神经网络,名为“Inception”。“深”有两层含义:首先,引入了一种高水平的组织方式来构建Inception的模块,同时以更加直接的方式来增加网络深度

相关研究

网中网(Network-in-Network)提出的目的是为了增加神经网络的表现力。当应用于卷积层的时候,这一方法可以看做一个额外的1×1卷积层,后面通常跟着一个修正的线性激活。这使得Network-in-Network能够轻松地集成到现有的CNN管道中。这种方法在本研究网络体系结构中被大量地使用。在此1*1卷积具有双重目的:最重要的一点是,它们被主要用于降维模块以打破计算瓶颈,否则网络规模会受到限制。这使得不仅可以加深网络,同时还可以加宽,而不造成明显的性能下降

R-CNN将整个检测问题分解为两个子问题:首先,使用低层线索比如组成潜在物体的颜色、超像素等,提取出一些类别不可知的信息,然后接下来利用CNN在这些区块信息上识别物体类别。这种双步方法中,低层线索会影响切分区块大小的准确性及CNN分类的准确度。本研究采用了同样的管道,但对其中的每一步都进行了加强,比如采用多盒预测以提高边界识别集合的召回率。还对bounding box提出的分类建议进行了不同方法的搭配合成,以获得更好的结果

动机与高层设计考虑

最直接提高深度神经网络性能的方法是增加其规模,但更大的网络规模往往意味着更多的参数,这使得扩大后的网络更易过拟合。另一个统一增加网络大小的缺陷是计算资源需求的暴增,在一个深度视觉网络,如果两个卷积层相连,任何增加过滤器数量的改动都会导致增加二次方倍数的计算量

结构细节

Inception的体系结构的主要设计思路是要在一个卷积视觉网络中寻找一个局部最优的稀疏结构,这个结构需要能够被可获得的密集组件覆盖和近似表达。需要做的只是寻找局部最优化结构并在空间上对其进行重复

一个逐层搭建的结构,需要分析其每一步的最后一层的统计关联性,并将高度相关的神经单元聚类为簇。这些簇组成了下一层的单元并与前一层的各个单元相连。假设前面一层的每个单元都对应输入图像的某些区域,而这些单元被分组分配给过滤器。在较低的层次(更靠近输入端),相关的单元聚焦于局部区域。这意味着能够得到大量聚焦于同一区域的簇,它们会被下一层的1*1卷积覆盖。然而,更少的在空间上传播更多的簇(这些簇会被区块更大的卷积所覆盖)是可以被期待的。这样,覆盖大型区域的区块数量就会减少。为了避免区块对齐问题,现有的Inception结构将过滤器大小限制为1*1,3*3 和 5*5.这也意味着合理的网络结构应该是将层次的输出过滤器bank结合起来,并将其合并为单一向量作为输出以及下一层的输入。另外,因为池化操作对于现有水平的卷积网络是很重要的,建议最好在每一步增加一条并行池化通路,这样应该也会有一些额外的好处,如下

Inception模块是一层一层往上栈式堆叠的,所以它们输出的关联性统计会产生变化:更高层抽象的特征会由更高层次所捕获,而它们的空间聚集度会随之降低,因为随着层次的升高,3*3和5*5的卷积的比例也会随之升高

但是上述模型,至少是naive版本的模型,即使只有很有限个数的5×5卷积,其最上层卷积层的巨量过滤器的开支都会让人望而却步。一旦把池化层加进来,这个问题会变得更加严重:它们的输出过滤器个数与前面过程的过滤器个数相等。池化层输出与卷积层输出的合并会导致无法避免的每步输出暴增。即使是这种结构覆盖了最优的稀疏结构,它可能依然还是很低效,从而导致少数几步的计算量就会爆炸式增长

基于此提出了第二种设想:审慎地把降维和投影使用到所有计算量可能急剧增加的地方。这是基于嵌入的成功来设计的:相对于一个大型的图像区块,即使是低维的嵌入也可能包含大量的信息。然而,嵌入会把信息以一种致密的,压缩的方式展现出来,而压缩信息是很难被建模的。研究想要在大部分位置保持稀疏性,而只在信号需要被聚合的时候压缩它们。因此,1*1卷积被用于在昂贵的3*3和5*5卷积之前以用来降维。除了用于降维,它们也被用于数据线性修正激活,这使之具有双重使命,如下

一般而言,一个Inception网络是由一系列上述结构栈式堆叠而成,有时候步长为2的最大池化层会把网络一分为二。出于技术原因(更高效的训练),只在高层使用Inception结构而把低层保留为传统的卷积模式似乎是有利的

这一结构一个有利的方面是它允许每一步的神经元大量增加,而不会导致计算复杂度的暴增。降维的普遍存在能够阻挡大量来自上一层的数据涌入下一层的过滤器,在大区块上对其进行卷积之前就对其进行降维。另一个在实践中很有用的方面是,它与视觉信息应该被多层次处理,然后被汇集到下面层次汇总,同时抽取多尺度特征的特性相一致

计算资源的优化利用允许增加每层网络的宽度以及层数,而无需面对增加的计算困难。另一种使用Inception架构的方法是开发一种质量稍差,但计算起来更便宜的版本

GoogLeNet

所有的卷积,包括那些Inception模块内的卷积,都使用修正线性激活函数。网络的感知域是一个RGB三色通道的224×224区域,并且经过了减去均值的处理。"#3*3"和"#5*5"表示在3*3和5*卷积层之前使用1*1过滤器的reduction层。1*1过滤器的数量可以在池化投影列中的最大池化层后面的投影层中看到。所有的降维层和投影层也都使用修正线性激活函数

架构图

对于相对更深的网络,穿过所有层次高效向后梯度传播的能力是很关键的。相对浅层的网络的强大性能表明网络中层所产生的特征是具有很好的区分度的。通过增加一些与这些中间层相连的附加的分类器,可以期待在分类器的低层增加向后传播的梯度信号,同时增加更多的正则化。这些分类器采用较小的卷积网络形式,被安置在Inception(4a)和(4d)模块的输出的顶部。在训练中,它们的偏差被折扣后加到总偏差中(附加分类器的偏差乘以0.3)。在预测过程中,这些附加网络会被抛弃

附加网络的结构,包括附加分类器的结构如下

一个平均池化层,过滤器为5*5,步长为3,在4(a)得到一个4x4x512的输出,在4(d)得到一个4x4x528的输出
一个1x1卷积,有128个过滤器,用于降维和规范化线性激活
一个拥有1024个单元和规范化线性激活的全连接层
一个会抛弃70%输出的dropout层
一个使用softmax偏差的线性层,这一层被用作分类器(与主分类器一样,它进行1000类分类,但在预测阶段,它会被抛弃)

训练方法

训练使用动量(momentum)为0.9的异步随机梯度下降,并将学习速率固定为每八次迭代减少0.04。Polyak均值被用于建立在推理过程中使用的最终模型

一个在比赛之后已经被证明非常有效的图片采样方案是将取样区块的大小平均分布在图片区域的8%到100%之间,宽高比随机分布与3/4和4/3之间。同时,发现光度变换对于对抗过拟合在某种程度上是很有用的

除了论文前述的训练技术,还采用了如下一系列测试技术去提高性能

  1. 独立训练了七个版本的相同的GoogLeNet模型(包括一个宽度更大的版本)然后将其联立起来进行预测。这些模型训练基于相同的初始化(主要由于一个oversight,甚至初始权值都是相同的)以及学习速率策略。唯一的不同是采样方法和图片输入顺序不同
  2. 在测试中,将图片重设为四种不同的尺度(高和宽),分别是256,288,320和352,包括左中右三块,(如果说肖像图,取顶中底三块),对于每一块,取其四角和中心,裁切出5个224*224的区块,同时取其镜像。结果每张图就得到了4*3*6*2 = 144个区块(当区块数超过合理范围之后,其带来的好处也就不那么重要了)
  3. softmax概率分布被平均到不同的裁切以及所有的单分类器上以获取最终的预测结果

结论

利用现有密集砌块逼近预想中的最佳稀疏结构,是一种可行的提高计算机视觉神经网络能力的方法。这种模型的主要优势是与浅层且较窄的网络相比,只要适度增加计算需求就能极大地提升质量。该检测技术即使没有使用上下文和边界回归,依然很有竞争力,这一事实提供了进一步的证据证明Inception结构的强大。虽然相同质量的网络可以被同样宽度和深度的更昂贵的网络实现,该方法却切实地证明了切换到一个更稀疏的结构上是一个在普遍情况下可行且有用的方法

总结

该论文指出获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),但是一般情况下更深或更宽的网络会出现以下问题

  1. 参数太多,容易过拟合,若训练数据集有限,这一问题更加突出
  2. 网络越大计算复杂度越大,难以应用
  3. 网络越深,梯度越往后传越容易消失,难以优化模型

GoogLeNet认为根本方法是将全连接甚至一般的卷积都转化为稀疏连接。传统的网络使用了随机稀疏连接,而计算机软硬件对非均匀稀疏数据的计算效率很低

针对这些问题,GoogLeNet给出了两个解决方案

  1. 深度方面,采用了22层,为了避免上述提到的梯度消失问题,引入了 2 个辅助分类器,它们本质上对 2 个 inception 模块的输出执行 softmax,并计算对同一个标签的 1 个辅助损失值
  2. 采用了Inception结构,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络

基于保持神经网络结构的稀疏性,又能充分利用密集矩阵的高计算性能的出发点,GoogleNet提出了名为Inception的模块化结构来实现此目的。依据是大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能

Inception是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升

Inception的结构

  1. 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合
  2. 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1后,只要分别设定pad=0、1、2,那么卷积后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了
  3. 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了
  4. 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3*3和5*5卷积的比例也要增加
  5. 使用5x5的卷积核仍然会带来巨大的计算量。 为此,采用1*1卷积核来进行降维

此外,该模型最后采用了平均池化来代替全连接层。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家微调

使用不同size卷积核的目的

  • 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合
  • 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了

因为卷积核参数量过大,使用1*1卷积层来进行降纬,同时还可以用于修正线性激活

参考链接

GoogLeNet 神经网络结构
GoogLeNet网络结构学习
GoogLeNet学习心得

GoogLeNetv2 论文研读笔记
GoogLeNetv3 论文研读笔记
GoogLeNetv4 论文研读笔记

GoogLeNetv1 论文研读笔记的更多相关文章

  1. GoogLeNetv4 论文研读笔记

    Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 原文链接 摘要 向传统体系结构中引入 ...

  2. GoogLeNetv3 论文研读笔记

    Rethinking the Inception Architecture for Computer Vision 原文链接 摘要 卷积网络是目前最新的计算机视觉解决方案的核心,对于大多数任务而言,虽 ...

  3. GoogLeNetv2 论文研读笔记

    Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 原文链接 摘要 ...

  4. ResNet 论文研读笔记

    Deep Residual Learning for Image Recognition 原文链接 摘要 深度神经网络很难去训练,本文提出了一个残差学习框架来简化那些非常深的网络的训练,该框架使得层能 ...

  5. < AlexNet - 论文研读个人笔记 >

    Alexnet - 论文研读个人笔记 一.论文架构 摘要: 简要说明了获得成绩.网络架构.技巧特点 1.introduction 领域方向概述 前人模型成绩 本文具体贡献 2.The Dataset ...

  6. 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记

    <DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...

  7. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  8. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  9. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

随机推荐

  1. 7.Layout布局(tabs、accordion、layout)

    一.tabs选项卡: 二.accordion手风琴: 三.经由div标记创建layout布局: 注意:center不是定位得到的,而是通过其他的几个位置计算得到的,如果不写center整个布局就无法初 ...

  2. SRM473

    250pt: 题意:在二维平面上,给定3种,左转.右转,以及前进一步,的指令序列循环执行,问整个移动过程是否是发散的. 思路:直接模拟一个周期,然后判断1.方向是否和初始时不同 2.是否在原来的点 满 ...

  3. sqoop快速入门

    转自http://www.aboutyun.com/thread-22549-1-1.html

  4. iOS 项目国际化(多语言支持)

    按下图步骤创建好后使用如下代码即可实现国际化:self.infoLB.text = NSLocalizedString("key", comment: "") ...

  5. 由异常掉电问题---谈xfs文件系统

    由异常掉电问题---谈xfs文件系统 本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!! 目录结构 一.相关知识 二.问题提出 三.处理方法 四.最终结果 一.相关知识 ...

  6. delphi 小数点四舍五入问题

    function ARoundN(v: Double; n: Integer): Double; var I:Integer; begin result:=v; do begin result:=re ...

  7. mysql数据导入导出方法总结

    MySQL数据备份还原方式总结: 一.将数据导入到指定的数据库 第一种导入方式: (linux下和Windows 下语法是一样的,只是路径的书写方式不同而已) 1.创建一个空数据库 2.进入MySQL ...

  8. MVC中通过ajax判断输入的内容是否重复(新手笔记,请各位多多指教)

    控制器代码: public string ValidateCarID(string carid)//这里接收ajax传递过来的值 { string result; Car car = db.Car.F ...

  9. Swift5 语言参考(四) 表达式

    在Swift中,有四种表达式:前缀表达式,二进制表达式,主表达式和后缀表达式.评估表达式会返回一个值,导致副作用,或两者兼而有之. 前缀和二进制表达式允许您将运算符应用于较小的表达式.主要表达式在概念 ...

  10. Shell - 简明Shell入门07 - 数组(Array)

    示例脚本及注释 #!/bin/bash test0=() # 定义数组 test1=(a b c d e f) # 定义数组 test2=( # 定义数组 'A?' "BB!" C ...