SPP-net

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

By Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun

主要看目标检测部分

SPP-Net论文详解,参考主要思路

原始图片中的ROI如何映射到到feature map

1. Contributions

这篇论文中作者想要解决的两个问题:

  1. 目前现有的网络结构的输入图片的尺寸都需要固定的;作者学习这种方法可能会降低精度;
  2. 针对目标检测,作者基于R-CNN改进;R-CNN存在的一个问题,就是对于每个region proposals都需要各自输入CNN中提取特征,这样仅处理一张图片,因为一张图就有2000个region proposals,就会非常耗时。

因此,作者提出的改进方法,就是使用SPP-net,使得网络的输入尺寸不再需要固定;同时基于R-CNN的目标检测方法,在使用了SPP-net后,不用再进行2000次的耗时的卷积,只有计算一次,大大提升效率。

2. Architecture

SPP-net所要达到的目标,就是使网络的输入不再需要是固定的尺寸。我们知道一般网络都分为卷积和全连接层两部分。而之前网络的输入,其尺寸需要固定的原因,不是因为卷积层,而是全连接层的输入尺寸需要固定。因此作者的方法就是在给定输入不固定的情况下,通过卷积层,经过SPP-net后,其尺寸能够固定,以便SPP-net的输出结果能够输入到全连接层中。

2.1 Spatial Pyramid Pooling

以AlexNet为例,全连接层前的最后一层是$pool_5$层(接在$conv_5$和$relu$之后,之后省略表述$relu$操作);因此作者通过用SPP(Spatial pyramid pooling)代替原来的$pool_5$层,以达到输出尺寸固定的目的。

举例来说:

  • 图片经过$conv_5$后得到$13\times 13$尺寸的feature map的情况下,通过SPP操作,能够得到三个不同尺寸的feature maps:$3\times 3,\ 2\times 2,\ 1\times 1$;
  • 图片经过$conv_5$后得到$10\times 10$尺寸的feature map的情况下,通过SPP操作,也能够得到三个不同尺寸的feature maps:$3\times 3,\ 2\times 2,\ 1\times 1$。

这样,将这三个尺寸不同但每次每个都是固定尺寸的feature maps展成一维向量并拼接,便可得到固定长度的向量。

这里,作者将$3\times 3,\ 2\times 2,\ 1\times 1$这种$3\times 3,\ 2\times 2,\ 1\times 1$的bins。

3. Training/Test

在目标检测任务的训练过程中,相较于R-CNN,其主要不同主要在于图片只要进行一次卷积操作,而不是对每个region proposal都进行卷积操作。SPP-net实现了此功能,但它的使用也需要一特别的改动。

3.1 How to get $n \times n$ bins

事实上这里作者直接给出了公式。设$conv_5$的输出为$a\times a$,需要的bins尺寸为$n\times n$,将pooling层作为sliding window pooling,则pooling的滑动窗口的大小$sizeX=\lceil a/n \rceil$,而stride则为$stride=\lfloor a/n \rfloor$。

举例来说,在$conv_5$的输出为$13\times 13$的情况下:想要得到$3\times 3$的bin,则根据公式,有$sizeX=5$,$stride=4$,我们滑动pooling窗口,便可得到$3\times 3$大小的bin;同理,$2\times 2,\ 1\times 1$的bin也通过以上方式可得到。

最终,假设$conv_5$的filters数量为256,我们就能得到$(3\times 3 + 2\times 2 + 1\times 1) \times 256$长度的向量,作为全连接层的输入。

3.2 Mapping a window to feature maps

在R-CNN中,网络的输入就是region proposal,因此我们可以直接得到相应的feature map;但是SPP-net的输入是一整张图,因此$conv_5$的输出结果也是整张图的feature map。那么,我们如何能够找到每个候选框在feature map中对应的区域呢?

作者直接给出了公式:设候选区域中的坐标为$x$,那么feature map中的坐标$x’ = \lfloor x/S \rfloor + 1$或$x’ = \lfloor x/S \rfloor - 1$,其中前者对应的上左的边界,而后者对应的是右下的边界,$S$则表示之前所有stride的乘积。

注:这里是直接摘抄论文的;文前的参考博客之后或许可以再看。

3.3 Single/Multi size training

虽然网络的输入可以是任意的尺寸,但是为了提高训练的效率,在训练的时候,还是使用固定的尺寸。

Single-size training

这里作者就是直接使用$224\times 224$的图片作为输入进行训练的。

Multi-size training

这里作者取了两种大小的尺寸($224\times 224,\ 180\times 180$)作为输入,交替训练网络,即224的图片训练一个epoch,180的图片训练一个epoch。

其中,224的图片通过crop得到,而180的图片则通过224的图片缩放得到。

论文中说这样训练的好处是可以更快收敛。

3.4 Test

在测试阶段,则直接使用任意尺寸的图片作为输入即可。

3.5 Multi-scale feature extraction

作者还通过multi-scale feature extraction来提高性能。

提出这个方法的原因,我觉得是在R-CNN中,原来如果一个候选框无论大小,都会缩放到$224\times 224$大小的尺寸。但是现在SPP-net直接把一整张图作为输入,那么如果一个检测目标在图中的尺寸比较小的话,则其得到的特征也会比较小,可能会影响精度。

所以multi-scale feature extraction方法先把图片resize成$\min(w,h) = s \in S = { 480, 576, 688, 864, 1200 }$。然后因为有这多的特征,我们需要进行选取或组合,作者的方法是,对于每个候选框,选择一个候选框尺寸最接近$224\times 224$的尺寸即可。

写到这里,再回过头来看刚才自己分析其原因的那一段,又觉得奇怪,因为这个multi-scale feature extraction不应该是在test阶段使用的吗?所以说在训练的训练,有些小的候选框在训练时本来就很小的,所以感觉自己分析的好像又不太对了。

4. Disscussion

  • 3.2的mappinp;
  • 3.5的multi-scale feature extraction。