2015
SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Introduce
-
R-CNN为什么检测速度这么慢?
-
对图像提完Region Proposal(2000个左右)之后将每个Proposal当成一张图像进行后续处理(CNN提特征+SVM分类)
实际上对一张图像进行了2000次提特征和分类的过程! -
将Region Proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个Region Proposal的卷积层特征输入到全连接层做后续操作.
-
但是全连接层输入必须是固定的长度
CNN 需要固定输入图像的尺寸- 卷积层对于图像是没有尺寸限制要求的,全连接层需要固定输入向量的维数
- 全连接层输入向量的维数对应全连接层的神经元个数,所以如果输入向量的维数不固定,那么全连接的权值参数个数也是不固定的,这样网络就是变化的,而在卷积层中,我们需要学习的kernal filter 参数个数是固定的。
-
-
SPP为的就是解决上述的问题,做到的效果为:不管输入的图片是什么尺度,都能够正确的传入网络.
-
思路:CNN的卷积层是可以处理任意尺度的输入的,只是在全连接层处有限制尺度——换句话说,如果找到一个方法,在全连接层之前将其输入限制到等长,那么就解决了这个问题.
-
在最后一个卷积层的顶部添加一个SPP层。SPP层池化特征并生成固定长度的输出,然后将其输入全连接层(或其他分类器)。
-
将 图像划分为从更精细到更粗的级别的分区,并聚合其中的局部特征
-
无论输入大小如何,SPP都能够生成固定长度的输出;
-
SPP使用多个不同大小的滑动窗口
-
可以以可变尺寸进行池化特征提取
-
- 把原来的特征图分别分成 4×4=16块,2×2=4块,1×1=1块(不变),总共21块
取每块的最大值作为代表,即每张特征图就有21维的参数,总共卷积出来256个特征图,则送入全连接层的维度就是21×256。
Train
- single-size
在conv5之后的特征图为:13x13(aa)
金字塔层bins: nn
将pooling层作为sliding window pooling。
windows_size=[a/n] 向上取整 , stride_size=[a/n]向下取整。
如果输入改成180x180,这时候conv5出来的reponse map为10x10,类似的方法,能够得到新的pooling参数。
- Multi-size training
两个尺度进行训练:224224 和180180
两种尺度下,在SSP后,输出的特征维度都是(9+4+1)x256,参数是共享的,之后接全连接层即可。
缺点
- 在fune-tuning阶段不能对SPP层下面所有的卷积层进行后向传播
Reference
https://blog.csdn.net/v1_vivian/article/details/73275259