0 背景
faster rcnn 作为目标检测领域内的经典算法,其思想值得仔细研究学习,本文系统性地对 faster rcnn 系列文章进行导读,总结归纳核心思想。
首先了解下该系列文章的时间轴: R-CNN(CVPR,2014) --> SPP-Net(ECCV,2014) --> Fast RCNN(ICCV,2015) --> Faster RCNN(NIPS,2015)
因此本文也会按照这个顺序展开。
1 R-CNN
论文:《Rich feature hierarchies for accurate object detection and semantic segmentation》
论文提到有两个贡献:(1)将 CNN 与 自下而上的 region prosal 相结合,实现定位和分割功能;(2)当训练集很小时,可以使用 fine-tuning 方法,在预训练模型上微调
推理流程
- 1.获取输入图像
- 2.使用 selective serch 方法提取约 2000 个候选区域
- 3.将候选区域分别输入 CNN 网络(论文使用 Alexnet,所以需要将候选图片统一缩放到 227x227 大小)
- 4.将 CNN 的输出输入到 SVM 中进行类别的判定

2 SPP Net
论文:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
两大改进:
- 共享计算:直接对整图进行卷积运算,不用每个候选框都送进卷积运算
- 适应不同输入尺寸:引入空间金字塔池化 SPP,可以适应不同尺寸的输入

可以共享运算的原理是:输入图片的某个位置的特征反应在特征图上也是相同的位置,因此,只需要在特征图上进行相关 ROI 的特征提取就行了,不需要对每个 ROI 都做一遍卷积运算
而可以适应不同输入尺寸的原因是使用 SPP layer 替换原有 Conv5 的 Pooling 层,使用 3 种 level 的 21 个 bin 来合并生成固定大小的输出,送入到全连接层,在 bin 内部使用 Max Pooling 的方法,最后统一大小是 (16 + 4 + 1)x 256 维。这样无论输入图像是多大,SPP 输出的永远是 21x256 大小的特征向量。(256 是 Alexnet 第五个卷积层的输出维度)

3 Fast RCNN
论文:《Fast R-CNN》
先来回顾一下R-CNN和SPP-net的缺点:
1.R-CNN的缺点
-
训练分为多个阶段。首先要使用 search selective 算法从输入图像提取约 2000 个候选区域,其次要训练 CNN 网络,最后还要训练 SVM 进行分类、训练 bbox 回归器进行更为精确的位置定位。
-
训练需要花费大量的时间和空间。因为是分阶段的,CNN 将候选区域的特征提取出来以后要都存入硬盘中,之后取出用于训练 SVM 和 bbox 回归器,存储特征需要耗费大量的硬盘空间,而且读写过程会造成时间的损耗。
-
检测阶段特别耗时。因为检测时也是对带检测图像中的候选区域进行检测,每个候选区域都要进行前向传播,所以检测一张图像特别耗时。
2.SPP-net的缺点
虽然 SPP-net 对 R-CNN 有所改进,即引入了 SPP 层,使得网络在检测时不需要对每个候选区域进行前向传播,但它也继承了 R-CNN 的缺点并引入了新的缺点。
类似于R-CNN
-
训练需要分多阶段进行
-
需要将特征存入硬盘
引入的新的缺点
- 在 fune-tuning 阶段不能对 SPP 层下面所有的卷积层进行后向传播
fast rcnn 的改进点:
- 比 R-CNN、SPPNet 更高的检测质量(mAP)
- 训练只有一个阶段,使用多任务 loss(multi-task loss)
- 所有层的参数都可以 fine tune
- 对于特征缓存(feature caching)没有硬盘存储
在 SPP net 的基础上引入两个新技术
- 感兴趣区域池化层(RoI Pooling Layer)
- 多任务损失函数(Multi-task loss)
4 Faster RCNN
论文《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》