GoogLeNet-Going Deeper with Convolutions论文阅读笔记
GoogLeNet-Going Deeper with Convolutions论文阅读笔记2014
Abstract
我们提出了代号Inception的深层卷积神经网络结构,取得了ILSVRC2014分类和检测的最好表现。该结构的主要特点是网络内部计算资源的利用率得到提高。通过设计,我们在保持计算量不变的同时提升了网络的深度和宽度。我们在ILSVRC2014中提交了一种22层的网络,叫做GoogLeNet,参加了分类和检测比赛。
1.Introduction
过去三年,由于深度学习和卷积网络的发展,我们的目标分类和检测能力有了极大的提升。令人振奋的是,大部分的进步不是由于更强力的硬件、更大数据集以及更大的模型得到的,而是一系列新想法、新算法以及对网络结构进行改善。没有使用新的数据源,我们的GoogLeNet比两年前的AlexNet少12倍的参数,而更加准确。在目标检测上,最大进展不是来自于更大数据集以及更大的网络,而是来自于深度结构与传统CV的协同发挥,比如R-CNN。
另一个值得注意的因素是,随着移动设备和嵌入式计算的不断发展,我们算法的效率,尤其是其power和内存使用,变得越来越重要。我们网络的设计也考虑了这个因素,而不是只根据准确率数字来调整网络。对于大多数试验来说,模型被设计可以完成15亿次计算,这样才可以保证模型可以在可接受的计算量下,被用在实际的大型数据集中,而不只是为了学术。
本文,我们关注于一个高效的深层神经网络,代号Inception。这里“deep”有两层含义:一是我们提出了一个基于“Inception module”的新的网络组织形式;二是直观意义上的增加网络深度。
2.Related Work
从LeNet-5开始,CNN就有了一个标准结构:堆叠的卷积层(部分后面接对比度归一化和最大池化),卷积层之后接一个或多个FC层。这种基础设计结构的变体在图像分类论文中很普遍,并且在MINST、CIFAR以及最著名的ImageNet分类挑战中取得了迄今为止最好的效果。对于像ImageNet这种更大的数据集,最近的趋势是增加层数以及层的尺寸,同时使用dropout来处理过拟合。
尽管担心最大池化层导致准确的空间信息丢失,像AlexNet这种结构的网络也可以用在定位、目标检测、位姿估计等任务中,取得了一定效果。
受到灵长类动物视觉皮层的神经科学模型的启发,Serre等人使用一系列固定的、不同尺寸的Gabor filters来处理多尺度。我们用了相似的策略。然而,相比于Serre的固定的2-layer 深度模型,Inception结构中所有的filters都是学习到的。并且,Inception层重复了很多次,在GoogLeNet中,形成了一个22层的深度模型。
NIN(Network in Network)网络是一种提升神经网络的表达能力的方法。在NIN中,添加了额外的1 * 1卷积层,来增加网络深度。我们在网络中使用了这种方法,我们的1 * 1卷积层有两个目的,它们主要用作降维模块消除计算瓶颈,否则将限制我们网络的尺寸。这是的网络不仅增加了深度,而且在没有很明显的表现降低的情况下提升了网络宽度。
目前目标检测最好的方法是R-CNN,它把目标检测分成了两个子任务:先利用low-level特征比如颜色、纹理来生成一系列proposal(类未知),然后使用CNN分类器在这些proposal未知来确定目标的类别。==这种two-stage方法既利用了适合找边界bbox的低级特征,又利用了高级深层特征来分类。==我们使用类似的pipeline,但是对两个阶段都做了改进,比如multi-box,为了获得更高的bbox recall,整合可以更好对bbox proposals进行分类的方法。
3.Motivation and High Level Considerations
提升深度神经网络表现得最直接方法就是增加sizes,既包括增加深度也包括宽度(每一层的units的数量)。这对于给了大量标注训练数据来说,是简单安全地训练更高质量模型的方法,但是这种简单方法有两个主要缺点。
**更大尺寸意味着大量的参数,这样网络的学习能力非常强,很容易导致过拟合,尤其是训练集数量有限情况下。**这就存在着瓶颈,因为strongly labeled的数据集费时费力很难获取,通常需要专家来分辨很相近的类别,比如图1所示,这种分辨过程需要人类有相关领域的知识才行。
另一个缺点是这会极大地增加计算资源的花费。**比如,如果两个卷积层连在一起,对于他们的卷积核数量任何增加都会导致计算量平方倍增加。如果增加的网络没有有效利用(比如大部分权重最后接近0),那么大部分的计算量都浪费了。**由于计算资源预算始终是有限的,因此即使主要目标是提高性能质量,也要有效分配计算资源,而不是随意增加大小。
我们将提出一种基本方法来解决这两个问题,==引入稀疏性(sparsity),使用更稀疏的层来替代FC层,甚至在卷积层中也是。==这不仅是在模仿生物系统,同时Arora等人的工作也为我们方法提供了理论基础。他们的主要结果表明,如果数据集的概率分布由一个大型的,非常稀疏的深度神经网络表示,则可以通过分析前一层**的相关统计量,将具有高度相关输出的神经元聚类获得一种稀疏表示,来逐层构建最佳网络拓扑。 这也符合Hebbian principle(neurons that fire together, wire together),输出高度相关的神经元,之间的连接也会被加强。
不幸的是,现在的计算设备当处理不统一的稀疏结构数据的运算时,效率较低。这种差距还在扩大,通过使用稳定改进和经过高度调整的数值库,利用底层CPU或GPU硬件的微小细节,可以实现极快的密集矩阵乘法。non-uniform 稀疏模型需要更复杂的工程和计算设备。卷积网络通常只在特征提取维度使用卷积作为随机、稀疏连接。目前CV地网络结构都很类似,多卷积核、更大的batchsize导致dense computation使用越来越多。
这就提出了一个疑问:是否还存在一个新的,中间步骤,**可以利用filter-level的稀疏性,但同时使用目前的硬件在dense matrices上计算。一些论文中提出,将稀疏矩阵聚集成一个相对稠密的submatrices,这样可能对于稀疏矩阵的乘法有所提升。**可以将类似的想法用在non-uniform的深度学习结构中。
Inception结构开始时评估一个复杂的网络构建算法的随机输出的,这个算法试图逼近上面提到的稀疏结构,并使用现有的dense方法来获得网络的输出。在早期取得了一定效果,但是之后差距越来越大,但是我们发现Inception在定位和目标检测任务中十分有用。但是尽管Inception在CV任务中取得了成功,但是这种结果是不是归功于我们设计的指导原则仍然存疑,需要大量验证。
4.Architectural Details
**Inception结构的主要想法是考虑如何使用现有的dense components来逼近完成实现最佳的稀疏CV网络结构。**请注意,假设平移不变(translation invariance)意味着我们的网络将由卷积构建块构建。我们需要的就是找的最佳的local结构,然后空间上进行重复。Arora等人建议使用一层接一层的结构,每一层分析上一层的相关统计,然后将高相关性的units聚集到一起。这些聚集形成了下一层的units,然后与上一层的units相连接。**我们假设earlier layer上的每个unit与输入图像的某个区域相关,这些units聚集成filter banks。在低层,高相关性的units通常集中在local regions上。因此,我们最后得到了一系列簇(clusters),它们集中在一个区域,并且在下一层可以使用1*1卷积覆盖。**然而,也可能会有较少的空间上稍大的簇,可以使用更大的卷积核cover。为了避免尺寸对齐的问题,目前的Inception结构限制卷积核尺寸为1 * 1、3 * 3、5 * 5,这样更加方便。**这意味着,最后的结构是这些层的组合,它们的输出,级联成单一输出(在channel上叠加),形成了下一阶段的输入。**另外,由于池化操作对目前的CNN成功至关重要,在每阶段增加一个平行的池化路径会有好的效果。(图2a)
所有的这些“Inception modules”一个接一个在上面堆叠,它们的输出的相关性统计必然会不同:**因为更高层捕获的特征更加抽象,它们在空间上的集中度会降低(深层特征在空间上较稀疏)。**这也就意味着3 * 3和5 * 5卷积的比率在更高层的时候要提升。
上面naive模型中一个最大问题就是,在有大量filters的top layer上,即使普通数量的5 * 5卷积核在计算上的花费也太大了,一旦池化单元加入之后,这个问题更加严重,**因为每个卷积的channel数与上一层的输出channel一致,加入池化之后,上一层输出的channel增加。**尽管这种结构可能会找到最佳的稀疏结构,但是不够高效,计算量太大。
因此我们提出了第二种Inception结构,对计算量需求很大的地方进行降维。这是建立在embedding(Embedding描述的是一种功能:数据降维和稠密表示(≈向量化),且通常所指的Embedding是中间的产物,为了方便后面的处理,卷积操作也是embedding)成功的基础上的,即使低维度的embedding也可以包含很多相对大范围的信息。然而embeddings以一种dense、compressed的形式表示信息,更难处理(representation在大多数情况下应该是稀疏的),**因此只有在需要大量合并处理的时候,才使用embedding进行压缩。也就是说,1 * 1卷积在需要很大计算量花费的3 * 3和5 * 5卷积之前用来降维。除了用来降维,1 * 1卷积同样包含了ReLU增加非线性,**最后的模块如图2b所示。
通常,Inception网络由多个上面的模块堆叠而成,部分模块之后接2 * 2,步长为2的最大池化来对网格分辨率减半。由于技术原因(训练效率),刚开始训练时只对高层使用Inception模块,而浅层使用传统卷积,这样更有效,但这不是必要的。我们的网络设计综合考虑到了视觉信息应该在多个尺度被处理然后合并,这样下一stage就可以同时处理不同尺度的抽象特征。
5.GoogLeNet
GoogLeNet指的是我们参加ILSVRC2014比赛使用的模型。表1展示了我们在比赛中所用的最常见的Inception。这个网络(使用不同的image-patch sampling方法)用在了我们7个模型集合中的六个。
所有的卷积,包括Inception内部的,都使用了ReLU。我们网络的感受野是224 * 224的RGB,使用了zero mean(标准化)。“# 3 * 3reduce”以及“#5 * 5reduce”表示降维使用的1 * 1卷积个数,同样之后接ReLU。
整个网络设计考虑到计算效率和实用性,因此测试阶段可以在计算能力受限的单个设备上进行。网络有22层深(考虑到池化层就是27层),总共独立的buliding blocks数大概100。**在分类器之前采用平均池化,与NIN网络一样,但是我们增加了额外的线性层。**线性层使得我们很方便可以将网络应用在其他任务中,我们增加线性层目的主要是方便,而不是追求效果。我们发现,将FC层换成平均池化之后,将top-1准确率提升了0.6%,尽管移除了FC层,dropout仍然很关键。
当网络很深的时候,能否以有效的方式进行反向传播就是关键。浅层网络在此任务上的强大表现表明,网络的中间各层所产生的特征也是非常有辨别力的。==通过对这些中间层之后连接一个辅助分类器,我们期望在low stages就能够进行一定的辨别。==这被认为可以处理梯度消失问题的同时提供正则化。这些分类器采用较小的卷积网络的形式,放在Inception(4a)和(4d)模块的输出之后。在训练过程中,它们的loss也以某个权重被加到total loss中(辅助分类器权值0.3),在测试阶段,这些辅助分类器关闭。后来的控制实验表明,辅助网络的效果相对较小(约0.5%),只需要其中一个即可达到相同的效果。
最后,这个辅助分类器的额外网络结构为:
- 一个5 * 5的平均池化层,步长3,使得(4a)的输出变为4 * 4 * 512,(4d)的输出变为4 * 4 * 528。
- 1 * 1 的卷积层进行降维,128个,后面接ReLU
- 一个FC层,1024维,后接ReLU
- 一个dropout层(0.7)
- 一个带有softmax loss的线性层作为分类器(与主分类器预测同样的1000类,测试时移除)
网络的整体结构如图3所示:
6.Train Methodology
GoogLeNet网络使用DistBelief分布机器学习系统,使用适量模型和数据平行来进行训练的。尽管我们只使用了CPU进行训练,但是一个粗略估计是我们的网络使用非常小的GPUs在一周之内即可收敛,主要限制是内存使用的限制(显存)。我们使用0.9动量的异步SGD,固定学习率(每8个epoch降低4%)。训练时使用Polyak averaging来创建最终模型。
图像采样方法最近几个月一直在变化,已经收敛的模型也又使用其它选项进行训练,有时还结合超参数的改变,比如dropout和学习率。因此,很难得出一个确定的方式来指导图像采样进行训练。有的网络使用较小的crop进行训练,有的使用较大的crop进行训练。**有一种策略在比赛之后被证明很有效,对图片进行8%-100%均匀分布大小采样,长宽比也限制在区间,使用这些crop进行训练。**另外,我们发现Andrew Howard的光度扭曲对于克服训练数据成像条件的过拟合是有用的。
7.ILSVRC2014 Classification Challenge Setup and Results
ILSVRC2014的分类任务包含了从ImageNet选出的1000类,1.2million训练集,50000验证集,100000测试集,通常使用top-5错误率对网络进行评价。我们训练未使用额外数据,除了使用上面提到的训练技巧,为了获得更好的表现,我们在测试时使用了一系列技巧,将在下面介绍。
- 我们分别训练了7种GoogLeNet模型(包括一个更宽的版本),使用它们来得到一个综合的预测结果。这些模型使用相同的初始化和学习率策略进行训练。他们只在采样方法上不同,以及对输入图片的顺序进行了随机打乱。
- 在测试时,我们使用了比AlexNet更加aggressive的裁剪方法,**我们将图像resize到四个尺度,将图像的短边固定像素为256,288,320,352,之后取这个图像的左边、中间、右边的square,对于人像,我们取上、中、下三个square。对于每个square。我们取square的四个角以及中间的224 * 224crop,以及将square resize到224 * 224,以及它们的镜像。也就是说一张图片最后取4 * 3 * 6 * 2=144个crop。**但是这种策略在实际应用时不是必须的,因为在crop数量已经较多的时候,再增加crop数量不会提升很大。
- 多个crop以及分类器最后给出的softmax概率输出平均,得到最后的结果。我们在验证集中尝试了其他的方法,但是没有直接平均效果好。
我们最后竞赛的提交结果是top-5错误率6.67%(在验证集和测试集都取得),得到了第一名。相比于2012、2013的最好方法,我们没有使用额外的数据,并且比他们的错误率小。如表2所示。
我们分析比较了多种测试选择的表现结果,通过改变测试时所用模型数以及crop数,如表3所示。当我们使用一个模型时,我们选择在验证集最低错误率的那个,表中所有的数据都是在验证集上得到的,为了防止在测试集上过拟合。
8.ILSVRC2014 Detection Challenge Setup and Results
检测任务是对200类可能出现的目标,生成bbox,当IoU>0.5时,认为检测成功,额外的检测(没有目标,认为有)认为是假阳性,被惩罚。**与分类任务不同,每张图像可能包含多个目标,也可能没有,而且目标的尺度变化范围很大,**使用mAP作为评价标准。我们的方法与R-CNN类似,但是使用了Inception模型作为区域分类器来对R-CNN方法进行增强。另外,region proposal步骤被改善:通过组合多个selective search的box来得到更高级目标bbox recall。**为了减少假阳性,超像素的尺寸翻倍,这使得SS算法中的proposals数量减半。**我们将来自multi-box的结果中200个region proposals添加过来,总共用了R-CNN的60%数量的proposal,把覆盖范围从92%提升到93%,这使得单个模型的mAP上升了1%。最后我们在对区域进行分类的时候使用6个网络,把结果平均作为输出,使得准确率从40%提升到43.9%。与R-CNN不同,我们没有使用bbox regression,因为准备时间不足。
与2013年比赛结果相比,我们的网络准确率几乎翻倍。在表4中,我们列出了比赛中的主要对手的网络以及主要策略。
在表5中,我们对比了只是用了一个模型的结果,最好表现的模型是Deep Insight,但是令人吃惊地它们的三个模型聚合只提升了0.3点,而我们的网络聚合之后提升很大。
9.Conclusions
我们的结果证明使用现有的dense building block来近似期待的最佳稀疏结构可以在CV任务中提升神经网络的表现。这种方法的主要优点在于,相比更浅、更narrow的结构,这种网络在计算量增加不多的基础上取得了很好的效果增加。
我们的目标检测工作很有竞争力,尽管没有利用context以及bbox regression。这更证明了我们Inception模块的能力。
无论对于分类还是检测任务,与我们差不多的结果都可以由更expensive的具有相似深度宽度的non-Inception-type网络达成。而且,我们的方法证明,使用稀疏结构总体上是可行的。未来的工作可以朝着创建更稀疏、更refined的结构进行,同样,也可以把Inception的想法应用到其他领域。