经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)

简介: 今天要介绍的就是同年分类任务的第一名——GoogLeNet 。

前言

       在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名——GoogLeNet

      作为2014年ImageNet比赛冠军,GoogLeNet 比VGG更深的网络,比AlexNet少了12倍参数,但更加精准。同时引入了Inception(盗梦空间)模块。

前期回顾:

经典神经网络论文超详细解读(一)——AlexNet学习笔记(翻译+精读)

经典神经网络论文超详细解读(二)——VGGNet学习笔记(翻译+精读)

GoogLeNet 论文原文:https://arxiv.org/pdf/1409.4842.pdf


Abstract—摘要

翻译

我们提出了一种代号为“GoogleNet”的深度卷积神经网络架构,它负责在2014 年ImageNet大规模视觉识别挑战(ILSVRC14)中设置分类和检测的新技术状态。 该体系结构的主要特点是提高了网络内部计算资源的利用率。这是通过一个精 心设计的设计来实现的,它允许增加网络的深度和宽度,同时保持计算预算不 变。为了优化质量,体系结构的决策是基于赫布原则和多尺度处理的直觉。 在我们提交给ILSVRC14时使用的一个特殊化身是GoogLeNet,这是一个22层的 深度网络,其质量是在分类和检测的背景下进行评估的。

 

精读

主要内容

1.引出Inception这个网络架构,并介绍它在ILSVRC14中提供新的技术水平。

2.介绍Inception的主要特点是提高了网络中计算资源的利用率。

3.本文的设计目的:通过精细的设计,在保证计算量不变的情况下,增加深度和宽度。

4.用到的理论知识:为了优化质量,架构基于Hebbian原则(生物神经方面)和多尺度处理的。

Hebbian原则:神经科学上的概念,简单讲就是神经元突触的‘用进废退’,两个神经元,如果总是同时兴奋,就会形成一个组合,其中一个神经元的兴奋会促进另一个的兴奋。反映在inception上就是把相关性强的特征汇聚的一起


多尺度处理:不同尺度的卷积核并行处理。


5.提交给ILSVRC14的是一个特例叫GoogLeNet,这是一个22层的深度网络,其质量是在分类和检测背景下评估的


一、Introduction—引言

翻译

在过去的三年里,主要是由于深度学习的进步,更具体地说,卷积神经网络[10],图像识别和目标 检测的质量一直在以惊人的速度发展。一个令人鼓舞的消息是,这些进展不仅仅是更强大的硬 件、更大的数据集和更大的模型的结果,而且主要是新想法、算法和改进的网络架构的结果。 例如,除了ILSVRC2014竞赛的分类数据集外,没有使用新的数据源。我们提给ILSVRC 2014的谷歌网络实际上比克里热夫斯基等人[9]两年前的获奖架构少了12个参数,同时也更准确得多。目标检测的最大收益并不是仅仅来自使用深度网络或更大的模型,而是来自深度架构和经典计 算机视觉的协同作用, 比如Girshick等人[6]的R-CNN算法。

       另一个值得注意的因素是,随着移动计算和嵌入式计算的持续发展,我们的算法的效率——特 别是它们的能力和内存使用——变得越来越重要。值得注意的是,导致本文中提出的深层架构 设计的考虑包括了这个因素,而不是完全固定在精度数字上。对于大多数的实验,模型设计保 持15亿的计算预算,所以他们不会成为一个纯粹的学术好奇心,但可以把现 实世界使用,即使在大型数据集,在一个合理的成本。

       在本文中,我们将重点研究一种高效的计算机视觉深度神经网络架构,代号GoogleNet, 它的名字来源于Lin等[12]在网络论文中发表的网络和著名的“we need to go deeper”网络模因[1]。 在我们的例子中,“deep”一词有两种不同的含义:首先,我们以“Inception module”的形式引 入了一个新的组织层次,也在更直接的意义上增加了网络深度。一般来说,我们可以从Arora等 人[2]等人的理论工作中获得[12]的灵感和指导。该架构的好处在ILSVRC2014的分类和检测挑战 上得到了实验验证,其中它的性能显著优于当前的最新技术水平。

 

精读

背景

1.由于深度学习和卷积网络发现,目标分类和检测能力显著提高。

2.没有用到新的数据集

3.目标检测领域,最大的收获不是来自更深的网络和更大的模型,而是深度架构和经典计算机视觉的协同作用。

4.随着移动计算和嵌入式计算的持续发展,不能一味追求精读提升,算法效率尤其是功率和内存使用格外重要。

Inception的诞生

本文关注计算机视觉中的高效深度神经网络架构Inception。

(名称来源于小李子的台词“We need to go deeper”。这是参考文献一中的表情包,是本文的一个彩蛋~)

两个重要启发文献

(1)《NetWork in network》——1×1卷积降维/升维,Global Average pooling层取代全连接层。

(2)Arora et al——用稀疏、分散的网络取代以前庞大密集臃肿的网络

deep的两种不同含义:

(1)Inception模块的形式引入新的组织层次

(2)网络深度的增加

最后作者指出:本文不仅仅是实验室学术成果,应用于实际甚至更大的数据集。


二、Related Work—相关工作

翻译

