Faster R-CNN在出现5年之后,据称也仍是一个常用的目标检测做法,值得了解学习一下其整个系列的思路。
R-CNN(Regions with CNN features)系列有最开始的R-CNN,改进的Fast R-CNN,和之后再改进的Faster R-CNN。
比较好的对比,和总结:
- 一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
- 一文读懂Faster RCNN
- R-CNN & Fast R-CNN & Faster R-CNN
- 捋一捋pytorch官方FasterRCNN代码
- 只用RPN检测和SSD的简单说明
1. R-CNN
R-CNN包含3个模块:
- Region proposals (selective search)
- Compute CNN features (CNN feature extraction)
- Classify regions (SVM)
缺点(Fast R-CNN中提出):
- multi-stage 训练
- 训练耗费空间和时间
- test阶段检测很慢,因为每个proposal都要CNN处理一遍
2. Fast R-CNN
Fast R-CNN对R-CNN的改进在于:
- 更好的检测效果(mAP)
- 用多任务的loss,只需进行single-stage的训练
- 训练可以更新所有网络层
- 不需要另外对提取的feature进行缓存
最核心的在于,不用针对很多个ROI区域分别进行CNN,只需要对卷积层输出的feature map用ROI pooling,获取固定大小的feature给到FC层,即可只需要一次操作。
增加的操作有:
- 借鉴SPP-Net的ROI Pooling,见Region of interest pooling explained
3. Faster R-CNN
Fast R-CNN用selective search进行region proposal仍然较慢,Faster R-CNN进一步加速。
相比Fast R-CNN,增加了:
- RPN网络 & anchor
一个有意思的思考点在于:RPN已经有了检测功能,单纯用RPN是否就够了?
StackOverflow上有一个对应的问题why don’t we just use only rpn for detection,但似乎没有特别好的答案。大部分答案表示,R-CNN是一个2stage的方案,前一个stage提供proposal,可能performance会比较差,后一个stage进行提升。
但也有提到这篇行人检测的论文Is Faster R-CNN Doing Well for Pedestrian Detection?,其中提到对于单类别的检测,RPN可能已经够了。而且对于行人等比较小的object还需要针对分辨率低的问题进行一些提升。