SPP-Net

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

1 摘要

现有的深度卷积神经网络(CNN)需要固定大小(例如,224×224)的输入图像。这种要求是“人为的”并且可能降低任意尺寸/比例的图像或子图像的识别精度。在本文中,我们为网络配备了更具原则性的池化策略,即“空间金字塔池化”,以消除上述要求。无论图像大小/规模如何,称为SPP-net的新网络结构都可以生成固定长度的特征表示。金字塔池化对目标形变也很鲁棒。有了这些优点,SPP-net应该可以改进所有基于CNN的图像分类方法。在ImageNet 2012数据集中,我们证明了SPP-net提高了各种已发布的CNN架构的准确性,尽管它们的设计不同。在Pascal VOC 2007和Caltech101数据集上,SPP-net使用单个全图像表示并且没有微调实现了最先进的分类结果。

SPP-net的强大能力在物体检测中也很重要。使用SPP-net,我们仅从整个图像计算一次特征图,然后在任意区域(子图像)中池化特征以生成用于训练检测器的固定长度的特征表示。该方法避免了重复计算卷积特征。在处理测试图像时,我们的方法计算卷积特征比最近和最准确的方法R-CNN快30-170倍(总体上快24-64倍),同时在Pascal VOC 2007上实现更好或相当的准确度。

在ImageNet大规模视觉识别挑战赛(ILSVRC)2014中,在所有38个团队中,我们的方法在对象检测中排名第2,在图像分类中排名第3。本手稿还介绍了本次比赛的改进情况。

2 简介

我们目睹了我们计算机视觉领域的快速的革命性变化,该变化主要是由深层卷积神经网络(CNNs)和大规模可用的训练数据引起的。基于深度网络的方法最近在很多领域大大改进了现有技术,包括图像分类,目标检测,还有许多其他的识别任务,甚至是非识别任务。

然而,在CNN的训练和测试中存在一个技术问题:普遍的CNN需要固定大小(例如,224×224)的输入图像,这限制了宽高比和输入图像的大小。当应用于任意大小的图像时,当前的方法通常通过裁剪,或通过变形,使输入图像适合固定大小,如图1(上图)所示。但是裁剪区域可能没有包含完整的对象,而图像形变可能会导致不必要的几何失真。由于内容丢失或失真,可能会影响识别准确性。当物体尺度变化时,可能固定大小的尺寸(例如,224)也可能是不适合的。固定输入大小忽略了涉及比例的问题

在这里插入图片描述
那么为什么CNN需要固定的输入大小呢?CNN主要由两部分组成:卷积层和其后面的全连接层。卷积层以滑动窗口的方式进行操作,输出特征图表示激活值的空间排列(图2)。实际上,卷积层不需要固定的图像大小,并且可以生成任何大小的特征映射。另一方面,全连接层根据其定义需要具有固定尺寸/长度的输入。因此,固定“大小”的约束仅来自全连接层,这些层存在于网络的更深层。

在这里插入图片描述在本文中,我们引入了空间金字塔池化层(SPP)来删除网络的固定输入大小的约束。具体来说,我们在最后一个卷积层的顶部添加一个SPP层。SPP层池化特征并生成固定长度的输出,然后将其输入全连接层(或其他分类器)。换句话说,我们在网络层次结构的更深层阶段(在卷积层和全连接层之间)执行一些信息“聚合”,以避免在开始时需要裁剪或变形。图1(底部)显示了通过引入SPP层来改变网络架构。我们称之为新的网络结构SPP-net。

我们相信,更深层次的聚合在生理上更健全,并且与我们大脑中的分层信息处理更加兼容。当一个物体进入我们的视野时,我们的大脑将其视为一个整体而不是在开始时将其裁剪成几个“视图”是更为合理的猜测。同样地,我们的大脑不太可能将所有候选目标扭曲固定的大小用于检测/定位它们。我们的大脑更有可能通过聚合来自先前层的已经深度处理的信息来处理更深层的任意形状的对象。