从LeNet-5[10]开始,卷积神经网络(CNN)通常有一个标准的结构——堆叠卷积层 (可以是归一化和最大池化) ,然后是一个或多个完全连接的层。这种基本设计的变体在图像分类文献中 普遍存在,并在MNIST、CIFAR和最显著的ImageNet分类挑战[9,21]上取得了最好的结果。对于 更大的数据集,如Imagenet,最近的趋势是增加层数[12]和层大小[21,14],同时使用dropout层[7] 来解决过拟合的问题。

       尽管担心最大池化层会导致准确空间信息的丢失,相似的卷积网络架构也被成功地用于定位、 目标检测[6,14,18,5]和人姿态估计[19]。受灵长类动物视觉皮层的神经科学模型 的启发,Serre等人。 [15]使用一系列不同大小的固定Gabor过滤器来处理多个尺度,类似于Inception model。然而,与[15]的固定2层深度模型相反,Inception model模型中的所有滤波器都是被学习的。此外,初始层重复多次,在GoogLeNet模型中形成了22层深度模型。

       Network-in-Network是Lin等人提出的一种方法。 以增加神经网络的表征能力。当应用于卷积层时,该方法 可以看作是额外的1*1 个卷积层,然后通常是经过修正的线性激活[9]。这使得它能够很容易 地集成到当前的CNN管道中。我们在体系结构中大量使用这种方法。然而,在我们的设置中,1*1 个卷积有双重目的:最重要的是,它们主要被用作降维模块,以消除计算瓶颈,否则这将限制我们的网络的大小。这不仅允许增加深度,还可以增加网络的宽度,而不会造成显著的性能损失。

       目前领先的目标检测方法是由Girshick等人提出的具有具有卷积神经网络的区域(R-CNN)的目标 检测方法。 [6].R-CNN将整个检测问题分解为两个子问题:首先以类别无关的方式利用潜在的对 象建议的颜色和超像素一致性寻找候选框,然后使用CNN分类器来识别这些位置的对象类别。这种两阶段的 方法利用了具有低水平线索的边界盒分割的准确性,以及最先进的cnn的高度强大的分类能力。 我们在检测提交中采用了类似的管道,但在这两个阶段都探索了增强,如用于更高对象边界框 召回的多盒[5]预测,以及用于更好地对边界框建议进行分类的集成方法。


精读

前人研究

自LeNet-5开始,CNN标准结构:(卷积+归一化+最大池化)×n+(全连接层)×m。

最近他们都在研究增加层数和层大小,同时使用dropout层来解决过拟合的问题。

本文灵感来源

1.根据一系列大小不同的固定Gabor滤波器处理多尺度。本文使用类似策略,重复多次Inception层,直至22层深度模型GoogLeNet。

2.根据NiN网络中的 1×1卷积核,这个卷积核之前在VGG里是仅增加深度;在本文中除了增加深度还起到降维作用,消除计算瓶颈。

3.从R-CNN中,改进了R-CNN的两阶段方法(1.框出候选区域,2.每个区域卷积) 运用到自己的模型中了。


三、Motivation and High Level Considerations—动机和高水平的考虑

翻译

提高深度神经网络性能的最直接的方法是增加它们的规模。这包括增加网络的深度-级别的数量 和它的宽度—每个级别的单位数量。这是一种训练更高质量模型的简单和安全的方法,特别是 考虑到大量标记训练数据的可用性。然而,这个简单的解决方案也有两个主要的缺点。

       更大的尺寸通常意味着大量的参数,这使得扩大后的网络更容易发生过拟合,特别是在训练集 中标记的例子数量有限的情况下。这可能成为一个主要的瓶颈,因为创建高质量的训练集可能 是很棘手的而且价格昂贵,特别是如果需要专家的人工评分员来区分细粒度的视觉类别。

       网络规模的另一个缺点是计算资源的使用显著增加。例如,在深度视觉网络中,如果两个卷积 层被链接起来,它们的滤波器数量的任何均匀增加都会导致计算量的二次增加。如果增加的容 量使用效率较低 (例如,如果大多数权重最终接近于零) ,那么就会浪费大量的计算。 由于在 实践中,计算预算总是有限的,因此即使其主要目标是提高结果的质量,也会首选有效地分配 计算资源,而不是不加选择地增加计算资源的大小。

       解决这两个问题的基本方法将是最终从完全连接到稀疏连接的架构,甚至在卷积内部。除了模 拟生物系统外, 由于Arora等人的开创性工作,这也将具有更坚实的理论基础的优势。 [2].他们 的主要结果表明,如果数据集的概率分布是由一个大的,非常稀疏的深度神经网络,那么最优 网络拓扑可以构造一层通过分析的相关统计的激活最后一层和聚类神经元高度相关的输出。虽 然严格的数学证明需要非常强的条件,但这一说法与众所周知的赫比原理:神经元一起放电,连接在一起,在实践中,即使在不那么严格的条件下,基本思想也适用。

       缺点是,今天的计算基础设施在涉及到非均匀稀疏数据结构的数值计算方面非常低效。即使算 术运算的数量减少了100次,查找和缓存丢失的开销也是如此的主要,以至于切换到稀疏矩阵也 不会得到回报。通过使用稳步改进、高度调优的数字库,允许极其快速的密集矩阵乘法,利用 底层CPU或GPU硬件[16,9]的微小细节,进一步扩大了差距。此外,非均匀稀疏模型需要更复杂 的工程和计算基础设施。 目前大多数面向视觉的机器学习系统只是利用卷积来利用空间领域的 稀疏性。然而,卷积是实现为到早期层中补丁的密集连接的集合。 自[11]以来,ConvNets传统 上在特征维度上使用随机和稀疏连接表,为了打破对称性,提高学习能力,趋势转向与[9]完全 连接,以更好地优化并行计算。结构的均匀性和大量的过滤器和更大的批量大小允许利用有效 的密集计算。

       这就提出了一个问题,是否还有下一步中间步骤的希望:一个利用额外稀疏性的架构,即使是 在过滤器级别,就像该理论所建议的那样,但利用我们的硬件是在密集矩阵上的计算。大量关于稀疏矩阵计算的文献(e。g. [3])表明,将稀 疏矩阵聚类成相对密集的子矩阵,倾向于提供稀疏矩阵乘法的最先进的实际性能。认为在不久 的将来,类似的方法将被用于自动构建非统一的深度学习架构,这似乎并不牵强。

       Inception架构最初是第一作者的一个案例研究,用于评估一个复杂的网络拓扑构造算法的假设输出 ,该算法试图近似[2]为视觉网络隐含的稀疏结构,并通过密集的、可用的组件覆盖假设的结果 。尽管这是一项高度推测的工作,但只有在对拓扑的精确选择进行两次迭代后,我们已经可以 看到对基于[12]的参考体系结构的适度收益。在进一步调整了学习速率、超参数和改进的训练 方法后,我们确定了生成的初始空间架构作为[6]和[5]的基础网络,在定位和目标检测中特别 有用。有趣的是,虽然大多数原始的架构选择都受到了彻底的质疑和测试,但它们至少在本地 是最优的。

       但人们必须谨慎:尽管所提议的架构已经在计算机视觉领域取得了成功,但它的质量是否可以 归因于导致其构建的指导原则仍然值得怀疑。确保需要更彻底的分析和验证:例如,如果基于 下面描述的原则的自动化工具能够为视觉网络找到类似但更好的拓扑结构。最令人信服的证明 是,如果一个自动化系统能够创建网络拓扑,使用相同的算法,在其他领域产生类似的收益。 至少,Inception架构的最初成功为这个方向的未来工作带来了坚实的动力。


