目录

  • 论文解读

  • 代码解析

  • 小结

论文解读

在介绍inception V2时提到过,inception V3的论文依据是Rethinking the Inception Architecture for Computer Vision 虽然此文中介绍的网络结构叫做inception V2,但是在代码的实现中却是叫做inception V3。可能google在实现代码的时候觉得可以把加了BN的网络称为inception V2,那这篇论文的实现就更名为inception V3了。

1.前言

近几年分类网络精确度的提升对其他相关的机器视觉应用有很大的帮助,比如人脸识别,物体检测之类,因为他们都可以用分类网络来提取特征。Inception网络相对AlexNet和VGG来说不仅精确度有了提升,而且参数量大大减少,所以inception网络可以应用在有大量数据的场景,因为在大量数据的场景我们需要合理分配有限的计算和存储资源。但是现在inception网络的结构比较难以修改,如果我们需要放大网络,可能网络中部分信息是失效的,这样很难适应新的场景。因此本文主要是介绍一些通用的规则和一些优化的思想,让我们能够比较灵活的修改网络来适应不同的场景。

2.基本设计原理

  1. 避免在网络的前面使用像bottleneck的结构。就是说size需要缓慢的降低,不能一开始降低的太快,这样会丢失很多信息。
  2. 对高维度的表达进行局部处理,会加快网络的训练速度。
  3. 在较低维度的输入上进行空间聚合,将不会造成任何表达能力上的损失,因为feature map上,临近区域上的表达具有很高的相关性,如果对输出进行空间聚合,那么将feature map的维度降低也不会减少表达的信息。这样的话,有利于信息的压缩,并加快了训练的速度。
  4. 平衡网络的宽度和深度。增加网络的宽度和深度对网络的精确度提升都有帮助,但是如果同时增加宽度和深度,计算量会增大,因此在有限的计算资源下,应该平衡网络的宽度和深度。

3.分解卷积中大size的filter

1.用更小size的filter

用大size的filter对计算资源消耗比较大,比如用5x5的filter相比用3x3的filter需要25/9倍的计算消耗。当然5x5的filter确实能够带来更多的信息,于是我们考虑用两个3x3的filter替代5x5的filter,如下图:

可以计算出改进后计算量是之前的(9+9)/25,计算量节省了28%.

如果在第一个3 x 3Convolution后使用线性激活,第二个3 x 3Convolution后使用Relu,应该和使用一个5 x 5 Convolution+Relu的效果一样。但是作者实验发现,在第一个3 x 3Convolution后使用Relu激活精确度会有提升。所以使用两个3 x 3Convolution并且每次Convolution后进行Relu激活不仅节省了计算量而且精确度还能有轻微的提升。

2.使用非对称的filter

使用大于3 x 3的convolution不如分解成一系列的3 x 3Convolution效果更好。那是否能用更小的filter呢,比如2 x 2。但是作者想到了使用非对称的filter,比如一个1 x 3后面跟着一个3 x 1,这样相比3x3的filter计算量减少了1-(3+3)/3*3=33%,而使用2x2的filter计算量会减少1-(2*2+2*2)/3*3=11%,所以使用非对称的filter会更优。

我们会想到是否需要将所有的 x 的filter都改成1 x x 1呢?作者试验下来发现这样得分解在网络前面几层效果不好,而且只对比较中间尺寸的feature map效果好(feature map x, m在12到20之间),作者发现分解7 x 7为1 x 7和7 x 1是比较合适的。

4.辅助分类器

在GoogleLeNet的论文中作者认为增加辅助的分类器对精确度有帮助,但是在此文作者发现移除辅助分类器对精确度没有影响,只有当辅助分类器中增加BN或者dropout时有一些帮助,所以辅助分类器只能起到正则化的效果。

5.有效的缩减grid size

如果我们有一个feature map为要缩减size增加channel为,按照以前的操作有以下两种方法。右边的方法是先利用convolution计算升channel,在利用pooling降feature map 尺寸,计算量为,不可取的原因是计算量太大。左边的方法是先用pooling降feature map尺寸,然后用convolution计算升channel,计算量为。左边结构的计算量比右边减少了3/4,但是左边的结构违背了前面提到的准则1.

所以作者按照下图的结构进行改进,其实inception v2的代码中已经使用了这种方法进行feature map size缩减。

6.Inception-V2

论文中叫做V2,代码实现叫做V3。下表格是v3网络的结构,可以看到input size改为299 x 299 x 3了,有些Inception block会重复使用。后面代码分析中会更细节的分析网络结构。

7.对于小尺寸图片网络的改进

  1. 对于299x299的图片,在第一层使用stride为2的conv,后面跟着一个maxpooling
  2. 对于151x151的图片,在第一层使用stride为1的conv,后面跟着一个maxpooling
  3. 对于79x79的图片,在第一层使用stride为1的conv,后面不需要maxpooling

代码解析

代码地址

网络结构

下图为根据代码画出来的网络结构图,input为299 x 299 x 3,忽略了代码中的辅助分类器softmax。

代码细节

1. 关于BN的实现,是在inception_v3_arg_scope = inception_utils.inception_arg_scope中设置默认值

