Faster R-CNN详解

时间:2022-11-28 17:52:20

Faster R-CNN

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。

Faster R-CNN详解

Faster R-CNN算法流程

1.将图像输入网络得到相应的特征图;
2.使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵;
3.将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

Faster R-CNN详解

第一步第三步和Fast R-CNN一样,区别是第二步,使用RPN生成候选框。

RPN结构

Faster R-CNN详解

我们在特征图上生成一个滑动窗口,每滑动一次生成一个一维向量,然后通过两个全连接层分别生成目标概率和边界框回归参数。2k指的是针对我们的k个anchor boxes为前景和背景的概率,并不对其进行分类。4k指的是针对我们的k个anchor boxer生成的边界框回归参数。256-d指的是backbone的深度,ZF网络为256,VGG的话为512。

Faster R-CNN详解

对于特征图上的每个3x3的滑动窗口,计算出滑动窗口中心点对应原始图像上的中心点,并计算出k个原图特征图。Faster R-CNN中给出了三种anchor的尺度和比例,分别是{1282,2562,5122},{1:1,1:2,2:1}。所以我们每个滑动窗口在原图中都会有9种anchor。

Faster R-CNN详解

RPN生成的候选框有上万个,对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片大约只剩2k个候选框。训练RPN我们从上万的候选框中采样其中256个anchor,这256个anchor是由正负样本组成的,他们的比例大约是1:1,正样本不足采用负样本补齐。对于正样本,我们把与ground-truth box相交的IOU超过0.7的称为正样本。极少数情况下,如果正样本不足,会取ground-truth box相交的IOU超过最大的anchor为正样本。对于负样本,我们把与ground-truth box相交的IOU低于0.3的称为正样本。

RPN损失函数

Faster R-CNN详解

pi表示第i个anchor预测为真实标签的概率;
pi*当为正样本时为1,当为负样本时为0;

ti表示预测第i个anchor的边界框回归参数;
ti*表示第i个anchor对应的GT Box;

Ncls表示一个mini-batch中的所有样本数量256;
Nreg表示anchor位置的个数(不是anchor个数)约2400。
取λ为10,240与256差不了多少,所以pytorch官方实现统一用Ncls
损失函数由两部分,先看分类损失,使用softmax Cross Entropy:

Faster R-CNN详解

使用Binary Cross Entropy:

Faster R-CNN详解

对于边界回归损失:

Faster R-CNN详解

Faster R-CNN训练

原论文中采用分别训练RPN以及Fast R-CNN的方法:
(1)利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
(2)固定RPN网络独有的卷积层以及全连接层参数,再利用ImageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数;
(3)固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数;
(4)同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络。

而我们现在直接采用RPN Loss+ Fast R-CNN Loss的联合训练方法。