精读

提高深度网络性能最直接的方法(之前)

增加网络尺寸:

(1)增加深度(层数)

(2)增加宽度(卷积核个数)

缺点:

1.参数太多,如果训练数据集有限,很容易产生过拟合;

2 .计算量增加,可能浪费计算资源;

3.网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型

传统连接方法

传统上的连接:

卷积网络传统上一直在特征维度上使用随机和稀疏连接表,以打破对称性并改善学习效果,然而趋势回到完全连接,以进一步优化并行计算。 当前用于计算机视觉的最新架构具有统一的结构。 大量的过滤器和更大的批处理大小允许高效使用密集计算。

缺点:

1.目前的计算基础架构在对非均匀稀疏数据结构进行数值计算时效率很低。

2.涉及非均匀稀疏模型需要更精细的引擎和计算架构

解决方法(本文)

引入稀疏性,用稀疏连接代替全连接层,甚至一般的卷积。稀疏连接代替密集连接

原理:如果数据集的概率分布可以由大型的,非常稀疏的深度神经网络表示,可以通过如下方式逐层构建:分析上一层的激活输出的统计特性,并将具有高度相关性输出的神经元进行聚类,来获得一个稀疏的表示。

稀疏连接两种方法:

1.空间(spatial) 维度上的稀疏连接,也就是 CNN 。其只对输入图像的局部进行卷积,而不是对整个图像进行卷积,同时参数共享降低了总参数的数目并减少了计算量。

2.在特征(feature)维度上的稀疏连接进行处理,也就是在通道的维度上进行处理。(Inception 结构的灵感来源)

从稀疏矩阵理解稀疏性:稀疏矩阵的定义:矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,则称该矩阵为稀疏矩阵。由于稀疏矩阵的特殊性质,在对稀疏矩阵进行卷积运算时往往会产生很多不必要的计算(在0值密集的区域进行卷积),这时候为了提升运算效率就可以考虑忽略矩阵中0值聚集的区域而选取出非零值聚集的区域直接卷积。

 

问题引出:能否在仍旧利用现有硬件进行密集矩阵运算的条件下,改进模型结构,哪怕只在卷积层水平改进,从而能够利用额外的稀疏性呢?


四、Architectural Details—架构细节

Inception初始结构

翻译

初始架构的主要思想是基于如何发现卷积视觉网络中的最优局部稀疏结构可以被现成的密集组 件近似和覆盖。注意,假设平移不变性意味着我们的网络将由卷积构建块构建。我们所需要的 就是找到最优的局部构造,并在空间上重复它。阿罗拉等人[2]提出了一种逐层的构造,其中 应该分析最后一层的相关统计数据,并将其聚类为具有相关性高的单元组。这些集群构成了下 一层的单元,并连接到前一层中的单元。我们假设前一层的每个单元对应于输入图像的某个区 域,这些单元被分组为滤波器组。在较低的层 (靠近输入的层) 中,相关的单元将集中在局部 区域。这意味着,我们最终会有许多集群集中在一个区域,它们可以在下一层被1*1个卷积所覆 盖,如[12]所示。然而,我们也可以预期,将会有更少的空间上更分散的集群,可以在更大的卷积核上被卷积覆盖,而在越来越大的区域上,卷积核的数量将会减少。为了避免卷积核对齐问题,Inception架构的当前版本被限制在过滤器大小1*1、3*3和5*5以内,但是这个决定更多地是基 于方便而不是必要。这也意味着,建议的架构是所有这些层的组合,它们的输出滤波器组 连接成一个单一的输出向量,形成下一阶段的输入。此外, 由于池化操作对于在当前最先进的 卷积网络中取得成功至关重要,因此它建议在每个这样的阶段添加一个替代的并行池化路径也 应该产生额外的有益效果(见图2(a))。

       这些“Inception modules”堆叠,他们的输出相关统计必然会不同:高抽象被更高的层,他们的空间浓 度将减少表明3*3和5*5卷积的比率应该增加我们搬到更高的层。

       5*5上述模块的一个大问题,至少在这种中殿形式中是,即使在具有大量滤波器的卷积层之上, 即使是少量的5*5个卷积也可能非常昂贵。一旦将池化单元添加到混合单元中,这个问题就会变 得更加明显:它们的输出过滤器的数量等于上一阶段的过滤器的数量。池化层的输出与卷积层 的输出的合并将不可避免地导致一个各阶段间输出数量的增加。即使这种体系结构可能覆盖最优稀疏结构,但它也会做到效率很低 ,在几个阶段内导致计算爆炸。

 

