Inception——Going deeper with convolutions
1. 摘要
作者提出了一个代号为 Inception 的卷积神经网络架构,这也是作者在 2014 年 ImageNet 大规模视觉识别挑战赛中用于分类和检测的新技术。
通过精心的设计,该架构提高了网络内计算资源的利用率,因而允许在增加网络的深度和宽度的同时保持计算预算不变。
在作者提交的 ILSVRC14 中使用的一个特定的模型称为 GoogLeNet ,一个 22 层深的网络,在分类和检测的背景下对其性能进行了评估。
2. 介绍
在过去三年中,卷积神经网络在图像识别和物体检测领域取得了巨大的进步。可喜的是,这不仅仅是得益于更强大的硬件、更多的数据和更复杂的模型,更是许多新的想法、算法和改进的网络结构所带来的结果。比如,我们的 GoogLeNet 相比两年前的 AlexNet 参数量少了 12 倍(500 万 VS 6000 万),但是却更加准确。
另一个值得注意的因素是,随着移动和嵌入式计算的不断发展,我们的算法效率,特别是它们的功率和内存使用,变得越来越重要。作者在设计深层的网络结构时就考虑了这一因素,而不仅仅是一味追求准确率的提高。对于文中的大部分实验,这些模型在设计时都要保证测试阶段保持 15 亿次的乘-加操作时间预算。这样,它们就不单单只是为了满足学术界的好奇心,还能够以合理的成本应用到实际中去,即使是在大型数据集上。
作者提出了代号为 Inception 的网络架构,其得名于网络中的网络 (Network in network) 这篇论文,以及与电影 《盗梦空间》有关的一幅图片。

这里的 “深” 有两层意思,其一是引入了我们新的 Inception Module,其二就是直观的网络的深度。
将 Network-in-network 引入卷积神经网络后,其可以看作是一个卷积核为 1×1 的卷积层后面跟着激活函数。 作者在网络中大量使用了这种结构,主要有两个目的:一是降低维度来解决计算瓶颈,因此也限制了网络的大小。这让我们不仅仅能够增加深度,同时也能在对性能没有显著损坏的情况下增加网络的宽度。
3. 动机和考虑
提高网络的性能的最直观的方法就是增加网络的大小,包括增加深度——网络的层数和增加宽度——每层的单元数。这是最简单最好用的方法,特别是给定大量的有标签数据,但是它也有两个主要的缺点。
大的模型通常意味着大量的参数,这在训练数据有限的情况下更容易过拟合。这也是一个主要的瓶颈,因为高质量训练集的建立是非常困难和高昂的,特别是在需要专业的人类评估者来区分像 ImageNe 那样的细粒度视觉类别这种情况下,如下图。

另一方面,统一增加网络的大小会显著增加计算资源的使用。比如,两个连在一起的卷积层,增加卷积核的个数后会导致计算呈平方级增加。而如果增加的参数最后大部分都接近于零的话,许多计算就是被浪费掉了。在计算资源总是有限的情况下,尽管主要目的是增加模型的性能,我们也不能随意增加网络的大小而不注重计算资源的分配。
解决这两个问题的根本方法就是将全连接变为稀疏连接,甚至是在卷积内部。然而,当涉及到非均匀稀疏数据的数值计算时,现在的计算设备效率还非常低。因此,问题就变成了两者的折中,是否能设计一种结构,既能利用稀疏性又能利用当前硬件计算密集矩阵的优势。
4. 网络架构
Inception 架构的主要思想是说,要找出卷积视觉网络中的最佳局部稀疏结构是如何通过容易获得的密集组件来近似和覆盖的。在设计网络的时候,我们应该分析上一层的相关统计特性,将它们聚集成具有高相关性的单元组。我们假设来自前面层的每个单元对应于输入图像的某个区域,并且这些单元被划分为滤波器组。
在离输入较近的层,相关的单元可能更集中于局部区域。这就意味着大量的聚类集中在一个区域,这种情况可以用一个 1×1 卷积核来实现。同理,一些其它聚类可能有更大的空间区域,也就需要我们用更大的卷积核来实现。为了避免对齐问题,作者只采用了 1×1、3×3 和 5×5 三种卷积核大小,但这不是必须的。此外,由于池化在一些卷积网络中必不可少,作者也引入了一个池化通道。

随着这些模块的叠加,特征一级一级逐渐被深层的网络所捕获,它们的空间集中度应该会逐渐减小,也就是说在更深的网络层更大尺寸 3×3 和 5×5 的卷积核应该会增加。
但是上面的结构有一个很大的问题,在通道数量非常多的卷积网络上,即使采用适量的 5×5 卷积核,计算也会非常昂贵。引入池化后,上面的现象变得更加明显,因为池化后的通道数与前一层相同。这样,经过几层之后,计算量就会逐渐爆炸。
因此,作者在计算比较昂贵的 3×3 和 5×5 卷积前先引入 1×1 的卷积,对通道的维度进行降低,同时也包含一个非线性激活函数。

我们的网络通常由一系列上面的模块级联而成,同时增加步长为 2 的最大池化层来将分辨率减半,而且,在更深的网络层中引入 Inception 模块而前面的层采用传统的卷积网络效果似乎更好。
该架构的主要好处之一是它允许在每个阶段显著增加单元的数量而不会导致计算复杂性不受控制地爆炸。另一个实用的方面是它与直觉相符,也即视觉信息应该以各种比例处理然后聚合,以便下一阶段可以同时抽象来自不同尺度的特征。
5. GoogLeNet
GoogLeNet 得名于作者的队伍名称,同时也是为了致敬经典的 LeNet 结构。其模型构架如下所示:

