Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

来源:互联网 发布:数据库的应用 编辑:程序博客网 时间:2024/05/16 02:36

He K, Zhang X, Ren S, et al. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition.[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2015, 37(9):1904-16.

针对卷积神经网络仅能接受固定尺寸的图像输入,提出基于空间金字塔的网络,SPP层放在最有一卷基层之后,通过SPP层可得到固定长度的输出,然后送入全连接层

解除了对输入图像大小固定的限制,图像可以保留原有大小直接进入网络进行训练。

摘要:现在使用的CNN网络都需要固定大小的图片输入。这种需求属于人为造成的并且由于人为的改变图片或子图的大小和长宽比有可能降低识别的准确率。在这项工作中我们为网络设置了另一种的pooling策略(空间金字塔池化)来消除固定输入图片大小的要求。新的网络结构被称为SPP-net,它可以生成固定长度的图片表示不管输入图片的大小和比例。金字塔池化对于目标变形依然有效。基于这些优点,SPP网能够改进所有基于CNN的图像分类方法。在ImageNet2012数据集上,我们证明了SPP-net提高了各种CNN架构的准确型,尽管它们有着不同的设计。在Pascal VOC 2007和Caltech 101数据集上,SPP-net使用单个全图像表示且不需要进行微调就可以实现目前最好分类结果。SPPnet的功能在目标检测中也很重要。使用SPP-net,我们从整个图像只计算一次特征图,然后在任意区域(子图像)中池特征以生成用于训练检测器的固定长度表示。这种方法避免了重复计算卷积特征。在处理测试图像,我们的方法是快于R-CNN方法24-102倍,同时在Pascal VOC 2007实现更好或同样的准确性。

Introduction

我们目睹了一个计算机视觉快速的革命性的改变,主要是因为cnn网络的出现以及可得到的大量的数据,深度网络使得目前最流行的图片分类、目标检测和许多其它的识别任务都有了实质上的提升。

然而,在训练和测试cnn网络时有一个技术性的缺陷:cnn网路需要一个固定大小的输入图片,这个要求限制了输入图片的大小和长宽比。当使用任意大小的图片输入时,当前的方法大多使输入图片改为固定大小,通过裁剪或者变形。但是,裁剪区域可能不包含整个的目标,而变形可能导致不想要的几何失真。识别的准确率可能受到影响由于内容的丢失或失真。此外,当对象尺度变化时,预定义的比例可能不适合。 修复输入大小会忽略涉及标度的问题。

为什么cnn网络需要固定的输入大小呢?一个cnn网络主要包括两部分:卷基层和全连接层。卷积层以滑动窗口方式操作并输出表示激活的空间设置的特征图。事实上,卷积层不需要固定的图像尺寸,并且可以产生任何尺寸的特征图。另一方面,全连接层需要输入通过它们的定义的固定尺寸/长度的图片。因此,固定大小约束仅来自存在于网络的更深阶段的完全连接的层。

本文中我们引入一个空间金字塔(SPP)层,从而消除固定大小输入的网络限制。具体来说,我们在最后一个卷基层顶部添加一个SPP层。SPP层池化特征并产生固定长度的输出,然后将固定长度的输出送至全连接层(或其他分类器)。换句话说,我们在网络层次结构的较深阶段(在卷积层和完全连接的层之间)执行一些信息“聚合”,以避免在开始时需要剪切或变形。图1通过引入SPP层显示了网络架构的变化。

空间金字塔池[14],[15](通常称为空间金字塔匹配或SPM [15])作为Bag-of-Words(BoW)模型的扩展[16],是计算机视觉最成功的方法之一 。它将图像分割成从精细到粗糙的级别,并聚合其中的局部特征。在CNN的流行之前,SPP长期以来一直是领先的和竞争获胜的分类和检测系统中的关键组件(例如,[17],[18],[19])。 然而,在CNN的上下文中没有考虑SPP。我们注意到SPP对深层CNN有几个显著的性质:1)SPP能够生成固定长度的输出,而不考虑输入大小,而在以前的深度网络[3]中使用的滑动窗口池不能。2)SPP使用多级空间仓,而滑动窗口池仅使用单个窗口大小。 多层池化已被证明对于对象变形是鲁棒的[15];3)由于输入尺度的灵活性,SPP可以以可变尺度提取的特征。 通过实验,我们发现所有这些因素提高了深度网络的识别精度。

SPP网络不仅可以从任意大小的图像/窗口生成表示以进行测试,而且还允许我们在训练期间提供不同大小或尺度的图像。使用可变尺寸图像的训练增加尺度不变性并减少过拟合。 我们开发了一种简单的多尺寸训练方法。对于单个网络接受可变输入大小,我们通过共享所有参数的多个网络对其进行近似,而每个网络使用固定输入大小进行训练。在每个时期,我们用给定的输入大小训练网络,并在下一个时期切换另一个输入大小。实验表明,这种多尺寸训练与传统的单尺寸训练一样收敛,并导致更好的测试精度。

SPP的优点与特定的CNN设计是正交的。在ImageNet 2012数据集的一系列控制实验中,我们证明SPP提升了现有出版物中提出的四种不同的CNN架构[3],[4],[5](或其修改)在没有SPP情况下。这些结构具有各种过滤器数量/尺寸,步幅,深度或其他设计。因此,我们推测SPP应该改进更复杂(更深和更大)的卷积架构是合理的。SPP-net还显示了仅使用单个全图像表示和不进行微调在Caltech 101 [21]和Pascal VOC 2007 [22]数据集上取得最先进的分类结果。

