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 分类结果对比

网络模型 Inception V2/V3-Rethinking the Inception Architecture for Computer Vision相关推荐

  1. 【CV-Paper 06】Inception V3:Rethinking the Inception Architecture for Computer Vision

    论文原文:LINK 论文年份:2015 论文被引:9190((2020/0821) 18716(2022/03/26) 文章目录 Rethinking the Inception Architectu ...

  2. Inception v2/v3原理与实现

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-71.html 论文:Christian Szegedy,etc ...

  3. Rethinking the inception architecture for computer vision的 paper 相关知识

    这一篇论文很不错,也很有价值;它重新思考了googLeNet的网络结构--Inception architecture,在此基础上提出了新的改进方法; 文章的一个主导目的就是:充分有效地利用compu ...

  4. 白话详细解读(一)-----GoogLeNet(Inception V1-Inception V3)

    一.背景 GoogLeNet.VGGNet分别是2014年ImageNet挑战赛的第一名和第二名,相对于VGGNet的网络结构,GoogLeNet则进行了大胆的尝试,提出了Inception结构,这种 ...

  5. 系统学习深度学习(十九)--GoogLeNetV1,V2,V3

    转自:http://blog.csdn.net/shuzfan/article/details/50738394 参考:http://www.jianshu.com/p/33197e469414 同时 ...

  6. 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2

    from:https://blog.csdn.net/qq_14845119/article/details/73648100 Inception v1的网络,主要提出了Inceptionmodule ...

  7. 经典卷积神经系列(Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet)

    写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确.详细内容可以参考文中帖的链接,比较好!!! 经典的CNN:Inception v1\v2\v3\v4.Resnet.Resnext.D ...

  8. 使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)

    使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow) [尊重原创,转载请注明出处]https://blog.csdn.net/guyueali ...

  9. DeepLab系列(v1,v2,v3,v3+)总结

    U-net: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation 语义分割面临的挑战 1. DeepLab ...

最新文章

  1. RxJava 操作符 do
  2. python array赋值_从踩坑学Python内部原理(5):执行时机的差异
  3. matlab与excel数据连接数据库,如何实现matlab与excel数据同步 数据交互?
  4. 嵌入式linux支持python,【python】嵌入式设备上python的使用
  5. 让机器听懂世界,触及人类梦想还有多远?
  6. csc interview at cambridge
  7. volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用...
  8. linux下安装和使用vnc
  9. 病毒周报(100125至100131)
  10. spring scheduled定时任务
  11. 程序员做饭指南,GitHub教程来了
  12. 使用php制作wap网站
  13. 魔兽世界怀旧服服务器显示配置,魔兽世界怀旧服配置要求很高吗 魔兽世界怀旧服电脑最低配置要求...
  14. IDEA jsp页面代码没有高亮
  15. VR终极入门指南:设备,内容,手机...都在这里了|深扒
  16. excel自动求和_excel自动求和你会吗?更改姓名自动算出总分,三个函数轻松搞定...
  17. matlab实验7符号计算器,MATLAB自学笔记(二十一):符号微积分、积分变换、代数方程以及可视化...
  18. numpy.argsort()函数
  19. C++有关类的基本函数总结
  20. 计算机丢失explorer,xp系统如何找回电脑桌面上消失不见的 internet explorer图标

热门文章

  1. Error: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8‘ not found (required by /usr/anaconda3/bin/)
  2. 数据科学工具 Jupyter Notebook 教程(二)
  3. 高级转录组调控分析和R语言数据可视化第十三期 (线上线下,7月底开课)
  4. QIIME 2教程. 14数据评估和质控q2-quality-control(2021.2)
  5. 你之所以没成为成就,就是因为太刻苦了!
  6. Nature:何胜洋和辛秀芳组发表植物叶际微生物组稳态机制
  7. 微生物所科学家建成小鼠肠道微生物资源库
  8. Cell子刊:根瘤菌微生物群落的模块化特征及其与共生根瘤菌的进化关系
  9. QIIME 2教程. 08差异丰度分析gneiss(2020.11)
  10. R语言使用ggplot2包的快速可视化函数qplot绘制分组散点图(添加平滑曲线与标准差带)实战