摘要
我们提出了一个深度卷积神经网络结构,代码名字叫做Inception。他在ILSVRC2014分类和检测比赛中水平最高。这个结构最主要的特点是提高了计算机的使用率。通过细心的设计,我们在计算能力保持不变的情况下增加了网络的深度和宽度。为了优化性能,这个结构是基于Hebbian原则和multi-scale设计的。我们在ILSVRC14中提交的GoogLeNet是他的一个化身,他可以应用在分类和识别任务中。
1、引言
————这个就是讲一些背景。
最近三年,对象分类和识别能力因为深度学习和卷积网络的发展而急剧提高。一个鼓舞人心的就是大部分的这些理论并不是依靠更强大的硬件,更大的数据集,更大的模型,而是一个一个的新的想法灵感,算法和提高网络结构。没有新的数据源被使用,比如说,ILSVRC2014中除了同届的分类数据用于检测,并没有使用其他的数据。我们的GoogNet实际上是用了两年前的比获胜者Krizhevsky少了12倍的参数数量,但是我们的精度却更高了。在对象检测方面,最大的改进不是通过越来越深的网络,而是通过深度结构和经典的计算机视觉结合,像R-CNN算法。
另一个值得注意的因素是随着移动和嵌入计算的增长,我们算法的有效性(尤其是功耗和内存的使用)变得更加重要。值得注意的是,本文提出的深层体系结构设计考虑的因素包括这个因素,而不是完全依赖于精确的数字。在大多数实验中,模型被设计成在推理阶段只有15亿个加法单元,因此这不完全是一个学术探索。他可以应用到实际中,即使是大型数据集中,cost也是比较合理的。
在这个论文中,我们致力于一种用于计算机视觉中的高效深度神经网络结构,代码名字叫做Inception。从Lin等人的Network中的网络和著名的大脑模仿的我们需要更深入,反正是这两个论文的综合而来的名字。在我们的情况中,deep这个词有两种不同的含义:一、我们引进了一个Inception模型的新的组织方式(他们设计的Inception模型有了一个新的级别的性能)----inception结构的层次。二、就是纯粹的指神经网络的深度。一般来讲,我们可以将Inception看作Arora等人的理论的最高值。这种结构的好处通过了ILSVRC2014分类和识别任务的验证,在当时来讲是state of the art。就是站在顶端。
2、相关工作
以LeNet-5为开始,CNN有一个标准的结构-堆叠的卷积层(后面可能由正则化和最大池化层)+全连接层。这个基础设计的不同变形在图像分类领域很流行,并且在MNIST,CIFAR,甚至是ImageNet分类比赛中产生了很好的成绩。对于像Imagenet这样大的数据,最近流行的做大是增加层数depth,并且使用dropout来防止过拟合。
尽管最大池化层可能导致损失准确的空间信息,和9中相同的卷积网络结构已经应用在定位,对象检测,和人类姿态估计。
被灵长类动物视觉皮层的神经科学模型 激发,Serre等人使用了一些列固定的不同大小的Gabor过滤器来处理不同的scale。我们使用了一个相似的策略。然而相对于15的固定的两层深的模型而言,所有的在Inception结构中的过滤器是已经学习过的。Inception模型就是多个上述的两层的机构多次复制而成的。此外,Inception的层重复了很多次,从而产生了一个22层的深度模型(就是GoogLeNet模型)。
Network-in-Network是一个由Lin等人12提出的一个方法,目的是提高神经网络的表征能力。在其他的模型中,附加的一个1*1的卷积层被施加到网络中,增加了他的深度。我们在我们的结构中很大程度上使用了这一个方法。但是在我们的设置中,1*1的卷积层可以达到两个目的:最重要一点,他们作为维度减少模块来移除计算瓶颈,否则将会限制我们网络的大小。第二点,这个不仅增加了深度,而且增加了网络的宽度,没有明显的性能损耗。
最后,目前对象检测领域的最好方法是R-CNN方法。R-cnn将所有的检测问题分解成两个子问题:1、在一个和类别无关的模式,利用低级别的线索(颜色和文本)来产生对象定位的。2、利用CNN分类器来识别在这些位置不同对象的类别。这样一个有两个状态的方法:用低级别的线索获取了分割回归框的准确性,用先进的CNN来获得强有力的分类。检测任务的提交作品中我们也使用了相同的流程,但是我们都进行了增强,比如说多个方框进行预测来更高的召回,更好的整体的分类边框建议的方法。
3、动机和高级考虑
提高深度神经网络最直接的方法就是增加他们的大小。这个包含增加深度(网络的层数)和宽度(每一层的单元数)。这是一个简单安全的训练高性能模型,尤其是给定大量的标记过的数据。然而,这个会有两个主要的缺点。
更大的尺寸总是意味着大量的参数,这将会使网络更加容易过拟合。如果标记的训练集少的话,就更加容易过拟合。这是一个主要的瓶颈,因为标记过的数据集是很难获取的,总是需要专门的人员来将图片进行不同不同类的归类,比如说ImageNet有1000个分类在图一中。
另一个缺点是急剧的增加了计算资源的花费。比如说,在深度视觉网络中,如果两个卷积层链接在一起,增加过滤器的数量将导致计算资源成二次方的增加。如果增加的大小没有很好的利用(比如说,大多数的权重最后都接近0,那就相当于没有用),就白白的浪费了大量的计算能力。因为计算能力总是固定的,因此一个有效的计算资源的分配比一个不加区别的增加大小要好得多,即使以提高模型性能为指标。
解决这两个问题一个基本的方法是引进稀疏并将全连接层替换为稀疏的链接,甚至是在卷积层中也可以使用稀疏。除了模仿生物系统,基于Arora等人的开创性工作,这些也变得有了监视的理论基础。他们的主要的陈述是,神经元进行聚类来获得一层层的网络。尽管严格的数学证明需如果数据集分配的概率可以通过一个大型的,很稀疏的深度神经网络表示出来,那么最优的网络拓扑可以通过对前面网络的激活和高度相关输出的聚类的分析,这样一层一层的构建。尽管这个的要很严格的条件,事实上这个状态和众所周知的Hebbian原则(神经元如果激活条件相同,那么他们就可以互联)-这也就说明Hebbian原则在不那么严格的条件下也是可以使用的。
不幸的是,现在计算硬件对于non-uniform的系数数据结构也是很低效的。即使算法操作的次数减少100倍,查找和缓存丢失的影响将会占据主导地位:稀疏矩阵也不会彻底解决。利用底层CPU或者GPU硬件的详细信息,稳步改进和高度调优的数值库允许机器快速的密度举证乘法。并且,非uniform稀疏模型需要更加复杂的工程和计算硬件。目前大多数面向视觉的机器学习系统都是通过卷积来利用空间域的稀疏性。然而卷积是被作为前面层中密集连接到补丁(patches)的集合应用的。自从系统分割和学习改善以来,卷积已经在特征维度上使用高维空间中随机和稀疏链接表,目前趋势改变到全连接层和9来优化并行计算。计算机视觉中当前顶尖的结构有uniform结构。大量的过滤器和更大批量大小允许高效的使用密度计算。
这个就引出了一个问题下一个方法是否还有希望,一个折中的步骤:像理论支持的那样结构使用稀疏过滤,(稀疏计算量很大)但是通过在密度矩阵上执行计算来利用我们当前的硬件。大量的稀疏矩阵计算的文件建议将稀疏矩阵聚类成相对密度的子矩阵对于稀疏矩阵乘法给定了一个更有好的性能。在不远的将来,相似的方法将会被用来自动构建non-uniform深度学习结构。
折中说明前两者是独立的,non-uniform就是指稀疏的网络形式。
Inception结构开始作为一个用于研究复杂网络拓扑构建算法的期望输出的例子出现的。这个算法试着接近一个稀疏的由视觉网络和密度转换复杂输出结果,可读的部件。尽管这个是一个高度投机的方法,在和基于12的参考网络相比的时候可以观察到一些收益。随着一点点加大差距,Inception在定位和对象识别领域中像5和6那样有用。有趣的是,尽管大多数的原始结构的选择已经开始被质疑,并进行隔离测试,他们证明是接近局部最优的。一个人必须十分小心:尽管Inception结构成为计算机视觉中一个成功,但是他人然是有疑惑的(这个可以作为指导原则来指导他的构造吗)。但是可以确认的是这个将会需要一个更加全面的分析和验证。
4、框架细节
Inception结构的主要思想是考虑一个卷积视觉网络的本地稀疏架构优化可以通过简单的密度部件来逼近和转换。注意,假设平移不变性意味着我们的网络将会从卷积构建的块中创建。我们的所有需要就是发现最优的局部构造并在空间上重复他。Arora建议一个层连层的构造,但是需要分析最后一层对应的统计和将他们聚类成高度相关的类。
这些聚类组成了下一层的单元并且和前面层的单元相连。我们认为从前面层中来的每一个单元对应输入图片的一个区域,这些单元组成过滤波器银行(这个意思就是说滤波器处理后的数据)。在比较低的层(靠近输入图片)对应单元将会聚集在本地区域。因此我们将会得到很多对应在相同输入的区域的簇,在下一层他们可以通过一个1*1的卷积层来进行收敛,正如12描述的那样。
但是,我们仍然可以希望更加广泛的稀疏传播有外有更少可以在大的补丁上被卷积覆盖的数量,可以通过卷积在大量的补丁上进行转换,随着越来越大的区域,这里将会减少补丁数量。为了避免补丁对齐问题,目前Inception结构的化身的过滤器尺寸严格为1*1,3*3和5*5。这个决定更多的是为了方便,而不是必须要这么做。他也意味着推荐的结构是一个所有这些层的结合,这些层的输出过滤器组对应一个单一的组成下一个状态的输入的向量。另外,池化层操作对于目前卷积网络的成功的必要条件,他建议在每一个这样的状态增加一个可选的并行池化层路径将会有额外的收益(图2).
它1*1降维是指讲channel数feature map数减少。
这些Inception模型被堆放在每一个的上面,他们的输出统计学对应一定会改变:因为更高的抽象特征是被更高的层捕捉的,他们的空间聚集是下降的。高级特征和高级特征之间的聚集是下降的,所以需要更多的过滤器来捕捉。这个就建议3*3和5*5的卷积网络的比例应该随着我们移动到更高的层来增加。
上面模型的一个大问题,最起码实在这个天真的具体情况中,就是即使最小数量的5*5卷积网络在在顶层有大量的过滤器消耗也很大。这个问题在池化层问世的时候就提出来了:输出过滤器的数量等于上一个状态的过滤器的数量。带有卷积层输出池化层的输出总和将会增加从一个状态到另一个状态的数量。这个结构可能包含最好的稀疏结构,他将会很低效的执行,导致一个计算炸毁,也就是计算崩溃了。
这个就产生了Inception结构的第二个思想:明智的减少维度否则计算能力将会需要增加很多。这个是基于压缩的成功:即使低纬度的压缩可能包含一个相当大的图片的很多信息。但是压缩在某个程度上表示信息,压缩格式和压缩信息是更加困难去处理的。这个表示在大多数时候将会保持稀疏(就像条件2需要的那样),只有当信号必须集中在一起的时候才必须压缩他们。因此在昂贵的3*3和5*5卷积之前用1*1卷积用来计算从而可以减少消耗。除了用作降维,他们还包含线行修改激活,这是他们的两个目的。最终的结果展示在图二中。
通常,一个Inception网络是一个包含上面类型模块的网络,有步长为2的最大池化层来减少栅格的分辨率。对于技术原因(在训练期间内存效率的考虑),只有在比较高的层中使用inception同时保持底层是传统的卷积格式此时有好处的。这个并不是严格要求的,这仅仅反应的是当前我们实现效率低的情况。
这个结构有用的一方面是它允许在每一个阶段显著的增加单元数量,而不会在后面的阶段造成计算崩溃。这个是因为 对有大补丁的网络大量使用降维 来降低的消耗。此外,设计遵循下面的直到原则:视觉信息应该在不同的尺寸下处理然后聚合,因此下一个状态可以从不同的scale中同时提取特征。
计算资源的提高允许同时增加每一个状态的宽度和状态的数量,而不产生计算问题。可以利用Inception结构来创建性能稍差,但是计算能力更加廉价的版本。我们发现所有的方法可以将同等不使用Inception的网络速度提高3-10倍,但是这个需要谨慎的手工设计。
5、GoogLeNet
GoogLeNet这个名字我们Inception结构的某一个特定的衍生物,在ILSVRC2014中提交的作品。沃恩也使用更深和更宽的Inception网络,他的略优品质,但是把他使用到总体上看起来提高的性能不多。我们忽略了网络的细节,因为实验证据指示结构的确切参数的影响是相当小的。表一阐述了在竞赛中最常用的例子。这个网络(用不同的图片补丁的采样方式)在我们的组合中使用7个模型中的6个。
所有的卷积,包括在Inception模型中的卷积,使用的是修正的线行激活。在我们网络中的接受的大小是224*224的均值为0的RGB颜色空间。"#3*3reduce"和"#5*5reduce"表示在3*3和5*5卷积之前似乎用的减少层中1*1过滤器的数量。我们可以在内置的池化列的最大池化层后面的映射层中看到1*1过滤器的数量。所有的这些减少层/映射曾使用修正的线行激活。
这个网络设计考虑的是计算效率和实用性,因此推断可以在独立的设备上执行,甚至是这些只有有限的计算资源的,并且使用的是低效的脚本的情况。
当只计算有参数的层的时候,这个网络只有22个层(如果计算池化层就有27个)。构建这个网络使用的全部的层是100个。准确的数目取决于层是怎样被机器学习设施计算的。在分类之前使用的平均池化层是基于12,尽管我们的实施有一个额外的线行层。这个线行层使我们能够很容易的将我们的网络推广到其他的标记集,然而他最常用于方便并且我们不期望它有很大的影响。我们发现从全连接层移动到平均池化层提高了top1 0.6%的精度,但是即使去除掉全连接层后dropout层仍是不可缺少的。
给定相对大的网络深度,所有层的反向传播是比较关心的。在这个任务的浅网络的强大的性能指示网络中间的层产生的特征应该差距很大。通过添加连接到媒介层的分类器,分类器中低状态的区别被期望。这个是通过在提供常规化的时候和梯度消失问题做斗争的。这些分类器采取的是小的卷积网络的形式放在Inception(4a)和(4d)模块的上面。在训练的时候,他们的损失求和来求整体的损失,但是会乘以一个系数(附加的分类器的损失会乘以一个0.3的系数)。在测试的时候,这些附加的网络就会被弃掉。后面的控制实验展示了附加网络的影响是相当小的(0.5%),他只需要他们其中的一个就可以达到相同的水平。
? ?
额外网络的准确结构在下面,包含额外的分类器:
·一个平均池化层有5*5的过滤器尺寸,步长3,输出4*4*512在4a状态,4*4*528在4d状态。
·一个1*1的卷积有128个过滤器来降维和修正线行激活
·有1024个单元的全连接层和修正线行激活
·一个dropout层有70%的放弃输出的概率。
·一个线行层,有softmax损失作为分类器(预处理相同的1000类作为主要的分类器,但是在测试的时候移除)。
示意图在图三中介绍:
6、训练方法
GoogLeNet 网络使用DistBelief分配机器学习训练的使用小量的模型和数据并行。尽管我们基于实现使用了一个CPU,大概估计在几个高端的GPu上训练时间在一周以内,主要的限制是内存的使用。我们训练使用的同步随机梯度下降,0.9的动量,固定学习率(每8个epoch减少4%的学习率)。Polyak平均法用来创建一个最终稿的模型。
图像采样模型在最近的几个月内已经改变了,已经收敛的模型和其他的模型一起训练,有时候和改变的超参数相连,比如说dropout和学习率。因此,很难给出一个指导性的定义来产生最有效的单一的方法来训练这些网络。为了更复杂的问题,一些模型主要在相对小的crop上面训练的,其他的在大的crop上训练的,这是受8的启发。尽管如此,有一个经过验证非常有效的方法,那就是对图像中大小不等的小块进行采样,这些小块的大小均匀分布在图像面积的8%到100之间,长宽比限制在区间[3/4,4/3].我们仍然发现Andrew Howard的图像干扰在训练数据中对于抑制过拟合是十分有用的。
7、ILSVRC2014分类竞赛中的建立和结果
这个比赛任务是将图片分成1000个类张的一个,数据集是ImageNet。这里大概有120万图像来训练,5万用于验证10万用于测试。每一个图片肯定属于一个分类,最终根据得分的最高的结果来进行分类。性能常用top1top5表示。
我们参加这个竞赛没有使用额外的数据来训练。除了前面提到的训练方法,我们在测试中应用了一系列的技术来获得高性能,下面我们描述一下。
1、我们独立训练了7个版本的相同的GoogLeNet模型(包括一个更宽的版本),在整体上执行预测。这些模型用了相同的初始化(由于疏忽,全总初始化也相同了)学习率策略。他们只在采样方法和随机输入图片的顺序上不同。
2、在测试的时候,我们应用了一个比Krizhevsky更有进取性的crop方法。我们将图片resize成4个尺寸,高和宽更短的哪一个是256,288,320,352。采用的是这些resized图片左,中和右的方框(在开始的输入图片中我们采用的是顶部中心和底部的方框)。对于每一个方框,我们用4个角和中新224*224的区域和整体图像resized到224*224,还有他们的镜像。每个图像就就产生了4*3*6*2=144个产物,
4:4个尺寸 256,288,320,352
3:4个尺寸中的左中右或者上中下三个
6:四个角、中间、整张照片resize成224*224
2:镜像不镜像
crop就是对输入图片做的预处理。在前几年一个相似的操作被AndrewHoward使用,经验证该方案比我们提出的稍微差一些。我们注意到这样的进取性的crop在实际应用中可能不是必须的,因为随着crops的增多,继续增加更多的crop的优点将会消失(后面我们会展示)。
3、softmax概率是几个crop的平均值,在所有的独立分类器上面求取最终的预测。在我们的实验中,我们在验证集上分析了可用的方法,比如说所有crop上面的最大池化层和所有分类器上面的平均值,但是他们导致比简单的求平均更差的性能
在论文的剩余部分我们在最终提交的作品中分析了对整体性能有影响的多个因素。
我们最终的提交作品top5 6.67%(验证集和测试集),是第一。这个和2012年的SuperVision方法相比减少了56.5%,在Clarifai数据集上面比去年最好的减少了40%。他们都是用了额外的数据来训练分类器。表2展示了三年来性能最好的方法。
我们也分析和报道了多个通过不同数量的模型和crops进行测试选择的性能,在图三中进行的图片预测。当我们使用一个模型,我们选择在验证集上有最低top1错误率的模型。所有的数量都在验证机上进行了报道为了使防止在测试集上过拟合。
8、ILSVRC2014检测竞赛建立和结果
ILSVRC检测任务是在图像中的对象上产生一个框,对象几乎有200中可能的分类。检测的对象如果是正确的类并且这个框的重叠最少是50%(使用雅可比索引),那么就认为是正确的。其他的检测将会被认为是假阳性并受到乘法。对于分类任务,每个图片可能包含很多的对象或者没有对象,并且他们的尺寸是不一样的。结果是通过使用平均平均精度(mAP)。GoogLeNet对于检测采用的方法和R-CNN很像,但是区域分类器是通过Inception增强了的。另外,结合为了更高的回归狂召回率使用的多box预测选择搜索方法区域提议步骤。为了减少错误的数量超级像素点的大小增加两倍。这个减半了来自选择算法的建议。我们从多box结果中增加了200个区域建议,总共,大约60%的提议被6使用,同时从92%收敛到了93%。用增加卷积减少提议数量的整体影响是单一模型mPA15的改善。最终我们在区分每一个区域的时候使用了一个6个GoogLeNet的网络。这个将正确性从40增加到到了43.9%。相对于R-CNN,我们因为缺少时间所以没有使用回归框。
我们首先从第一版本的检测任务来报道最好的检测结果和展示处理。和2013年的结果相比,精度近乎加倍了。所有的顶级的小组都是用的是卷积网络。我们在table4中报道了官方的成绩并且每个小队共同的策略是:使用额外的数据集,多个模块或者上下文关联的模块。典型的额外的数据集就是ILSVRC12分类数据集用于预训练一个模型,最终在检测数据上精炼。一些小队也提到了使用定位数据。自从定位任务回归框很好的一部分不包含在检测数据集中,我们用数据预训练一个通用的回归框,和分类使用的预训练是一样的。GoogLeNet没有使用定位数据集用于预训练。
在表5中,我们使用一个单一的模型比较了结果。最好的模型是由Deep Insight产生的,吃惊的是GoogLeNet在整体中获得了更强壮的表达,但是只提高了3个百分点。
9、总结
我们的结果证明:通过易得的密度构建的块来逼近期望的最优稀疏结构对于改善计算机视觉的神经网络。这个方法的主要优点是相对于浅层和密集结构,本方法只需要稍微的增加计算能力就可以获得很大的性能提升。
我们的检测工作尽管没有使用上下文也没有执行回归框仍然是由竞争力的,但是对于Inception结构的勇气提供了证据。
对于分类和检测任务,它期望相似数量的结果可以通过相同深度和相同宽度的很多的昂贵的非Inception类型网络获得。我们的方法产生了有利的证据:移动到稀疏结构的思想通常是合理和有用的。在基于2的自动方法中,这个指导将来的工作指向创建稀疏和更加精炼的结构,并且也可以将Inception结构应用于其他的领域。