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. Mysql安装(win10 64位)

    公司的测试数据库只有读的权限,而且还不能用IP和端口去访问,所有很多时候不方便(尤其是想练手的时候).闲着也是闲着,自己搭建一个Mysql数据库出来.以下操作,全部基于win10专业版 64位,仅供参 ...

  2. selenium和PhantomJS的安装

    针对w10系统 selenium安装 pip install selenium 默认安装的是3.x版本,但是3.x版本不支持PhantomJS,所以要安装2.x版本 pip install selen ...

  3. C++类型转换符重载

    对于用户自定义的类类型,实现它们和其他数据类型之间的转换有两种方法:(1)通过转换构造函数进行类型转换:(2)通过类型转换函数进行类型转换:转换构造函数:    类名(待转换类型) { 函数体; } ...

  4. RAC配置笔记

    Iscsi常用命令(我通过openfiler实现iscsi存储) # iscsiadm -m discovery -t st -p IP:port     //发现iSCSI存储 # iscsiadm ...

  5. snapkit equalto和multipliedby方法

    最近在使用snapkit过程中遇到一个问题,在github上搜索之后发现另外一个有趣的问题 frameImageContainer.snp.makeConstraints({ (make) in ma ...

  6. springboot快速入门(一)——HelloWorld搭建

    一.起步 1.先导 凡技术必登其官网的原则,官网走一波:https://projects.spring.io/spring-boot/#quick-start 极力推荐一个springboot教程:h ...

  7. Caused by: java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!

    Caused by: java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as ...

  8. tomcat : 虚拟路径映射

    tomcat设置虚拟访问地址和真实路径的映射,方法有几种,这里介绍常用的两种方式: 一.修改server.xml文件: 步骤如下:  1.在tomcat根目录下打开conf文件夹,该文件夹下有个ser ...

  9. thymeleaf多条件判断

    解决办法:将逻辑关系全部写到大括号里面 <div th:if="${task.getStatusStr() !='已延期' ||task.getStatusStr()!='已完成'}& ...

  10. Linux之linux入门

    学习linux之前先了解一下操作系统: 操作系统的定义:         操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内 ...