空间金字塔池化(俗称空间金字塔匹配或SPM),作为Bag-of-Words(BoW)模型的扩展,是计算机视觉中最成功的方法之一。它将图像划分为从更精细到更粗的级别的分区,并聚合其中的局部特征。在最近CNN流行之前,SPP长期以来一直是领先的分类和检测系统的关键组成部分。然而,在CNN中尚未考虑使用SPP层。我们注意到SPP对于深度CNN有几个显著特性:1)无论输入大小如何,SPP都能够生成固定长度的输出,而普通的CNN却不可以;2))SPP使用多个不同大小的滑动窗口,而滑动窗口池化仅使用单个窗口大小。实验证明多级池对目标变形更加鲁棒;3)由于输入比例的灵活性,SPP可以以可变尺寸进行池化特征提取。通过实验,我们发现所有这些因素都提高了深度网络的识别准确性。

SPP-net不仅可以从任意大小的图像/窗口生成特征表示进行测试,而且还允许我们在训练期间使用不同大小或比例的图像。使用可变尺寸图像进行训练可以增加模型的尺度不变性并减少过拟合。我们提出了一种简单的多尺寸训练方法。对于接受可变输入大小的单个网络,我们通过共享所有参数的多个网络来近似它,而这些网络中的每一个都使用固定大小的输入图像进行训练。在每个epoch中,我们使用给定的输入大小训练网络,在下一个epoch时使用另一个不同的输入大小进行训练。实验表明,这种多尺寸训练可以收敛到传统的单一尺寸训练,可以提高测试的准确性。

SPP的优点与特定的CNN设计正交。在ImageNet 2012数据集的一系列对照实验中,我们证明了SPP改进了现有出版物中的四种不同的CNN架构(或它们的修改)。这些架构具有不同的滤波器数量/尺寸,步幅,深度或其他设计。因此,我们推测SPP可以改进更复杂(更深和更大)的卷积架构是合理的。SPP-net还显示了使用没有进行微调的网络进行单幅完整图像的测试在Caltech101和Pascal VOC 2007上取得了最先进的分类结果。

SPP-net在目标检测方面也表现出很强的实力。在主要对象检测方法R-CNN中,通过深度卷积网络提取候选窗口的特征。该方法对VOC和ImageNet数据集中均具有良好的检测精度。在R-CNN中的特征计算是耗时的,因为它重复地将深度卷积网络应用于每个图像的数千个扭曲区域的原始像素。在本文中,我们展示了无论窗口的数量多少,只需在整个图像上运行一次网络的前向运算,然后在特征图上通过SPP-net提取特征。该方法相比R-CNN加速了超过一百倍。请注意,在特征图(而不是图像块)上训练/运行检测器实际上是一种更受欢迎的想法。但是SPP-net继承了深度CNN特征图的强大功能以及SPP在任意窗口大小上的灵活性,从而实现了出色的精度和效率。在我们的实验中,基于SPP网络的系统(基于R-CNN)计算卷积特征的速度比R-CNN快30-170倍,总体上快24-64倍,同时具有更好或相当的精度。我们进一步提出了一种简单的模型组合方法,以提高Pascal VOC 2007检测任务的结果。

该手稿的初步版本已在ECCV 2014上发表。在其基础上,我们参加了ILSVRC 2014的竞赛,在所有38支球队中,我们在目标检测任务中排名第2,图像分类任务中排名第3(两者都是专用数据)。 对于ILSVRC 2014,对[25]进行了一些修改。我们表明SPP网络可以比无SPP的对等网络提升各种更深更大网络的性能。此外,在我们的检测框架的驱动下,我们发现在具有灵活定位/大小的窗口(第3.1.5节)的特征图上进行多视图测试可以提高分类准确性。本手稿还提供了这些修改的详细信息。

3 具有SPP池化层的深度网络

3.1 卷积层和特征映射

考虑流行的七层架构AlexNet,前五个层是卷积的,其中一些后面是池化层。基于这些池化层也使用了滑动窗口,这些池化层也可以被认为是“卷积”层。最后两层全连接层,使用N路的softmax作为输出,其中N是类别数。

上述深度网络需要固定的图像大小。但是,我们注意到固定尺寸的要求仅仅是由于需要固定长度矢量作为输入的全连接层决定的。另一方面,卷积层接受任意大小的输入。卷积层使用滑动滤波器,它们的输出具有与输入大致相同的宽高比。这些输出称为特征图 - 它们不仅包含响应的强度,还包含它们的空间位置。

