Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.
本文是继RCNN,Fast RCNN之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。
思想
从RCNN到Fast RCNN,再到本文的Faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
Faster RCNN可以简单地看做“区域生成网络+Fast RCNN“的系统,用区域生成网络(RPN)代替Fast RCNN中的Selective Search方法。本篇论文着重解决了这个系统中的三个问题:
- 如何设计区域生成网络
- 如何训练区域生成网络
- 如何让区域生成网络和Fast RCNN网络共享特征提取网络
区域生成网络(Region Proposal Network)
RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,因为anchor机制和边框回归可以得到多尺度多长宽比的region proposal。我们通过如下VGG模型进行分析:
以上是script_faster_rcnn_demo.m
代码中使用的VGG网络结构proposal + detection
,我们输入一张图片375x500 (进行尺度缩放后为600x800, 即对应于test_scales=600,短边最短为600,长边最长不超过1000进行的缩放:Reference),然后将其处理成caffe输入的blob格式im_blob: 800x600x3
输入到proposal
(RPN)网络中:Reference,经过卷积操作后得到最后一层conv5_3的卷积特征图feature map(大小为50x38,共有512个,ZF则有256个)。在这个特征图上使用3x3的卷积核(滑动窗口)与特征图进行卷积后,可以得到一个512维的特征向量50x38x512,后面接 cls layer
和 reg layer
分别用于分类和边框回归(跟Fast R-CNN类似,只不过这里的类别只有目标和背景两个类别)。
- cls layer即
proposal_cls_score层
:输出每一个位置上,9个anchor属于前景和背景的概率(代码中只取了每个位置属于前景的概率:Reference,即 17100x1 = 50x38x9个anchors属于前景的概率); - reg layer即
proposal_bbox_pred层
:输出每一个位置上,9个anchor对应窗口应该平移缩放的参数(之后可使用该参数,对缩放后的原图上的50x38x9个anchors进行边框回归,修正每个anchor属于前景的位置)
就局部来说,这两层是全连接网络;
就全局来说,由于网络在所有位置(共50x38个)的参数相同,所以实际用尺寸为1×1的卷积网络实现。
这样设计的好处是什么呢?虽然现在也是用的滑动窗口策略,但是:滑动窗口操作是在卷积层特征图上进行的,维度较原始图像降低了16x16倍(中间经过了4次2x2的pooling操作);多尺度采用了9种anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,所以即便是这9种anchor外的窗口也能得到一个跟目标比较接近的region proposal。
候选区域(anchor)
我们通过RPN网络,可以得到最后一个卷积层conv5_3的feature map大小50x38(因为输入的im_blob格式是width优先),我们取featuremap_size为38x50
,这是为了与缩放后的原图(height优先)600x800
进行对应。然后我们计算该38x50个像素点对应于缩放后原图中的位置,即将feature map中的每个像素点位置×conf.feat_stride,即可映射回缩放后原图的位置(感受野的概念)。接着使用映射回缩放后原图上的点,共38x50个位置,计算其在缩放后原图上的9个anchors,即9个可能的候选窗口:三种面积 {