前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络模型 Inception V2/V3-Rethinking the Inception Architecture for

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

作者头像
用户1148525
发布2019-05-28 13:54:54
8030
发布2019-05-28 13:54:54
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1437161

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

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

1 Introduction

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

2 General Design Principles

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

3 Factorizing Convolutions with Large Filter Size

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

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

3.2. Spatial Factorization into Asymmetric Convolutions

代码语言:txt
复制
从上面我们可以看到大于3\*3的卷积可以用3\*3卷积来表示,那么我们是不是可以将其分解的更小些了?2\*2怎么样了?实际上我们可以用非对称卷积来进行分解获得更好的结果。对于一个3\*3卷积,我们可以先用一个 3\*1卷积,接着用一个1\*3卷积来表示。 
代码语言:txt
复制
这一步我们可以节省 33%的计算量。

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

4 Utility of Auxiliary Classifiers

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

5 Efficient Grid Size Reduction

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

6 Inception-v2

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

7 Model Regularization via Label Smoothing

代码语言:txt
复制
通过标记平滑来实现模型的镇定化。

Inception-v3 的结构如下所示:

单模型 ILSVRC 2012 分类结果对比

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档