在图2中,我们展示了一些特征映射。它们是由conv5层的一些滤波器(第五卷积层)生成的。图2(c)显示了ImageNet数据集中这些滤波器的最强激活图像。我们看到滤波器可以被一些语义内容激活。例如,第55个滤波器(图2,左下)更容易由圆形激活;第66个过滤器(图2,右上)更容易由∧形激活;并且第118个过滤器(图2,右下)更容易由∨形状激活。输入图像中的这些形状(图2(a))激活相应位置的特征图(图2中的箭头)。

值得注意的是,我们在不固定输入大小的情况下生成图2中的特征映射。由深度卷积层产生的这些特征图类似于传统方法中的特征图。在那些方法中,SIFT矢量或图像块被密集提取然后编码,例如,通过矢量量化,稀疏编码,或Fisher内核。这些编码特征组成了特征图,然后由Bag-of-Words(BoW)或空间金字塔池化。类似地,深度卷积特征可以以类似的方式池化。

3.2 SPP层

卷积层接受任意输入大小,也产生可变大小的输出。分类器(SVM / softmax)或全连接层需要固定长度的输入矢量。这些向量可以通过将特征汇集在一起​​的Bag-of-Words(BoW)方法生成。空间金字塔池化改进了BoW,因为它可以通过在局部区间进行池化来获取空间信息。这些局部空间区间的大小与图像大小成比例,因此无论图像大小如何,区域的数量都是固定的。这与先前深度网络[3]的滑动窗口池化不同,在[3]中滑动窗口的数量取决于输入大小。

为了对任意大小的图像应用深度网络,我们用空间金字塔池化(SPP)层替换最后的池化层(例如,pool5,在最后一个卷积层之后)。图3说明了我们的方法。在每个空间区间中,我们池化每个过滤器的响应(在本文中,我们使用最大池)。SPP层输出的是kM维向量,其中M表示区间数目(k是最后一个卷积层中的滤波器的数量)。该固定长度的向量是全连接层的输入。

在这里插入图片描述SPP层的核心思想是,当输入图像的尺寸变化时,最后一个卷积层的输出特征的尺寸也要跟着改变。那么我使用SPP层,池化时根据输入特征的大小决定池化核的大小,总之要保证池化后的特征长度是固定的。当然这里也使用多尺度池化,有助于不同尺度大小目标的检测/分类。注意这里的池化是针对每一个滤波器的输出进行的,因此SPP层总的输出大小为kM,k表示最后一层的滤波器的数量,M表示每一个卷积核的输出池化后的固定长度

通过使用空间金字塔池化,输入图像可以是任何大小。这不仅允许任意宽高比,还允许任意大小。我们可以将输入图像的大小调整为任何尺度(例如,min(w,h)= 180,224 ,…)并应用相同的深度网络。当输入图像具有不同的大小时,具有相同滤波器数量的网络将在不同尺度提取特征。尺度在传统方法中起着重要作用,例如,SIFT矢量通常在多个尺度上提取(由块和高斯滤波器的尺寸确定)。我们将证明尺度对于深度网络的准确性也很重要。

有趣的是,最粗糙的金字塔等级有一个覆盖整个图像的bin。这实际上是一个“全局池化”操作,也在几篇并发论文中进行了实现。在[31],[32]中,全局平均池化用于减小模型大小并减少过度拟合;在[33]中,测试阶段在所有fc层之后使用全局平均池化以提高准确性;在[34]中,全局最大池化用于弱监督对象识别。全局池化操作对应于传统的Bag-of-Words方法。

3.3 网络训练

从理论上讲,无论输入图像大小如何,上述网络结构都可以通过标准反向传播进行训练。但实际上,GPU实现(例如cuda-convnet和Caffe)最好在固定输入图像上运行。接下来,我们将描述我们的训练解决方案,该解决方案利用这些GPU实现,同时仍然保留了空间金字塔池化行为。

3.3.1 单尺寸训练

