深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
标题翻译:用于视觉识别的深度卷积神经网络中的空间金字塔池
论文作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
论文地址:https://arxiv.org/pdf/1406.4729.pdf
SPP的GitHub地址:https://github.com/yueruchen/sppnet-pytorch
参考的SPP翻译博客:http://www.dengfanxin.cn/?p=403
声明:小编翻译论文仅为学习,如有侵权请联系小编删除博文,谢谢!
小编是一个机器学习初学者,打算认真研究论文,但是英文水平有限,所以论文翻译中用到了Google,并自己逐句检查过,但还是会有显得晦涩的地方,如有语法/专业名词翻译错误,还请见谅,并欢迎及时指出。
如果需要小编其他论文翻译,请移步小编的GitHub地址
传送门:请点击我
如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote
前言
SPP-Net是出自2015年发表在IEEE上的论文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》。这篇是接着RCNN继续改进的。所以在学习这篇论文之前先回顾一下RCNN。
RCNN的主要流程为:
- 1,Extract Region Proposal (Selective Search)
- 2,Compute CNN features(CNN)
- 3,CLassify regions(SVM)
- 4,Non-maxumum suppression
- 5,Bounding box regression
那RCNN的不足之处就是:
- 1,每一张图片会提取大约2千个候选区域(region Proposal),针对每个Region Proposal 都重复的使用 CNN提取特征,因此会在特征提取阶段耗费大量的时间
- 2,由于全连接层的输入维度是固定的,所以必须 resize(crop/wrap),Region Proposal 才能进行特征提取,结果会导致丢失图像信息和图片形变,影响特征提取的准确率。
所以SPPNet 针对R-CNN两处不足做了改进:
- 1,将Selective Search的Region Proposal不放入CNN进行特征提取,而是直接把原图片放入CNN进行特征提取,然后根据 Region Proposal位置在 conv5 的 feature map 做一个特征映射,再截取出每一个Region Proposal 所映射的 feature map。这样就避免了重复性用 CNN 对每个 Region Proposal 单独提取特征,减少了大量时间。
- 2,SPPNet 在原来的CNN的conv5之后加入了 Spatial Pyramid Pooling layer(空间金字塔池化层)替换掉原来的 Pooling5 layer,由于SPP layer 可以接受不同 size 的feature maps 并输出相同 size 的feature maps,因此避免了 resize而导致的图片形变问题。
总结一下,SPP-net的初衷非常明晰,就是希望网络对输入的尺寸更加灵活,分析到卷积网络对尺寸并没有要求,固定尺寸的要求完全来源于全连接层部分,因而借助空间金字塔池化的方法来衔接两者,SPP-net 在检测领域的重要贡献是避免了R-CNN的变形,重复计算等问题,在效果不衰减的情况下,大幅提高了识别速度。
由于论文比较长,所以这里粘贴一下目录,让自己有个大概的理解:
下面开始翻译论文。
摘要
现有的深度卷积神经网络(CNNs)需要一个固定大小(如:224*224)的输入图像。这一要求是“人为的”,可能会降低对任意大小/比例的图像或子图像的识别精度。在这项工作中,我们为网络配备了另一种池策略“空间金字塔池”,以消除上述要求。这种新的网络结构称为 SPP-net,它可以生成固定长度的表示,而不考虑图像的大小/比例。金字塔对对象变形也很健壮。有了这些优势,SPP-net 应该在总体上改进所有基于CNN的图像分类方法。在 ImageNet 2012数据集上,我们证明了SPP-net提高了各种 CNN 架构的准确性,尽管他们的设计不同,在PASCAL VOC 2007和 Caltech 101数据集上,SPP-net 使用单一的完整图像表示而无需微调就可以获得最先进的分类结果。
SPP-net 的功能在目标检测中也具有重要意义。利用SPP-net,我们只需要从整个图像中计算一次,然后将任意区域(子图)的特征集合起来生成固定长度的表示,以训练检测器。该方法避免了重复计算卷积特征。在处理测试图像时,我们的方法比R-CNN 方法快 24~102倍,同时在PASCAL VOC 2007 上获得了更好或相当的精度。
在2014年的ImageNet 大规模视觉识别挑战赛(ILSVRC)中,我们的方法在所有38个参赛团队中目标检测取得了第二名,图像分类取得了第三名的成绩。本文还介绍了为这次比赛所作的改进。
1,引言
我们正在目睹计算机视觉领域的快速的,革命性的变化,这主要是由深卷积神经网络(CNN)[1]和大规模训练数据的可用性[2]引起的。基于深度网络的方法最近在图像分类 [3],[4],[5],[6],对象检测 [7],[8],[5] 和其他识别任务 [9],[10],[11],[12],甚至是非识别任务都表现出了明显的性能提升。
但是在CNN的训练和测试中存在一个技术问题:普遍的CNN需要固定的输入图像尺寸(例如224*224),这限制了输入图像的长宽比和缩放尺度。当应用于任意大小的图像时,当前方法大多数通过裁剪[3],[4]或者通过变形[13],[7] 将输入图像调整为固定大小,如图1所示。但是裁剪区域可能不会包含整个对象,而扭曲的内容可能会导致不必要的几何编写。由于内容丢失或失真。可能会损害识别精度。此外,当对象比例变换时,预定比例可能不合适。固定输入大小会忽略涉及刻度的问题。
那么,为什么CNN需要固定的输入大小?CNN主要由两部分组成:卷积层和其后的全连接层。卷积层以滑动窗口的方式操作,并输出表示激活的空间排列的特征图(feature map)(图2)。实际上,卷积层不需要固定的图像尺寸大小,并且可以生成任何大小的特征图。另一方面,全连接层根据其定义需要具有固定的大小/长度输入。因此,固定大小约束仅来自存在于网络较深阶段的全连接层。也是网络的最后阶段。
本文引入一种空间金字塔池化(Spatial pyramid pooling,SPP)层以移除对网络固定尺寸的限制。特别地,将SPP层放在最后一个卷积层之后。SPP层对特征图进行池化,并产生固定长度的输出,这个输出再喂入全连接层(或其他分类器)。换句话说,在网络层次的较后阶段(也就是卷积层和全连接层之间)进行某种信息“汇总”,可以避免在最开始的时候就进行裁剪 crop或变形wrap。图1(下)展示了引入SPP层之后的网络结构变化。我们称这种新型的网络结构为 SPP-net。
空间金字塔池化[14] [15](普遍称谓:空间金字塔匹配 Spatial Pyramid Matching, SPM[15]),是词袋模型(Bag-of-Words, BoW)的扩展,SPP模型是计算机视觉领域最成功的的方法之一。它将图像划分为从更细到更粗的级别,并聚合他们的局部特征。在CNN之前,SPP一致是个大分类比赛[17] [18] [19] 和检测比赛(比如[20])的冠军系统中的核心组件,对于深度 CNNs 而言,SPP有几个突出的优点:(1)SPP能在输入尺寸任意的情况下产生固定大小的输出,而以前的深度网络[3] 中的滑动池化(Sliding window pooling)则不能;(2)SPP使用了多层空间箱(bin),而滑动窗口池化则只用了一个窗口尺寸。多级池化对于物体的变形有十分强的鲁棒性[15],(3)由于对其输入的灵活性,SPP可以池化从各种尺度抽取出来的特征。通过实验,我们将施展所有提升深度网络最终识别精度的因素。
SPP-net 不仅仅让测试阶段允许任意尺寸的输入能够产生表示(representations),也允许训练阶段的图像有各种尺寸和缩放尺度。实验各种尺寸的图像进行训练可以提高尺度不变性,以及减少过拟合。我们开发了一个简单的多尺度训练方法。为了实现一个单一网络能够接受各种输入迟钝,我们使用多个共享所有权重(Parameters)的网络来近似得到这种效果,不过,这里的每个网络分别使用固定输入尺寸进行训练,每个epoch使用固定的尺寸训练这个网络,下一轮使用另一个尺寸来训练。实验表明,这种多尺度的训练与传统的单体型训练的收敛速度是一样的,但是带来更好的测试精度。
SPP的优点是与各类CNN设计是正交的。通过在 ImageNet 2012 数据集上进行的一系列可控的实验,我们发现SPP对[3] [4] [5] 这些不同的 CNN架构都有提升。这些架构有不同的特征数量,尺寸,滑动距离(strides),深度或者其他的设计。所以我们有理由推测 SPP 可以帮助提升更复杂的(更大,更深)的卷积架构。SPP-net 也做到了Caltech101 [21] 和 PASCAL VOC 2007[22] 上的最好结果,而且只使用了一个全图像表示,且没有调优。
在目标检测方面,SPP-net 也表现优异。目前领先的方法是R-CNN[7],候选窗口的特征是借助深度神经网络进行抽取的。此方法在 VOC 和 ImageNet 数据集上都表现出了出色的检测精度。但R-CNN的特征计算非常耗时,因为它对每张图片中的上千个变形后的区域的像素反复调用CNN。本文中,我们展示了我们只需要在整张图片上运行一次卷积网络层(不管窗口的数量多少),然后再使用 SPP-net 在特征图上提取特征。这个方法相对于 RCNN缩减了上百倍的耗时。在特征图(而不是region proposal)上训练和运行检测器是一个很受欢迎的想法[23] [24] [20] [5] 。但是 SPP-net 延续了深度CNN特征图的优势,也结合了SPP兼容任意窗口大小的灵活性,所以做到了出色的精度和效率。我们的实验中,基于SPP-net的系统(建立在R-CNN流水线上)比R-CNN计算卷积特征要快 24~120倍,而精度却更高。我们进一步提出了一个单模型结合方法EdgeBoxes[25],来提升在 PASCAL VOC 2007 detection task 的结果。
该手稿的初步版本已发布在 ECCV 2014上,基于这项工作,我们参加了 ILSVRC 2014 的竞赛[26],在目标检测中排名第二,在图像分类中排名第三(均仅提供数据),在所有的 38个团队中,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 卷积层和特征图
在颇受欢迎的七层架构中[3] [4] ,前五层是卷积层,其中一些后面跟着池化层。从他们也使用滑动窗口的角度来看,池化层也可以认为是“卷积层”。最后两层是全连接的,跟着一个 N路Softmax输出,其中N是类别的数量。
上述的深度网络需要一个固定大小的图像尺寸。然后,我们注意到,固定尺寸的要求仅仅是因为全连接层的存在导致的。另一方面,卷积层接受任意尺寸的输入。卷积层使用滑动的特征过滤器,他们的输出基本保持了原始输入的比例关系。他们的输出就是特征图[1]——他们不仅涉及响应的强度,还包括空间位置。
图2中,我们可视化了一些特征图。这些特征图来自于 conv5层的一些过滤器。图2(c)显示了 ImageNet数据集中激活最强的若干图像。可以看到一个过滤器能够被一些语义内容激活。例如,第55个过滤器(图2,左下)对圆形非常敏感;第66层(图2,右上)对a^形状特别敏感;第118个过滤器(图2,右下)对a_形状特别敏感。这些输入图像中的形状会激活相应位置的特征图(图2中的箭头)。
值得注意的是,图2中生成的特征图并不需要固定的输入尺寸。这些由深度卷积层生成的特征图和传统的方法[27] [28] 中的特征图很相似。这些传统方法中,SIFT向量 [29] 或者图像碎片 [28] 被密集的抽取出来,在通过矢量量化 [16] [15] [30],稀疏化[17] [18] 或 Fisher核函数 [19] 进行编码。这些编码后的特征构成了特征图,然后通过词袋(BoW)[16] 或者空间金字塔[14] [15] 进行池化。类似的深度卷积的特征也可以这样做。
2.2 空间金字塔池化层
卷积层接受任意输入大小,但是他们产生可变大小的输出。分类器(SVM/Softmax)或完全连接的层需要固定长度的向量。可以通过将特征集合在一起的词袋(BoW)方法[16] 生成此类向量。空间金字塔池化 [14] , [15]改进了BoW,因为他可以通过在局部空间箱中池化来维护空间信息。这些空间仓的大小与图片大小成正比,因此无论图像大小如何,仓的数量都是固定的。这与之前的深层网络 [3] 的滑动窗口池形成对比,后者的滑动窗口数量取决于输入大小。
为了让我们的神经网络适应任意尺寸的图像输入,我们用一个空间金字塔池化层替换掉了最后一个池化层(最后一个卷积层之后的 pool5)。图3示例了这种方法。在每个空间块中,我们池化每一个过滤器的响应(本文中采用了最大池化法)。空间金字塔的输出是一个 kM维向量,M代表块的数量,k代表最后一层卷积层的过滤器的数量。这个固定维度的向量就是全连接层的输入。
有了空间金字塔池化,输入图像就可以是任意尺寸了。不但允许任意比例关系,而且支持任意缩放。我们可以将输入图像的大小调整为任意比例(例如 min(w, h) = 180, 224, ...),并应用相同的深度网络。当输入图像的比例不同时,带有相同大小的卷积核的网络就可以在不同的尺度上抽取特征。跨多个尺度在传统方法中十分重要,比如 SIFT 向量就经常在多个尺度上进行抽取 [29] [27](受碎片和高斯过滤器的大小所决定)。我们接下来会说明多尺度在深度网络精度方面的重要作用。
有趣的是,最粗糙的金字塔等级有一个覆盖整个图像的容器。实际上,这是一个“全局池”操作,在多项并行工作中也对此进行了研究。在[31],[32]中,使用全局平均池来减少模型大小并减少过度拟合。在 [33]中,在所有 fc层之后的测试阶段使用全局平均池来提高准确性;在[34]中,全局最大池用于弱监督对象识别。全局池化操作对应于传统的单词袋方法。
上图中黑色图片代表卷积之后的特征图,接着我们以不同大小的块来提取特征,分别是 4*4, 2*2,1*1,将这三张网络放到下面这张特征图上,就可以得到 16+4+1=21种不同的块(Spatial bins),我们从这 21个块 中,每个块提出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。比如,要进行空间金字塔最大池化,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出单元,最终得到一个21维特征的输出。所以上图中Conv5 计算出的 feature map也是任意大小的,现在经过 SPP之后,就可以变成固定大小的输出了。所以上图最终得到的特征为(16+4+1)*256。
总体而言,当网络输入的是一张任意尺度的待测图像,用CNN可以提取得到卷积层特征(例如VGG16最后的卷积层为Conv5_3,得到 512幅特征图),这个时候我们可以一直进行池化,卷积,直到网络的倒数几层的时候,也就是我们即将与全连接层连接的时候,就要使用金字塔池化,将不同大小候选区域的坐标投影到特征图上得到对应的窗口(window),然后将每个window均匀划分为 4*4, 2*2, 1*1的块,然后对每个块使用 Max-pooling下采样,这样无论window大小如何,经过SPP层之后都得到了一个固定长度为(4*4 + 2*2 + 1*1)* 512 维的特征向量,这样使得任意大小的特征图都能够转换成固定大小的特征向量,将这个特征向量作为全连接层的输入进行后续操作,这样就能保证只对图像提取一次卷积层特征,同时全连接层的输入维度固定,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量)
2.3 用空间金字塔池层训练网络
理论上,将上述网络结构可以用标注的反向传播进行训练[1],与图像的大小无关。但实践中,GPU的实现(如cuda-convnet [3] 和 Caffe [34])更适合运行在固定输入图像上。接下来,我们描述我们的训练方法能够在保持空间金字塔池化行为的同时还能充分利用 GPU的优势。
注意:空间金字塔池化层与传统的池化层的不同在于空间金字塔池化层由不同尺度的池化层构成,并且池化层的大小是与输入的特征图矩阵的大小成正比。设输入特征图矩阵的尺寸为 a*a,输入特征图矩阵的数目为 k,池化层的分割尺度为 n*n,则该池化层的窗口大小为 [a/n],移动步长为 [a/n],输出的池化后的特征向量长度为 n*n*k 维, n 可以取多个值,构成多个尺度上的池化层,这样空间金字塔池化层的输出特征向量的维度只与输入特征图矩阵的数目与池化层的分割尺度有关,因此不再对网络模型的输入图像有尺寸限制。
单尺度训练
如前人的工作一样,我们首先考虑接受裁剪成 224*224 图像的网络。裁剪的目的是数据增强。对于一个给定尺度的图像,我们先计算空间金字塔池化所需要的块(bins)的大小。考虑一个尺寸为 a*a(也就是13*13)的 conv5 之后特征图。对 n*n块的金字塔层的块 bins,我们将这个池level作为一个滑动窗口池来实现,窗口的大小 win = [a/n]和步长 s=[a/n]。用 I级的金字塔,我们实现 I 这样的层(With an /-level pyramid,we implement /such layers)。下一个完全连接的层(fc6)将连接着这 I 个输出。如下图4显示了一个三级金字塔池(3*3, 2*2, 1*1)的示例配置。
我们的单一规模训练的主要目的是实现多级池行为。实验表明,这是提高精度的一个原因。
在Conv5之后的特征图为 13*13(a*a),金字塔层bins:n*n,将pooling层作为Sliding Window Pooling。windows_size = [a / n] 向上取整,stride_size = [a / n] 向下取整。对于上面 pool3*3:SizeX = 5的计算公式为: [13 / 3] 向上取整=5,stride = 4 的计算公式是: [13 / 3] 向下取整=4。
多尺度训练
带有SPP的网络可以应用于任意尺寸,为了解决不同图像尺寸的训练问题,我们考虑一些预设好的尺寸。现在考虑这两个尺寸:180*180, 224*224。我们使用缩放而不是裁剪,将前述的 224 的区域图像变成 180大小。这样,不同尺度的区域仅仅是分辨率上的不同,而不是内容和布局上的不同。对于接受 180 输入的网络,我们实现另一个固定尺度的网络。本例中,conv5输出的特征图尺寸是 a*a = 10*10,。我们仍然使用win = 上取整 [a / n] ,str = 下取整 [a / n],实现每个金字塔池化层,这个 180网络的空间金字塔层的输出的大小就和 224网络的一样了。这样,这个180网络就和 224网络拥有一样的参数了。换句话说,训练过程中,我们通过共享参数的两个固定尺度的网络实现了不同输入尺寸的 SPP-net。
为了减少从一个网络(例如224个)切换到另一个网络(例如180个)的开销,我们在一个网络上训练每个完整的epoch,然后切换到另一个网络(保持所有的权重)进行下一个完整的epoch训练。这是迭代的。在实验中,我们发现这种多尺度训练的收敛速度与上述单尺度训练相似。
多尺度训练的主要目的是在保证已经充分利用现在被较好优化的固定尺度网络实现的同时,模拟不同的输入尺寸。除了上述两个尺度的实现,我们也在每个 epoch中测试了不同的 S*S 输入,s是从 180到224之间均匀选取的。后面讲在实验部分报告这些测试的结果。
请注意:上述的单/多尺度解决方案仅仅用于训练,在测试阶段,将SPP-net应用于任何尺度的图像都是很简单的。
总结一下,多尺度训练就是使用两个尺度(224*224 和 180*180)进行训练。训练的时候,224*224是 crop得到的,180*180的图片是通过缩放224*224的图片得到的。之后迭代训练,即用224的图片训练一个 epoch,之后180的图片训练一个 epoch,交替进行。两种尺度下,在SPP-net之后,输出的维度都是(16+4+1)* 256 ,参数是共享的,之后接全连接层即可,论文提到这样的好处是可以更快的收敛。
3,SPP-net 用于图像分类
3.1 在ImageNet 2012 的分类实验
我们在1000个类别的 ImageNet 2012训练集上训练了网络,我们的训练算法参照了前人的实践工作 [3], [4] , [36],图像会被缩放,以便较小的维度是 256,再从中间四个角裁出224*224.图像会通过水平翻转和颜色变换[3]进行数据增强。最后两层全连接层会使用 Dropout层[3],learning rate 的起始值为 0.01,当错误率停滞后就除以10。我们的实现基于公开的 cuda-convert 源代码 [3]和 Caffe [35]。所有的网络都是在单一的 GeForce GTX Titan GPU(6G 内存)耗时二到四周训练的。
3.1.1 基准网络架构
SPP-net的优势是和使用的卷积神经网络无关。我研究了四种不同的网络架构 [3] [4] [5] (或者他们的修改版),对这些网络架构,SPP-net都提升了准确度。基准架构如表1,简单介绍如下:
- ——ZF-5:基于Zeiler和Fergus的“快速”模式[4] 的网络架构。数字5代表五层卷积网络
- ——Convnet*-5:基于Krizhevsky等人工作[3]的修改。我们在 Conv2 和 Conv3(而不是conv1 和 conv2)之后加入两个池化层。这样,每一层之后的特征图就和 ZF-5的尺度一样了。
- ——OverFeat-5/7:基于Overfeat论文[5],使用了[6]的修改。对于ZF-5/Convnet8-5,这个架构在最后一个池化层产生了更大的特征图(18*18而不是13*13)。还在Conv3和后续的卷积层使用了更多的过滤器(512)。我们也研究了七层网络,其中conv3和conv7结构一样。
在基准模型中,最后卷积层之后的池化层会产生6*6的特征图,然后跟着两个 4096维度的全连接层,和一个1000路的softmax层。这些基准网络的表现参见表2(a),我们针对ZF-5 进行70个epoch,而其他的用了90个epoch,ZF-5的表现比 [4]中报告的那个要好,增益主要来源于角落crop裁剪来源于整张图片。
3.1.2 多层次池化提升准确率
表2(b)我们显示了使用单尺寸训练的结果。训练和测试尺寸都是 224*224,这些网络中,卷积网络都和他们的基准网络有相同的结果,只是最后卷积层之后的池化层,被替换成了 SPP层。表2中的结果我们使用了四层金字塔,{6*6, 3*3, 2*2, 1*1}(总共五十个块)。为了公平比较,我们仍然使用标准的10-view 预测法,每个 view 都是一个 224*224 的裁剪。表2(b)中的结果显示了明显的性能提升。有趣的是,最大的提升(top-1 error, 1.65%)来自于精度最高的网络架构,既然我们一直使用相同的 10个裁剪 view。这些提升只能是来自于多层次池化。
值得注意的是多层次池化带来的提升不只是因为更多的参数:而是因为多层次池化对对象的变形和空间布局更加鲁棒 [15]。为了说明这个,我们使用一个不同的四层金字塔(4*4, 3*3, 2*2, 1*1)共有30个块训练另外一个 ZF-5 网络。这个网络有更少的参数,因为他的全连接层 fc6 有30*256维输入而不是 36*256维。网络的 top-1/top-5 错误率分别是 35.06/14.04 和 50块的金字塔网络相近,明显好于非SPP基准网络(35.99/14.76)。
表2(c)展示了多尺寸训练的结果。训练尺寸是 224和180,测试尺寸为 224.我们还使用标准的 10-view 预测法。所有架构的 top-1/top-5错误率进一步下降,SPP-net(Overfeat)的top-1 错误率降到 29.68%,比非SPP网络低了 2.33%,比单尺寸训练降低了 0.68%。
除了使用180和224两个尺寸,我们还随机选了 [180, 224] 之间多个尺寸。SPP-net(Overfeat-7)的top1/5 错误率 30.06%/10.96%。Top-1错误率比两尺寸版本有所下降,可能因为 224这个尺寸(测试时用的尺寸)被更少的访问到。但结果仍然比单一尺寸版本要好。
之前的CNN 解决方案 [5] [36] 也处理了不同尺寸问题,但是他们主要是基于测试。在Overfeat [5] 和 Howard 的方法 [36] 中,单一网络在测试解决被应用于不同的尺度,然后将分支平均。Howard进一步在低/高两个分辨率图像区域上训练了两个不同的网络,然后平均分支。据我们所知,我们是第一个对不同尺寸训练单一网络的方法。
3.1.4 全图像表示提升准确度
接下来我们研究全图像视觉的准确度。我们将图像保持比例不变的情况下缩放到 min(w; h)=256。SPP-net 应用到一整张图像上。为了公平比较,我们也计算中央 224*224 裁剪这单一视图(上述评估都用过)的准确度。单视图比较的准确度见表3。验证了ZF-5/Overfeat-7, top-1 错误率再全视图表示中全部下降。这说明保持完整内容的重要性。即使网络训练只使用了正方形图像,却也可以很好地适应其他的比例。
对比表2 和 表3我们发现,结合多种视图大体上要好于全图像视图。然而全视图图像的表示仍然有价值。首先,经验上看,我们发现(下节会讨论)即使结合几十个视图,额外增加两个全图像视角(带翻转)仍然可以提高准确度大约 0.2%。其次,全图像视图从方法论上讲与传统方法 [15] [17] [19] 保持了一致,这些方法中对整张图像进行编码的 SIFT 向量会被池化在一起。第三,在与其他一些应用中,比如图像恢复 [37],相似度评分需要图像表示而不是分类得分。一个全图像的表示就会成为首选。
3.1.5 在特征图上的多视图测试
受我们的检测算法的启发(在下一节中介绍),我们进一步提出了在特征映射上的多视图测试方法。感谢SPP的灵活性,我们可以从卷积特征映射中轻松地从任意大小的窗口(视图)中提取特征。
在测试阶段,我们调整图像的大小,使 min(w; h) = s ,其中 s 代表预定义比例(如 256)。然后我们计算整个图像的卷积特征图。对于翻转视图的使用,我们还计算翻转图像的特征映射。给定图像中的任何视图(窗口),我们将这个窗口映射到特征映射(映射的方法在附录中),然后使用 SPP 从这个窗口汇集特征(参见图 5)。汇集的特征然后被馈送到 fc 层以计算该窗口的 softmax 分数。这些分数是最终预测的平均值。对于标准的 10-view,我们使用 s = 256,并角落或中心的视图是 224*224 窗口。实验表明,特征映射上 10-view 预测的前五位误差在图像上的原始 10-view 预测误差附近为 0.1% 以内作物。
我们进一步应用此方法从多尺度中提取多个视图。我们将图像调整为六个尺度 s 属于 { 224, 256, 300, 360, 448, 560} 并计算每个尺度下的整个图像的特征映射。我们使用 224*224 作为任何比例的试图大小,因此这些视图在不同比例下在原始图像上具有不同的相对大小。我们为每个比例使用 18 个视图:一个在中心,四个在角,四个在每边的中间,有/没有翻转(当 s = 224时有6个不同的视图)。这 96 个视图的组合将前5个错误从 10.95% 降低到9.36%。结合两个完整图像视图(带翻转)进一步将前五个错误减少到 9.14%。
在Overfeat论文 [5] 中,视图也是从卷积特征图中提取的,而不是图像裁剪。但是,他们的视图不能有任意大小;相反,窗口是那些汇集的特性与所需维度相匹配的窗口。根据经验,我们发现这些受限窗口不如我们灵活定位/大小的窗口有利。
3.1.6 ILSVRC 2014 的摘要和结果
在表4中,我们与以前的最新方法进行了比较,Krizhevsky等人的论文 [3] 是 ILSVRC 2012的获奖方法;Overfeat [5] Howard [36] 以及 Zeiler和Fergus的 [4] 是ILSVRC 2013 的领先方法。我们仅考虑单网络性能进行可比较的比较。
我们最好的单个网络在验证集上实现了 9.14%的top-5 错误。这正是我们提交给 ILSVRC 2014 [26] 的单一模型条目。测试集上的前5个错误为 9.08%(ILSVRC 2014 具有有 ILSVRC 2012 相同的训练/验证/测试数据)。在组合 11 种模型之后,我们的团队的结果(8.06%)在参加 ILSVRC 2014的所有38个团队中排名第3(表5)。由于SPPNet的优势通常应该是独立于体系结构,因此我们希望它会进一步改善更深,更大的卷积体系结构 [33],[32]。
3.2 在VOC 2007上的分类实验
我们的方法可以生成全视图图像表示。通过在 ImageNet 上对上述网络进行预训练,我们从目标数据集中的图像提取这些表示并重新训练SVM分类器[38]。在SVM训练中,我们有意不使用任何数据扩充(翻转/多视图)。我们对SVM训练的功能进行归一化。
Pascal VOC 2007 [22] 中的分类任务涉及到 20种类别的 9963张图片。 5011张图片用于训练,其余图片用于测试。通过mAP评估性能。表6总结了结果。
我们从表6(a)中的基线开始,模型是不带SPP的ZF-5.要应用此模型,我们调整图像大小,使其较小的尺度为 224,并裁剪中心为 224*224 区域。SVM通过层的特征进行训练。在此数据集上,层越深,结果越好。在表6(b)中,我们用SPP网络替换了无SPP网络。作为第一部的比较,我们仍然将 SPP网络应用于中心 224*224 的裁剪。全连接层的结果有所改善,此增益主要归因于多层池。
表6(c)显示了我们在完整图像上的结果,其中将图像调整大小以便使较短的一面是 224.我们发现结果得到了显著改善(78.39% vs 76.45%)。这是由于保留了完整内容的全图像表示。
因为我们网络的使用不取决于比例,所以我们调整图像的大小,使较小的尺寸为 s 并且使用相同的网络来提取特征。我们发现,基于验证集, s=392 可获得最佳结果(表6(d))。这主要是因为对象在 VOC 2007 中占据较小的区域,而在ImageNet 中占据较大的区域,因此两组之间的相对对象比例不同。这些结果表明分类任务中存在规模问题,SPP-net 可以不分解决此“规模不匹配”的问题。
在表6(e)中,网络架构被我们的最佳模型(Overfeat-7 ,经过多尺度训练)取代,并且 mAP 增至 82.44%。表8总结了我们的结果以及与先进方法的对比。在这些方法中,VQ[15] , LCC[18] 和FK [10] 均基于空间金字塔匹配。 [13] , [4] , [34] ,[6] 基于深度网络。在这些结果中,Oquab等人(77.7%)和 Chatfield等人(82.42%)是通过网络微调和多视图测试获得的。我们的结果与现有技术相当,仅使用单个完整图像表示而无需微调。
Caltech 101 数据集 [21] 包含了102 个类别(一个背景)中的9144张图片,我们为每个类别随机的抽取30张图片进行训练,为每个类别最多抽取50张图像进行测试。我们重复10次随机分割并取平均值。表7总结了我们的结果。
在PASCAL VOC 2007 和 Caltech 101的结果中有一些常见的观察结果:SPP-net优于 非 SPP-net(表7(b ) vs (a)),并且全视角表示优于裁剪的((c)与(b))。但是 Caltech101中的结果与PASCAL VOC 有一些差异。完全连接层的精度较差,SPP层较好。这可能是因为Caltech 101中的对象类别与 ImageNet中的对象类别相关性较小,而更深的层则具有类别的专用线。此外,我们发现在此数据集上测试的比例规模中,比例224具有最佳性能。这主要是因为 Caltech 101 中的对象也占据了图像的较大区域,就像 ImageNet一样。
除了裁剪以外,我们也评估了使图像变形以适合 224*224 尺寸的情况。词解决方案保留了完整的内容,但引入了扭曲(distortion),在SPP(ZF-5)模型上,使用SPP层作为特征的精度为 89.91%,低于在未扭曲的完整图像上使用相同模型的 91.44%。
表8总结了我们的结果,并与Caltech 101上最新的方法进行了比较。我们的结果(93.42%)比之前的记录(88.54%)大幅提高(4.88%)。
深度网络已经被用于物体检测。我们简要回顾一下最先进的 R-CNN [7]。R-CNN首先使用选择性搜索 [20]从每个图像中选出2000个候选窗口。然后将每个窗口中的图像区域变形到固定大小 227*227.一个事先训练好的深度网络被用于抽取每个窗口的特征。然后用二分类的 SVM 分类器在这些特征上针对检测进行训练。R-CNN 产生的引人注目的成果,并且大大优于以前的方法。但R-CNN在一张图像的 2000个窗口上反复应用深度卷积网络,十分耗时。在测试阶段的特抽取是主要的耗时瓶颈。
我们将 SPP-net 应用于物体检测。只在整张图像上抽取一次特征。然后在每个特征图的候选窗口上应用空间金字塔池化,形成这个窗口的一个固定长度表示(见图5)。因为只应用一次卷积网络,我们的方法要快的多。
我们的方法是从特征图中直接抽取特征,而R-CNN则要从图像区域抽取。之前的一些工作中,可变性部件模型(Deformabel Part Model,DPM)从 HOG [24]特征图的窗口中抽取图像,选择性搜索方法 [20] 从 SIFT 编码后的特征图的窗口中抽取特征。Overfeat也是从卷积特征图中抽取特征,但需要预定义的窗口尺寸。作为对比,我们的特征抽取可以在任意尺寸的深度卷积特征图窗口上。
我们使用选择性搜索 [20] 的 “fast”模式对每张图片产生 2000个候选窗口。然后缩放图形以满足 min(w; h) = s,并且从整张图像中抽取特征。我们暂且使用 ZF-5 的SPP-net 模型(单一尺寸训练)。在每个候选窗口,我们使用一个4级空间金字塔(1*1, 2*2,3*3,6*6,总共50块)。每个窗口将产生一个 12800 (256*50)维的表示。这些表示传递给网络的全连接层。然后我们针对每个分类训练一个二分线性SVM分类器。
我们的SVM实现追随着 [20] [7],我们使用真实标注的窗口去生成正例。负例是哪些与正例窗口重叠不超过 30%的窗口(使用 IoU比例)。如果一个负例与另一个负例重叠超过 70% 就会被移除。我们使用标准的难负例挖掘算法(standard hard negative mining [23])训练SVM。这个步骤只迭代一次。对于全部 20个分类训练 SVM小于1个小时。测试阶段,训练器用来对候选窗口进行打分。然后在打分窗口上使用最大值抑制 [23] 算法(30% 的阈值)。
通过多尺度特征提取,我们的方法可以得到改进。将图像缩放成 min(w; h) = s \ belongs S={480; 576; 688; 864; 1200},然后针对每个尺度计算 conv5的特征图。一个结合这些不同尺度特征的策略是逐个 channel的池化。但我们从经验上发现另一个策略有更好的效果。对于每个候选窗口,我们选择一个单一尺度 s \ belongs S ,令缩放后的候选窗后的像素数量接近于 224*224.然后我们从这个尺度抽取的特征图去计算窗口的特征。如果这个预定义的尺度足够密集,窗口近似于正方形。我们的方法粗略的等效于将窗口缩放到 224*224,然后再从中抽取特征。但我们的方法在每个尺度只计算一次特征图,不管有多少个候选窗。
我们参照 [7] 对预训练的网络进行了调优。由于对于任意尺寸的窗口,我们都是从 conv5 的特征图中画出特征来,为了简单起见,我们只调优全连接层。本例中,数据层接受 conv5之后的固定长度的池化后的特征,后面跟着 fc_{6, 7} 和一个新的 21路(有一个负例类别) fc8层。fc8层的权重使用高斯分布进行初始化 theta = 0.01.我们修正所有的 learning rate 是 1e-4。再将全部三层调整为 1e-5。调优过程中正例是与标注窗口重叠度达到 [0.5, 1] 的窗口,负例是重叠度为 [0.1, 0.5]的。每个 min-batch,25%是整理。我们使用学习率 1e-4 训练了 250K 个 minbatch,然后使用 1e-5 训练 20K个 minbatch。因为我们只调优 fc层,所以训练非常的块。在GPU上只需要 2个小时,不包括预缓存特征图所需要的1个小时。另外,遵循[7],我们使用了约束框回归来后处理预测窗口。用于回归的特征也是 conv5之后的池化后的特征。用于回归训练的是那些与标注窗口至少重叠 50%的窗口。
4.2 检测结果
我们在PASCAL VOC2007数据集的检测任务上,评测了我们的方法。表9展示了我们的不同层的结果,使用了1-scale(s=688)或5-scale。R-CNN的结果见[7],他们使用了5个卷积层的 AlexNet [3]。使用 pool5层我们的结果是 44.9%,R-CNN的结果是 44.2%。但使用未调优的 fc6层,我们的结果就不好。可能是我们的 fc层针对图像区域进行了预训练,在检测案例中,他们用于特征图区域。而特征图区域在窗口框附近会有较强的激活,而图像的区域就不会这样了。这种用法的不同是可以通过调优解决的。使用调优后的 fc层,我们的结果就比 R-CNN稍胜一筹。经过约束框回归,我们的 5-scale 结果(59.2%)比 R-CNN (58.5%)高 0.7%,而 1-scale 结果(58.0%)要差 0.5%。
表10中,我们进一步使用相同预训练的 SPP-net模型(ZF-5)和 R-CNN进行比较。本例中,我们的方法和 R-CNN 有相当的平均成绩。R-CNN的结果也是通过预训练模型进行提升的。这是因为 ZF-5比 AlexNet 有更好的架构,而且 SPP-net 是多层次池化(如果使用非 SPP的 ZF-5,R-CNN 的结果就会下降)。表11 表明了每个类别的结果。
表11 也包含了其他方法。选择性搜索(SS) [20] 在 SIFT特征图上应用空间金字塔匹配。DPM [23] 和Rgeionlet [39] 都是基于 HOG特征的 [24]。Regionlet方法通过结合包含 Conv5 的同步特征可以提升到 46.1%。DetectorNet [40] 训练一个深度网络,可以输出像像素级的对象遮罩,这个方法仅仅需要对整张图片应用深度网络一次,和我们的方法一样。但他们的方法mAP比较低(30.9%)
尽管具有相当的准确性,但是我们的方法比R-CNN要快得多。R-CNN中有2000个窗口的卷积特征计算的复杂度为 O(n*227^2),我们的方法中尺度为s的复杂度为O(r*s^2),其中 r 为窗宽比。假设 r 大约为 4/3,在 s = 688 的单一尺度版本中,它的复杂度约为R-CNN的 1/24。
在表10中,我们对使用相同 SPP(ZF-5)模型的特征计算时间进行了公平的比较。RCNN的实现来源于作者在Caffe中的实现代码 [35],我们还在C啊啊分中实现了我们的特征计算。在表10中,我们使用GPU评估了100张随机VOC图像的平均时间。RCNN每卷图像需要 14.37s的卷积,而我们的一阶版本每张图像只需要 0.053s。因此,我们的速度比 R-CNN快 270倍。我们的5-scale 版本做卷积每张图形只花费 0.293s,所以比R-CNN快 49倍。我们的卷积特征计算是如此之快,并且全连接层的计算时间占据了相当大的一部分。表10显示了计算 4096维度的全连接层7功能的 GPU时间为每张图片 0.089s,考虑到卷积和全连接层的特征,我们的1-scale版本比R-CNN快 102倍,而准确率只低 1.2%;我们的5-scale 版本速度提高了 38倍,而且准确率相当。
我们还比较了表9中的运行时间,其中 R-CNN与原始论文一样使用 AlexNet[3],我们的方法快 24倍~64倍。请注意,这里的AlexNet[3]在每个转换层上的过滤器数量与 ZF-5相同。AlexNet速度更快,因为它在某些层上使用了拆分,这是 [3]中为两个 GPU设计的。
在最近的推荐窗口方法的帮助下,我们进一步实现了高效的完整系统 [25],选择性搜索(SS)提议 [20]在CPU上每张图形大约需要 1~2s,EdgeBoxes [25] 的方法仅需要大约0.2s。请注意,仅在测试期间使用快速推荐方法即可。使用于上述训练相同的模型(使用 SS),我们仅测试EdgeBoxes生成的建议。mAP为 52.8。无边界框回归。考虑到EdgeBoxes不用于训练,这是合理的。然后,我们在训练阶段将SS和EdgeBoxes用作推荐,而在测试阶段仅采用EdgeBoxes。在没有边界框回归的情况下,mAP为 56.3,由于附加训练样本,该结果优于 55.2(表10)。在这种情况下,包括所有步骤(推荐和识别)的每张图像的总测试时间约为 0.5s,这使得我们的方法适合用于实际应用。
4.4 用于检测的多模型结合
模型结合对于提升CNN为基础的分类准确度有重要提升作用 [3]。我们提出一种简单的用于检测的结合方法。
首先在ImageNet上预训练另一个网络,使用的结构都相同,只是随机初始化不同。然后我们重复上述的检测算法。表12(SPP-net)显示了这个网络的结果。他们的mAP可以和第一名的网络相媲美(59.1% VS 59.2%),并且在11 个类别上要好于第一个网络。
给定两个模型,我们首先使用每个模型对测试图像的候选框进行打分。然后对并联的两个候选框集合上应用非极大值抑制,一个更加可信的窗口会压制另一个不太可信的窗口。通过这个的结合,mAP提升到了 60.9%(表12)。结合方法在20类中的17个要好于单个模型。这意味着双模型是互补的。
我们进一步发现这个互补性主要是因为卷积层。我们尝试结合卷积模型完全相同的两个模型,在没有任何效果。
4.5 ILSVRC 2014 检测
在ILSRC 2014 检测 [26] 任务中涉及 200个类别。训练/验证/测试集中约有 450K/20K/40K图像。我们专注于仅提供数据的跟踪任务(不允许使用1000类的CLS训练数据)。
检测(DET)和分类(CLS)训练数据集之间存在三个主要差异,这极大的影响了训练前的质量。首先,DET训练数据仅仅为 CLS的 1/3训练数据。这似乎是仅提供数据的 DET任务的根本挑战。其次,DET的目录是 CLS的1/5。为了解决这个问题,我们利用提供的子类别标签进行预训练。总共有 499个不重叠的子类别(即,提供的类别层次结构中的叶结点)。因此,我们在 DET 训练集中预训练了 499类网络。第三, DET/CLS 训练集之间对象尺度的分布是不同的。CLS中的主要对象比例约为图像长度的 0.8,而 DET 中的比例约为 0.5。为了解决规模差异,我们将每个训练图像的大小调整为 min(w, h) = 400(而不是256),并且随机裁剪 224*224 的图像作为训练。仅当crop图片与真实物体的重叠至少为 0.5 时才使用裁剪。
我们验证了预训练对 PASCAL VOC 2007的影响,对于CLS预训练基线,我们考虑 Pool5功能(表9中的mAP 43.0%),取而代之的是在 DET 上预先训练的 200个类别的网络,mAP 明显下降到 32.7%。499类预训练网络将结果提高到 35.9%。有趣的是,即使训练数据没有增强,训练更多类别的网络也可以提高功能质量。最后,用 min(w, h) = 400 而不是 256进行训练可以将 mAP进一步提高到 37.8%。即使这样,我们让然看到与 CLS 预训练结果让然有很大差距,这表明大数据对深度学习的重要性。
对于 ILSVRC 2014,我们训练了499类 Overfeat-7 SPP网络。其余步骤与 VOC 2007 案例相似。根据[7],我们使用验证集生成正/负样本,并使用选择性搜索快速模式建议的窗口。训练集仅使用真实窗口贡献正样本。我们微调 fc层,然后使用验证集和训练集中的样本训练 SVM。在验证集上训练边界框回归。
在 ILSVRC 2014,测试集中,我们的单一模型的 mAP为 31.84% [26]。我们使用本文介绍的策略组合了六个类似的模型。测试集中的 mAP为 35.11%[26]。该结果再 ILSVRC 2014中提供的数据中排名第二(表13)[26]。NUS使用上下文信息的获胜结果为 37.21%。
对于该数据集,我们的系统在速度上仍然显示出很大的优势。从GPU提取所有5个尺度的卷积特征,每个测试图像需要我们的单个模型 0.6s(对于conv的时间为0.5s,对于fc层的时间为0.1s,并不包括建议)。使用相同的额模型,以RCNN的方式每张图像花费32s。对于40k 的测试图像,我们的方法需要8个 GPU小时才能计算卷积特征,而RCNN需要15天的GPU。
5,结论
SPP 对于处理不同的尺度,尺寸和长宽比是十分灵活的解决方案。这些问题在视觉识别是非常重要,但深度网络中大家却很少考虑这个问题。我们建议使用空间金字塔池化层来训练深度网络。这种SPP-net 在分类和检测任务上都表现出了出色的精度并显著地加速了 DNN 为基础的检测任务。我们的研究也表明很多 cv领域成熟的技术在基于深度网络的识别中任然可以发挥重要的作用。
附录A
在附录中,我们描述了一些实现的细节:
均值减法
224*224 裁剪的训练/测试图像通常通过减去每像素均值进行预处理[3]。当输入图像为任何大小时,固定大小的均值图像不能直接应用。在ImageNet数据集中,我们将 224*224 的均值图像压缩到所需的大小,然后将其减去。在PASCAL VOC 2007和Caltech 101中,我们在所有实验中均使用常数平均值(128)。
池化箱(bins)的实现
在应用网络的时候,我们可以使用以下实现来处理所有的bins。用whe h来表示 Conv5特征图的宽度和高度(可以是完整图像或窗口)。对于具有 n*n 个 bins 的金字塔级别,第(i, j)个 bin在(.....)的范围内。直观的,如果需要舍入,我们在左/上边界进行下移操作,在右/下边界进行上限。
将窗口映射到特征图中
在检测算法(以及对特征图的多视图测试)中,在图像域中提供了一个窗口,我们使用它来裁剪已经多次采样的卷积特征图(例如 Conv5),因此,我们需要在特征图上对其窗口。
在我们的实现中,我们将窗口的角点投影到特征图中的一个像素上,以使图像域中的这个角点最接近该特征图像素的接受场的中心。所有卷积核池化层的填充使映射变得复杂。为了简化实现,在部署期间,我们将 [p/2] 的像素填充到过滤器大小为 p 的层中。这样,对于以(x', y')为中心的响应,其在图像域中的有效接受区域以 (x, y) = (Sx', Sy')为中心,其中S是所有前步伐的乘积。在我们的模型中,对于conv5上的 ZF-5,s = 16,对于 conv5/7上的Overfeat-5/7 ,S = 12。给定图像域中的窗口,我们将左(顶部)边界投影为: x' = [x/S] +1 ,而右(底部)边界投影 x' = [x/S] +1,如果填充不是 [p/2],我们需要为 x 添加适当的偏移量。