精读

Inception主要思想

1.用密集模块去近似局部稀疏结构,聚合高相关性的特征输入到下一层。

2.平移不变性意味着网络由卷积构建块构建。只需要找到最优局部结构(就是Inception块)并在空间上重复它。

Inception初始结构

模块结构组成:1×1卷积,3×3卷积,5×5卷积,3×3最大池化。(非必须,只是为了对齐容易)

为什么这么搭建?

Q1:为什么分三个卷积核?

根据上一篇VGG中介绍感受野的例子,我们可以知道卷积核大的,感受野就越大。如果这个区域越大,说明我们获得的越是一个偏向全体的特征;而区域越小,说明我们获得的是一个偏向局部的特征。这样一来就可以获得不同尺度的特征。


Q2:为什么有条路是池化层?

引用论文原话:由于池化操作对于目前卷积网络的成功至关重要,因此建议在每个这样的阶段添加一个替代的并行池化路径应该具有额外的有益效果。


Q3:四条路过后为什么要合一块?

举个例子:有一个Inception结构的块,它的输入是16个通道的,输出是256个通道的。而有另外一个卷积层,设它的卷积核是5×5的,它的输入和输出也是16和256个通道。那么其实卷积层的这个输出是256个5×5尺度的信息,这样就造成了大量的冗余。但Inception输出同样是256个通道,但是它有四个尺度的信息,可能每个尺度占据64个通道,冗余信息就更少,这个输出信息也更加丰富。

过程:特征图先被复制成4份并分别被传至接下来的4个部分,将前一层用三个单独的卷积核扫描,并加一个池化操作,然后把这四个操作的输出串联到一起作为下一层的输入。

不足:

1.整个网络是通过大量堆叠这个模块来构建的,即使是适量的5×5卷积也会产生参数的爆炸式增长;

2.在这个单元中使用的最大池化层保留了输入数据的特征图的深度,所以在最后进行合并时,总的输出的特征图的深度增加,通道数多了,这样增加了该单元之后的网络结构的计算量。


InceptionV1结构

翻译

这就导致了所提出的架构的第二个想法:在其他计算需求会增加过多的地方,明智地应用降维 和投影。这是基于嵌入的成功:即使是低维的嵌入也可能包含大量关于一个相对较大的图像补 丁的信息。然而,嵌入以密集的、压缩的形式表示信息,而压缩的信息更难建模。我们希望在 大多数地方保持我们的表示稀疏 (根据[2]的条件的要求) ,并且只在信号必须集体聚集时压缩 它们。也就是说,在昂贵的3*3和5*5个卷积之前,使用1*1个卷积来计算缩减。除了被用作减 少量外,它们还包括使用校正的线性激活,这使它们具有双重用途。最终的结果如图2(b).所示

       一般来说,初始网络是由上述类型的模块堆叠组成的网络,偶尔有最大池化层,步幅为2,使网格 分辨率减半。出于技术上的原因 (训练期间的记忆效率) ,只在较高的层开始使用Inception模 块,同时以传统的卷积方式保持较低的层似乎是有益的。这并不是严格必要的,只是反映了我 们目前实施中的一些基础设施低低下。

       这种体系结构的一个主要好处方面是,它允许在每个阶段显著增加单元的数量,而不会导致计 算复杂性的不受控制的爆炸。降维的普遍使用允许将最后阶段的大量输入滤波器屏蔽到下一层 ,首先减少它们的维数,然后与大的卷积核进行卷积。这种设计的另一个实际有用的方面是 ,它与直觉相一致,即视觉信息应该在不同的尺度上进行处理,然后进行聚合,以便下一阶段 可以同时从不同的尺度上提取特征。

       计算资源的改进使用允许增加每个阶段的宽度和阶段的数量,而不遇到计算困难。利用初始架 构的另一种方法是创建质量稍低,但计算成本较低的版本。我们发现,所有包含的旋钮和杠杆 都允许计算资源的控制平衡,从而导致网络比非初始架构的网络快2-3倍,但在这一点上需要仔 细的手动设计。

 

精读

InceptionV1结构

主要思想:降维。在的3×3和5×5卷积之前,使用1×1卷积核进行卷积,来计算减少量,达到降维效果还有增强非线性能力的作用。

过程:

为什么这么搭建?

Q1:1×1卷积核的作用?

(1)降维或升维

(2)减少参数量,减少计算量。

(3)实现跨通道信息交融。使用1×1卷积核,其实就是对不同的通道间的信息做线性组合的一个变换过程。

(4)增加模型深度,提高非线性。使用1×1卷积核的网络更深,而每一层网络后都会用Relu函数增加非线性,这样就增加了一层非线性特性。


Q2:为什么要把1ⅹ1卷积核加在3×3、5×5卷积?

为了进行降维从而减少后边大卷积核的参数量。


Q3:既然5×5那么大,为何不全部替换成1×1?

虽然1x1可以解决参数量的问题,但是它同时局限了感受野的范围,所以要做到感受野和参数量的权衡,虽然5x5和3x3的参数量大,但是他们卷积效果也好,我们只在某些时候引入1x1卷积,起到降维/通道聚合等作用。

结果:这三部分因为1×1卷积层的加入,总的卷积参数量已经大大低于之前的初始化Inception模块,而且因为在最大池化层之前也加入了1×1的卷积层,所以最终输出的特征图的深度也降低了,这样也降低了该单元之后的网络结构的计算量。这个Inception是GoogLeNet的基本结构。很多个Inception的联合就最终组成了GoogLeNet。


五、GoogLeNet