与之前的工作一样,我们首先考虑从网络图像中裁剪固定大小的输入(224×224)的网络。裁剪是为了数据增加。对于具有给定大小的图像,我们可以预先计算空间金字塔池所需的输出的尺寸(bin表示池化之后的输出的大小)。考虑在conv5之后具有a×a(例如,13×13)大小的特征映射。使用金字塔等级为n×n的bin,我们将此池化级别实现为滑动窗口池化,其中窗口大小为 w i n = ⌈ a n ⌉ win = \lceil \frac{a}{n} \rceil win=na,stride大小为 s t r = ⌊ a n ⌋ str = \lfloor \frac{a}{n} \rfloor str=na。使用 l l l级金字塔,我们实现了 l l l个这样的层。下一个全连接层(fc6)将连接这 l l l个输出。图4显示了cuda-convnet风格中3级金字塔池化(3×3,2×2,1×1)的示例配置。

在这里插入图片描述我们的单一尺寸训练的主要目的是启用多级池化行为。实验表明,多级池化可以有效提升准确率。

3.3.2 多尺寸训练

我们的SPP网络预计将可应用于任何大小的图像。为了实现在训练过程中输入图像的大小可变化,我们考虑一组预定义的大小。我们考虑两种尺寸:除了224×224之外还有180×180。我们将上述224×224图像缩放为180×180,而不是从中裁剪较小的180×180图像块。因此,两种尺度的图像仅在分辨率方面不同,但包含了完全相同的内容。为了使网络接受180×180输入,我们实现了另一个固定输入大小(180×180)的网络。在这种情况下,conv5之后的特征图大小是a×a = 10×10。然后我们仍然使用 w i n = ⌈ a n ⌉ win = \lceil \frac{a}{n} \rceil win=na s t r = ⌊ a n ⌋ str = \lfloor \frac{a}{n} \rfloor str=na来实现每个金字塔池化级别。该180网络与224网络的空间金字塔池化层的输出具有相同的固定长度。因此,该180网络与224网络的每一层都具有数量完全相同的参数。换句话说,在训练期间,我们通过两个共享参数的固定大小的网络实现输入大小可变的SPP网络。

为了减少从一个网络(例如224)切换到另一个网络(例如,180)的开销,我们在一个网络上训练一个完整的epoch,然后切换到另一个(保持所有权重)网络训练下一个完整的epoch。上述过程迭代进行。在实验中,我们发现这种多尺寸训练与单一尺寸训练的收敛速度类似。我们的多尺寸训练的主要目的是模拟不同的输入尺寸,同时仍然利用现有的优化良好的固定尺寸的实现。除了上面的两个规模的实现,我们还测试了一个使用s×s作为输入的变体,其中s在每一个epoch是从[180,224]中随意选取的。我们在实验部分报告了两种变体的结果。

请注意,上述单/多尺寸解决方案仅供训练过程使用。在测试阶段,可以直接在任何尺寸的图像上应用SPP-net。

4 用于分类的SPP-Net

4.1 在ImageNet2012上的分类实验

我们在ImageNet 2012的1000类训练集上训练网络。我们的训练算法遵循以前工作的实践。调整图像大小以使短边尺寸为256,并从整个图像的中心或四个角裁剪224×224的子块。通过水平翻转和颜色改变来增强数据。在两个全连接层上应用Dropout。学习率从0.01开始,并在误差平稳时除以10(两次)。我们的实验基于cuda-convnet 和Caffe的公开代码。本文中的所有网络都可以在两到四周内在单个GeForce GTX Titan GPU(6 GB内存)上进行训练。

4.1.1 基本网络结构

在这里插入图片描述
SPP的优点与所使用的卷积网络架构无关。我们在现有论文(或他们的修改)中研究了四种不同的网络架构,并且我们展示了SPP提高了所有这些架构的准确性。这些基线架构见表1,并简要介绍如下:

  • ZF-5:这种架构基于Zeiler和Fergus(ZF)的“快速”(较小)模型[4]。该数字表示五个卷积层。
  • Convnet*-5:这是对Krizhevsky等人网络的修改[3]。我们将两个池化层放在conv2和conv3之后(而不是在conv1和conv2之后)。结果,每层之后的特征图具有与ZF-5相同大小的尺寸。
  • Overfeat-5/7:这种架构基于Overfeat论文[5],并在[6]中进行了一些修改。与ZF-5 / Convnet * -5相比,该架构在最后一个池化层之前产生了更大的特征图(18×18而不是13×13)。在conv3和随后的卷积层中使用更多的滤波器(512)。我们也测试了一个更深的7层网络,其中 c o n v 3 conv_3 conv3 c o n v 7 conv_7 conv7具有相同的结构。

