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。

-
进行分解后,原来的Inception结构也相应发生改变(从Figure4变到Figure5)。


-
还有两个问题,一个是就是这样分解是否会导致表达损失,还有一个是是否要在两个卷积之间添加非线性计算。通过实验表明,因式分解没有带来太大问题,而在卷积之间添加非线性效果也更好。
卷积因式分解为空间上不对称的卷积
- 其实,以上的卷积分解还不是最优策略,33卷积还可以进一步分解为13和31,两个卷积分别捕捉不同方向的信息,参数只有之前的6/9。其实,这个可以推广到nn卷积的情况,nn卷积因式分解为1n和n*1。这个方法在网络前面部分似乎表现欠佳,但在中间层起到很好的效果。


4 辅助分类器
- 辅助分类器这个概念在GoogleNet中已经用到了,就是把一些网络中间层提前拿出类进行回归分类,主要目的是为了更有效地回传梯度。作者发现,辅助分类器在其中扮演者regularizer的角色,因为辅助分类器使用了batch normalization后,效果会更好。
5 降低特征图尺寸
-
假设有一个d*d*k的特征图,为了转换成d/2*d/2*2k大小,可以先用1*1卷积变成d*d*2k,再进行池化,这样的计算量很大。而先池化再增加通道则会出现 representational bottlenecks 的问题。

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

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

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。

全部评论 (0)
还没有任何评论哟~