翻译

 较小的这里,表1描述了最成功的特定实例(名为GoogLeNet)。采用了完全相同的拓扑结构 (用 不同的采样方法进行训练),用于我们集合中的7个模型中的6个。

       所有的卷积,包括那些在初始模块内部的卷积,都使用了修正的线性激活。在我们的网络中, 接受域的大小是224*224采取RGB颜色通道,“#3×3 reduce”和“#5×5 reduce”表示 在3*3和5*5卷积之前,使用的1*1的卷积层。在池化层列中内置的最大池化之后, 我们可以在池化层中看到1*1个卷积核的数量。所有这些reduce也使用了ReLU激活函数。

       该网络的设计考虑到了计算效率和实用性,因此推理可以在单个设备上运行,甚至包括那些计算资源有限的设备,特别是低内存占用的设备。当只计算带有参数的层时,该网络有22层深 ( 如果我们也计算池化,则是27层) 。用于建设网络的层 (独立构件) 约为100个。然而,这个数 字取决于所使用的机器学习基础设施系统。在分类器之前使用平均池化是基于[12]的,尽管我 们的实现的不同之处在于我们使用了一个额外的线性层。这使得我们的网络可以很容易地调整 和微调我们的网络,但它主要是方便的,我们不认为它会产生重大影响。研究发现,从全连 接层到平均池化的top-1精度提高了约0.6%,但即使去除完全连接层,使用dropout层仍然是必要的。

       由于网络的深度相对较大,因此以有效的方式将梯度传播回所有层的能力是一个值得关注的问 题。一个有趣的观点是,相对较浅的网络在这一任务上的强大表现表明, 由网络中间的各层所 产生的特征应该是非常有区别的。通过添加连接到这些中间层的辅助分类器,我们将期望在分 类器的较低阶段鼓励区分,增加传播回的梯度信号,并提供额外的正则化。这些分类器采用了 较小的卷积网络的形式,并将它们放在初始空间(4a)和(4d)模块的输出之上。在训练过程中, 它们的损失以折扣权值加到网络的总损失中 (辅助分类器的损失加权为0.3) 。在推理时,这些 辅助网络被丢弃。

       包括辅助分类器在内的侧面额外网络的确切结构如下:

       具有5*5个过滤器大小和步幅3的平均池化层,导致(4a)输出4*4*512, (4d)阶段输出4*4*528

       一个128个滤波器的1*1的卷积层用于降维和ReLU激活。

       一个具有1024个单元和ReLU线性激活的全连接层。

       一个有70%的dropout率的dropout层。

       一个以softmax损失函数作为分类器的线性层 (预测与主分类器相同的1000个类,但在推理时删除 ) 。

精读

GoogLeNet表格解读:

第一列: 对应一系列层的名称

蓝色框中的两列:

  • patch size/stride 列,对应卷积核、池化核大小和步距。
  • output size列,输出特征矩阵。

粉红框中的参数:对应Inception结构中的配置

  • #1x1: 对应层次如图所示,表示该层卷积核的个数。
  • #3x3 reduce和#5×5 reduce:表示在3x3,5x5卷积操作之前使用了1x1卷积的数量。

GoogLeNet结构详解

(1)输入

原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)

(2)第一模块

第一模块采用的是1个单纯的卷积层+1个最大池化层

卷积层:

卷积核大小7×7,步长为2,padding为3,输出通道数64,输出特征图尺寸为(224-7+3×2)/2+1=112.5(向下取整)=112,输出特征图维度为112x112x64,卷积后进行ReLU操作。

池化层:

窗口大小3×3,步长为2,输出特征图尺寸为((112 -3)/2)+1=55.5(向上取整)=56,输出特征图维度为56x56x64。

(3)第二模块

第二模块采用2个卷积层+1个最大池化层。

卷积层:

  • 用64个1x1的卷积核(3x3卷积核之前的降维)将输入的特征图(56x56x64)变为56x56x64,然后进行ReLU操作。参数量是1×1×64×64=4096
  • 再用卷积核大小3×3,步长为1,padding为1,输出通道数192,进行卷积运算,输出特征图尺寸为(56-3+1×2)/1+1=56,输出特征图维度为56x56x192,然后进行ReLU操作。参数量是3×3×64×192=110592

第二模块卷积运算总的参数量是110592+4096=114688,即114688/1024=112K

池化层:

窗口大小3×3,步长为2,输出通道数192,输出为((56 - 3)/2)+1=27.5(向上取整)=28,输出特征图维度为28x28x192。

(4)第三模块(Inception 3a层)

Inception 3a层,分为四个分支,采用不同尺度,

卷积层:

1.使用64个1x1的卷积核,运算后特征图输出为28x28x64,然后RuLU操作。参数量1×1×192×6412288

2.96个1x1的卷积核(3x3卷积核之前的降维)运算后特征图输出为28x28x96,进行ReLU计算,再进行128个3x3的卷积,输出28x28x128。参数量1×1×192×96+3×3×96×128=129024

3.16个1x1的卷积核(5x5卷积核之前的降维)将特征图变成28x28x16,进行ReLU计算,再进行32个5x5的卷积,输出28x28x32。参数量1×1×192×16+5×5×16×32=15872

池化层:

使用3x3的卷积核,输出28x28x192,然后进行32个1x1的卷积,输出28x28x32.。总参数量1×1×192×32=6144

输出结果:将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256。总的参数量是12288+129024+15872+6144=163328,即163328/1024=159.5K,约等于159K。

(5)第三模块(Inception 3b层)

Inception 3b层,分为四个分支,采用不同尺度。

卷积层:  

1.128个1x1的卷积核,然后RuLU,输出28x28x128pool层,使用3x3的核,输出28x28x256,然后进行64个1x1的卷积,输出28x28x64

2.128个1x1的卷积核(3x3卷积核之前的降维)变成28x28x128,进行ReLU,再进行192个3x3的卷积,输出28x28x192

