1. 第一作者:Kaiming He
2. 发表年份:2015
3. 发表期刊:PAMI
4. 关键词:CNN、金字塔池化、分类、检测、深度网络
5. 探索动机:目前流行的CNN都需要固定尺寸的输入图片,所以基本上都是通过裁剪或形变先将图像缩放到固定尺寸。这种处理方式可能会导致:剪裁的图片可能不包含整个物体,导致物体形变导致识别受到影响。当物体大小改变时,预定义的比例可能不适用物体的变化。
6. 工作目标:是否可以提出一个结构来改变对输入图像尺寸的限制?
7. 核心思想:把经典的金字塔池化结构Spatial Pyramid Pooling引入CNN中,从而使CNN可以处理任意尺寸的图片。SPP有几个显着的特性:
8. 实现方法:CNN结构通常是CONV + POOL + Fully-connected,只有最后面的fully-connected要求输入size固定,因此可以在最后一个CONV/Pool和fully-connected之间加上一个SPP layer。SPP用三个尺寸不同的池化核来做池化操作,会将被池化的那层分成多个部分,然后每个部分进行池化操作,例如4*4就是指不管上层大小多大,分成44*个小格子大小,然后对每个格子内的特征图做池化,如果是最大池化则是取这个区域内的最大值,然后组成16个特征向量。接着计算虽有层,得到4*4+2*2+1*1=21,于是不管你的输入是多大,SPP在每个通道上都会提取到21维的特征向量。
9. 实验结果:在ImageNet 2012数据集中,SPP-net提高了各种CNN架构的准确性。在Pascal VOC 2007和Caltech101数据集上,SPP-net使用单一的全图像表示实现了最先进的分类结果,没有微调。SPP-net在目标检测方面,在Pascal VOC 2007数据集上,达到相同或更好的准确率的情况下,计算卷积特征比R-CNN方法快30-170倍(整体快 24-64 倍)。在2014年ImageNet大规模视觉识别挑战赛(ILSVRC)中,在所有38个团队中,在目标检测中排名第2,在图像分类中排名第3。
10.论文下载:
https://arxiv.org/pdf/1406.4729.pdf
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
摘要
当前深度卷积神经网络输入的都是尺寸固定(比如224×224)的图像。这种人为的需要,降低了对任意尺寸/比例的图像或子图像的识别精度。在本文中,我们为网络配备了另一种池化策略——“空间金字塔池化”,以消除上述限制。这种称为SPP-net的新网络结构能够生成固定大小的表示(representation)而不用考虑输入图像的尺寸或比例。金字塔池对物体变形也很鲁棒。由于以上优点,总体上我们可以改进所有基于 CNN的图像分类的方法。在ImageNet 2012数据集中,我们证明了SPP-net提高了各种CNN架构的准确性,尽管它们的设计不同。在Pascal VOC 2007和Caltech101数据集上,SPP-net使用单一的全图像表示实现了最先进的分类结果,没有微调。SPP-net在目标检测上也表现突出。使用SPP-net,我们只计算一次整个图像的特征图,然后对任意尺寸的区域(子图像)进行特征池化,以产生一个固定尺寸的表示用于训练检测器。这个方法避免了反复计算卷积特征。在处理测试图像时,我们的方法在Pascal VOC 2007数据集上,达到相同或更好的准确率的情况下,计算卷积特征比R-CNN方法快30-170倍(整体快 24-64 倍)。在2014年ImageNet大规模视觉识别挑战赛(ILSVRC)中,我们的方法在所有38个团队中,在目标检测中排名第2,在图像分类中排名第3。本文还介绍了本次比赛的改进。
1. 介绍
我们正在目睹计算机视觉领域经历飞速、变革性的突破,这主要得益于深度卷积神经网络(CNNs)和大规模的训练数据集的出现。近期深度网络在图像分类、目标检测和其他识别任务,甚至很多非识别类的任务上都表现出了明显的性能提升。
然而,在CNN的训练和测试都存在一个技术问题:这些流行的CNNs都需要输入的图像尺寸是固定的(比如224×224),这限制了输入图像的长宽比和缩放尺度。在应用于任意尺寸的图像时,当前的方法倾向于通过裁剪或形变先将图像缩放到固定尺寸,如图1(上)所示。但裁剪的区域不包含整个目标,而形变会导致不必要的几何失真。由于内容丢失或失真,识别精度可能会受到影响。此外,当目标比例变化时,预定义的比例可能会不适合。修复输入图像的大小会忽略比例的问题。
图1所示。上:裁剪或形变以适应固定的尺寸。中:传统的CNN。下:我们的空间金字塔池网络结构。
那么为什么CNNs需要一个固定的输入尺寸呢?CNN主要由两部分组成:卷积层和后面的全连接层。卷积层通过滑窗的方式进行计算,并输出表示激活函数的空间排布的特征图(图2)。事实上,卷积层并不需要固定的图像尺寸,就可以生成任意大小的特征图。另一方面,根据定义,全连接层则需要固定的尺寸/长度的输入。因此固定尺寸的约束仅来源于全连接层,也是在网络的最后阶段。
本文引入一种空间金字塔池化(SPP)层,以解除固定尺寸对网络的约束。具体来说,我们在最后一个卷积层的后面添加了一个SPP层。SPP层将特征池化并生成固定长度的输出,然后将其输入全连接层(或其他分类器)。换句话说,我们在网络结构的更深阶段(卷积层和全连接层之间)将一些信息“聚合”,可以避免一开始就进行裁剪或形变操作。图1(下)展示了引入SPP层后网络结构的变化。我们将这种新型的网络结构称为SPP-net。
我们认为,更深层次的聚合在生物上更合理,更符合我们大脑中的分层信息处理。当一个物体进入我们的视野时,更为合理的是我们的大脑将其视为一个整体而不是一开始就将其裁剪成几个“视图”。同样,我们的大脑不太可能将所有候选目标形变成固定大小来检测/定位它们。我们的大脑更有可能通过聚合来自前几层已经深度处理的信息,在更深层处理任意形状的物体。
空间金字塔池化(通常称为空间金字塔匹配或SPM),作为词袋(BoW)模型的扩展,是计算机视觉中最成功的方法之一。它将图像划分为从精细到粗糙的级别,并聚合其中的局部特征。在CNN兴起之前,SPP长期以来一直是分类和检测的领先的冠军系统的关键组成部分。然而,SPP并有被运用到CNN中。值得注意的是,对深度CNNs而言,SPP有几个显着的特性:1)SPP 能够在输入尺寸任意的情况下生成固定长度的输出,而之前的深度网络不能使用滑动窗口池;2)SPP使用了多级别的空间块(bin),而滑动窗口池化只使用单个窗口尺寸。多级池化已被证明对物体形变具有鲁棒性;3)由于输入尺寸的灵活性,SPP可以池化从各种尺度提取出来的特征。通过实验,我们证明了所有这些因素都提高了深度网络的识别精度。
SPP-net不仅在测试阶段可以从任意大小的图像/窗口生成表示,也允许在训练阶段的输入各种尺寸和缩放尺度的图像。使用各种尺寸的图像进行训练增加了尺度不变性并减少了过拟合。我们开发了一个简单的多尺度训练方法。为了实现一个能够接受各种输入尺寸的单一网络,我们用固定输入尺寸的训练多个网络,这些网络共享权重,然后用这些网络再近似表示单一网络。在每个epoch中,我们给定一个的输入尺寸进行网络训练,然后在下一个epoch再切换到另一个尺寸。实验表明,这种多尺度训练和传统的单一尺度训练一样可以收敛,并且能达到更好的测试准确性。
SPP的优势与特定的CNN设计是正交的。通过在ImageNet2012数据集上进行一系列控制变量的实验,我们证明了与没有SPP的对应网络相比,SPP对四种不同的开源CNN结构都有提升。这些结构有不同的数量/尺寸的卷积核、步长、深度或其他的设计。因此,我们有理由推测SPP可以改进更多复杂的(更大、更深)的卷积架构。在Caltech101和Pascal VOC 2007数据集上,SPP-net仅使用单个全图像表示并且没有调优,就做到了最好的分类结果。
在目标检测方面,SPP-net也表现优异。目前目标检测的领先方法是R-CNN[7],候选窗口的特征通过深度神经网络进行提取。此方法在VOC和ImageNet数据集上都表现出了出色的检测准确率。但是R-CNN中的特征计算非常耗时,因为它对每张图片中的上千个形变后的区域的像素反复调用CNN。本文中,我们展示了只需要在整张图像上运行一次卷积层(无论窗口数量如何),然后通过SPP-net在特征图上提取特征。这种方法比 R-CNN 缩减了上百倍的耗时。注意的是,在特征图(而不是图像区域)上训练/运行检测器实际上是更受欢迎的想法。但SPP-net延续了深度CNN特征图的优势,也结合了SPP兼容任意窗口大小的灵活性,所以实现了出色的精度和效率。在我们的实验中,基于SPP-net的系统(建立在R-CNN流水线上)比R-CNN计算特征要快24-120倍,而精度更高。结合最新的快速建议方法EdgeBoxes,我们的系统达到了每张图片处理0.5s的速度(全部步骤)。这使得我们的方法在实际应用变得更加实用。
该论文的初步版本已在ECCV 2014上发表。基于这项工作,我们参加了ILSVRC 2014的比赛。在38个团队中,取得了物体检测第2名和图像分类第3名的成绩(均仅提供数据轨道)。针对ILSVRC 2014我们也做了很多修改。我们表明,与无SPP的网络相比,SPP 网络可以让各种网络更深、更大(第3.1.2-3.1.4节)。此外,在检测框架的驱动下,我们发现借助灵活定位/尺寸的窗口(第3.1.5节)对特征图进行多视角测试可以显著提高分类准确度。本文对这些改动做了更加详细的说明。
我们将代码放在了http://research.microsoft.com/en-us/um/people/kahe/以便大家研究。
2. 基于空间金字塔池化的深度网络
2.1 卷积层和特征图
在考虑颇受欢迎的七层结构。前五层是卷积层,其中一些后面跟着池化层。因为使用滑动窗口,从某种意义上说这些池化层也可以认为是“卷积”。最后两层是全连接的,跟着一个N通道的softmax作为输出,其中N表示类别的数量。
上述的深度网络需要输入固定尺寸的图像。然而,我们发现仅仅是因为全连接层需要固定长度向量作为输入才需要固定图像尺寸。另一方面,卷积层可以接收任意大小的输入。卷积层使用滑动的卷积核,它们的输出与输入基本保持了同样的比例关系。这些输出被称为特征图——它们不仅涉及响应的强度,还包括空间位置。
在图2中,我们将一些特征图进行可视化。这些特征图由conv5层的卷积核生成。图2(c)显示在ImageNet数据集中这些卷积核最强的激活图像。可以看到卷积核能够被一些语义信息激活。例如,第55个过滤器(图2,左下)被圆形激活最大;第66层(图2,右上)被^形状激活;第118个过滤器(图2,右下)被v形状激活。这些输入图像中的形状会激活相应位置的特征图(图2中的箭头)。
值得注意的是,图2中生成的特征图并没有固定的输入尺寸。深度卷积层生成的特征图和传统方法生成的特征图很相似。这些传统方法中,SIFT向量或图像块被密集地提取,再通过矢量量化,稀疏编码或Fisher核函数进行编码。这些编码后的特征构成了特征图,然后通过词袋(BoW)或空间金字塔进行池化。类似地,深度卷积的特征也可以用同样的方式池化。
图2.特征图的可视化。(a) Pascal VOC 2007中的两张图像。(b) conv5中一些卷积核的特征图。箭头表示最强的响应及其在图像中的相应位置。(c) 相应卷积核具有最强响应的 ImageNet图像。绿色矩形标记最强反应的感受野。
2.2 空间金字塔池化层
卷积层接收任意大小的输入,但他们的输出也是各种尺寸。分类器(SVM/softmax)或者全连接层需要输入固定大小的向量。通过使用词袋方法,该方法同时池化特征,可以生成这种向量。空间金字塔池化改进了BoW,以便在局部空间块(local spatial bins)池化时保留空间信息。这些空间块的尺寸和图像的尺寸成比例,这样块的数量就是固定的,而与图像大小无关。而深度网络的滑窗数量则依赖于输入图像的尺寸。这与前述的深度网络的滑动窗口池化形成对比,其中滑动窗口的数量取决于输入大小。
为了让深度网络适应任意尺寸的图像输入,我们用一个空间金字塔池化层替换了最后一个池化层(例如,pool5,在最后一个卷积层之后)。图3说明了这种方法。在每个空间块中,我们池化每个卷积核的响应(本文中采用了最大池化法)。空间金字塔池化的输出是一个kM维向量,M代表块的数量,k表示最后一层卷积层的卷积核的数量。这个固定维度的向量就是全连接层的输入。
图3.具有空间金字塔池化层的网络结构。这里256是conv5层的卷积核个数,conv5是最后一个卷积层。
有了空间金字塔池化,输入图像就可以是任意尺寸了。不但允许任意纵横比,而且支持任意缩放尺度。我们也可以将输入图像缩放到任意尺度(例如min(w;h)=180,224,…),并且用于同一个深度网络。当输入图像尺度不同时,带有相同大小的卷积核的网络就可以在不同的尺度上抽取特征。尺度在传统方法中十分重要,比如SIFT向量就经常在多个尺度上进行提取。接下来我们会证明多尺度在深度网络的准确性方面的重要作用。
有趣的是,最粗糙的金字塔级别有一个覆盖整个图像的块。这实际上就是一个“全局池化”操作,有很多正在进行的工作也在研究它。在[31]、[32]中,使用全局平均池化来减小模型大小并减少过拟合;在[33]中,放在全连接层之后的全局平均池化被用于提高测试阶段的准确性;在[34]中,全局最大池化用于弱监督目标识别。全局池化操作相当于传统的词袋方法。
2.3 网络的训练
理论上讲,无论输入图像大小,上述网络结构可以用标准的反向传播进行训练。但在实践中,GPU的实现(例如cuda-convnet和Caffe)更适合运行固定输入的图像。接下来,我们将介绍我们的训练方法,该方法能够在保持空间金字塔池化的同时充分利用GPU实现的优势。
2.3.1 单一尺寸训练
和之前的工作一样,我们首先考虑接收裁剪成224×224图像的网络。裁剪的目的是数据增强。对于给定尺寸的图像,我们先计算用于空间金字塔池化的块的大小。试想conv5生成的特征图尺寸是a * a(也就是13×13)。对于n * n块的金字塔层级,我们将此池化级别设置为滑动窗口池化,其中窗口大小为win =上取整[a/n],步幅str =下取整[a/n]. 对于l层金字塔,我们实现l个这样的层。然后将l个层的输出连接后输出给全连接层fc6。图4展示了一个cuda-convnet方式的3层金字塔的样例配置 (3×3, 2×2, 1×1)。
我们单尺寸训练的主要目的是实现多级池化行为。实验表明,这是提高精度的原因之一。
图 4. cuda-convnet方式的三级金字塔池示例。sizeX表示池化窗口的大小。此配置适用于 conv5 的特征图大小为13*13的网络,因此pool3*3、pool2*2 和 pool1*1层将分别有3 * 3、2*2和1*1个块。
2.3.2 多尺寸训练
包含SPP的网络有望应用于任意尺寸的图像。为了解决不同图像尺寸的训练问题,我们考虑一些预设好的尺寸。我们先考虑这两个尺寸:180*180和224*224。我们使用缩放而不是裁剪,将上文提到的224×224的区域图像变成180×180大小。这样,不同尺度的区域仅仅是分辨率上的不同,而不是内容和布局上的不同。为了让网络接受180*180的输入图片,我们实现另一个固定尺寸(180*180)的网络。本例中,conv5输出的特征图尺寸是a * a=10*10。我们仍然使用win=上取整[a/n],str=下取整[a/n],实现每个金字塔池化层。这个180*180网络的空间金字塔层的输出的大小就和224网络的一样了。这样,这个180网络的每一层就和224网络的每一层拥有一样的参数了。换句话说,训练过程中,我们通过让两个固定尺寸的网络共享参数的方式实现了可以输入不同尺寸的SPP-net。
为了降低从一个网络(比如224)切换到另一个网络(比如180)的开销,我们在一个网络上训练一个完整的epoch,然后切换到另一个网络(权重保留)完成下一个完整的epoch的训练。依此往复。在实验中,我们发现多尺寸训练的收敛速度和上述单尺寸差不多。
多尺寸训练的主要目的是在保证已经充分利用现在被较好优化的固定尺寸网络实现的同时,模拟不同的输入尺寸。除了上述两个尺度的实现,我们也在每个epoch中测试了不同的s * s的输入,s是从180到224之间随机均匀选取的。在后面的实验部分我们将报告这两种变体的实验结果。
需要注意的是,上述的单尺寸或多尺寸解决方法只用于训练。在测试阶段,是直接对各种尺寸的图像应用SPP-net的。
3 用于图像分类的SPP-NET
3.1 ImageNet 2012分类实验
我们在Image2012训练集的1000类别上训练了网络。我们的训练算法遵循了先前工作的实践。调整图像的大小,使较小的尺寸为 256,再从整个图像的中间或者四个角裁出尺寸为224*224的图像。通过水平翻转和颜色变换进行数据增强。Dropout用于两个全连接层。
学习率从0.01开始,当错误率稳定时则除以 10(两倍)。我们的实现基于cuda-convnet和Caffe的公开的可用代码。本文中所有网络都是在单个GeForceGTX TitanGPU(6G内存)耗时二到四周训练的。
3.1.1 基准网络结构
SPP的优势是和使用的卷积神经网络无关。我们研究了四种不同的已经公布的网络结构(或其修改),并且展示了 SPP 提高了所有这些架构的准确性。基准结构如表1,并简单介绍如下:
在基准模型中,最后的卷积层之后的池化层会产生6*6的特征图,后面跟着两个4096维度的全连接层,和一个1000类别的softmax层。这些基准网络的情况参见表2(a),针对ZF-5我们训练了70个epoch,而其他的训练了90个epoch。ZF-5的表现比[4]中报告的要好。这种增益是因为角落裁剪来自整个图像,[36]中也提到了这点。
表1:网络架构:卷积核数量*卷积核大小(例如,96*7*7)、卷积核步长(例如,str 2)、池化窗口大小(例如,Pool3*3)和输出特征图大小(例如,map size55*55)LRN:表示局部响应归一化。调整填充以生成预期的输出特征图大小。
3.1.2 多层次池化提升精度
在表2b中,我们展示了使用单尺寸训练的结果。训练和测试的尺寸都是224*224。这些网络中,卷积层和他们对应的基准网络都有相同的结构,只是最后的卷积层之后的池化层,被替换成了SPP层。表2中的结果,我们使用了4层金字塔,6*6, 3*3, 2*2, 1*1(总共50个块)。为了公平比较,我们仍然使用每个视图都裁切为224*224标准的10-view预测法。与表2a中的无SPP基线相比,表2b中显示的结果有明显的性能提升。有趣的是,最大的提升(top-1 error,1.65%)来自于精度最高的网络结构。由于我们一直使用相同10个裁切后的视图,这些提升只能是来自于多层次池化。
值得注意的是,多层次池化带来的提升不只是因为更多的参数;而是因为多层次池化对物体形变和空间布局具有鲁棒性。为了证明这一点,我们使用一个不同的4层金字塔训练另一个ZF-5网络:{4*4, 3*3, 2*2, 1*1}(总共30 个bins)。这个网络与它没有SPP时有更少的网络参数,因为他的全连接层fc6有30×256维输入而不是36×256维。 网络的top-1/top-5错误率分别是35.06/14.04。这个结果和上述的50-bin的金字塔网络很相近(34.98/14.14),明显好于非SPP基准网络(35.99/14.76)。
表2:ImageNet 2012验证集的错误率。所有的结果都是使用标准的10视图测试获得的。括号中是在“无SPP”基线的结果。
3.1.3 多尺寸训练提升准确性
表2(c)展示了多尺寸训练的结果。训练尺寸是224和180,测试尺寸仍是224。我们还使用标准的10-view预测法。所有结构的top-1/top-5错误率进一步下降。SPP-net(Overfeat-7)的Top-1 错误率降到29.68%,比非SPP网络降低了2.33%,比单尺寸训练降低了0.68%。
除了分别使用180和224两个尺寸,我们还用了从[180;224]均匀采样后的随机尺寸进行了评估。SPP-net(Overfeat-7)的top-1/5错误率分别是30.06%/10.96%。Top-1错误率比两尺寸版本略差,可能因为224这个尺寸(用于测试)使用较少。但结果仍然比单一尺寸版本要好。
之前的CNN解决方案也处理了不同尺度/纵横比问题,但他们主要是基于测试。在Overfeat和Howard的方法中,在测试阶段将单一网被应用于不同的尺度,然后对分数平均。Howard进一步在低/高两个分辨率图像区域上训练了两个不同的网络,并对分数进行平均。据我们所知,我们的方法是第一个用多种尺寸的输入图像训练单个网络的方法。
3.1.4 全图像表示提升准确性
接下来我们研究全图像视图的准确性。在保持纵横比不变的情况下,我们将图像缩放到min(w,h)=256。SPP-net应用于整张图像上以计算全视角的得分。为了公平比较,我们也计算了在中心进行224*224裁切的单一视图(上述评估都用过)的准确性。单视图比较的准确性如表3所示。我们在ZF-5/Overfeat-7进行了验证。在全视图表示中top-1错误率全部下降。这说明保持完整内容的重要性。即使网络训练时只使用了正方形图像,网络却也可以很好地适应其他的比例。
对比表2和表3,我们发现多个视图的组合明显优于单个全图像视图。然而全视图的标识仍然具有良好的优点。首先,我们凭经验发现(在下一节中讨论)即使是数十个视图的组合,额外增加两个全图像视图(带有翻转)仍然可以将准确率提高约0.2%。其次,在方法上全图像视图与传统方法保持了一致,这些方法中对整张图像进行编码的SIFT向量被池化在一起。第三,在图像检索等其他应用中,相似度评分需要图像表示而不是分类得分。一个全图像的表示就会成为首选。
表3. 使用单一视图在ImageNet 2012验证集的错误率。图像的大小调整为min(w;h)=256,中心视图是中心224 x 224图像。
5 结论
SPP对于处理不同的尺度、尺寸和长宽比是十分灵活的解决方案。这些问题在视觉识别中很重要,但在深度网络中却很少考虑。我们提出了一种解决方案来训练具有空间金字塔池化层的深度网络。这种SPP-net在分类和检测任务上都表现出了出色的精度并且显著加速了以DNN为基础的检测任务。我们的研究也表明很多CV领域成熟的技术在基于深度网络的识别中仍然可以发挥重要的作用。
附录 A
在附录中,我们描述了一些可能影响准确性的技术细节。
Implementation of Pooling bins.在应用网络时,我们使用以下实现来处理所有bin。将 conv5 特征图(可以是完整图像或窗口)的宽度和高度表示为w和h。对于具有n*n个bin 的金字塔级别范围直观地说,如果需要四舍五入,我们在左/上边界取向下取整,在右/下边界向上取整。
Mean Subtraction.经过裁剪的224*224训练/测试图像通常通过减去每个像素的平均值进行预处理。当输入图像为任意尺寸时,固定尺寸均值图像不直接适用。在ImageNet数据集中,我们将224平均图像形变到所需的大小,然后减去它。在Pascal VOC 2007和Caltech101中,我们在所有的实验中都使用了不变的平均值(128)。