在基线模型中,最后一个卷积层之后的池化层生成大小为6×6的特征映射,后接两个包含4096个神经元的fc层和一个1000-way softmax层。我们对这些基线网络的复制见表2(a)。我们为ZF-5训练了70个epoch,为其他网络训练了90个epoch。我们对ZF-5的复制优于[4]中报道的。这种增益是因为角落crop来自于整个图像,如[36]中所报道的那样。

在这里插入图片描述

4.1.2 多尺度池化改善准确率

在表2(b)中,我们展示了使用单一尺寸训练的结果。训练和测试尺寸均为224×224。在这些网络中,卷积层具有与相应基线模型相同的结构,而最终卷积层之后的池化层被SPP层替换。对于表2中的结果,我们使用4级金字塔。各级的输出分别是6×6,3×3,2×2,1×1(总共50个bin)。为了公平比较,我们仍然使用标准的10view预测,每次输入大小为224×224的裁剪块。我们在表2(b)中的结果显示出比表2(a)中的无SPP基准网络有相当大的改进。有趣的是,Top-1错误的最大增益(1.65%)是由最精确的架构给出的。由于我们仍然使用与(a)中相同的10个裁剪视图,因此这些增益仅仅是因为多级池化。

值得注意的是,多级池化的增益并不是由于网络具有更多的参数;相反,多层池化对于物体变形和空间布局的变化更加鲁棒。为了证明这一点,我们训练了另一个具有不同4级金字塔的ZF-5网络:4×4,3×3,2×2,1×1g(总共30个bin)。该网络的参数少于其无SPP的对应网络,因为其fc6层具有30×256-d输入而不是36×256-d。此网络的top-1 / top5错误率为35.06 / 14.04。这个结果类似于上面的50-bin金字塔(34.98 / 14.14),但是比没有SPP的基准网络(35.99 / 14.76)要好得多。

4.1.3 多尺寸训练可以改善准确率

表2(c)显示了使用多尺寸训练的结果。训练大小为224和180,而测试大小仍为224。我们仍然使用标准的10视图预测。所有架构的前1 /前5错误进一步下降。SPP-net(Overfeat-7)的前1个误差下降到29.68%,比no SPP对手好2.33%,比单尺寸训练对手好0.68%。

除了使用180和224的两个离散尺寸之外,我们还使用从[180,224]中正规采样的随机尺寸。SPP-net(Overfeat-7)的前1/5误差为30.06%/ 10.96%。top1错误比两个固定尺寸版本的错误略差,可能是因为使用224(用于测试)的尺寸的训练次数较少。但其结果仍然比单尺寸版本更好。

以前的CNN解决方案[5],[36]涉及多种尺度/尺寸,但它们主要基于测试。在Overfeat [5]和Howard的方法[36]中,单个网络在测试阶段以多个尺度应用,最终得分被平均。Howard进一步在低/高分辨率图像区域训练两个不同的网络并平均得分。据我们所知,我们的方法是第一个使用多种尺寸的输入图像训练单个网络的方法

4.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]的其他应用中,需要使用图像表示而不是分类分数进行相似性排序。可以优选全图像表示。

4.1.5 在特征映射上进行多视角测试

受我们的检测算法的启发(在下一节中描述),我们进一步提出了在特征图上的多视图测试方法。由于SPP的灵活性,我们可以从卷积特征图中轻松地从任意大小的窗口(视图)中提取特征。

在测试阶段,我们调整图像的大小,使得min(w; h)= s,其中s表示预定义的尺寸(如256)。然后我们计算整个图像的卷积特征图。为了应用翻转视角,我们还计算翻转图像的特征图。给定图像中的任何视图(窗口),我们将此窗口映射到特征图(映射的方式在附录中),然后使用SPP从该窗口池化(参见图5)。然后将池化的特征输入fc层以计算该窗口的softmax分数。这些分数是最终预测的平均值。对于标准的10视图,我们使用s = 256,视角是角落或中心的224×224窗口。实验表明,原始图像上10视图预测和特征图上10视图预测的top-5误差的差距在0.1%以内。

