SPP-net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)
Abstract
SPP-net提出了空间金字塔池化层来解决CNN只是输入固定尺寸的问题,因为单固定尺寸的输入会影响识别效果,并且对于多尺度图像的情况下鲁棒性不好。SPP-net很好的解决了以上问题,对于任意尺度图像都可以提取出固定维度的特征,实验证明SPP-net对分类任务(不同网络结构)和目标探测任务都有积极的作用。RCNN则是将候选区送入模型,这样会非常耗时,而且SPP-net网络以整张图像作为输入节省了大量时间,速度快了24~64倍。论文网络结构如图所示:
spatial pyramid pooling layer原理图,如图所示输入可以是多种尺寸的,进而得到不同尺寸的特征图,但我们对其平均分成16、4、1份然后进行池化下采样,这样不论特征图是什么尺寸的都可以转换为固定的尺度:
其实,此论文最令人迷惑的点就是特征图---原图的ROI映射,我们根据候选区ROI(原图上的)坐标映射在特征图上响应的区域边框,这样就避免了多次重复的进行特征提取浪费计算力,文章也提到了特征图和原图ROI的映射原理。映射原理是将原图坐标(x,y)映射到特征图上坐标(x',y'),使得(x,y)接近(x',y')反映射后在原图上感受野的中心。原文原话是这样的:
那下面就讨论一下,特征图与特征图或者是特征图与原图之间的映射关系;我们知道,特征图上的一个像素对于上一层的一个感受野,而且如果隔着多层,则感受野会累积,详见何凯明的演讲PPT图示:
上面提到了映射原理,一下就对映射原理进行解释,我一直很困惑特征点是如何反映射回前层感受野区域的中心位置的呢?下面图像示例是引用于知乎:
公式化表达为:p1=s*p2+((k-1)/2 - p)
对这个公式的解释困扰了我好久,下面用几何空间的角度来解释,先上图:
由于两个特征图尺度不同,所以对特征点进行上采样(也就是*S,注意如果隔着多层时S是多层的累积)映射到绿色坐标位置,然后平移(也就是+(k-1)/2,即感受野的一半)感受野中心;
第二种情况,就需要减去padding以进行抵消,与PPT中padding情况对应,只不过PPT中的+1是因为他是以1为坐标起点,如图所示:
查了许多别人的博客以及自己的理解,不知道理解是否准确。
由此一来,正向映射也就是原图映射到特征图上公式描述于原文:
可以看到公式简化了许多,那是因为采用的池化是k/2进行了抵消,具体是这样简化的,图引用于这篇博客:
算法流程
1.首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。
2.利用预训练的模型,对整张图片进行特提取,取出基于特征图上的ROI
3.利用SVM对特征图上的对应目标区域进行分类
如有错误,欢迎指正
参考文献
Convolutional Feature MapsElements
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition