0. 参考
https://zhuanlan.zhihu.com/p/34053764
1. 论文概况
1. Motivation
当前的CNNs,fc需要固定大小的输入,因此需要输入图像尺寸固定,于是crop/warp,但这样可能会产生物体截断或拉伸,会导致输入CNN的图像信息丢失,降低了识别的精度。
提速:只做一次CNN特征提取,然后将每个region proposal的卷积层特征输入到全连接层做后续操作;现在的问题是每个region proposal的尺度不一样,直接这样输入全连接层肯定是不行的,因为全连接层输入必须是固定的长度,于是提出了SPP-Net。
2. 解决什么问题?
- R-CNN需要对图片的每个proposals都提取特征,速度慢、且占用大量资源。
3. 提出了什么方法?
- 采用空间金字塔池化(Spatial Pyramid Pooling )替换了全连接层之前的最后一个池化层,于是没必要进行crop/warp图像归一化过程,且仅需做一次CNN特征提取即可(卷积共享);
4. 效果如何?
- 分类任务:在各CNN结构模型上的表现均有提升;
- 物体检测任务:大幅度提高的训练、测试速度,精度也有显著提升(ImageNet2014 排名第二),为后续的Fast R-CNN提供了思路。
5. 还存在什么问题?
- 因为SPP融合了多个不同的maxpooling,训练时BP比较麻烦,无法将梯度回传到backbone进行参数更新,因此在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)。
- 和RCNN一样,训练过程仍然是隔离的,提取候选框、计算CNN特征、SVM分类、Bounding Box回归独立训练,所以大量的中间结果需要转存,无法整体训练参数;
- SPP-Net在无法同时Tuning在SPP-Layer两边的卷积层和全连接层,很大程度上限制了深度CNN的效果;
- selective search产生proposals仍然很耗时;
2. 核心思想
2.1 空间金字塔池化——SPP
当输入的feature map尺寸不一致时(这里指的是feature map的长、宽不一致,但通道数保持一致),输出的特征向量纬度保持一致。
SPP代替原有的maxpool,作为卷积层与全连接层之间的桥梁,使得全连接层的输入尺寸固定,网络输入图像尺寸不固定。