3.32个1x1的卷积核(5x5卷积核之前的降维)变成28x28x32,进行ReLU,再进行96个5x5的卷积,输出28x28x963.

池化层:

使用3x3的核,输出28x28x256,然后进行64个1x1的卷积,输出28x28x64

输出结果:将四个结果进行连接,对这四部分输出结果的第三维并联,即128+192+96+64=480,最终输出输出为28x28x480。

(6)第四模块(Inception 4a、4b、4c、4e)

与Inception3a,3b类似

(7)第五模块(Inception 5a、5b)

与Inception3a,3b类似

(8)输出层

前面已经多次提到,在输出层GoogLeNet与AlexNet、VGG采用3个连续的全连接层不同,GoogLeNet采用的是全局平均池化层,得到的是高和宽均为1的卷积层,然后添加丢弃概率为40%的Dropout,输出层激活函数采用的是softmax。

(9)激活函数

GoogLeNet每层使用的激活函数为ReLU激活函数。

(10)辅助分类器

目的:根据实验数据,发现神经网络的中间层也具有很强的识别能力,为了利用中间层抽象的特征,在某些中间层中添加含有多层的分类器。

如下图所示,红色边框内部代表添加的辅助分类器。GoogLeNet中共增加了两个辅助的softmax分支。

作用:

一是为了避免梯度消失,用于向前传导梯度。反向传播时如果有一层求导为0,链式求导结果则为0。

二是将中间某一层输出用作分类,起到模型融合作用。实际测试时,这两个辅助softmax分支会被去掉。

