前言
本文参考来源于b站up主霹雳吧啦Wz.
原视频
.
Faster R-CNN是作者作者Ross Girshick继Fast R-NN之后的又一力作。同样使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。
文章目录
理论部分
1.Fast R-CNN简介
在讲Faster R-CNN之前我们先来简单的看一下它的上一代算法:Fast R-CNN
Fast R-CNN算法的流程可以分为三个步骤:
-
通过使用Selective Search方法在一张图片上生成1000~2000个
候选区域
(这种方法在Faster R-CNN中RPN网络被替代) -
将图像输入卷积网络生成相应的
特征图
,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。(也就是相当于有了一张特征图,然后在特征图上将ss算法扫到的区域框出来) - 将每个特征矩阵通过ROI pooling层缩放到7×7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
2.Faster R-CNN简介
Faster R-CNN算法的流程可分为三个步骤:
-
将图像输入网络得到相应的
特征图
-
使用RPN结构生成候选框,将
RPN生成的候选框投影到特征图上
获得相应的特征矩阵 -
将每个特征矩阵
通过ROI pooling层缩放到7×7大小的特征图
,接着将特征图
展平
通过一系列全连接层得到预测结果
实际上我们的Faster R-CNN可以看作是
RPN+Fast R-CNN
这个形式。Faster R-CNN和Fast R-CNN最主要的区别就在于:
Faster R-CNN将候选框的推举交给RPN网络来实现(替代了SS算法)
。
因此我们的研究重点就在于RPN网络。
3. RPN网络
参数解释
首先,由上一步的conv layers生成了conv feature map。在这张特征图上,我们使用一个滑动窗口进行滑动。每滑动到一个位置上时候,我们就生成一个1-dim向量。在这个向量基础上再通过两个全连接层,分别输出目标概率和边界框回归参数。其中:
-
256-d:因为我们前面的backbone网络使用的是
ZF网络
,它所输出的特征图是
256-d
。如果使用
VGG-16
,生成的特征图就是
512-d
。 - 2k:是指k个anchor boxes,每个anchor boxes生成两个概率(前景和背景)。所以k个anchor boxes会生成2k个scores。
- 4k:对每个anchor boxes我们会生成4个边界框回归参数。所以k个anchor boxes会生成4k个coordinates。
anchor boxes解释
首先明确上图的含义,左边是原图,右边是相应的特征图,我们使用一个3*3滑动窗口在特征图上进行滑动的时候,特征图会存在一个中心点,通过推算出该中心点在原图上的对应位置,在原图上以这个中心点为中心,生成一系列anchor boxes。举个例子,就是如下这种效果:
对于k个anchor boxes,存在2k个scores。两个两个为一组(前景和背景的概率),一共k组。比如第一组:
- 0.1代表其中一个anchor boxes框选(比如是图中的正方形框)的内容是背景的概率是0.1;
- 0.9代表其中一个anchor boxes框选(比如是图中的正方形框)的内容是前景的概率是0.9;
这里只是对它进行背景还是前景的预测,并没有进行分类!
对于k个anchor boxes,存在4k个coordinates。每四个为一组,共k组。
-
dx
,
d
y
d_x,d_y
d
x
,
d
y
是anchor中心点的坐标; -
dw
,
d
h
d_w,d_h
d
w
,
d
h
是anchor的宽和高的调整参数;
论文里面给出了三种尺度(面积)的anchor(
128
2
,
25
6
2
,
51
2
2
128^2,256^2 ,512^2
1
2
8
2
,
2
5
6
2
,
5
1
2
2
),三种比例(1:1,1:2,3:1),每个位置(每个滑动窗口)在原图上都对应
3∗
3
3*3
3
∗
3
,9个anchor。
这里有个点需要注意:
对于ZF感受野为171;对于VGG感受野为228。可是我们从上面可以知道,生成的anchor有256和512的,那么感受野还没有这个anchor大,我们能进行判断嘛?
如上图:作者给出了相应的解释,作者认为一个比较小的感受野(也就是看见一个物体的一部分),我们也可以大概的知道这个物体是什么。(有种窥一斑也可以知全豹的感觉)。实际使用的时候也证明这样是有效的。
对于一张1000x600x3的图像,大约有 60x40x9(20k)个anchor,忽略跨越边界的 anchor以后,剩下约6k个anchor。对于RPN 生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU 设为0.7,这样每张图片只剩2k个候选框。
RPN训练过程中正负样本的选择标准
通过滑动窗口在特征图上进行滑动,我们得到了上万个anchor,这些anchor不能都用来训练RPN网络。在原论文中作者说每张图片我们随机的采样256个anchor。这256个anchor是由正样本和负样本组成。正负样本的比例为1:1。如果正样本不足一半,我们就用负样本来填充。
下面是正负样本的选择标准:
正样本的选择标准:
- an anchor that has an IoU overlap higher than 0.7 with any ground-truth box.
- the anchor/anchors with the highest Intersection-overUnion (IoU) overlap with a ground-truth box
负样本的选择标准:
We assign a negative label to a non-positive anchor if its IoU ratio is lower than 0.3 for all ground-truth boxes.
丢弃掉的anchor:
Anchors that are neither positive nor negative do not contribute to the training objective.
RPN Multi-task loss
其中:
i: the index of an anchor in a mini-batch
p
i
p_i
p
i
:第i个anchor预测为object的概率
p
i
∗
:
p_i^*:
p
i
∗
:
当为正样本时候为1,当为负样本时候为0
t
i
t_i
t
i
: 表示预测第i个anchor的边界框回归参数
t
i
∗
t_i^*
t
i
∗
:表示第i个anchor对应的GT Box的边界框回归参数
N
c
l
s
N_{cls}
N
c
l
s
:表示一个mini-batch中的所有样本数量256
N
r
e
g
N_{reg}
N
r
e
g
:表示anchor位置的个数(不是anchor个数)约2400(60*40)
λ
\lambda
λ
=10
分类损失
按多类别交叉熵损失来理解:
按二值交叉熵损失理解:
Fast R-CNN Multi-task loss
4.Faster R-CNN训练
直接采用RPN Loss+ Fast R-CNN Loss的联合训练方法
原论文中采用分别训练RPN以及Fast R-CNN的方法:
- 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
- 固定RPN网络独有的卷积层以及全连接层参数,再利用 ImageNet预训练分类模型初始化前置卷积网络参数,并利用RPN 网络生成的目标建议框去训练Fast RCNN网络参数。
- 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN 网络独有的卷积层以及全连接层参数。
- 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全 连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层 参数,构成一个统一网络。
5.Faster R-CNN框架
Faster R-CNN应用了端对端的思想,将Region proposal;Feature extraction;Classification;Bounding-box regression都融合进了CNN网络。
Faster R-CNN与前代算法框架的比较: