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」!

原文地址:https://www.cnblogs.com/seniusen/p/10747658.html

时间: 2024-11-03 00:27:49

Inception——Going deeper with convolutions的相关文章

Going Deeper with convolutions

Going Deeper with convolutions 转载请注明: http://blog.csdn.net/stdcoutzyx/article/details/40759903 本篇论文是针对ImageNet2014的比赛,论文中的方法是比赛的第一名,包括task1分类任务和task2检测任务.本文主要关注针对计算机视觉的高效深度神经网络结构,通过改进神经网络的结构达到不增加计算资源需求的前提下提高网络的深度,从而达到提高效果的目的. 1. Main Contribution Imp

解读(GoogLeNet)Going deeper with convolutions

(GoogLeNet)Going deeper with convolutions Inception结构 目前最直接提升DNN效果的方法是increasing their size,这里的size包括depth和width两方面.在有足够的labeled training data 时这种方法是最简单以及稳妥的方法来获得一个高质量的模型.但是往往实际中大的网络会有更多的参数,当training data数量很少时,很容易出现overfitting,并且大的网络需要的计算资源也是更多.这是需要将

Going Deeper with Convolutions阅读摘要

  论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network architecture codenamed Inception that achieves the new state of the art for classification and detection in the ImageNet Large-Scale Visual Recognitio

Going deeper with convolutions——Googlenet论文翻译

Going deeper with convolutions 摘要 在ImageNet大规模视觉识别挑战赛2014(ILSVRC14)上我们提出了一种代号为 " Inception " 的深度卷积神经网络结构,且图像分类和检测上取得了新的最好结果.该体系结构的主要特点是提高了网络内的计算资源利用率.这是通过精心设计实现的,该设计允许在保持计算预算不变的同时增加网络的深度和宽度.为了网络的优化质量,架构设计基于Hebbian原则和多尺度处理直觉的基础.我们在为ILSVRC14 提交的模型

Going deeper with convolutions(GoogLeNet、Inception)

从LeNet-5开始,cnn就有了标准的结构:stacked convolutional layers are followed by one or more fully-connected layers.对于Imagenet这种大的数据集,趋势是增加层数和层的大小,用dropout解决过拟合. 1×1卷积核在Inception中大量使用,两个作用:dimension reduction and rectified linear activation(即增加非线性) 提升深度神经网络的最直接方式

【CV论文阅读】Going deeper with convolutions(GoogLeNet)

目的: 提升深度神经网络的性能. 一般方法带来的问题: 增加网络的深度与宽度. 带来两个问题: (1)参数增加,数据不足的情况容易导致过拟合 (2)计算资源要求高,而且在训练过程中会使得很多参数趋向于0,浪费计算资源. 解决方法: 使用稀疏连接替代稠密结构. 理论依据(Arora):一个概率分布可以用一个大的稀疏的深度神经网络表示,最优的结构的构建通过分析上层的激活状态的统计相关性,并把输出高度相关的神经元聚合.这与生物学中Hebbian法则“有些神经元响应基本一致,即同时兴奋或抑制”一致. 存

going deeper with convolutions (Googlenet网络解读)

http://www.gageet.com/2014/09203.php这个网址已都经把文章翻译好了,这里主要是说两点: 1.Googlenet借鉴了network in network里的多层感知器结构,也就是convolution层的 kernel_size=1,它的好处主要是体现在以下两方面: a.降维,解决计算瓶颈: b.提高神经网络的表达能力(多层感知器). 2.Googlenet有一点突破就是对数据卷积核进行并联(多尺度的对图像进行卷积),考虑到计算的时间问题,底层用大卷积核(7*7

学习笔记TF032:实现Google Inception Net

Google Inception Net,ILSVRC 2014比赛第一名.控制计算量.参数量,分类性能非常好.V1,top-5错误率6.67%,22层,15亿次浮点运算,500万参数(AlexNet 6000万).V1降低参数量目的,参数越多模型越庞大,需数据量越大,高质量数据昂贵:参数越多,耗费计算资源越大.模型层数更深,表达能力更强,去除最后全连接层,用全局平均池化层(图片尺寸变1x1),参数大减,模型训练更快,减轻过拟合(<Network in Network>论文),Inceptio

深度学习方法(十一):卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)

技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 上一篇讲了深度学习方法(十):卷积神经网络结构变化--Maxout Networks,Network In Network,Global Average Pooling,本篇讲一讲Google的Inception系列net,以及还是Google的Xception.(扯一下,Google的Researcher们还是给了很多很棒的idea的,希望读者朋友和我自己在了解paper之余,可以提出自己的想法,并实现.) 如果想