Paper-info
title : R-FCN: Object Detection via Region-based Fully Convolutional Networks [2016-NIPS]
author : Jifeng Dai, Yi Li, Kaiming He, Jian Sun.
Motivation
R-FCN是对Faster RCNN的进一步优化、提升。首先来看Faster RCNN的pipeline:
feature_maps = process(image)
ROIs = RPN(feature_maps) # anchor-based. Faster than Fast RCNN!
for ROI in ROIs
patch = roi_pooling(feature_maps, ROI) # time costly !
results = detector(patch)
它的一个显著的缺点:RPN产生的每一个ROI都需要结合feature_map通过roi_pooling来抽取roi_feature,由于ROIs之间往往存在大量的overlap,因此在roi_pooling环节会产生算力的浪费!针对这一缺点,R-FCN提出来基于位置敏感得分图( position-sensitive score maps)的全卷积层来实现整张图片detection环节的计算共享,从而加速了网络forward(inference)的速度!
Outline
feature_maps = process(image)
ROIs = RPN(feature_maps)
score_maps = compute_score_map(feature_maps) # computation shared
for ROI in ROIs
V = roi_pooling(score_maps, ROI)
class_scores, box = average(V) # Much simpler!
class_prob = softmax(class_scores)
Details
- position-sensitive score maps
假定5x5的feature_map上存在一个3x3的方形物体,通过设计合适的filter依次检测该方形物体的左上、左中、左右、...、中部、... 、底上、底中、底右9个区域(部分)的激活相应,得到如上图所示的9个score_maps。我们称这些score_maps为位置敏感得分图(position-sensitive score maps),因为每个feature_map都表示object在相应区域的激活相应(score).
- position-sensitive roi-pool
上图中5x5的feature_map中包含一个竖立的ROI,首先计算它的9个部位的score_maps,然后询问各score_map包含object的相应区域的可能性, 然后将这些可能性存到图右侧所示3x3的vote-array。整个将score_maps和ROI映射为vote-array的过程称为位置敏感ROI池化(position-sensitive roi-pool).下图展示了位置敏感ROI池化的算例(以ROI左上角区域TL为例,大约40%的区域的激活值为0,剩下60%的激活值为1,这样它对应的average为0.6,因此在vote-array左上角的位置记录0.6,其余位置类似处理...):
经过位置敏感ROI池化操作之后,即可得到该ROI的vote-array和class score:
论文中给出的person category的roi-pool图示(这里k=3):
- roi-pool for classification
假定检测任务涉及到的类目个数为C+1(这里多出的1个类表示背景),在roi-pool环节每个类目需要有自己的k^2个score_maps,因此共需要生成k^2(C+1)个score_maps。在计算vote-array时,每个类结合ROI并根据自己的score_maps来产生vote_array.
- roi-pool for bbox regression
基于backbone产生的feature_map,通过4 x k x k个filter操作产生4k^2个用于bbox-regression的score_map。然后,对于每个ROI利用position-based的ROI-pool策略输出k^2个bboxes,最终预测的bbox则为这k^2个bboxes的均值.
Result
Conclusion
- position-sensitive score_map/roi_pool确实有效地解决了Faster RCNN在roi_pool环节computation浪费的缺点,大幅提升了模型的inference速度(20x);
- R-FCN的检测精度并不比Faster RCNN的检测效果差!
Reference
[2]. https://www.cnblogs.com/guoyaohua/p/8994246.html