Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
摘要
最先进的对象检测网络依赖于区域建议算法来假设对象位置。SPPnet和Fast R-CNN等技术的进步缩短了这些检测网络的运行时间,暴露出区域建议计算是一个瓶颈。在这项工作中,我们引入了一个区域建议网络(RPN),它与检测网络共享完整的图像卷积特征,从而实现了几乎免费的区域建议。RPN是一个完全卷积的网络,可以同时预测每个位置的对象边界和对象性得分。RPN经过端到端训练,生成高质量的区域建议,由Fast R-CNN用于检测。我们通过共享它们的卷积特征,将RPN和Fast R-CNN进一步合并为一个网络——使用最近流行的具有“注意力”机制的神经网络术语,RPN组件告诉统一网络该去哪里看。对于非常深的VGG-16模型,我们的检测系统在GPU上的帧速率为5fps(包括所有步骤),同时在PASCAL VOC 2007、2012和MS COCO数据集上实现了最先进的对象检测精度,每张图像只有300个建议。在ILSVRC和COCO 2015比赛中,Faster R-CNN和RPN是几个赛道获得第一名的基础。代码已公开。
Faster RCNN论文原文中算法整体结构如下:

如图,Faster R-CNN算法流程主要包括四个部分,分别是卷积层(Conv Layers)、区域建议网络(RPN)、感兴趣区域池化(RoI Pool)和检测网络(Classifier)。各部分功能如下:
- 卷积层:卷积层是输入图像的特征提取器,作用是提取输入图像的全图特征,用于RPN推荐区域生成和RoI区域池化。卷积层可以采用多种网络结构来实现,比如Vgg/ResNet,本文代码实现部分采用的是Vgg16部分结构;
2. RPN:RPN作用是生成候选框。RPN在特征图上滑动,对特征图上每个位置生成一定数量的先验框anchors,再结特征图分类和回归结果对先验框位置进行校正,从中选取符合要求的候选区域proposals用于区域池化和目标检测;
3. 区域池化:区域池化的作用是根据proposals区域位置在特征图上进行特征截取,并将截取的特征缩放到固定大小以便于检测网络进行分类和回归;
4. 检测网络:检测网络是最终对proposals进行分类和回归的全连接网络,用于对proposals进行更为精确的分类和位置回归。
Faster RCNN算法实现
图2展示了python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像:
- 首先缩放至固定大小MxN,然后将MxN图像送入网络;
- 而Conv layers中包含了13个conv层+13个relu层+4个pooling层;
- RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;
- 而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

Region Proposal Networks(RPN)
经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如R-CNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。