在这里插入图片描述我们进一步应用此方法从多个尺度中提取多个视图。我们将图像调整为六个尺度 s ∈ { 224 , 256 , 300 , 360 , 448 , 560 } s \in \{224,256,300,360,448,560\} s{224,256,300,360,448,560}并计算每个比例的整个图像的特征图。我们使用224×224作为任何比例的视图大小,因此对于不同比例,这些视图在原始图像上具有不同的相对大小。我们对每个比例使用18个视图:一个在中心,四个在角落,四个在每一侧的中间,有/没有翻转(当s = 224时,有6个不同的视图)。这96个视图的组合将Top-5错误从10.95%减少到9.36%。组合两个全图像视图(原图及其翻转)进一步将Top-5错误减少到9.14%。

在Overfeat论文中,视图也是从卷积特征图而不是图像裁剪中提取的。但是,他们的视图不能有任意大小;相反,窗口是池化的特征与所需维度相匹配的窗口。我们凭经验发现这些受限制的窗口比我们灵活定位/大小的窗户更不利。

5 目标检测

深度网络已被用于对象检测。我们简要回顾一下最新的R-CNN方法[7]。R-CNN首先通过选择性搜索从每个图像中提取约2,000个候选窗口[20]。然后将每个窗口中的图像区域扭曲成固定大小(227×227)。预训练的深度网络用于提取每个窗口的特征。然后,对这些特征使用SVM分类器的进行二分类以进行检测。 R-CNN产生令人信服的质量结果,并且大大优于以前的方法。但是,由于R-CNN反复将深度卷积网络应用于每个图像约2,000个窗口,因此非常耗时。特征提取是测试中的主要时间瓶颈

我们的SPP-net也可用于物体检测。我们只从整个图像中提取一次特征图(可能是多个尺度)。然后,我们在特征映射的每个候选窗口上应用空间金字塔池,得到固定长度表示(参见图5)。因为耗时的卷积仅应用一次,所以我们的方法可以以几个数量级的提升更快地运行。

在这里插入图片描述
我们的方法从特征图的区域中提取窗口特征,而R-CNN直接从图像区域中提取。在以前的工作中,可变形部件模型(DPM)[23]从HOG [24]特征图中的窗口中提取特征,而选择性搜索(SS)方法[20]从编码的SIFT特征图中的窗口中提取。Overfeat检测方法[5]也从深度卷积特征映射的窗口中提取,但需要预定义窗口大小。相反,我们的方法使得能够从深度卷积特征映射中以任意大小的窗口进行特征提取。

5.1 检测算法

我们使用选择性搜索的“快速”模式[20]来为每个图像生成大约2,000个候选窗口。然后我们调整图像大小以使min(w; h)= s,并从整个图像中提取特征图。我们暂时使用ZF-5(单一尺寸训练)的SPP-net模型。在每个候选窗口中,我们使用4级空间金字塔(1×1,2×2,3×3,6×6,共50个bin)来池化特征。这为每个窗口生成12,800(256×50,256个卷积核)维的表示。这些表示被提供给网络的全连接层。然后,我们为这些特征上的每个类别训练二元线性SVM分类器。

我们遵循[20],[7]进行SVM的训练。我们使用ground-truth窗口来生成正样本。负样品是与正窗口IOU重叠最多30%的样本。如果任何一个负样本与另一个负样本IOU重叠超过70%,则将其除去。我们使用标准的难例样本最小化来训练SVM。此步骤迭代一次。所有20个类别的SVM训练时间不到1小时。在测试中,分类器用于对候选窗口进行评分。然后我们在评分窗口上使用非最大抑制[23](阈值为30%)。

我们的方法可以通过多尺度特征提取来改进。我们调整图像的大小,使得 m i n ( w , h ) = { 480 ; 576 ; 688 ; 864 ; 1200 } min(w,h)= \{480; 576; 688; 864; 1200\} min(w,h)={480;576;688;864;1200},并为每个比例计算conv5的特征图。结合这些尺度的特征的一种策略是逐个通道地进行池化。但我们凭经验发现另一种策略可以提供更好的结果。对于每个候选窗口,我们选择单个尺度 s ∈ S s \in S sS,使得缩放的候选窗口具有最接近224×224的多个像素。然后我们只使用从该比例中提取的特征图来计算该窗口的特征。如果预定义的刻度足够密集且窗口大致为方形,我们的方法大致相当于将窗口大小调整为224×224,然后从中提取特征。然而,我们的方法仅需要从整个图像计算一次(在每个尺度上)的特征图,而不管候选窗口的数量。

