Introduction
作者的本意说白了就是:
让 ‘生成RP’ 这个task也能享受到GPU的利好。
RP原本主要用SS (Selective Search) 来生成,只能在CPU上跑。一张图片生成~2,000个proposal,效率0.5fps,实在太慢。
想让GPU来揽下这个活儿,就必须把问题转换成GPU能接受的任务形式:network。
对应的,设计出来的network自然就叫 RPN (Region Proposal Network) 了。
RPN抱上了GPU的大腿,每张图片还是生成~2,000个proposal,但是效率飞跃到了100fps。
Structure
以下是我画的Faster R-CNN结构:
RPN
以下是我画的RPN结构:
从此,“生成RP”的市场被RPN完全垄断了。
至于one-stage系,它们压根不需要生成RP,自然也就从未引进RPN。
Note:
- 不生成RP的Detection算法都是one-stage系;
- 生成RP的Detection算法都是two-stage系或者古老的multi-stage系。
Anchor
没有了SS,network要如何“从无到有”地生成~2,000个proposal呢?RBG大神想到了在输入RPN的feature map (在Faster R-CNN上还只是topmost的feature map,到了后来就被玩坏了,各种特殊处理过的feature map被) 上
“anchor”这个名词是Faster R-CNN第一个提出来的。前人也有过类似尝试,但没有研究这么深。
后来的SSD承接了Faster R-CNN的设计,选用的“anchor套餐”和Faster R-CNN不一样:
“anchor套餐” | 生成方式 | 生成位置 | 生成anchor数 | k值 |
---|---|---|---|---|
Faster R-CNN 的选择 | conv:3×3 | conv5_3 | 3×3=9 | |
SSD 的选择 | conv:3×3(前五层)、conv:1×1(第六层) | conv4_3、fc7、conv8_2、conv9_2、conv10_2、conv11_2 | 6(第二~四层)、4(第一、五、六层) |
从multi-scale的角度看:
- SPPNet第一个提出了multi-scale,但只是在topmost feature map上尝试通过SPP Layer(多scale的max pooling)来实现的multi-scale;
- Fast R-CNN在该方向无作为;
- Faster R-CNN号称自己的multi-scale anchor能够好过你们这些pyramid;
- YOLOv1在此方向亦无所作为;
- SSD第一个在multi-scale feature map上尝试“multi-scale”;
- 后人基本都把“multi-scale”作为了标配。
Loss
Faster R-CNN一共有4个loss,包括:
- RPN 的 二分类loss、reg loss ;
- Fast R-CNN 的 全分类(k+1)loss、reg loss 。
Innovation
RPN的出现,使得SS走入历史。
speed上:
- 解决了two-stage系的 proposal瓶颈 。
accuracy上:
- 对 Fast R-CNN 的一次大提升。
Result
- ILSVRC2015 1st-place
- COCO2015 1st-place
Thinking
Faster R-CNN将Fast R-CNN中的“网络化”趋势做到了极致,实现了“All in one network”。
[1] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks