Introduction
“ Head ” 在文中指连接在basemodel后面的网络结构,包括以下两部分:
- RoI warping;
- RoI-wise subnet。
Faster R-CNN和R-FCN速度都不够快,原因在于它俩的head都太heavy了。
Faster R-CNN heavy在它的RoI-wise subnet部分,因为这部分需要重复计算:
而R-FCN则heavy在它的RoI warping部分,因为这部分score map设计得太厚了(厚度为
k2(C+1)
k
2
(
C
+
1
)
,在COCO版本的代码中channel达到了3969):
论文指出,正是因为heavy-head,导致了inference speed一直是two-stage之殇。
two-stage系需要有一个算法站出来,在speed和accuracy上双双打败one-stage。
这个时候,Li Zeming大神提出了解决办法:
thin feature map + cheap RoI-wise subnet = Light-head
以Light-head作为头部的检测算法,就叫Light-head R-CNN。
其对应的网络结构如下:
Note:
- R-FCN中对于每个proposal,是一个类回归一个4-d vector来表征location信息,所以每个proposal对应C个locaton vector(背景proposal则没有location vector);到了Light-head R-CNN中,则是一个proposal,只对应一个location vector。
- 将score map的channel 从3969(COCO version)降到了490。
lizeming大神在论文中提出了基于两种basemodel的版本。其中一种基于类Xception,称之为S型Light-head R-CNN,其网络结构如下:
另外一种基于ResNet,称之为L型Light-head R-CNN。
Innovation
thin feature map + cheap R-CNN subnet = Light-head
Result
不管在哪一种basemodel下,Light-head R-CNN在检测算法之林都是一骑绝尘:
其中,Light-head R-CNN的检测性能用红色三角形表示,所采用的三种basemodel分别为Xception、ResNet-50和ResNet-101。可以明显看出,Xception为basemodel时,速度极快,但是AP值会掉非常多。
在COCO数据集上,Light-head R-CNN击败了其他所有算法,包括Faster R-CNN、Mask R-CNN和RetinaNet:
inference speed居然可以吊打one-stage系,包括SSD、YOLOv2。这边并没有列出RetinaNet,估计还是无法超越RetinaNet:
最后贴上两张效果图:
L型Light-head R-CNN效果图:
S型Light-head R-CNN效果图:
Thinking
Light-head R-CNN的故事讲得并不好。全文就一直在说自己的东西多么多么powerful,但是却缺乏理论依据,净拿数据说事。由于多少看起来有点“空手套白狼”的感觉,所以投CVPR被拒。
文中的thin feature map很反直觉。这么剧烈地压缩模型,性能居然不降反升,很令人诧异。但是作者却没有给出合理的解释,reviewer对此持怀疑态度也是可以理解的。
但其实Light-head是真的管用。tensorflow版的Light-head R-CNN作者已经开源:zengarden/light_head_rcnn,大家可以去clone下来研究研究。
[1] Light-Head R-CNN: In Defense of Two-Stage Object Detector