本文先简单介绍一下:R-CNN、SSP、Fast R-CNN算法的流程,然后再从网络结构、训练过程、实现几个方面来介绍Faster R-CNN。
相关知识:
1、R-CNN
R-CNN网络其实就是一个分类器
,对提取到的候选区域(region proposal)进行分类,它的准确度主要依赖于候选区域算法。
2、SSP
流程:
(1)在原始图像上用Selective Search算法得到region proposals
(2)将整张图片前馈神经网络然后得到conv feature maps
(3)将region proposals映射
到conv feature maps得到多个proposal feature maps
(4)将每个proposal feature maps分别输入SSP层 -> fc层,最后进行分类(SVM)和回归
每个候选区域对应的feature map的大小是不同的,但SSP网络中有全连接层,全连接层的输入维度需固定。故SSP中加入了SSP层(空间金字塔池化),将候选区域feature map分成1×1、2×2、4×4的子图,然后在每个小区域做max pooling。这样,经过SSP层的输出维度都是(1+4+16)×256(conv5的深度为256)。
3、Fast R-CNN
改进之处:
(1)ROI Pooling Layer实际上是SPP-NET的一个精简版,SPP-NET对每个Proposal使用了不同大小的金字塔映射,而ROI Pooling Layer只需要下采样到一个7x7的特征图
(2)Fast R-CNN使用softmax进行分类
(3)引入multi-task loss函数
(4)除提取候选区域外,其他部分实现了end-to-end训练。
正文
候选区域计算是目标检测算法的一个瓶颈,传统候选区域算法如Selective Search
,速度极慢,处理一张图片需耗时2s。
Faster R-CNN的核心在于share
。Faster R-CNN在Fast R-CNN的基础上加入了RPN网络,RPN网络和Fast R-CNN的检测网络共享一套conv layers
。使用RPN网络来提取候选区域,仅需10ms。检测一张图片中的目标仅需198ms,帧速率为5fps。
RPN层得到目标所在的区域以及此区域有无目标的概率;Fast R-CNN部分则整合之前的信息得到目标所在区域的精细坐标以及类别置信度。
Faster R-CNN网络组件:conv layers、RPN、ROIPoolong、分类和回归。
以基于VGG16的Faster R-CNN网络为例,conv layers
使用VGG16,有13个conv层和4个pooling层,用于特征提取,得到conv feature maps;RPN
为全卷积网络(FCN),用于生成region proposals;将proposals映射到conv feature maps上得到proposal feature maps,ROIPooling
将proposal feature maps分为7×7的子图,再做max pooling,将结果输入后续的全连接层做分类和回归。
Faster R-CNN中各层的参数可参考
:Faster R-CNN网络(重要)
1、conv layers
c
o
n
v
conv
conv:
k
e
r
n
a
l
kernal
kernal
s
i
z
e
=
3
,
p
a
d
=
1
,
s
t
r
i
d
e
=
1
size=3,pad=1,stride=1
size=3,pad=1,stride=1
p
o
o
l
i
n
g
pooling
pooling:
k
e
r
n
a
l
kernal
kernal
s
i
z
e
=
2
,
p
a
d
=
0
,
s
t
r
i
d
e
=
2
size=2,pad=0,stride=2
size=2,pad=0,stride=2
卷积层:使用了填充
,输入维度
w
×
h
w×h
w×h --> 输出维度
w
×
h
w×h
w×h
池化层:不使用填充,输入维度
w
×
h
w×h
w×h --> 输出维度
w
/
2
×
h
/
2
w/2×h/2
w/2×h/2
conv layers中有4个pooling层,故下采样倍数
s
t
r
i
d
e
=
16
stride=16
stride=16。
输入维度
M
×
N
M×N
M×N ,输出feature map维度为
M
/
16
×
N
/
16
M/16×N/16
M/16×N/16
2、Region Proposal Networks
在feature map的每个位置上都会预先设置k个anchor / default boxes
,RPN网络输出2个scores
和4个offset
。score表示此位置有无目标
的概率(此为二分类问题,故使用log loss损失函数);offset中有4个值:表示平移和缩放
的大小,通过对default boxes的平移和缩放可以使预测框与GT更加匹配
(使用smooth L1损失函数,既对离群值和异常值不敏感,同时可快速收敛,且不会发生梯度爆炸问题)
conv feature map的每个位置预测k个最有可能的region proposals即k个anchor boxes,对于W×H大小的conv feature map,总共有W×H×K个anchors。
k默认值为9,包括3个尺度和3个比例,这种基于 pyramid of anchors
方法实现了multi-scale predictions
。其他比较经典的方法是基于 image/feature pyramid
和pyramid of filters
。
w×h
的 feature map先经过一个3×3×512的卷积(512是feature map的维度),这一层的存在可以扩大感受野;然后有两条支路,上路用于scores预测,采用1×1×18的卷积,输出为w×h×18
;下路用于coordinates预测,采用1×1×36的卷积,输出为w×h×36
。
(18->2个scores值*9个)
RPN训练
在训练RPN时,我们会给通过RPN网络得到的anchor分配一个positive label 或者negative label。
以下两种case给anchor分配一个positive label
;
(1)当anchor与一个GT的 IOU 最大
;
(2)当anchor与任意GT的IOU大于0.7
在 non-positive anchor 中,当anchor与GT的IOU小于0.3,给其分配一个negative label
。
其余没有标签的anchor将不参与
训练
Loss 函数
分类使用log loss
损失函数,回归使用smooth L1
损失函数。
p
i
p_{i}
pi 表示
a
n
c
h
o
r
i
anchor_{i}
anchori 中有目标的概率,
p
i
∗
p_{i}^{*}
pi∗ 为
真实框
G
T
真实框GT
真实框GT 的
l
a
b
e
l
label
label,
a
n
c
h
o
r
anchor
anchor 为
p
o
s
i
t
i
v
e
positive
positive
l
a
b
e
l
label
label,则
p
i
∗
=
1
p_{i}^{*} =1
pi∗=1
a
n
c
h
o
r
anchor
anchor 为
n
e
g
a
t
i
v
e
negative
negative
l
a
b
e
l
label
label,则
p
i
∗
=
0
p_{i}^{*} =0
pi∗=0
被标注为 n e g a t i v e negative negative l a b e l label label 的 a n c h o r anchor anchor 不参与reg部分的训练
N
c
l
s
=
256
N_{cls} = 256
Ncls=256 为 mini-batch size
N
r
e
g
=
2400
N_{reg}=2400
Nreg=2400 为 anchor locations的数量
λ
=
10
\lambda=10
λ=10
bounding box 回归部分的公式如下:
x
、
y
、
w
、
h
x、y 、w、 h
x、y、w、h 分别预测框的中心坐标以及宽和高。
x
a
、
y
a
、
w
a
、
h
a
x_{a}、y_{a} 、w_{a}、 h_{a}
xa、ya、wa、ha 分别是default box的中心坐标以及宽和高
等价于:
RPN网络输出4个offset:
t
x
、
t
y
、
t
w
、
t
h
t_{x}、t_{y} 、t_{w}、 t_{h}
tx、ty、tw、th。通过对default box进行平移和缩放,使得预测框与真实框GT更加接近。
待续
cascade RCNN
mismatch:training阶段和inference阶段,bbox回归器的输入分布不一样,training阶段的输入proposals质量更高(被采样过,IoU>threshold),inference阶段的输入proposals质量相对较差(没有被采样过,可能包括很多IoU<threshold的)
proposal自身的IOU分布与训练用的IOU阈值较为接近的时候,检测器效果才最好。RPN提出的proposals大部分质量不高,IOU阈值设置过高会导致detector结果不理想。
Cascade R-CNN通过级联的方式逐阶段提高IOU的阈值,利用前一阶段的结果对proposal重新采样输入下一阶段,从而后一个阶段接收的proposals质量更高,可以接受更高的IOU阈值。
https://zhuanlan.zhihu.com/p/42553957
轻松掌握 MMDetection 中常用算法(二):Faster R-CNN|Mask R-CNN
轻松掌握 MMDetection 中常用算法(五):Cascade R-CNN
ROI
(1)候选区域位置取整
(2)将候选区域分为kxk个单元,k取整
参考:
https://zhuanlan.zhihu.com/p/31426458
http://lanbing510.info/2017/08/24/RCNN-FastRCNN-FasterRCNN.html
https://zhuanlan.zhihu.com/p/24916624