Faster R-CNN

Faster R-CNN整体结构

首先附上Faster RCNN的详细架构图

Faster R-CNN
图1 Faster R-CNN Architecture

简化版的框架如图2、图3所示:

Faster R-CNN
图2 Faster R-CNN brief1 Architecture
Faster R-CNN
图3 Faster R-CNN brief2 Architecture

Faster RCNN共涉及两个网络,每个网络都是分别训练的。实际编程实现的时候可以一气呵成,实现end to end。这个训练包含四个损失

  • RPN Classification (Object or not object)
  • RPN Bounding box proposal
  • Fast RCNN Classification (Normal object classification)
  • Fast RCNN Bounding-box regression (Improve previous BB proposal)
    四个损失在网络中的位置如图4所示:
Faster R-CNN
图4 Faster R-CNN four losses

Faster RCNN的训练过程包含四步
第一步,训练RPN得到rough proposals;
第二步,利用rough proposals训练Fast RCNN;
第三步,使用Fast RCNN训练出的参数作为shared feature map及其之前的网络的初始值并固定不变,对shared feature map之后的RPN网络进行微调得到refined proposals;
第四步,仍然使用上次Fast RCNN训练的参数作为初始值并固定shared feature map之前的部分,利用refined proposals对Fast RCNN中shared feature map之后的部分进行微调。

Anchor的作用

anchor的作用是在RPN网络中和RPN预测的box的偏差一起输入函数bbox_transform_inv得到proposals。RPN预测的box的偏差是由RPN预测的box和groundtruth比较得到的。
对于一个1000*600的图像会产生约20,000个anchor,但是有一半以上的anchor是超出图像边界的,这部分舍弃不用,每个图像只剩下约6000个anchor参与训练。如果超出图像边界的anchor也参与训练需要引入既大又难修正的误差项,训练很难收敛。
对于两个阶段中对RPN的训练产生的proposal有很多是重叠的利用NMS进行剔除,实验表明NMS不会影响最终的检测准确率但是大幅地减少了proposal的数量。
Faster RCNN原文中用到了三种宽高比值的anchor,1:1,1:2,2:1,在实际应用中可根据场景需求来进行改变,比如,如果实际的任务是行人检测,使用宽高比是1:1,2:1的anchor是不合适的。

proposal layer

proposal layer层的输入包含三个部分,在test.py的L154中可看到proposal layer的forward输入有data,rois,im_info,就是指图1中就是红色框上面的三个虚线框中的内容,(L154的forward函数的定义在proposal_layer.py的L47)。其中rpn_bbox_pred的作用是和groundtruth进行比较求出偏差;rpn_cls_prob的作用是对proposals按照预测为前景物体的得分进行排序时用;im_info的作用是将proposal的坐标映射到原图。

参考文献

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
py-faster-rcnn
Object Localization and Detection
RCNN学习笔记(7):Faster R-CNN 英文论文翻译笔记
CNN目标检测(一):Faster RCNN详解
Object detection using Faster R-CNN