基于空间金字塔池化的卷积神经网络物体检测(SPPNET)(Spatial Pyramid Pooling)

http://research.microsoft.com/en-us/um/people/kahe/eccv14sppnet/index.html(论文地址 2014年)

1.解决的问题

当前的CNN输入图片尺寸是固定的,但是当进行图片预处理的时候,往往会降低检测的准确度。而SPPNET则可以输入任意尺寸的图片,并且使得最后的精度有所提升。
CNN中图片的固定尺寸是受到全连接层的影响。因为全连接层我们的连接权值矩阵的大小W,经过训练后,就是固定的大小了,它要把输入的所有像素点连接起来,需要指定输入层神经元个数和输出层神经元个数,所以需要规定输入的feature的大小。比如我们从卷积到全连层,输入和输出的大小,分别是50、30个神经元,那么我们的权值矩阵(50,30)大小的矩阵了。因此空间金字塔池化,要解决的就是从卷积层到全连接层之间的一个过度。一般空间金子塔池化层,都是放在卷积层到全连接层之间的一个网络层。

2.金字塔池化

      黑色图片代表卷积之后的特征图,接着我们以不同大小的块来提取特征,分别是4*4,2*2,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins),我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。比如,要进行空间金字塔最大池化,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出单元,最终得到一个21维特征的输出

https://github.com/BVLC/caffe(源码)

3.与R-CNN的对比

对于R-CNN,整个过程是:

(1)首先通过选择性搜索,对待检测的图片进行搜索出~2000个候选窗口。 
(2)把这2k个候选窗口的图片都缩放到227*227,然后分别输入CNN中,每个proposal提取出一个特征向量,也就是说利用CNN对每个proposal进行提取特征向量。 
(3)把上面每个候选窗口的对应特征向量,利用SVM算法进行分类识别。 

可以看出R-CNN的计算量是非常大的,因为2k个候选窗口都要输入到CNN中,分别进行特征提取。

而对于SPP-Net,整个过程是:

(1)首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。
(2)特征提取阶段,这一步就是和R-CNN最大的区别了,这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
(3)最后一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别。
 

须看:https://blog.csdn.net/bryant_meng/article/details/78615353

猜你喜欢

转载自blog.csdn.net/qq_38284204/article/details/83625623