一、 前言
在目标检测系列文章的上一篇R-CNN中,我们知道R-CNN在当时虽然取得了不错的成绩,但是其需要改进的地方也很多,比如算法步骤比较繁琐,需要大量的时间和内存去训练和测试模型等。除此之外,在训练和测试常见的CNN网络时,要求输入的图像有一个固定的大小,比如CNN要求图像的输入为224*224。(网络前面的卷积层不要求输入图像的大小,后面的全连接层的输入特征数是固定的,需要固定的输入)这就要求我们在使用网络前需要对图像进行一些预处理操作,比如:裁剪(crop)、拉伸(warp)等。文章《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》提出来一种Spatial Pyramid Pooling(SPP)结构来解决这种问题,将这种结构放在卷积层与全连接层中间,在多个测试中取得了不错的效果。
上面需要加入一些裁剪等操作,才能得到一个固定大小的输入,下面只需要加一个SPP层就可以达到相同作用,并且还有其他优点。
二、SPP原理
SPP的原理论文里写的很简单,在这里要重新回顾一下CNN中的一些问题:
- 当尺寸大小不同的图像输入到相同的多层卷积网络中,得到的feature map大小是不同的,数量是相同(相同的filters)。
- 对一个一个固定的CNN,全连接层的输入是一个固定的数值(这个数值提前设置好的),这就需要使用SPP插入多层卷积和全连接层中间。
在上面两个问题的基础上,以下图为例介绍核心的思想。