在RCNN,Fast RCNN之后,Ross B. Girshick在2016年提出Faster RCNN,将特征提取(feature extraction),proposal提取,目标定位location,目标分类classification整合到了一个网络中,性能大幅提升。作为Two-stage的代表,相比于yolo,ssd等one-stage检测方法,Faster RCNN的检测精度更高,速度相对较慢。
为了加深对Faster RCNN的理解,还是从网络结构,正负样本分配,loss函数三个方面来记录下自己的学习过程。原版Faster RCNN的backbone为VGG16, 而实际工作中,我主要使用Resnet50为backbone的Faster RCNN,这里以Resnet50_Faster_RCNN为例进行说明
1. Resnet50_Faster_RCNN 网络结构
下面两张图中,第一张是Resnet50_Faster_RCNN的网络结构流程图,第二张是详细展开后的网络卷积模块。可以发现其网络结构中主要包括Resnet50 Conv layers,RPN(Region Proposal Network), ROIPooling/ROIAlign, class/box Predictors四个模块:
1.Resnet50 Conv layers: 包括了Head, Layer1, Layer2, Layer3, Layer4,主要负责特征提取;(Head, Layer1, Layer2, Layer3为最开始的特征提取,layer4是在确定正负样本后第二次的特征提取)2.RPN:主要负责proposal的提取,给出每个proposal的属于正负样本的分数,并修正其位置;3.ROIPooling/ROIAlign:根据RPN给出的Proposal,从Feature map中得到每个proposal对应的局部feature,并进行汇总后输入下一层网络4.class/box Predictors: 预测proposal所属类别(class), 以及其位置偏移量(box regression),从而修正box
图1 resnet50_faster_rcnn流程结构图