Google Inception Net论文细读

Going deeper with convolutions

GoogleNet首次出现在ILSVRC 2014比赛中(和VGG同年),获得了当时比赛的第一名。使用了Inception的结构,当时比赛的版本叫做Inception V1。inception结构现在已经更新了4个版本。Going deeper with convolutions这篇论文就是指的Inception V1版本。

论文地址

一. Abstract

《Google Inception Net论文细读》 abstract

1. 该深度网络的代号为“inception”,在ImageNet大规模视觉识别挑战赛2014上,在分类和检测上都获得了好的结果。

2. 控制了计算量和参数量的同时,获得了很好的分类性能。500万的参数量只有AlexNet的1/12(6000万)。

Inception V1(或者说深度网络)为什么以降低参数量为目的?

  • 参数越多,计算压力更大,需要的计算资源越多。
  • 参数越多,模型越大,越容易过拟合。(鼓励简单模型)
  • 参数越多,模型越大,就需要更多的数据来学习,但是高质量的训练数据很宝贵。

Inception V1如何降低参数量的?

  • 用全局平均池化层代替了全连接(VGG中全连接层的参数占据了90%的参数量)
  • 大量1×1的卷积核的使用

3. Inception Net整体结构受Hebbian原理的启发,并且充满了multi-scale的思想。

二. Motivation and High Level Considerations

《Google Inception Net论文细读》 Motivation and High Level Considerations

Inception Net设计的思考是什么?(好的深度网络有哪些设计原则)

  • 逐层构造网络:如果数据集的概率分布能够被一个神经网络所表达,那么构造这个网络的最佳方法是逐层构筑网络,即将上一层高度相关的节点连接在一起。几乎所有效果好的深度网络都具有这一点,不管AlexNet VGG堆叠多个卷积,googleNet堆叠多个inception模块,还是ResNet堆叠多个resblock。

  • 稀疏的结构:人脑的神经元连接就是稀疏的,因此大型神经网络的合理连接方式也应该是稀疏的。稀疏的结构对于大型神经网络至关重要,可以减轻计算量并减少过拟合。 卷积操作(局部连接,权值共享)本身就是一种稀疏的结构,相比于全连接网络结构是很稀疏的。

  • 符合Hebbian原理: Cells that fire together, wire together. 一起发射的神经元会连在一起。 相关性高的节点应该被连接而在一起。

inception中 1×1的卷积恰好可以融合三者。我们一层可能会有多个卷积核,在同一个位置但在不同通道的卷积核输出结果相关性极高。一个1×1的卷积核可以很自然的把这些相关性很高,在同一个空间位置,但不同通道的特征结合起来。而其它尺寸的卷积核(3×3,5×5)可以保证特征的多样性,因此也可以适量使用。于是,这就完成了inception module下图的设计初衷:4个分支:

《Google Inception Net论文细读》 inception module

New Version比Old version是如何减少参数量的?

  • 1×1的卷积核和正常的滤波器完全是一样的,只不过它不再感受一个局部区域,不考虑像素与像素之间的关系。1×1的卷积本身就是不同feature channel的线性叠加。1×1的卷积最早出现在Network in Network这篇文章中,在Google的inception结构中也采用了大量1×1的卷积。
  • NIN论文中解释1×1的卷积实现了多个feature map的结合,从而整合了不同通道间的信息。(个人认为这个作用并不是特点,因为其它大小的卷积核也可以实现)
  • 1×1的卷积可以实现通道数量的升维和降维。并且是低成本的特征变换(计算量比3×3小很多)。是一个性价比很高的聚合操作。怎么理解1×1是性价比很高的升降通道数的操作呢?
    (以google inception为例)

    《Google Inception Net论文细读》 原始
    《Google Inception Net论文细读》

原始结构:
参数:(1×1×192×64) + (3×3×192×128) + (5×5×192×32) = 153600
最终输出的feature map:64+128+32+192 = 416

加入不同channel的1×1卷积后:
参数:1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)=15872
最终输出的feature map: 64+128+32+32=256

所以加入1×1的卷积后,在降低大量运算的前提下,降低了维度。
降低维度也是inception module一个非常明智的举措。

三. GoogleNet

《Google Inception Net论文细读》

  • 在inception module中,通常1×1的卷积比例(输出通道占比)最高,3×3和5×5的卷积稍低。
  • 在整个网络中,会有多个堆叠的inception module,希望靠后的inception module可以捕捉更高阶的抽象特征,因此靠后的inception module中,大的卷积应该占比变多。
    《Google Inception Net论文细读》 google net
    GoogleNet有22层深,比同年的VGG19还深。包含了9个inception module,下面是具体的结构。我试图将表格和结构图结合起来,解释整个的网络结构。
    《Google Inception Net论文细读》 googlenet
    DepthConcat:聚合操作,在输出通道这个维度上聚合(一个inception module每个分支通道数可能不一样,但是feature map大小应该是一样的。strides=1,padding=same)

inception 3a

《Google Inception Net论文细读》 inception 3a

输入:28×28×192
输出:由于每个分支strides=1,padding=same,所以只是通道数在变化,feature map大小不变。最终输出 28×28×256(只增加了少量通道数)
其它的inception module也是这种形式,可自己推算。

辅助分类器

《Google Inception Net论文细读》 classifier 1

《Google Inception Net论文细读》 classifier 2

《Google Inception Net论文细读》 classifier 3

Google net除了最后一层输出进行分类外,其中间节点的分类效果也很好。于是,Googlenet也会将中间的某一层的输出用于分类,并按一个较小的权重(0.3)加到最终的分类结果中。

个人原创作品,转载需征求本人同意

    原文作者:BookThief
    原文地址: https://www.jianshu.com/p/680645517020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