(更详细解读可参见:

深入解读GoogLeNet网络结构(附代码实现)_雷恩Layne的博客-CSDN博客_googlenet网络结构


总结

(1)卷积 -> 池化 ->卷积 ->池化 -> 9个inception堆叠 (中间两个池化) -> 池化 -> dropout -> 线性层 -> softmax。用了7个模型,网络共22层。

(2)所有的卷积以及降维投影,都使用Relu作为激活函数。

(3)将全连接层用平均池化层代替后,top-1提高了大约0.6%,之前的VGG Alex等这里都是三个全连接层。(在平均池化层之后,还是添加了一个全连接层,是为了大家做finetune(微调))

(4)最后一层依旧使用dropout防止过拟合。

(5)为了在浅层使特征更加有区分性,帮助反向传播,解决梯度消失。增加了两个辅助分类器 L=L(最后)+0.3xL(辅1)+0.3xL(辅2),测试阶段去掉辅助分类器。


六、Training Methodology—训练方法

翻译

我们的网络使用干扰信念[4]分布式机器学习系统进行训练,使用少量的模型和数据并行性。虽然我们只使用了基于CPU的实现,但一个粗略的估计表明,GoogLeNet网络可以在一周内使用少量的高端gpu来训练到收敛,主要的限制是内存的使用。我们的训练使用异步随机梯度下降,超参数为0.9的动量优化[17],固定学习速率计划(每8个ch学习速率降低4%)。使用Polyak平均[13]用于创建推理时 使用的最终模型。

       我们的图像采样方法已经大大改变了在比赛前的几个月,已经趋同的模型还接受了其他选项的训练,有时与已更改的超参数一起使用,如dropout和学习率,所以很难给一个明确的指导最有效的单一方法来训练这些网络。更复杂的是,一些模型主要在较小的图像上训练,另一些在较大的图像上,受[8]的 启发。尽管如此,在比赛后被验证非常有效的处方包括对不同大小的图像斑块进行采样,其大 小均匀分布在图像面积的8%到100%之间,其高宽比在3/4到4/3之间随机选择。此外,我们还发现AndrewHoward[8]的光度畸变在一定程度上有助于对抗过拟合。此外,我们开始使用随机插值 方法 (双线性、面积、最近邻和三次等概率) 来调整相对较晚的大小,并结合其他超参数变化,因此我们不能确定最终结果是否受到其使用的积极影响。


精读

  • 使用了DistBelief分布式机器学习系统,并伴随着标准数量的模型以及数据并行对GoogLeNet网络进行训练。
  • 使用基于CPU的实现,但使用GPU会更快。
  • 训练过程使用异步随机梯度下降,动量参数为0.9,固定的学习率计划(每8次遍历下降学习率4%)。
  • 赛后发现一个调参玄学,包括各种尺寸的图像块的采样,它的尺寸均匀分布在图像区域的8%—100%之间,方向角限制为[3/4, 4/3] 之间。(但谁都说不清这些玄学是否真的有用)
  • 我们发现Andrew Howard的光度扭曲对于克服训练数据成像条件的过拟合是有用的。

七、ILSVRC 2014 Classification Challenge Setup and Results—ILSVRC 2014分类挑战赛设置和结果

翻译

ILSVRC2014年的分类挑战涉及到将图像分类为图像集层次结构中的1000个叶节点类别中的一个 。大约有120万张图像用于训练,5万张用于验证,10万张图像用于测试。每个图像与一个真实类别相关联,性能测量基于最高得分分类器预测。两个数字通常报道:top-1准确率, 比较真实类别与第一个预测类,和top-5错误率, 比较真实类别与前5预测类:一个图像被认为是正确分 类如果准确率前5,不管其排名。该挑战使用了排名前5名的错误率来进行排名。

我们参与了这个挑战,没有使用任何用于培训的外部数据。除了本文中提到的训练技术外,我 们在测试过程中还采用了一组技术来获得更高的性能,我们将在下面详细阐述。

1.我们独立训练了同一个GoogLeNet模型的7个版本 (包括一个更广泛的版本) ,并使用它 们进行了集成预测。这些模型使用相同的初始化 (即使使用相同的初始权重,主要是 由于疏忽) 和学习率策略进行训练,它们只在采样方法和它们看到输入图像的随机顺 序上有所不同。

2.在测试过程中,我们采用了比克里日夫斯基等人更激进的种植方法。 [9].具体来说,我 们将图像的大小调整为4个尺度,其中较短的维度 (高度或宽度) 分别为256、288、320和352,取这些调整大小的图像的左、中和右的正方形 (在肖像图像的情况下,我 们取上、中和下的正方形) 。对于每个正方形,我们取4个角和中心224*224的图像以及调整到224*224的图像,以及它们的镜像版本。这导致每张图像有4*3*6*2=144种图像。AndrewHoward[8]在前一年的记录中使用了类似的方法,我们通过经验验证了它的表现比提议的方案略差。我们注意到,这种激进的种植在实际应用中可能没有 必要,因为在合理数量的图像出现后,更多图像的效益变得边际 (我们将在后面展示 )。

3.在多个作物和所有单个分类器上取极大概率的平均值,以获得最终的预测。在我们的 实验中,我们分析了验证数据的替代方法,如对作物的最大汇集和对分类器进行平均 ,但它们导致的性能低于简单的平均。

       在本文的其余部分中,我们分析了有助于最终提交的整体性能的多个因素。

       我们在挑战中的最终提交在验证和测试数据上都获得了6.67%的前5名错误,在其他参与者中排 名第一。与2012年的超人方法相比,这是一个相对减少了56.5%,与前一年的最佳方法  (Clarifai)相比,这两个相对减少了约40%,这两种方法都使用外部数据来训练分类器。下表显 示了一些性能最好的方法的统计数据。

       我们还分析和报告了多个测试选择的性能,通过改变模型的数量和作物的数量来预测一个图像 的下表。当我们使用一个模型时,我们选择了验证数据上错误率前1最低的模型。所有的数字都 报告在验证数据集上, 以不过度适合测试数据统计数据。


精读

提升性能的技术

训练策略: 训练使用了7个模型融合。每个模型使用相同的初始化方法甚至相同的初始值,相同的学习率策略,仅在图像采样和输入顺序有区别。

裁剪策略: 图片分别缩放到四种尺寸:256、288、320、352,取左、中、右(或上、中、下)正方形,再取四角和中心以及缩放到224x224正方形与镜像。共4x3x6x2个裁剪区。(4种尺寸、3个范围、6=(5+1)、镜像翻倍)。

将softmax概率在多个区域和所有单个分类器上取平均,以获得最终预测。

结果

上述配置的结果:第一名

另外几种配置的结构表明:裁剪越多越精准,但平日不适用


八、ILSVRC 2014 Detection Challenge Setup and Results—ILSVRC 2014检测挑战赛设置和结果

翻译

ILSVRC的检测任务是在200个可能的类中,围绕着图像中的对象生成边界框。如果检测到的对象 与真实类别匹配,并且它们的边界框至少重叠了50%(使用Jaccard索引),则索数正确。外 来检测被视为假阳性并受到惩罚。与分类任务相反,每个图像都可能包含许多物体或没有,它们的规模可能从大到小不等。使用平均平均精度(mAP)报告结果。

       GoogLeNet所采用的检测方法类似于[6]的R-CNN,但增加了初始模型作为区域分类器。此外,通 过结合选择性搜索[20]方法与多盒[5]预测,以提高更高的目标边界框召回率,改进了区域建议 步骤。为了减少假阳性的数量,超像素的大小增加了2*。这使得选择性搜索算法的建议框减少的一半 。我们重新添加了200个来自多盒[5]的区域提案,总共约占[6]使用的提案的60%,同时将覆盖 率从92%提高到93%。减少数量和增加覆盖率的提案数量的总体效果是,对单个模型情况的平均 平均精度提高了1%。最后,在对每个区域进行分类时,我们使用了6个convnet的集合,将结果 的准确率从40%提高到43.9%。请注意,与R-CNN相反, 由于缺乏时间,我们没有使用边界盒回归。

       我们首先报告顶级检测结果,并显示自第一版检测任务以来的进展。与2013年的调查结果相比 ,准确率几乎翻了一番。表现最好的团队都使用卷积网络。我们在表4中报告了官方分数和每个 团队的常见策略:外部数据的使用、集成模型或上下文模型。外部数据通常是ILSVRC12分类数 据,用于预训练一个模型,然后根据检测数据进行细化。一些团队还提到了本地化数据的使用 。 由于大部分定位任务边界框不包含在检测数据集中,因此可以使用这些数据预训练通用边界 框回归器,其分类方法与预训练相同。GoogLeNet条目没有使用本地化数据进行预训练。

在表5中,我们只使用单个模型来比较结果。表现最好的模型是通过深度洞察,令人惊讶的是, 通过3个模型的集成只提高了0.3分,而GoogLeNet通过集成获得了显著更强的结果。

精读

提升性能的技术

  1. GoogLeNet检测采用的方法类似于R-CNN,但用Inception模块作为区域分类器进行了增强。
  2. 为了更高的bbox recall(目标边界框召回率),通过结合Selective Search方法与多box预测方法改进了区域生成步骤。
  3. 为了减少false positive的数量,超像素的尺寸增加了2倍。这将Selective Search算法的区域生成减少了一半。
  4. 减少区域生成的数量,增加覆盖率的整体影响是对于单个模型的情况平均精度均值增加了1%
  5. 最后,等分类单个区域时,我们使用了6个GoogLeNets的组合。这导致准确率从40%提高到43.9%。注意,与R-CNN相反,由于缺少时间我们没有使用bbox回归。

结果

上述配置的结果:第一名

单个模型跑出的结果:最优表现得模型是DeepInsight并且作者挽尊惊讶的表示,组合了三个网络也是只提升了0.3个点,相反GoogLeNet组合后获得了明显更强的结果。


九、Conclusions—总结

翻译

       我们的结果似乎产生了一个坚实的证据,即通过现成的密集构建块来近似预期的最优稀疏结构是改进计算机视觉神经网络的可行方法。这种方法的主要优点是与较浅和较不宽的网络相比, 在计算需求的适度增加下显著提高质量。还要注意,我们的检测工作具有竞争力,尽管我们既没有利用上下文,也没有执行边界框

       回归和这一事实为初始架构的强度提供了进一步的证据。虽然期望通过更昂贵的相似深度和宽度的网络可以实现相似的结果质量,但我们的方法提供了坚实的证据,证明转向稀疏架构是可 行和有用的想法。这表明未来将在[2]的基础上以自动化的方式创建更稀疏和更精细的结构。

精读

通过随时可用的密集构造块来近似预期的最佳稀疏结构,是改善计算机视觉神经网络的可行方法。 与较浅和较窄的体系结构相比,此方法的主要优点是在计算需求适度增加的情况下可显着提高质量。

向稀疏架构过渡通常是可行且有用的想法。

未来的工作:以自动方式创建稀疏和更精细的结构,以及将Inception体系结构的见解应用于其他领域。  


论文十问

Q1:论文试图解决什么问题?

为了在使用更深更宽的网络的同时减少过拟合、降低参数量、提高计算资源利用率,本文提出了一种结合了稀疏性和密集计算的网络结构(Inception),巧妙地使用了1ⅹ1卷积来实现数据降维,并且在这基础上搭建了GoogLeNet的Inception v1版本。


Q2:这是否是一个新的问题?

不是新的问题,在原来对神经网络更宽更深的探究下,提出了新的网络架构方法


Q3:这篇文章要验证一个什么科学假设?

在卷积构建块中寻找最优局部结构(Inception结构),利用它可以实现在增加网络的宽度和深度的同时减少参数,高性能计算。


Q4:有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?

稀疏矩阵运算,数学方面。Hebbian原则],生物神经方面


