Abstract
近年来,机器视觉图像识别领域取得了很大的突破,非常深的卷积神经网络为此立下首功。一个典型的例子是Inception结构在一个相对较低的计算代价下取得了较好的性能。ILSVRC 2015 竞赛中残差连接和传统网络结构相结合取得了state-of-the-art的性能,几乎和InceptionV3网络相近。因此我们自然而然的想到,把Inception结构和残差连接进行结合,会不会更好?作者通过实验证明,残差连接可以显著加速Inception网络的训练,同时加入了残差连接的Inception网络比计算量相近的没有残差连接的Inception网络性能略好一点点。作者在论文中提出了几个新的流线型网络结构,包括有残差连接的和没有残差连接的Inception网络,这些网络的变种在ILSVRC 2012 分类任务上显著改善了单框架识别性能。作者还进一步证明了合适的**值缩放比例如何稳定较宽residual Inception的训练。使用3个Inception-ResNet-V2模型和1个InceptionV4模型进行集成,作者在ImageNet 分类任务的测试集上取得了3.08% top-5 error。
一、Introduction
自从Krizhevsky使用AlexNet赢得2012 ImageNet 竞赛,AlexNet被成功应用在很多机器视觉领域,如目标检测、分割、人体姿态识别、视频分类、目标跟踪、超分辨率。这些例子只是深度卷积网络成功应用的应用场景中的一部分。
在本篇论文中作者研究了两种思想的结合:何恺明的Deep residual learning for image recognition论文中提出的残差连接和另一篇论文Rethinking the inception architecture for computer vision中提出的InceptionV3。在论文Deep residual learning for image recognition中讨论了残差连接对于训练非常深的网络很重要。因为Inception网络通常都很深,在Inception结构的连接阶段使用残差连接是很自然的,这使新的Inception网络在享受到残差方法带来的好处的同时保留计算效率。
除了把InceptionV3和残差连接进行直接的前向传播集成,作者也研究了是否可以通过让Inception变得更宽、更深来使其更有效。出于这个目的,作者设计了结构更整齐、简单,比InceptionV3拥有更多Inception模块的InceptionV4。从历史的观点来看,InceptionV3继承了其他早期Inception版本的包袱,技术上的约束主要来自使用DistBelief分布式训练时需要分割模型。现在,因为移植到了TensorFlow,这些约束已经不是问题,作者可以更加简洁的设计网络结构。在本文的第三部分会详细介绍简化后的模型结构。
在论文中,作者将InceptionV3、InceptionV4两个模型和计算量相近的Inception-ResNet模型进行了比较。这些Inception-ResNet模型是在约束参数量和计算量与不加入残差连接的InceptionV3、InceptionV4相近的前提下人工挑选的。事实上,作者也测试了更大更宽的Inception-ResNet网络,但是在ImageNet图像分类数据集上表现出的性能没有大的变化。
论文最后的实验报告是对所有最好性能模型的集成模型的评估。InceptionV4和Inception-ResNet-V2的性能相近,在ImageNet 验证集上的性能都超过了其他state-of-the-art的单模型的精度。作者想把这些state-of-the-art的模型结合起来,看下集成后的模型精度能在ImageNet取得怎样的突破。让人吃惊的是,单模型精度的提高并没有给集成后的模型带来相近的精度提高。虽然如此,集成了4个模型的集成模型在验证集上依然达到了据作者当时所知的最高精度,top-5 error 降低到了3.1%。
在论文的最后一部分,作者研究了分类错误的图像,总结了模型的集成没有很好的处理数据集中标记的噪声,针对预测还有改进的空间。
二、Related Work
卷积网络在Krizhevsky赢得ImageNet 2012后变得越来越流行,在其发展历程上有一些突破性的里程碑,包括M. Lin提出的Network in network,Simonyan提出的VGG,Szegedy提出的GoogLeNet (InceptionV1),Ioffe提出的加入BN的InceptionV2,Szegedy提出的使用因式分解改进网络的InceptionV3和何恺明提出的残差连接。Deep residual learning for image recognition论文中针对在图像识别尤其是目标检测领域中利用附加的融合后的残差信号的好处给出了令人信服的理论和实验依据。何恺明等作者讨论了残差连接对于训练非常深的卷积模型的内在必须性。但是本论文作者的研究结果并不支持这一观点,起码在图像识别领域如此。不过,可能需要在更深的网络结构中进行更多的研究来理解残差连接所带来的真正有益的方面。在实验部分,作者证明了不用残差连接来训练一个具有竞争性的很深的网络并不是很难。但是利用残差连接可以显著的提高训练速度,在何恺明的论文中这是一个重要的论据。
三、Architectural Choices
3.1 Pure Inception blocks
以前的Inception模型训练是以一种分割的方式进行的,为了能够在内存中恰好装下模型,模型的每份复制被分割成多个子网络。Inception的结构是高度可调的,很多层的滤波器的数量的改变很可能不影响整个训练好的网络的质量。为了优化训练速度,以前训练Inception模型的时候要小心翼翼的调整每一层的尺寸来平衡各个不同的子网络的计算量。在使用TensorFlow之后,我们不再需要在训练时分割模型的每份复制。这要得益于通过仔细考虑在梯度计算时哪些tensor是需要的,并构造计算来减少这些tensor的数量所实现的反向传播时内存使用的优化。以前,我们在改变网络结构时相对保守,限制修改孤立的网络组件以保证剩余网络的稳定。不简化之前的选择导致网络看起来比实际需要的样子显得更复杂。在新的实验中,针对InceptionV4 作者决定摆脱这种不必要的负担,对Inception模块每个特征图的尺寸进行了统一。图9是整个InceptionV4的网络结构,图3、4、5、6、7、8是网络中各个组件的细节。所有没有标记“V”的卷积层使用same-padded使输出特征图的尺寸和输入一致。标记“V”的卷积层使用valid padded,即卷积层的输入和上一层的输出完全相同,并且卷积层的输出的特征图的尺寸会响应的减小。
3.2 Residual Inception Blocks
针对加入残差连接版本的Inception网络,作者没有直接使用原始的Inception模块,而是用了计算代价更低的简化版本。每个Inception模块的后面都加了一个不带**函数的1 × 1的卷积层,通过1 × 1的卷积层的卷积核数量来补偿Inception模块带来的通道损失,使Inception模块输出的维度可以匹配Inception模块输入的维度从而进行残差连接。
作者尝试了几种不同版本的引入残差连接的Inception网络,论文里只给出了两个版本的细节,分别是和InceptionV3的计算量相近的Inception-ResNet-v1以及和InceptionV4的计算量相近的Inception-ResNet-v2。图15是这两种网络的大致网络结构,和图中不太一致的是Inception-ResNet-v2的Inception-ResNet-A模块重复了10次;Inception-ResNet-B模块重复了20次;Inception-ResNet-C模块重复了9次之后又加了一个不带**函数,
还有一点需要注意的是,加入了残差连接的Inception网络没有对所有卷积层的输出都使用BN。虽然对所有卷积层的输出都使用BN规范化是有帮助的,但是GPU内存的开销会增大。在一个GPU上就能够训练整个模型的复制的前提下,每个Inception后新加的补偿通道损失的1 × 1的卷积层的输出没有使用BN进行规范化,节省下的GPU内存用来增加Inception模块的数量,这是作者再三权衡之后采取的方案。
3.3 Scaling of the Residuals
作者在训练模型的时候发现了一个问题,如果卷积核的数量超过1000,加入残差连接的Inception模型变得很不稳定,在训练的早期模型会死亡,即在平均池化层前面的最后一层的输出会在上万次iterations后只输出0。无论降低学习率或者是对这一层加入额外的BN都不能阻止模型死亡。
作者发现,在残差连接前以一定比例线性降低Inception模块的输出可以稳定训练。这个比例参数通常选择在0.1到0.3之间。如图20所示。
何恺明在残差网络的论文中有提到在很深的残差网络训练时出现过类似的不稳定,他的解决方案是把训练分成2个阶段,第一个阶段是warm-up阶段,使用一个非常低的学习率进行训练,然后在第二阶段用一个高学习率训练。作者发现,如果卷积核的数量非常多,即便用低到0.00001的学习率也不能有效的解决这个问题,而且第二阶段用高学习率训练有可能毁掉warm-up阶段的效果。作者发现对残差进行线性缩小更可靠一些,虽然这种线性缩小不是严格必须的,但是确实对稳定训练有帮助,退一步说,起码不会降低最终的模型精度。
四、Training Methodology
作者训练网络时使用的随机梯度下降算法,使用TensorFlow在20个NVidia Kepler GPU进行分布式训练。实验早期使用decay为0.9的momentum,但是最佳实验结果是用decay=0.9,ε=1.0的RMSProp算法得到的。作者使用的初始学习率是0.045,每2个epochs进行0.94的指数衰减。模型的评估是在训练时持续进行的。
五、Experimental Results
作者首先忽略了验证集中1700个在blacklisted中的bbox标注质量很差的图像,得到一个验证集的子集,在该子集上观察了四种模型的top-1和top-5的validation-error变化。用执行了本来应该只在准备CLSLOC benchmark时才用到的忽略黑名单中的图像的操作后得到的结果和其他报告(包括作者团队的早期报告)中的结果相比较有点不太具有可比性,因为结果会更乐观。模型评估结果的区别在top-1 error上约有0.3%,在top-5 error上约有0.15%。因为在比较模型评估结果时,这些差异是持续存在的,所有作者认为这种曲线间的比较还是公平的。
作者还在包含5万张图像的完整验证集上对模型进行了multi-crop评估,也对模型做了集成进行评估。最终的多个模型集成得到的模型在测试集上进行了预测,将最终结果提交到ILSVRC测试服务来验证模型没有over-fitting。作者着重强调了最终的集成模型的验证只做了一次,而且在之前一年也只在ILSVRC测试服务上提交了两次结果,一次是为了BN-Inception的paper,一次是ILSVR-2015 CLSLOC竞赛时。因此作者相信最终的测试集的结果能够真实的评估模型的性能。
最后,作者对4种模型进行了比较。
表2是单模型的单次crop评估结果:
表3是单模型的10/12 crops的评估结果:
表4是ResNet的dense crops评估结果和Inception变种模型的144 crops评估结果:
表5是模型集成后的评估结果,其中ResNet的集成用的dense crops评估结果,Inception变种模型的集成用的144 crops评估结果:
Conclusions
作者在论文中提出了3中网络结构:
- Inception-ResNet-v1:一种既有Inception模块又有残差连接的和InceptionV3计算量相近的网络。
- Inception-ResNet-v2:一种既有Inception模块又有残差连接的和InceptionV4计算量相近的网络,显著提高了识别性能。
- InceptionV4:一种新的纯净的没有残差连接的Inception网络,性能和Inception-ResNet-v2相近。
作者还研究了怎么在Inception网络中加入残差连接来显著的提升训练速度。
最终InceptionV4和Inception-ResNet-v2都通过增大模型尺寸得到了超越以前网络的识别精度。