SPP-net也显示出了在目标检测中的优势。在物体检测方法R-CNN [7]中,通过深层卷积网络提取候选窗口的特征。这种方法在VOC和ImageNet数据集上显示出显著的检测精度。但是R-CNN中的特征计算是耗时的,因为它对每个图像的数千个变形区域的原始像素重复应用深卷积网络。在本文中,我们表明我们可以运行一次卷积层在整个图像上(不管窗口的数量),然后提取特征通过SPP-net在特征映射。该方法在R-CNN上产生超过一百倍的加速。注意,在特征图(而不是图像区)上训练/运行检测器实际上是一个更流行的想法[5],[20],[23],[24]。但是SPP-net继承了深度CNN特征图的功能,以及SPP对任意窗口大小的灵活性,这导致了出色的精度和效率。在我们的实验中,基于SPP网络的系统(基于R-CNN管道)计算的功能比R-CNN快24-102倍,而具有更好或可比的准确性。使用最近EdgeBoxes的快速提议方法[25],我们的系统需要0.5秒处理一个图像(包括所有步骤)。这使得我们的方法适用于真实世界的应用程序。

该手稿的初步版本已在ECCV 2014年出版,在这项工作的基础上,我们参加了ILSVRC 2014的竞赛[26],在所有38支球队中,在对象检测中排名第2和在图像分类中排名第3(都仅提供 数据轨道)。对ILSVRC 2014进行了一些修改。我们证明SPP网可以促进更深更大的各种网络(第3.1.2-3.1.4节)超过无SPP网络。此外,由我们的检测框架驱动,发现在具有灵活定位/大小的窗口的特征地图上的多视图测试(第3.1.5节)可以提高分类精度。

Introduction

这里写图片描述

传统CNN中,直接对图像剪切和变形来达到需要的尺寸。虽然卷积的过程不要求固定尺寸,但全连接层需要固定尺寸,因为从卷积层到全连接层间的参数维数必须是固定的。这样或多或少会影响分类与检测的效果,于是本文就针对这一事实,提出一种解决方案:在卷积层和全连接层之间加一层SPP层,即spatial pyramid pooling,用于池化特征,能使任意大小的feature map转化为特定大小feature的层。从而实现整体网络输入任意尺度图片的要求。文中把这一个新的层称为spp layer。生成固定长度的输出,送入全连接层。 使用了spp layer后网络(称为spp-net)结构如下:

         

这样的明显优点是速度非常快,准确率有提高(依然用了selective search来提取区域建议,因此整体检测速度并不是很快)。

SPP

 ​    spp layer具体的操作时,是对任意尺度的feature map,平均划分了 n x n(n为预先设置好的参数) 个bin(区域),对于每个bin采用max pooling,这样我们就产生了n^2个feature。由于n是固定的,这就实现了从任意大小feature map到固定大小feature的转换。再重新从原图划分 i x i 个bin(i进行max pooling产生i^2个feature,以此类推……在论文图例(下图)中分别使用的bin个数是4x4,2x2,1x1(空间金字塔), 所以对于一个feature map,生成大小为16+4+1的feature。对于为什么需要2x2和1x1这样更粗糙的特征,原文中(p4左上第二段)提到,对于这样一个更粗糙的特征,在其他论文中提到,可以降低模型大小避免过拟合,可以提高准确率,还能够被弱监督的物体识别使用。笔者认为这应该是希望产生对应局部感受野更大的特征供后面分类使用,但是笔者认为高层金字塔没有什么存在的必要,因为这里采用的是最大池化,以底下图例为例,4x4一层的金字塔中左上方4个bin已经包含了2x2一层金字塔左上方1个bin的信息,2x2一层金字塔4个bin就已经包含了1x1一层金字塔bin的信息,故其实高层金字塔中的信息其实都是冗余的,faster-rcnn中也提到神经网络是可以自己学习平移不变性和控件不变性的。

这里写图片描述

流行的7层CNN由5个卷积层(有些带pooling层)、2个全连接层、1个softmax层组成。SPP是在卷积层后,用空间盒将卷积特征池化到一起,这张图中的256是conv5的滤波器数量,每个格子都是256维的。下面是详细的说明:

单一尺度的训练

在训练中,conv5有axa的输出,金字塔有nxn个盒(bins)。 
窗口 
这里写图片描述 
步长 
这里写图片描述 
金字塔有l 级,输入到fc6的是这l 级输出连接起来。 
eg. conv5是13x13的,有pool3x3、pool2x2、pool1x1这样3种size的盒,共有256个13x13的滤波器。 
这里写图片描述

多个尺度的训练

假设有224x224和180x180两种尺度的输入图像(其中180x180是由224x224缩放所得)。conv5的特征分别为224x224->13x13,180x180->10x10。 
相应的win和str都不同,但bin的数量是相同的都是(9+4+1)x256,后面连着全连接层。

detection

这里写图片描述

先在每张图上生成候选窗口,缩放图像,提取conv5特征,对每个候选窗口对应到conv5的特征用4层空间金字塔进行池化,生成12800-d(256x(1x1+2x2+3x3+6x6))特征表示,输入全连接层,再用这些特征对每个种类训练线性SVM分类器。即特征是从整张图上计算的,而池化是在候选窗口上执行的,可由下图看出SPP与RCNN的不同: 
这里写图片描述

一种多尺度特征提取的改进方法

简而言之,这种方法是将图片缩放到多个尺度(eg.{480, 576, 688, 864, 1200}),得到6组特征映射(还有一组是原本的尺度),对于每个候选窗口,选择让它最接近224x224的尺度对应的特征映射来进行提取。

results

\SPP-net(1-scale)SPP-net(5-scale)R-CNNmAP58.059.258.5GPU time/img0.14s0.38s9sspeed-up64x24x-
0 0
原创粉丝点击