Q5:论文中提到的解决方案之关键是什么?

1.使用更宽更深的网络,提升网络性能;

2.用稀疏连接代替密集连接,减少计算资源需求;

3.既利用稀疏性又使用稠密计算(1ⅹ1卷积的应用),提高计算资源利用率;

4.引入了Inception,重复叠加,找到最优结构。


Q6:论文中的实验是如何设计的?

1.使用了一种结合了稀疏性和密集计算的网络结构(Inception),并不断重复。

2.利用1×1卷积,3×3卷积,5×5卷积,3×3最大池化搭建网络,一共7个模块,22个层。

3.使用了1ⅹ1卷积来实现数据降维。

4.添加两个辅助分类器帮助训练


Q7:用于定量评估的数据集是什么?代码有没有开源?

ImageNet2014,有开源


Q8:论文中的实验及结果有没有很好地支持需要验证的科学假设?

证明了,两次第一呢


Q9:这篇论文到底有什么贡献?

1.引入Inception结构(融合不同的特征信息)

2.使用1×1的卷积核进行降维以及映射处理

3.添加两个辅助分类器帮助训练

4.丢弃全连接层,使用平均池化层(大大减少模型参数)


Q10:下一步呢?有什么工作可以继续深入?

以自动方式创建稀疏和更精细的结构,以及将Inception体系结构的见解应用于其他领域。


以上就是GoogLeNet的全部解读了~

代码复现可以看下篇:GoogLeNet InceptionV1代码复现+超详细注释(PyTorch)

下篇预告:GoogLeNet  Inceptionv2-v3

相关文章
|
2月前
|
机器学习/深度学习 人工智能
类人神经网络再进一步!DeepMind最新50页论文提出AligNet框架:用层次化视觉概念对齐人类
【10月更文挑战第18天】这篇论文提出了一种名为AligNet的框架,旨在通过将人类知识注入神经网络来解决其与人类认知的不匹配问题。AligNet通过训练教师模型模仿人类判断,并将人类化的结构和知识转移至预训练的视觉模型中,从而提高模型在多种任务上的泛化能力和稳健性。实验结果表明,人类对齐的模型在相似性任务和出分布情况下表现更佳。
71 3
|
2月前
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
782 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
12天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
2月前
|
机器学习/深度学习 数据可视化 Linux
Seaborn可视化学习笔记(一):可视化神经网络权重分布情况
这篇文章是关于如何使用Seaborn库来可视化神经网络权重分布的教程,包括函数信息、测试代码和实际应用示例。
64 0
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
62 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
4月前
|
机器学习/深度学习 自然语言处理 并行计算
【深度学习+面经】Transformer 网络学习笔记
Transformer模型的核心概念、优缺点以及在多个领域的应用,并提供了针对Transformer架构的面试问题及答案。
195 2
|
4月前
|
机器学习/深度学习 算法 网络架构
神经网络架构殊途同归?ICML 2024论文:模型不同,但学习内容相同
【8月更文挑战第3天】《神经语言模型的缩放定律》由OpenAI研究人员完成并在ICML 2024发表。研究揭示了模型性能与大小、数据集及计算资源间的幂律关系,表明增大任一资源均可预测地提升性能。此外,论文指出模型宽度与深度对性能影响较小,较大模型在更多数据上训练能更好泛化,且能高效利用计算资源。研究提供了训练策略建议,对于神经语言模型优化意义重大,但也存在局限性,需进一步探索。论文链接:[https://arxiv.org/abs/2001.08361]。
56 1
|
4月前
|
机器学习/深度学习 Linux TensorFlow
【Tensorflow+keras】用代码给神经网络结构绘图
文章提供了使用TensorFlow和Keras来绘制神经网络结构图的方法,并给出了具体的代码示例。
64 0
|
4月前
|
机器学习/深度学习 自然语言处理 TensorFlow