文章目录[隐藏]
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
核心是region proposal network(RPN)。本质上是把fast r-cnn当中region proposal的方法从selective search算法替换成RPN。论文提到的训练方法现在已经不用了,pytorch的官方实现当中直接进行了联合训练。
摘要
当前(faster r-cnn提出前)SOTA的目标检测网络需要region proposal算法假设目标位置。如SPPnet和Fast R-CNN都尝试减少这些检测网络的运行时间,这就暴露了region proposal的计算是目标检测的一个瓶颈。作者引入一个region proposal network(RPN),与检测网络一起共享全图的卷积特征,因此几乎可以做到无代价的region proposal。RPN网络是一个全卷积网络,可以同时预测目标在每个位置的边界以及得分。RPN可以被端到端地训练来生成高质量的region proposal,然后通过fast r-cnn进行检测。
介绍
proposal是当前SOTA检测算法的计算瓶颈。
通过深度网络来计算proposal既优雅又高效,作者引入RPN并与SOTA目标检测网络共享卷积层。计算proposal的代价很小(10ms/张)。
用faster r-cnn的提取卷积特征图同样可以用于生成region proposal。在这些卷积特征的基础上添加两层额外的卷积层:一层用于将卷积特征图编码至一个256d的特征向量,另一层在256d特征向量(原文说是在每个conv map position,但是看结构图是256d特征向量)上生成k个region proposal的目标得分以及边界回归。
RPN也是一种全卷积网络。同样可以进行端到端的训练。
RPN
图左是RPN,图右是使用RPN得到建议框的一些例子。
RPN以任意尺寸图像作为输入,输出一组建议框和对应的目标分数。这是通过一个全卷积网络实现的。
为了生成region proposal,我们在共享的最后一层卷积层(一般是某个模型的最后一个卷积层,比如ZF、VGG16)使用一个小网络(3x3的滑动窗,看视频解释是说是用的3x3卷积)进行滑动。该网络和输入的卷积特征图进行全连接。每个滑动窗口都映射到成低维向量(ZF为256d,VGG为512d)。这个向量被输入至两个同级全连接层,即一个是边界回归层(reg),另外一个是分类层(cls)。
anchors
在每个滑动窗口位置(也就是中心点,RPN里面3x3窗口内蓝色的小点),同时预测k个region proposal(可以理解成anchor,后面都当作是anchor),因此reg层编码k个anchor会得到4k个输出(也就是边界框回归输出的4个参数,x和y的偏移量,w和h的缩放因子)。cls层得到2k个输出来估计前景/背景的概率。
三种尺度(面积)
{
12
8
2
,
25
6
2
,
51
2
2
}
\{128^2,256^2,512^2\}
{1282,2562,5122},(视频里面说是由经验所得,论文好像也没提到?)
三种比例
{
1
:
1
,
1
:
2
,
2
:
1
}
\{ 1:1, 1:2, 2:1 \}
{1:1,1:2,2:1}
每个位置在原图上都对应有
3
×
3
=
9
3\times3=9
3×3=9个anchor
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
region proposal的损失函数
为了训练RPN,为每个anchor分配一个二进制类别的标签(即是否为目标,也就是上面提到的前景/背景)。定义两种情况为正标签:
- 和ground truth box有着最大IOU的anchor
- 和任何ground truth box的IOU大于0.7的anchor
需要注意的是一个ground truth box可能会对应多个anchor。而负标签定义为:对于所有ground truth box,IOU小于0.3的anchor。
不满足正负标签条件的anchor均被舍弃,不参与训练。
RPN的损失函数:
L
(
{
p
i
}
,
{
t
i
}
)
=
1
N
c
l
s
∑
i
L
c
l
s
(
p
i
,
p
i
∗
)
+
λ
1
N
r
e
g
∑
i
p
i
∗
L
r
e
g
(
t
i
,
t
i
∗
)
L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*)
L({pi},{ti})=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)
p
i
p_i
pi表示第i个anchor预测为真实标签的概率
p
i
∗
p_i^*
pi∗当为正样本时为1,当为负样本时为0
t
i
t_i
ti表示第i个anchor的边界框回归参数
t
i
∗
t_i^*
ti∗表示第i个anchor对应的ground truth bbox的边界框回归参数
N
c
l
s
N_{cls}
Ncls表示一个mini-batch中所有样本数量,论文为256
N
r
e
g
N_{reg}
Nreg表示中心点的个数,约2400
λ
\lambda
λ为超参数,论文为10
t
x
=
(
x
−
x
a
)
/
w
a
,
t
y
=
(
y
−
y
a
)
/
h
a
,
t
w
=
log
(
w
/
w
a
)
,
t
h
=
l
o
g
(
h
/
h
a
)
t_x=(x-x_a)/w_a,t_y=(y-y_a)/h_a,t_w=\log(w/w_a),t_h=log(h/h_a)
tx=(x−xa)/wa,ty=(y−ya)/ha,tw=log(w/wa),th=log(h/ha)
t
x
∗
=
(
x
∗
−
x
a
)
/
w
a
,
t
y
∗
=
(
y
∗
−
y
a
)
/
h
a
,
t
w
∗
=
log
(
w
∗
/
w
a
)
,
t
h
∗
=
l
o
g
(
h
∗
/
h
a
)
t_x^*=(x^*-x_a)/w_a,t_y^*=(y^*-y_a)/h_a,t_w^*=\log(w^*/w_a),t_h^*=log(h^*/h_a)
tx∗=(x∗−xa)/wa,ty∗=(y∗−ya)/ha,tw∗=log(w∗/wa),th∗=log(h∗/ha)
x,y,w,h表示box中心(不是左上角)的坐标、宽度和高度。x表示预测box,
x
a
x_a
xa表示anchor box,
x
∗
x^*
x∗表示ground truth box。可以认为是anchor box回归到附近的ground truth box。个人理解相当于通过输入
x
a
x_a
xa输出x,然后得到误差
x
−
x
a
x-x_a
x−xa,根据
x
∗
−
x
a
x_*-x_a
x∗−xa不断修正x。
参考:
Faster RCNN理论合集
版权声明:本文为CSDN博主「明天一定早睡早起」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/laonafahaodange/article/details/122674542
暂无评论