Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
参考链接
Introduction
- 类似于这种图,crop和warp之类的操作可能会使得图片变形,传统的CV在进入卷积前都会对图像进行类似的操作,这可能会导致特征提取的效果下降
- 作者提出的SPP模型,是在卷积层后加个金字塔池化层,这样虽然不同输入卷积出来的feature map大小会不同,但是经过金字塔池化后的输出是大小一样的,可以满足全链接层固定输入的要求,于是就可以实现任意尺寸图片输入,还有最重要的一点是每幅图片只需要提取一次特征(RCNN对于每个候选区域都会进行一次特征提取,这就得2k次。。)。
DEEP NETWORKS WITH SPATIAL PYRAMID POOLING
Convolutional Layers and Feature Maps
- PPNet通过可视化Conv5层特征,发现卷积特征其实保存了空间位置信息(数学推理中更容易发现这点),并且每一个卷积核负责提取不同的特征,比如C图175、55卷积核的特征,其中175负责提取窗口特征,55负责提取圆形的类似于车轮的特征。
The Spatial Pyramid Pooling Layer
-
-
其主要目的是对于任意尺寸的输入产生固定大小的输出。思路是对于任意大小的feature map首先分成16、4、1个块(比如分成16块,那么每块宽w/16向上取整,最后一个不足也算一块),然后在每个块上最大池化,池化后的特征拼接得到一个固定维度的输出。以满足全连接层的需要(对于图像分类)。
SPP-NET FOR IMAGE CLASSIFICATION
- SPP就是在原有图像分类的基础上加了个金字塔池化层,可以输出特定的尺寸,因此SPP可以方便的进行多尺度池化、多尺度训练,在每一个epoch的时候,先将图像放缩到一个size,然后训练网络。训练完整后保存网络的参数,然后resize 到另外一个尺寸,并在之前权值的基础上再次训练模型。相比于其他的CNN网络,SPPNet的优点是可以方便地进行多尺寸训练,而且对于同一个尺度,其特征也是个空间金字塔的特征,综合了多个特征的空间多尺度信息。
SPP-NET FOR OBJECT DETECTION
- 对于目标检测,基于RCNN做了修改,先对整张图片进行特征提取,得到feature maps,然后把SS选出来的框映射到feature map上,进行金字塔池化,这样可以避免多次特征提取,提高了检测速度,同时金字塔池化层也支持了任意大小的输入
如何从一个region proposal 映射到feature map?
- 关于这个映射,论文中有公式:
- left、top=>
- right、bottom=>
- 其中:S就是CNN中所有的strides的乘积,包含了池化、卷积的stride。
- 如下图所示:
- ZF-5的stride=2*2*2*2=16
- Convnet*-5的stride= 4*2=8
- Overfeat-5/7的stride=2*3*2=12
- 如下图所示:
- left、top=>