SPPNet(空间金字塔池化)与RoI Pooling

转载自:https://www.bilibili.com/video/BV1st411P7DW

https://blog.csdn.net/qq_35586657/article/details/97885290

比例池化

特征共享

  SPPNet(空间金字塔池化)与RoI Pooling_第1张图片

第一个池化层,将feature map分成4x4份然后池化,第二个池化层将feature map 分2x2份,第三个池化层为1x 1。总共输出16+4+1个数就是要输出的21个特征。

 SPPNet(空间金字塔池化)与RoI Pooling_第2张图片

对输入图像提取特征,然后在特征层进行区域划分。

由于输入大小可变,spp训练的时候就可以把训练图片按比例缩放。(相同的图片缩放至不同的尺度,相当于扩充了数据集)

  SPPNet(空间金字塔池化)与RoI Pooling_第3张图片

ROI Pooling的输入:
网络最后一个卷积层的输出feature map,shape 为(N, W/16, H/16, channels),除以16是因为使用VGG16的话,会经历四次 2 x 2 的 max poolinig,尺寸相比于图片原始W和H缩小了16倍
ROI(Region of Interest)的坐标,一个N x 5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示每个矩形框的左上角和右下角坐标(在原图而不是feature map上的坐标值);

ROI Pooling的输出:
不同ROI对应的相同尺寸的特征向量,shape为(num_ROIs, expected_H, expected_W, channels) ,论文中提到如果使用 VGG-16 的话,expected_H=expected_W=7

ROI Pooling 与 SPP 的区别:
通过上面的介绍,可以看到两者起到的作用是相同的,把不同尺寸的特征输入转化为相同尺寸的特征输出。SPP针对同一个输入使用了多个不同尺寸的池化(4x4,2x2,1x1)操作,把不同尺度的结果拼接作为输出;而ROI Pooling可看作单尺度的SPP,对于一个输入只进行一次池化操作。

Fast RCNN对RCNN的改进:
ROI Pooling的加入,使得Fast RCNN相比于RCNN在两个方面有了较大的改善:
1、由于ROI Pooling可接受任意尺寸的输入,warp操作不再需要,这有效避免了物体的形变扭曲,保证了特征信息的真实性
2、不需要对每个proposal都提取特征,采用映射方式从整张图片的feature map上获取ROI feature区域

除了上述两点,从之前给出的结构图的对比也可以看出还有一个比较明显的改进:
3、RCNN中在获取到最终的特征后先采用SVM进行类别判断,再进行bounding-box的回归得到位置信息。整个过程是个串行的流程,这极大地影响了网络的检测速度。Fast R-CNN中则将Classification和Regression的任务合二为一,变成一个multi-task的模型,实现了特征的共享也进一步提升了速度。

你可能感兴趣的:(SPPNet(空间金字塔池化)与RoI Pooling)