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的更多相关文章

  1. 解读(GoogLeNet)Going deeper with convolutions

    (GoogLeNet)Going deeper with convolutions Inception结构 目前最直接提升DNN效果的方法是increasing their size,这里的size包 ...

  2. 图像分类(一)GoogLenet Inception_V1:Going deeper with convolutions

    论文地址 在该论文中作者提出了一种被称为Inception Network的深度卷积神经网络,它由若干个Inception modules堆叠而成.Inception的主要特点是它能提高网络中计算资源 ...

  3. Going deeper with convolutions 这篇论文

    致网友:如果你不小心检索到了这篇文章,请不要看,因为很烂.写下来用于作为我的笔记. 2014年,在LSVRC14(large-Scale Visual Recognition Challenge)中, ...

  4. Going Deeper with Convolutions阅读摘要

      论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network ...

  5. Going Deeper with Convolutions (GoogLeNet)

    目录 代码 Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. computer vision and pattern ...

  6. 论文阅读笔记四十二:Going deeper with convolutions (Inception V1 CVPR2014 )

    论文原址:https://arxiv.org/pdf/1409.4842.pdf 代码连接:https://github.com/titu1994/Inception-v4(包含v1,v2,v4)   ...

  7. Going Deeper with Convolutions(Inception v1)笔记

    目录 Abstract Introduction First of All Inception Depth Related Work Motivation and High Level Conside ...

  8. Going deeper with convolutions(GoogLeNet、Inception)

    从LeNet-5开始,cnn就有了标准的结构:stacked convolutional layers are followed by one or more fully-connected laye ...

  9. [论文阅读]Going deeper with convolutions(GoogLeNet)

    本文采用的GoogLenet网络(代号Inception)在2014年ImageNet大规模视觉识别挑战赛取得了最好的结果,该网络总共22层. Motivation and High Level Co ...

随机推荐

  1. programming-languages学习笔记--第10部分

    programming-languages学习笔记–第10部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.sr ...

  2. python面试题库——1Python基础篇

    第一部分 Python基础篇(80题) 为什么学习Python? 语言本身简洁,优美,功能超级强大,跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做 Python和Ja ...

  3. nodejs 跨域设置cookie

    在做vue全家桶+express 做项目. 想做一个免登陆功能,选择session方案. 服务器设置session 后, 返回的响应头有Set-Cookie,但是浏览器的Application的coo ...

  4. Metapackage包

    Metapackage(功能包集)是把一些相近的功能模块. 软件包放到一起. ROS里常见的Metapacakge有: 2.Metapackage写法 CMakeLists.txt 写法如下: cma ...

  5. 初次接触ARM开发,理清这四个开发思路很重要!

    初次接触ARM开发,理清这四个开发思路很重要! 由于涉及编程,学习ARM单片机系统对于从事电子电路的设计者来说是有些困难的,学习知识不难,难的是理清其中的开发思路,找到一个好的起点.本文就将从这一步入 ...

  6. route(windows)

    1.route delete 0.0.0.0 mask 0.0.0.0 10.33.31.254----------删除默认到内网网关的默认路由:2.route add -p 10.33.0.0 ma ...

  7. ORA-28000 账号被锁定的解决办法

    ORA-28000 账号被锁定的解决办法 错误场景:当使用sqlplus进行登录时报错:ORA-28000 账号被锁定.错误原因:由于oracle 11g 在默认在default概要文件中设置了密码最 ...

  8. mac上cocoapods安装与卸载

    安装 # 安装最新beta版 sudo gem install cocoapods --pre -n /usr/local/bin # 安装最新稳定版 sudo gem install cocoapo ...

  9. OC 知识:彻底理解 iOS 内存管理(MRC、ARC)

    1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的 ...

  10. 深入理解PHP 数组之count 函数

    count()PHP count() 函数用于计算数组中的单元数目或对象中的属性个数,返回数组的单元个数或对象中的属性个数.语法:int count( mixed var [, int mode] ) ...