本文最后更新于:14 天前

论文原文

链接:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

这篇paper,是在R-CNN的基础上提出了空间金字塔变换层(Spatial Pyramid Pooling),SPPNet大幅度提高了R-CNN的训练速度和测试速度,同时算法的精度也上升了.

摘要

沿着上一篇RCNN的思路,我们继续探索目标检测的痛点,其中RCNN使用CNN作为特征提取器,首次使得目标检测跨入深度学习的阶段。但是RCNN对于每一个区域候选都需要首先将图片放缩到固定的尺寸(224*224),然后为每个区域候选提取CNN特征。容易看出这里面存在的一些性能瓶颈:

  • 速度瓶颈:重复为每个region proposal提取特征是极其费时的,Selective Search对于每幅图片产生2K左右个region proposal,也就是意味着一幅图片需要经过2K次的完整的CNN计算得到最终的结果。
  • 性能瓶颈:对于所有的region proposal防缩到固定的尺寸会导致我们不期望看到的几何形变,而且由于速度瓶颈的存在,不可能采用多尺度或者是大量的数据增强去训练模型。

为什么CNN需要固定的输入呢?

CNN网络可以分解为卷积网络部分以及全连接网络部分。我们知道卷积网络的参数主要是卷积核,完全能够适用任意大小的输入,并且能够产生任意大小的输出。但是全连接层部分不同,全连接层部分的参数是神经元对于所有输入的连接权重,也就是说输入尺寸不固定的话,全连接层参数的个数都不能固定。

解决方案

【R-CNN模型】

将侯选区域送到CNN里面提取特征向量时,因为CNN的输入图像需要固定大小,而候选区域的长宽都是不固定的,故需要对候选区域做填充到固定大小,当我们对侯选区域做cropping或者warping操作,可能会让图片不完整包含物体,一些我们不想见到的几何失真,这都会造成识别精度损失。

【SPPNet】

SPPNet的解决办法是使用“空间金字塔变换层”将接收任意大小的图像输入,输出固定长度的输出向量,这样就能让SPPNet可接受任意大小的输入图片,不需要对图像做crop/wrap操作。

上面这个图可以看出SPPnet和RCNN的区别,首先是输入不需要放缩到指定大小。其次是增加了一个空间金字塔池化层,还有最重要的一点是每幅图片只需要提取一次特征。

R-CNN模型候选区域在CNN重复计算

【R-CNN模型】

在R-CNN中,每个候选区域都要塞到CNN内提取特征向量,一张图片有2000个候选区域,也就是一张图片需要经过2000次CNN的前向传播,这2000重复计算过程会有大量的计算冗余,耗费大量的时间。

【SPPNet】

SPPNet提出了一种从候选区域到全图的特征映射(feature map)之间的对应关系,通过此种映射关系可以直接获取到候选区域的特征向量,不需要重复使用CNN提取特征,从而大幅度缩短训练时间。

网络结构

【SPPNet】

完整的网络结构如上图所示,因为卷积层输入的任意大小的图片,所以Conv5计算出的feature map也是任意大小的,现在经过SPP之后,就可以变成固定大小的输出了,以上图为例,一共可以输出(16+4+1)*256的特征,16+4+1表示空间盒的数量(Spatial bins),256则表示卷积核的数量。

【空间金字塔池化层-SPP】

空间金字塔就是以不同大小的块来对图片提取特征,分别是4*4,2*2,1*1大小的块,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的切割方式,分别在每一个区域取最大池化,那么就可以得到21组特征。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。

训练流程

【基本流程】

  • 候选区域生成: 一张图像生成2K个候选区域 (采用Selective Search 方法)
  • 特征提取:将卷积层的最后一层换成空间金字塔池化(Spatial Pyramid Pooling)
    • 把一个图像区域分成了16个块,也就是每个块的大小就是(w/4,h/4);
    • 再把这个图像区域划分了4个块,每个块的大小就是(w/2,h/2);
    • 再把这个图像区域作为了一个块,也就是块的大小为(w,h);
    • 对这些块都采用maxpooling,得到21值,然后再送入全连接层。
    • 所以不管输入图像的大小是多少,给全连接层的都是21个值。这样解决了不同的size的特征图统一size的问题.
    • 最后提取出特征
  • 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类
  • 位置修正:回归器校正非极大值抑制后剩下的region proposal

总结

【优点】

  • SPP-net 采用SPP技术解决了图像固定size的问题,对图片分类的准确度有了一定程度的提高
  • 采用共享卷积层也一定程度上提高了模型的训练和测试的运行时间

【不足】

  • 在Spatial Pyramid Poolin时,由于他分为了不同的块,反向传播梯度的时候,无法将梯度传递到conv层,使得训练时 conv层的参数不能进行更新.训练速度并不是特别的快
  • 提取region proposal部分依然用的是selective search,分类器也是用了SVM

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

【RCNN系列】Fast RCNN 上一篇
【RCNN系列】R-CNN 下一篇