注:个人认为上表中的参数一栏有些不准确,比如第一个卷积层,卷积核的权重参数应该为 6477*3=9408,表中为 2.7K 。
网络的输入是 224×224 的 RGB 图像减去各通道像素的均值,所有的激活函数都是 ReLU。‘#3×3 reduce’ 代表在 3×3 卷积之前先利用 1×1 的卷积对通道数进行降低,‘#5×5 reduce’ 同理。‘pool proj’ 代表在最大池化后再经过一个 1×1 的卷积。
将每个 Inception 模块看做两层的话,带参数的层总共有 22 层,所有层独立计算的话网络总共大约 100 层。给定这个较深的网络,将梯度有效地反向传播是一个难点。
通过较浅的网络在分类任务上的强大表现得出了一个有趣的见解,网络中间层的特征非常具有判别性。因此,作者添加了一些连接到这些中间层的辅助分类器,期望能够鼓励较低阶段特征的判别性,来增加反向传播的梯度信号并且提供额外的正则化。详细网络结构如下图所示:

在训练阶段,这些辅助分类器的损失乘以权重 0.3 后和网络的总损失加到一起。在测试阶段,它们则被抛弃。辅助分类器的结构是这样的:
- 一个平均池化层,卷积核大小 5×5,步长为 3
- 一个 1×1 的卷积层,卷积核数量 128
- 一个 1024 个单元的全连接
- 一个 Dropout 层丢弃率为 70%
- 一个 Softmax 层用于 1000 分类,测试时被抛弃
6. 实验结果
训练多个模型,它们的参数初始化和学习率策略都是一样的,但获取训练图片的采样方法不同以及看到训练集的顺序是随机的。然后,对一个测试图片,通过不同的方法裁剪出多张图片。最后,将这些不同图片不同模型的输出结果做一个平均作为最终的预测结果。


获取更多精彩,请关注「seniusen」!

Inception——Going deeper with convolutions的更多相关文章
- 解读(GoogLeNet)Going deeper with convolutions
(GoogLeNet)Going deeper with convolutions Inception结构 目前最直接提升DNN效果的方法是increasing their size,这里的size包 ...
- 图像分类(一)GoogLenet Inception_V1:Going deeper with convolutions
论文地址 在该论文中作者提出了一种被称为Inception Network的深度卷积神经网络,它由若干个Inception modules堆叠而成.Inception的主要特点是它能提高网络中计算资源 ...
- Going deeper with convolutions 这篇论文
致网友:如果你不小心检索到了这篇文章,请不要看,因为很烂.写下来用于作为我的笔记. 2014年,在LSVRC14(large-Scale Visual Recognition Challenge)中, ...
- Going Deeper with Convolutions阅读摘要
论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network ...
- Going Deeper with Convolutions (GoogLeNet)
目录 代码 Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. computer vision and pattern ...
- 论文阅读笔记四十二:Going deeper with convolutions (Inception V1 CVPR2014 )
论文原址:https://arxiv.org/pdf/1409.4842.pdf 代码连接:https://github.com/titu1994/Inception-v4(包含v1,v2,v4) ...
- Going Deeper with Convolutions(Inception v1)笔记
目录 Abstract Introduction First of All Inception Depth Related Work Motivation and High Level Conside ...
- Going deeper with convolutions(GoogLeNet、Inception)
从LeNet-5开始,cnn就有了标准的结构:stacked convolutional layers are followed by one or more fully-connected laye ...
- [论文阅读]Going deeper with convolutions(GoogLeNet)
本文采用的GoogLenet网络(代号Inception)在2014年ImageNet大规模视觉识别挑战赛取得了最好的结果,该网络总共22层. Motivation and High Level Co ...
随机推荐
- 基于jquery分页插件
今天终于完成了基于jquery的分页插件的代码编写,也通过了功能测试,实现了分页功能:由于刚开始写jquery的插件,所以梳理逻辑的时间也很长,整个过程整整一周时间,今天终于搞完了,先将整个分页插件的 ...
- Python基本知识3----序列
前言: 序列:列表/元组/字符串 3种序列的共同点: 都可以通过索引得到每一个元素 默认索引值从0开始(还支持负数) 都可以通过切片的方式得到范围内的元素的集合 有很多共同的操作符(重复操作符.拼接操 ...
- Test随笔
测试一级主题 测试二级主题 测试内容,修改会不会出现历史记录
- IE8 下处理select标签高度不居中
IE8: Chrome: 同样的代码可是在IE8下select的文字并不是垂直居中. 处理:给select的样式添加padding上下的内边距. 加line-height一点用都 ...
- Stm32-uclinux启动后的调试
Stm32-uclinux启动后的调试 1. 修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后 ...
- 四步掌握CAN节点隔离设计
四步掌握CAN节点隔离设计 “隔离”是模块为CAN节点设备提供可靠数据传输的首要保障,通常隔离模块的“隔离”是指模块上电后,能为节点提供信号隔离及电源隔离,隔离电压等级以2500VDC.3500VDC ...
- asp.net core合并压缩资源文件(转载)
在asp.net core中使用BuildBundlerMinifier合并压缩资源文件 在asp.net mvc中可以使用Bundle来压缩合并css,js 不知道的见:http://www.cnb ...
- ASP.NET MVC中Section、Partial View 和 Child Action(转载)
概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在应用程序运行的时候动态创建的内容.给View添加动态内容的方式可归纳为下面几种: Inline cod ...
- WebGl 多缓冲区传递颜色和坐标(矩形)
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- C语言学习记录_2019.02.05
switch只能判断整数,而分段函数的判别是一个范围,我们无法用整数来表示范围 跟踪语句的方法: (1)debug调试 (2)printf( )语句跟踪 小套路:当循环次数很大时,可以先模拟较小次数的 ...