本文翻译论文为深度学习经典模型之一:Inception-v2,Inception-v3
论文链接:http://arxiv.org/abs/1512.00567v3
摘要:当前趋势下,卷积网络是解决大部分视觉任务的核心部分。自2014年之后,深度卷积网络开始变为主流网络,在很多基准数据集上都取得较大的进展。尽管增加模型大小和计算代价可以立刻得到效果的提升,但是计算效率和模型的参数量(参数越少越好)仍是限制移动视觉和大数据场景应用的关键因素。通过合适的卷积分解方法和有效的正则化方法,本文研究了在增大网络的同时,并尽可能的保证计算效率的最大化。单网络下,我们的方法在ILSVRC2012结果:21.2% top-1和5.6% top-5的误差。4个网络以及多尺度裁剪的情况下,误差分别为17.3%和3.5%。
1. Introduction
2012年ImageNet的冠军获得者-Krizhevsky,他们提出的网络 "AlexNet" 被成功的应用于各个视觉领域,比如目标检测,分割,人体姿态估计,视频分类,目标跟踪以及超分辨率。他们的成功刺激产生新的研究方向--寻找表现更好的卷积神经网络。自2014年后,由于使用更深、更宽的网络,卷积网络的性能也有着巨大的提升。在2014ILSVRC分类挑战中,VGG和GoogLeNet取得很高的分类效果。一个有趣的现象:分类任务中取得较好表现的网络,通常在其它主流任务中也取得较好的表现。也就意味着,深度卷积网络性能的提升可以应用在其它计算机视觉任务中,这些任务有着共同点:它们都依赖学习到的高质量视觉特征(visual features)。而且,卷积网络性能的提升会产生新的应用领域,比如AlexNet features 无法与手工工程相比,比如目标检测中候选框的生成。
尽管VGGNet具有结构简单(分类效果好)的特性,但是计算代价非常高。一方面,GoogLeNet的Inception模块在有限的内存和计算资源下表现良好,比如GoogLeNet只有500万个参数,与AlexNet(6000千万个参数)相比,降低了12倍的参数。VGGNet的参数量比AlexNet多了三倍。
Inception的计算代价远低于VGGNet,并且性能更好。通常情况下,大量数据需要在合理的时间内或者有限的内存资源下处理,这使得Inception网络在处理大数据场景更加灵活,比如在移动视觉场景下。通过专业的方法,合理使用内存或者通过计算技巧优化特定的操作都是有可能消除上述问题。但是,这些方法同样增加了复杂性。更进一步,这些方法也可以用来优化Inception网络,也就进一步扩大了Inception网络与其它网络的差距。
但是,Inception 网络的复杂性使得很难对其作更改。如果网络结构稍微增大,那么大部分计算收益将会立刻消失。而且,GoogLeNet并没有给出网络设计依据的清晰描述。所以,很难将其应用于新的任务场景,并且仍能保证其计算效率。比如,如果实际上必须将一些Inception模块增大,最简单的做法是将卷积核的个数增大一倍,那么会导致计算代价和参数增加四倍。这在实际的场景中是不允许存在的情况,尤其是收益一般的情况下。在论文中,我们将会描述基本的准则和优化的思想,在有效增大网络上具有较强的指导意义。尽管,我们的准则不局限于Inception网络,但是很容易观察到,使用Inception模块构建的网络将具有很大的灵活性,那么也就很自然的克服那些不足。由于Inception模块充分使用维度削减和并行结构,使得结构的改变对周围结构影响的减弱。我们仍需小心这样的操作,需要观察引导准则,保证网络的质量不会降低。
2、General Design Principles
基于不同的卷积网络在大规模数据上的实验,我们总结了几种网络设计准则。在这一点上,准则(Principles)的有效性具有一定的推测性,更多的实验证据来验证其准确度和该领域的有效性是很有必要的。偏离这些准则的约束,会导致网络的性能下降,当然,固定的场景下,避免引起偏差的因素也会有效改善网络。
- 避免特征表达瓶颈,尤其是在网络的初始几层。前向传播可以由输入到分类器或者回归器这样的的有向图来表达,它定义了比较清晰的信息流。我们可以获取流过网络任何部分的信息。设计网络过程中,应该避免对信息的过度压缩。一般来说,网络表达的大小(representation size)应该从输入到输出缓缓降低。理论上,由于网络表达丢失了重要的信息-结构相关性,无法仅仅从维度上获取全部的信息。维度上(dimensionality)仅仅提供了粗糙的信息估计。
- 更高的维度表达更容易获得网络的局部表达。增大网络中每个部分的激活值更容易分辨不同的特征(disentangled features),也就更容易训练网络。即是:相互独立的特征越多,输入的信息就被分解的越彻底,分解的子特征间相关性低,子特征内部相关性高,把相关性强的聚集在了一起会更容易收敛。
- 低维度上的空间聚合使得网络表达能力损失很少。比如,在使用一个3x3卷积之前,降低输入的维度并不会造成较大的影响。之所以这样假设,是因为我们认为相邻单元之间具有强相关性,使用空间聚合的前提下,维度降低后,并不会造成信息损失。假设这些信号很容易被压缩,那么维度衰减甚至会加速网络训练。
- 网络宽度和深度上的平衡。最优的网络应该在每一层滤波器的个数和网络深度之间有个很好的平衡。增大网络宽度和深度会提升网络的表达能力。
尽管这些准则是有意义的,但是如何应用,并提升网络的综合性能,并不是那么直接的。The idea is to use them judiciously in
ambiguous situations only。
3、Factorizing Convolution with Large Filter Size
GoogLeNet最大的收获就是不断的进行维度降低(dimension reduction,降低网络宽度)。在兼顾效率上,可以将其看作是特殊的卷积分解方式。考虑这样一个例子:1x1conv+3x3conv,在视觉网络中,我们期望相邻的卷积输出具有高度相关性。因此,我们认为在卷积聚合(inception模块)之前,可以进行维度降低,并且(维度降低前后)应该有着相似的局部表达能力。
本文中,我们探索其它的卷积分解方式,最大可能的提升计算效率。由于Inception网络是全卷积网络,每一个权重与每一个激活值相乘。因此,任何计算代价上的降低也就意味着参数的降低。那么,合适的卷积分解方式,可以有效的降低参数,进而加速训练。而且,我们也可以使用计算和内存优化的情况下,增大卷积核的大小,但是仍能方便部署单个机器。
3.1、Factorization into smaller convolutions
从计算代价上考虑,更大的卷积核(比如5x5或者7x7)计算代价的增长具有不对称性。比如,5x5滤波器参数量是3x3滤波器参数量的25/9=2.78倍。当然,在网络的前几层,5x5的卷积核可以获得更大的视野范围,以及获取空间信息之间的相关性,所以降低卷积核大小的代价会降低网络的表达能力。当然,我们是不是可以用多层的网络(参数更少)代替5x5卷积层,并且保持输入和输出的大小不变。如果我们放大5x5的卷积计算图,我们可以看到,每一个输出相当于一个在5x5卷积核上滑动的全连接网络,见图1所示:
由于我们试图创建一个视觉网络,很自然地,我们会利用图像平移不变性, 用两层的卷积结构代替全连接模块:第一层是3x3卷积,第二层是连接在第一层的全连接层。因此,滑动第二层,等同与用两个3x3的卷积核代替5x5的卷积核,参考如下图4和图5:
由于相邻卷积层存在共享权重的特性,这种处理明显降低了参数量。为了分析我们期望的计算代价的降低,我们会作一些简化,假设应用与特殊的情况:假设n = am, 也即是,通过一个常量因子改变单元的数量。由于5x5卷积认为是合并的,a应当略为大于1(GoogLeNet大概是1.5)。使用两层的卷积代替5x5卷积层,那么卷积核增大的步骤分为两步:每一步增加的卷积核数量为sqrt(a)。为了简化我们的估计,令a=1(没有增加),如果我们在滑动计算卷积的时候,没有重利用相邻卷积层,那么我们会增加计算的代价。滑动5x5的卷积核,可以被两个3x3卷积核代替(重用相邻计算的激活值)。这种方式下,网络降低了28%的计算量。这种设置上也带来两个疑问:这种替代会影响网络的表达能力吗?如果我们的目标是分解计算的线性部分,是否会建议保留第一层的线性激活性?我们作了几个控制实验,如图2,使用线性的激活值的效果总是差于在每一层分解使用ReLU激活函数,简单的说就是:5x5conv+relu变为3x3conv+relu+3x3conv+relu效果更优于3x3conv+3x3conv+relu。这样增加了空间的变化性,有利于网络的学习。
3.2、Spatial Factorization into Asymmetric Convolutions
上述的结果表明,由于任何大的卷积核都可以分解为3x3的卷积核,那么大于3x3的滤波器似乎没有什么意义。那么,我们仍然有一个疑问,是否需要将大卷积核分解为更小的卷积核,比如2x2的卷积核。但是,实时证明,非对称卷积核由于小的2x2卷积核,比如Nx1。 例如,3x1conv + 1x3conv等价于一个3x3conv的视野范围,见图3;在输入和输出等同的情况下,参数降低33%,。作为对比,将3x3卷积核分解为两个2x2卷积核,只是降低了11%.
理论上,往更深的讨论,我们可以分解大小为NxN卷积核为1xN以及Nx1,N越大,参数量更少,节约更多的计算资源,见图6,实际中,在网络的前几层分解并不会有很好的效果,在中等feature map大小的图上有更好的效果(比如m x m 特征图,m范围在12-20之间)。这种层面上,1x7conv+7x1conv会有更好的结果。
4、Utility of Auxiliary Classifiers
GoogLeNet引入了辅助分类器的概念,它可以提高网络的收敛能力。最初的动机是为了将有用的梯度反向传递到网络低层,也是为了解决梯度消失的问题,保证网络训练正常进行。Lee表明,辅助分类器促进网络训练的稳定以及更好的收敛。有趣的是,我们发现辅助分类器并不能保证收敛更快:实验表明,有无辅助分类器,训练过程基本保持一致。在训练的最后阶段,有辅助分类器略微高于无辅助分类器的网络。
GoogLeNet在不同的阶段使用了两个辅助分类器,移除网络低层的辅助分类器并不会对网络的最终性能有影响。根据当时实验的观察,最初GoogLeNet的辅助分支有助于低层特征学习的假设可能不太合适。相反地,如果在辅助分类器添加BN或者添加Dropout后,主分类器表现更好,所以我们认为辅助分类器更像是正则化的作用。也进一步推测,BN更像是个正则项。
5、Efficient Grid Size Reduction
传统上,卷积网络使用池化操作降低特征图的大小。为了避免表达瓶颈(representational bottleneck),在使用最大或者均值池化,先将其维度扩大。比如,假设有k个滤波器,大小为dxd,如果要得到d/2 x d/2的大小,个数为2k的滤波器,我们首先要计算滑动为1,个数为2k的卷积运算,然后添加池化操作。那么额外的计算代价就是卷积的操作,总共操作为(d*d*k)*2*k。一个可能性是:pooling+conv,那么总共操作为(d/2*d/2*k)*2k,降低了1/4的代价。但是,这会将表达维度降低为(d/2*d/2)*k,可能会导致更低的网络表达能力,见图9;那么另一种既可以降低计算代价,又可以消除表达瓶颈的操作,见图10;我们可以使用两个并行的,滑动为2的模块:P和C。P是Pool层(最大或者平均),他们滑动距离均为2,最终进行合并。
6、Inception-v2
基于上面的讨论,我们提出了新的网络架构,网络的具体见表1。值得注意的是,根据3.1的讨论,我们将7x7卷积分解为3个3x3卷积。对于Inception模块,我们是使用了3个传统的Inception模块,输入大小为35x35,288(见表1),维度被降为17*17,大小为768(见Section 5)。然后紧跟5个分解的Inception模块,见图5。参考图10,将其维度降为8x8x1280。这样将两个Inception模块连接为2048的数量。详细的Inception结构信息,在补充材料中(model.txt)。但是,我们观察到,如同准则2描述的,网络的性能相对是稳定的。尽管我们的网络有42层,但是计算代价比GoogLeNet2.5倍,仍比VGG效率高。
7、Model Regularization via Label Smoothing
标签平滑正则化,就是将one hot 标签 [0, 0, 1] 变为 [0.0333, 0.0333, 0.9333]的形式,可以提高网络的泛化能力;
参考链接1:https://blog.csdn.net/sinat_36618660/article/details/100166957
参考链接2:https://blog.csdn.net/neveer/article/details/91646657
8、Training Methodology
我们最初训练模型使用tesnsorflow,优化器为stochastic gradient,在50个机器上分布式训练,batch size 为32,训练100epochs。最好的模型使用的是RMSProp,decay为0.9。初始学习率为0.045,每两轮衰减一次,指数衰减为0.94。此外,我们还对大于2的梯度进行裁剪,这对于网络稳定训练很有用。
9、Performance on Lower Resolution Input
视觉网络的一个普遍的使用场景是对检测后的物体进行分类,例如在Multibox的场景下。这就需要分析图像中包含的较小目标图像块。这样的任务需要判断某个图像块是否与某个目标相关,或者该目标的类别。面临的主要挑战就是目标较小,分辨率较小。这就给我们提出个问题,如何处理低分辨率的输入。
通常的处理方式:模型使用更高的感受区域,那么结果也会更好。但是,辨别提升第一层感受野的分辨率的影响和更大的模型的计算效率的影响是很重要的。如果仅仅是改变输入的分辨率,而没有考虑进一步的适应模型,那么我们就是用计算廉价的模型来解决复杂的任务。当然,由于上述的解决方案节约了计算代价,因此是很宽松的。为了更精确的评估方案,需要更详细的分析模型细节。那么问题就是:在保持计算代价不变的情况下,如何最大限度的提高分辨率。简单的做法是,降低前两层的滑动距离,或者移除第一层卷积。
为了达到这个目的,作了三种实验:
- 299 x 299感受野,stride为2,第一层+maxpool;
- 151 x 151感受野,stride为1,第一层+maxpool;
- 79 x 79感受野,stride为1,第一层,没有pooling;
上述的网络几乎具有相同的计算代价。尽管第三个网络的计算代价稍微低点,池化层的计算代价几乎可以忽略不计。表2给出了三个网络的最终结果。尽管低分辨率的网络训练时间稍长,但是其精度也基本达到了高分辨率的精度。
10、Experiments Results and Comparisons
表3给出了Inception-v2的实验结果。每一行的Inception-v2显示了逐渐累加的变化。标签平滑如Section7描述。分解7x7卷积包含一个变化:分解第一层的7x7卷积为3个3x3的卷积序列。BN-auxiliary 辅助分类器添加BN,不仅仅是卷积添加BN。表3的最后一行是Inception-v3,以及给出了多尺度裁剪和模型叠加。
11、论文核心要点解析
卷积核分解:本文的核心点,进一步提升计算效率和网络分类精度。
卷积分解方式1:将大的卷积核分解为多个小的卷积核(5x5conv分解为2个3x3卷积核,见下图)
卷积分解方式2:非对称分解(7x7分解为1x7conv+7x1conv),作者通过测试发现,非对称卷积用在网络中靠中间的层级才有较好的效果(特别是feature map的大小在12x12~20x20之间)
卷积分解方式3:避免pool带来的表达能力降低,图9中,左边的结构(先使用了Pool)会导致网络表达能力降低,右边的结构会导致计算代价非常高。图10中,通过并行处理的方式,同时降低计算复杂度,同时避免了网络表达瓶颈。
正则化方法:
- 标签平滑,提高网络泛化能力,见Section7;
- 辅助分类器:作者认为,GoogLeNet中的辅助分类具有加速收敛的作用;但是在本文中,作者纠正了辅助分类器的作用,认为:靠近输入辅助分类器(加不加没有影响),但是靠近输出的辅助分类器(加上BN后)可以起到正则化的作用。
网络结构:
Inception-v2:在下面的表中,三个Inception模块分别对应上述的图5,图6,图7,不同阶段使用不同的Inception模块;
Inception-v3:在Inception-v2的基础上,辅助分类器添加BN;