2. create_aux_logits是关于辅助分类器的实现,代码中可以看到是从Mixed_6e中拉出来的辅助分类器。

3. 在最后一层Convolution之前有一个dropout。

        net = slim.dropout(net, keep_prob=dropout_keep_prob, scope='Dropout_1b')

小结

Inception V3将inception的结构发挥到了极致,包括:

  • 用小size filter替代大size filter
  • 用非对称的filter
  • 用inception block中最后一层stride设置为2来实现feature map size缩减

后面提出的inception v4基本也是遵循这些原则,不过在inception v4的论文中结合了resnet的结构,有是对inception block的改进,后面再继续解读。

Inception V3论文解读和代码解析相关推荐

  1. 单目标跟踪算法:Siamese RPN论文解读和代码解析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:周威 | 来源:知乎 https://zhuanlan.zhihu.com/p/16198364 ...

  2. Longformer论文解读和代码解析

    前言 这篇博文记录了longformer论文的主要思想.代码实现和结果复现方面的一些工作,相关链接如下: 原longformer论文地址 github上原作者公开的代码 huggingface上原作者 ...

  3. YOLOv7来临:论文解读附代码解析

    前言: 是一份关于YOLOv7的论文解读,首发于[GiantPandaCV]公众号,写的不是很好,望大佬们包涵! 2022年7月,YOLOv7来临, 论文链接:https://arxiv.org/ab ...

  4. PointNet论文解读和代码解析

    目录 一.论文动机 现有的问题: 作者的思路及面临的问题: 二.论文方法 如何解决点云无序性问题?作者提出了三种想法. 针对点云的刚体运动不变性 三.网络结构 四.代码阅读 五.Reference(两 ...

  5. PointNet++论文解读和代码解析

    目录 一.论文动机 二.论文方法 三.网络结构 Set Abstraction 非均匀采样密度下的鲁棒性学习 上采样 四.代码阅读 论文地址:https://arxiv.org/pdf/1706.02 ...

  6. Wav2Lip模型------《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild》论文解读及代码解析

    ABSTRACT: 在这篇文档中,我们将研究任意人物的人脸视频与目标音频的口型匹配问题.当前领域能做到对特定训练过的人物进行精准的口型匹配,但在其他未训练的人物上效果不好.我们找到了导致这种问题的主要 ...

  7. CVPR 2020 Oral 文章汇总,包括论文解读与代码实现

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 [导读]本文为大家整理了10篇CVPR2020上被评为Oral的论文解读和代码汇总. 1.Ra ...

  8. 【Cylinder3D论文解读及代码略解】

    Cylinder3D论文解读及代码略解 论文解读 Abstract Introduction Related work 室内点云分割 室外点云分割 3D体素划分 Methodology(本文方法) C ...

  9. FPN论文解读 和 代码详解

    FPN论文解读 和 代码详解 论文地址:[Feature Pyramid Networks for Object Detection](1612.03144v2.pdf (arxiv.org)) 代码 ...

最新文章

  1. CF484E Sign on Fence
  2. 华为秋招_多数组合并问题
  3. 简单做了一个sina微博的MVC第三方登陆
  4. 直接访问静态图片_详解nginx和tomcat访问图片和静态页面的配置方法
  5. Git 合并两个不同的仓库
  6. mfc打开指定路径下指定类型文件_Windows 网络编程:文件操作
  7. [HNOI2010] 城市建设_动态最小生成树(Dynamic_MST)
  8. co.js异步回调原理理解
  9. 20155334 2016-2017-2 《Java程序设计》第三周学习总结
  10. 关于Shell脚本执行python代码,出现No such file or directorython: can't open file的问题
  11. 中国信息安全技术标准体系框架
  12. 面试被问“你未来的职业规划是什么”,怎样回答最完美?
  13. 伽卡他卡使用教程_【伽卡他卡电子教室教师端介绍】伽卡他卡电子教室教师端特色_伽卡他卡电子教室教师端说明-最笨下载...
  14. 一个强悍而优美的Android视频播放器
  15. 网络硬件三剑客集线器交换机路由器
  16. YOLOV5的数据处理 增强技术
  17. Point Cloud Transformer的pytorch代码实现
  18. 职场语言的特征3p1A7C指什么,商务礼仪选择题和答案
  19. 最大流之Dinic 算法
  20. X86_64(优麒麟)系统下构建 i386 文件系统并编译Box86运行wine

热门文章

  1. AI听曲识歌!哼曲、口哨吹,都能秒识!
  2. 李忠汇编语言-初学-第八章详解
  3. raptor工具使用方法、两个数求和
  4. lib静态库逆向分析
  5. vos3000如何指定某个对接网关走某个落地网关
  6. Python怎么运行py文件,编程入门指南
  7. 如何应对大促流量洪峰?揭秘京东技术人的备战手册
  8. php 微信统一下单接口,微信JSAPI支付,统一下单接口
  9. 银行账户管理系统c语言链表,课程设计银行储蓄管理系统Word版
  10. DevOps技术——入门框架搭建(base on Go)