Advertisement

GoogLe图像分类模型 Inception-v2,Inception-v3 论文笔记

阅读量:

GoogLe图像分类模型 Inception-v2,Inception-v3 论文笔记

复制代码
    标题:Rethinking the Inception Architecture for Computer Vision
    作者:Christian Szegedy,Vincent Vanhoucke, etc.
    下载地址:https://arxiv.org/abs/1512.00567

1 简介

  • 自2012年Alexnet提出以来,图像分类、目标检测等一系列领域都被卷积神经网络CNN统治着。接下来的时间里,人们不断设计新的深度学习网络模型来获得更好的训练效果。一般而言,许多网络结构的改进(例如从VGG到RESNET可以给很多不同的计算机视觉领域带来进一步性能的提高。
  • 这些CNN模型都有一个通病:计算量大。最早的AlexNet含有60M个参数,之后的VGGNet参数大致是AlexNet的3倍之多,而14年GoogLe提出的GoogleNet仅有5M个参数,效果和AlexNet不相上下。虽然有一些计算技巧可以减少计算量,但是在无形中会增加模型的复杂度。参数少的模型在一些超大数据量或内存受限的场景下具有很大优势。
  • 14年GoogLe提出的GoogleNet也叫Inception ,设计的目的就是为了减少计算参数和内存使用,但其论文does not provide a clear description about the contributing factors that lead to the various design decisions of the GoogLeNet architecture,于是很难将其用到一些新的场景上。本篇论文,就是要对Inception结构进行改进,已获得更好的分类效果。

2 一些设计准则

  • 本小节介绍了四个基于大量实验得出的设计经验,后面的模型多少也有体现出这些准则,但是这些并非在所有场景下都适用:

    • 在网络的前面部分,避免表示瓶颈。网络中的特征图尺寸虽然越来越小,但是一开始不能将尺寸压缩得太过。特征的维度(通道) 只能提供图像信息的简单估计,很多结构关联信息都体现在特征的尺寸 上。
    • 高维度特征在网络局部更容易处理。增加维度(通道数)能让网络生成更多解耦的信息,利于训练。
    • 在低维度时进行空间聚合,可减少表达的损失。
    • 权衡网络的宽度和深度。宽度和深度可能分别指的是每个卷积层滤波器数量和网络总深度(Optimal performance of the network can be reached by balancing the number of filters per stage and the depth of the network. )。虽然二者同时增加最能提高网络性能,但需要注意计算资源的消耗。

3 卷积的因式分解

  • GoogleNet带来的性能提升很大程度上要归功于“降维”,也就是卷积分解的一种。考虑到网络邻近的激活单元高度相关,因此聚合之前进行降维可以得到类似于局部特征的东西。接下来主要讨论其他的卷积分解方法。既然Inception网络是全卷积,卷积计算变少也就意味着计算量变小,这些多出来的计算资源可以来增加filter-bank的尺寸大小。

卷积因式分解成小的卷积

  • 卷积核大,计算量也是成平方地增大。假设有一个55的卷积核,我们可以Figure1将其分成两次33卷积,这样输出的尺寸就一样了。虽然55的卷积可以捕捉到更多的邻近关联信息,但两个33组合起来,能观察到的“视野”就和5*5的一样了。分解之后,训练的参数从5*5=25变成了2*3*3=18
    image_1bliiue6u1rtcqad13o5dccsc19.png-46.3kB

  • 进行分解后,原来的Inception结构也相应发生改变(从Figure4变到Figure5)。
    image_1bliiusft10pu1i7god9ov51qthm.png-26.1kBimage_1bliiv24hrop1iigedlej196313.png-35.9kB

  • 还有两个问题,一个是就是这样分解是否会导致表达损失,还有一个是是否要在两个卷积之间添加非线性计算。通过实验表明,因式分解没有带来太大问题,而在卷积之间添加非线性效果也更好。

卷积因式分解为空间上不对称的卷积

  • 其实,以上的卷积分解还不是最优策略,33卷积还可以进一步分解为13和31,两个卷积分别捕捉不同方向的信息,参数只有之前的6/9。其实,这个可以推广到nn卷积的情况,nn卷积因式分解为1n和n*1。这个方法在网络前面部分似乎表现欠佳,但在中间层起到很好的效果。
    image_1bliksv3pu8j19p449l462h0o1g.png-44.2kBimage_1blimvkgvbj4ljlc8917t7k9v4h.png-60.4kB

4 辅助分类器

  • 辅助分类器这个概念在GoogleNet中已经用到了,就是把一些网络中间层提前拿出类进行回归分类,主要目的是为了更有效地回传梯度。作者发现,辅助分类器在其中扮演者regularizer的角色,因为辅助分类器使用了batch normalization后,效果会更好。

5 降低特征图尺寸

  • 假设有一个d*d*k的特征图,为了转换成d/2*d/2*2k大小,可以先用1*1卷积变成d*d*2k,再进行池化,这样的计算量很大。而先池化再增加通道则会出现 representational bottlenecks 的问题。
    image_1blimk58q1c35r931rfu6so1b692a.png-39.5kB

  • 为了减少计算量且保留特征表达,作者提出一种双线结构,将分别进行池化和步长为2的卷积操作,最后在合并起来(如下图)。
    image_1blimpkgk1v1b19sq1avprs7iu02n.png-45.3kB

6 Inception-v2模型

  • 上面介绍了这么多改进方法,现在终于可以组合成一个模型了,模型结构如Table 1所示。统计下来,网络有42层,但参数仅有GoogleNet的2.5倍,还是比VGG少多了。
    image_1blin1amauqrmp1c9d1dkb1q754u.png-84.7kB

7 通过平滑标签正则化模型

  • 此处没细看,以后补上

8 训练方法

  • batch大小为32,周期100,框架是自家的Tensorflow,早期优化器是momentum,衰减值0.9。后期为了最好的效果,使用了RMSdrop,其中decay=0.9,\epsilon=0.1。学习率为0.045,每两个周期指数衰减0.94。

9 低分辨率输入的表现

  • 一些目标识别方面,需要进行分类的box分辨率可能很小,网络需要“高分辨率”的感受野来“hallucinate”其中的细节。作者用了7979,151151,299299三种不同大小的感受野,结论是高分辨率的网络(299299)虽然花更长时间来训练,但最终准确度要更高。

10 实验结果

  • 结果如下所示。其中,Inception-v2的那些结果中,下面的已经包含了上面采用的方法(比如Inception-v2 Label Smoothing使用了上面的RMSdrop,而倒二行的Inception-v2 Factorized 7 × 7,已经使用了上面的RMSProp、Label Smoothing,以此类推)。最后一行的模型被称作Inception-v3。
    image_1blinfg5j1la51gu3shlvt7u5b.png-88.7kB

全部评论 (0)

还没有任何评论哟~