我们还根据[7]微调了我们预先训练好的网络。由于我们的特征是从任意大小的窗口的conv5特征图池化而成,为简单起见,我们只对全连接的层进行微调。
在这种情况下,数据层在conv5之后接受固定长度的池化特征,并且随后是fc6,7层和一个新的21路(包含一个额外的负类别)fc8层。用高斯分布σ= 0.01初始化fc8权重。我们将所有学习率固定为1e-4,然后将所有三个层调整为1e-5。在微调期间,正样本是那些与ground-truth实例窗口重叠范围为[0.5,1]的样本,反例样本取与ground-truth实例窗口重叠范围为[0.1,0.5)的样本。在每个小批量中,包含25%的正样本。我们使用学习率1e-4训练250k个mini-batch,然后使用1e-5训练50k个mini-batch。因为我们只对fc层进行微调,所以训练速度非常快,在GPU上花费大约2个小时(不包括预缓存功能图,大约需要1小时)。遵循R-CNN的实现,我们使用边界框回归来对预测窗口进行后处理。用于回归的特征是conv5的池化特征(作为[7]中使用的pool5特征的对应物)。用于回归训练的窗口是与ground-truth窗口重叠至少50%的窗口。

5.2 检测结果

在这里插入图片描述
我们在Pascal VOC 2007数据集的检测子集上评估了我们的方法。表9显示了我们在各个层上的结果,使用单个比例(s = 688)或5个比例。这里的R-CNN结果如[7]中所述,使用具有5个卷积层的AlexNet [3]。使用pool5层(在我们的例子中是池化后的特征),我们的结果(44.9%)与R-CNN的结果(44.2%)相当。但是使用非微调fc6层,我们的结果较差。解释是我们的fc层是使用图像区域预训练的,而在检测情况下,它们用于特征图区域。特征映射区域可以在窗口边界附近具有强激活,而图像区域可以不具有强激活。这种使用差异可以通过微调来解决。使用微调fc层(ftfc6; 7),我们的结果与R-CNN的微调结果相当或略好。在边界框回归后,我们的5个尺度的结果(59.2%)比R-CNN(58.5%)好0.7%,而我们的单个尺度的结果(58.0%)差0.5%。

在这里插入图片描述
在表10中,我们使用相同的预先训练的SPPnet模型(ZF-5)进一步与R-CNN进行比较。我们的方法和R-CNN具有可比较的平均分数。预先训练的模型提升了R-CNN的结果。这是因为ZF-5的架构比AlexNet更好,而且由于SPPnet的多级池化(如果使用noSPP ZF-5,R-CNN结果会下降)。表11显示了每个类别的结果。

在这里插入图片描述

6 总结

SPP是一种灵活的解决方案,用于处理不同的比例,尺寸和纵横比。这些问题在视觉识别中很重要,但在深度网络环境中却很少考虑。我们提出了一种解决方案来训练具有空间金字塔池层的深层网络,由此产生的SPP-net在分类/检测任务中表现出极高的准确性,并大大加速了基于DNN的检测。我们的研究还表明,许多经过时间验证的计算机视觉技术/见解仍然可以在基于深度网络的识别中发挥重要作用。

本文就是基于SPP层,对于不同大小的输入图像可以使用大小可变的池化核获取固定大小的池化特征。这样对于不同输入大小的图像都可以直接进行处理,不必再进行裁剪/缩放操作。作者的实验表明,进行多尺度的训练可以改善分类准确率,使用全图进行处理也可以改善分类准确率。在检测任务中,作者和R-CNN中一样,使用selective search选取候选框,然后在池化后的特征图上而不是原始图像上获取候选区域的特征进行分类,这样就不必要对每一个图像块应用神经网络提取特征,特征提取过程变成了只针对全图的一次提取,有效改善了时间效率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值