网络模型 Inception V2/V3-Rethinking the Inception Architecture for Computer Vision

https://github.com/Moodstocks/inception-v3.torch

本文是对 GoogleNet 网络模型 Inception 架构的重思考和改进,Inception V3, 其中 Going deeper with convolutions 是 Inception V1, Batch Normalization 是 Inception V2。

1 Introduction
自打 AlexNet 在 2012 ImageNet 竞赛中一举成名之后,AlexNet 就被应用到计算机视觉各种任务中,也取得很好的效果。这些应用的成功引发了大家研究更好的网络模型,于是更深更宽的网络模型被提出。 在 2014 ILSVRC VGGNet 和GoogLeNet 取得相似效果。一个有意思的现象就是在分类任务中取得的进步可以很快应用于其他应用场合。所以模型的改进意义重大。
VGGNet 尽管取得不错的效果,但是它的代价就是计算量很大。GoogLeNet 在设计之初就考虑了内存和计算资源,所以它只有五百万个参数,比 六千万参数的 AlexNet 少12倍,而 VGGNet 比 AlexNet 的参数还多三倍。所以 GoogLeNet 更适合于大数据的处理,尤其是内存或计算资源有限制的场合。
但是由于 Inception 架构的复杂性,使其网络模型难以改变。原来论文也没有清晰的描述其设计准则。本文主要提出了一些设计原理和优化思路。

2 General Design Principles
下面几条设计原理是我们基于大量实验尝试得出的,其有效性有待进一步验证。
1)避免特征表示瓶颈,尤其是在网络的前面。怎么知道有瓶颈了?前馈网络可以通过一个无环图来表示,该图定义的是从输入层到分类器或回归器的信息流动。图论有一个cut的概念,对于分开输入输出的一个cut,我们可以评估有多少信息经过这个cut。我们应该避免严重压缩导致的瓶颈。一般来说特征表示尺寸应该温和的减少,从输入端到输出端。特征表示的维度只是一个粗浅的信息量表示,它丢掉了一些重要的因素如相关性结构。
2)高纬信息更适合在网络的局部处理。在卷积网络中逐步增加非线性激活响应可以解耦合更多的特征,那么网络就会训练的更快。
3)空间聚合可以通过低纬嵌入,这么做不会导致网络表示能力的降低。例如在进行大尺寸的卷积(如3*3)之前,我们可以在空间聚合前先对输入信息进行降维处理,这不会导致严重后果。为什么会如此了?我们猜测局部的高相关性导致对其降维不会降低太多信息,尤其是在空间聚合的场合下。如果这些信号是容易压缩的,那么降维甚至可以加快学习速度。这里的空间聚合就是大空间域尺寸处理(大图像块的处理),如大尺寸滤波器的卷积。
4)平衡好网络的深度和宽度。通过平衡网络每层滤波器的个数和网络的层数可以是网络达到最佳性能。增加网络的宽度和深度都会提升网络的性能,但是两者并行增加获得的性能提升是最大的。所以计算资源应该被合理的分配到网络的宽度和深度。
将上面的原理真正应用起来不是一件简单的事。

3 Factorizing Convolutions with Large Filter Size
GoogLeNet 网络优异的性能主要源于大量使用降维处理。这种降维处理可以看做通过分解卷积来加快计算速度的手段。例如在 1 × 1卷积层后面是 3 × 3卷积层。在一个计算机视觉网络中,相邻激活响应的输出是高度相关的,所以在聚合前降低这些激活影响数目不会降低局部表示能力。
这里我们为了加快计算速度,我们考虑其他的分解卷积情况。因为 Inception网络是全卷积的,每一个权值对应一个激活响应的乘法。所以任何计算量的降低都会降低模型参数量。这就意味着通过核实的分解,我们可以解耦更多的参数,获得更快的训练。我们也可以将节省下来的资源用于增加滤波器的尺寸来提升模型性能。
3.1. Factorization into smaller convolutions
大尺寸滤波器的卷积(如5*5,7*7)引入的计算量很大。例如一个 5*5 的卷积比一个3*3卷积滤波器多25/9=2.78倍计算量。当然5*5滤波器可以学习到更多的信息。那么我们能不能使用一个多层感知器来代替这个 5*5 卷积滤波器。如下图所示:
这里写图片描述
对于5*5卷积我们可以看做一个小的全链接网络在5*5区域滑动,我们可以先用一个3*3的卷积滤波器卷积,然后再用一个全链接层连接这个3*3卷积输出,如上图所示。这个全链接层我们也可以看做一个3*3卷积层。这样我们就可以用两个3*3卷积级联起来代替一个 5*5卷积。如下图所示:
原来GoogLeNet 网络结构图:
这里写图片描述
分解后的网络结构图:
这里写图片描述

上面这个分解大致可以降低(9+9)/25=28%的计算量。这么做会不会降低网络的表达能力了?毕竟非线性激活响应减少了。貌似实验证明这么做不会引入太大问题吧。两层都用非线性激活响应要好于第一层使用线性响应。

3.2. Spatial Factorization into Asymmetric Convolutions
从上面我们可以看到大于3*3的卷积可以用3*3卷积来表示,那么我们是不是可以将其分解的更小些了?2*2怎么样了?实际上我们可以用非对称卷积来进行分解获得更好的结果。对于一个3*3卷积,我们可以先用一个 3*1卷积,接着用一个1*3卷积来表示。
这里写图片描述
这一步我们可以节省 33%的计算量。

理论上我们可以将任意一个 n*n滤波器分解为 n*1 和 1*n 两个滤波器。但是当n变大,节省的计算量越来越少。我们发现在网络前面基层使用这种分解效果不太好。对于中等尺寸的特征图,效果很好。对于n*n的特征图,n一般从12到20。对于这种尺寸,7*1和1*7卷积得到的效果很好。

4 Utility of Auxiliary Classifiers
在原来的GoogLeNet 文献中我们引入了辅助分类器,希望可以加快深度网络的收敛。但是我们在实际中观察到,辅助分类器在训练的初期没有起到任何作用,只是在训练最后,辅助分类器可以提升一点网络的性能。辅助分类器实际的作用有点类似镇定器。

5 Efficient Grid Size Reduction
通常卷积网络都会使用某种池化操作来降低特征图的尺寸。为了避免表示能力瓶颈,在进行最大或平均池化之前我们,我们先对网络滤波器个激活响应维数进行扩大。例如,对于 d×d 尺寸特征图,有 k 个滤波器,如果我们希望达到
d/2 * d/2 尺寸 2k个滤波器这个结果,我们首先进行步长为1的2k个滤波器卷积,然后进行额外的尺寸操作。那么总体计算量就是 2d*d*k*k。如果我们将池化和卷积交换一下顺序,那么总计算量就是 2(d*d/4)*k*k。这样就降低四分之一的计算量。但是这么做导致表示瓶颈,因为总体表示维度降低了。于是我们换了一种方法来更多的降低计算量,还避免了表示瓶颈。我们使用两个并行的步长为2的模块, P 和 C。P是一个池化层,然后将两个模型的响应组合到一起。如下图所示:
这里写图片描述

6 Inception-v2
这里我们结合前面的理论提出了一个针对 ILSVRC 2012 分类问题的网络结构,Inception-v2。结构图如下所示:
这里写图片描述
我们的模型是42层,但是计算量只是 GoogLeNet 的2.5倍,仍然比VGGNet少。

7 Model Regularization via Label Smoothing
通过标记平滑来实现模型的镇定化。

Inception-v3 的结构如下所示:
这里写图片描述

单模型 ILSVRC 2012 分类结果对比
这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值