R-CNN不足之处
在R-CNN中,使用Selective Search (SS) 方法在原始图像上生成近2000个Region Proposal (RP),然后resize到固定尺寸,最后输入到CNN网络中,存在着大量的重复冗余计算。为什么呢?因为一张图片被分成了2000多个子图,那么这2000多个子图肯定有很多的重叠,那么重叠部分就会被多次卷积计算导致训练、推理速度变慢。SPP 原文链接
SPP的贡献
- 共享卷积计算
- 首先将输入图片 进行卷积得到图片
- 再在卷积后的图片 上获得2000个RP特征
- 所有的RP特征都是来自经过一次卷积的图片,所以被称为共享卷积计算
- Spatial Pyramid Pooling(空间金字塔池化)
- 使所有RP特征的尺寸相同
使用SPP前需要解决的问题
- 在R-CNN中是使用SS获取RP的,那如何在SPP中获得这些候选框呢?
- 答:简单,还是在原图 上使用SS获得RP =
- 如何将获得的RP与RP特征联系起来?
- 答:记录卷积后得到的 和原图 像素的对应关系。详细推导1、详细推导2-后半部分
- 每个RP的大小不一样,所以每个RP特征的大小也是不一样的,那该如何处理将所有RP特征成一致的维度呢?
SPP框架流程
- 使用SS获得RP,并且记录原图与卷积后特征图之间的对应关系
- 获得RP特征
- 执行R-CNN操作流程
- SVM分类器
- Bounding Box的LR回归
SPP Net缺点
- 无法fine-tune卷积层参数,导致影响准确率。
- 依然是多阶段的训练过程,selective search + CNN + FC + SVM + Bounding Box LR,没有改进。
- 特征依然需要存储在硬盘中,消耗大量的空间。
代码注释
- 代码太多,详见链接