Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文:https://arxiv.org/abs/1506.01497
代码:Faster R-CNN、other
作者引入了一个区域提议网络(RPN),RPN 进行端到端训练以生成高质量的区域提议,Fast R-CNN 使用这些区域提议进行检测。通过共享 RPN 和 Fast R-CNN 的卷积特征,进一步将RPN和Fast R-CNN 合并 成一个单独的网络。
架构
look上图,图像经过卷积层得到特征图。为了生成区域提议(Region Proposal),在特征图上滑动一个小网络(RPN),这个小网络的输入为特征图的 n × n 窗口。每个滑动窗口映射到一个低维特征。特征被输入到两个同级的全连接的层(box 回归层和 box 分类层)。在本文中,我们使用窗口大小 n = 3,注意到输入图像上的有效感受野很大。这个小网络在下图(左)的一个位置上进行了说明。请注意,由于小网络以滑动窗口方式运行,全连接层在所有空间位置上共享。这个体系结构自然是通过 n×n 卷积层和两个同级的 1× 1 卷积层(分别用于回归和分类)来实现的。
锚
锚位于滑动窗口的中心,每个锚同时预测 k 个(3个尺度和3个比例,k = 9)区域提议,对于大小为W × H的特征图,总共有WHk个锚点(特征图中每个像素对应一个锚点,因此有WHk个) 。因此,回归层有4k(回归有4个参数)输出,编码k个边框的坐标,分类层对每个提议输出2k(前景和背景)个估计目标概率的分数。
平移不变的锚 。这个方法一个重要性质是,它是共享参数,因此平移不变,减少了模型的规模。
多尺度锚作为回归参考
图a:多尺度输入(图像金字塔),图b:多尺度滤波器(过滤金字塔)
基于锚的方法是建立在一个锚金字塔(比例不变)上,这是更经济的。我们的方法分类和回归边界框参考锚框多尺度和比例。它只依赖于单一比例的图像和特征图,并使用单一尺寸的滤波器。我们通过实验展示了该方案对多个尺度和比例的处理效果(见下表)。
由于这种基于锚的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,正如Fast R-CNN检测器所做的那样。多尺度锚的设计是共享特性而不需要额外的尺度寻址成本的关键组件。
损失函数
训练 RPN ,给每个锚分配一个二进制类标签(是否为目标)。我们为两种锚分配了一个正标签:
- 锚与 ground-truth box 有最高的IoU
- 锚与 ground-truth box 有大于0.7的IoU
请注意,一个ground-truth 框可以为多个锚分配阳性标签。通常第二个条件足以确定阳性样本;但我们仍然采用第一种条件,因为在某些罕见的情况下,第二种条件可能找不到阳性样本。如果一个非正锚的IoU比在所有的ground-truth box中低于0.3,我们就给它分配一个负标签。既不正也不负的锚点对训练目标没有贡献。
利用这些定义,我们最小化了Fast R-CNN中多任务损失后的目标函数。我们对图像的损失函数定义为:
L
(
{
p
i
}
,
{
t
i
}
)
=
1
N
c
l
a
s
s
∑
i
L
c
l
a
s
s
(
p
i
,
p
i
∗
)
+
λ
1
N
r
e
g
r
e
s
s
∑
i
p
i
∗
L
r
e
g
r
e
s
s
(
t
i
,
t
i
∗
)
L(\{p_i\},\{t_i\}) =\frac{1}{N_{class}} \sum_i L_{class}(p_i, p^∗_i) + λ \frac{1}{N_{regress}} \sum_i p^∗_i L_{regress}(t_i,t^∗_i)
L({pi},{ti})=Nclass1i∑Lclass(pi,pi∗)+λNregress1i∑pi∗Lregress(ti,ti∗)
分类损失
L
c
l
a
s
s
L_{class}
Lclass 是两个类(目标与非目标)上的对数损失 。
回归损失
L
r
e
g
r
e
s
s
(
t
i
,
t
i
∗
)
=
Smooth
L
1
(
t
i
−
t
i
∗
)
L_{regress}(t_i, t^∗_i) =\text{Smooth}_{L_1}(t_i−t^∗_i)
Lregress(ti,ti∗)=SmoothL1(ti−ti∗)。其中
Smooth
L
1
\text{Smooth}_{L_1}
SmoothL1 为平滑函数,降低敏感。
这里,
i
i
i 是一个锚框的索引,
p
i
p_i
pi 是锚框
i
i
i 的预测概率。如果定位点是正数,则 ground-truth 标签
p
i
∗
p^∗_i
pi∗ 为 1,如果定位点是负数,则为0。
预测框:
[
x
,
y
,
h
,
w
]
[x,y,h,w]
[x,y,h,w]
锚框:
[
x
a
,
y
a
,
h
a
,
w
a
]
[x_a,y_a,h_a,w_a]
[xa,ya,ha,wa]
预测框和锚框的偏移:
t
=
[
t
x
,
t
y
,
t
h
,
t
w
]
t=[t_x,t_y,t_h,t_w]
t=[tx,ty,th,tw]
t
x
=
(
x
−
x
a
)
/
w
a
t
y
=
(
y
−
y
a
)
/
h
a
,
t
w
=
l
o
g
(
w
/
w
a
)
t
h
=
l
o
g
(
h
/
h
a
)
\begin{aligned} 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)\end{aligned}
txtytwth=(x−xa)/wa=(y−ya)/ha,=log(w/wa)=log(h/ha)
ground truth 框:
[
x
∗
,
y
∗
,
h
∗
,
w
∗
]
[x^*,y^*,h^*,w^*]
[x∗,y∗,h∗,w∗]
锚框:
[
x
a
,
y
a
,
h
a
,
w
a
]
[x_a,y_a,h_a,w_a]
[xa,ya,ha,wa]
ground truth 框和锚框的偏移:
t
∗
=
[
t
x
∗
,
t
y
∗
,
t
h
∗
,
t
w
∗
]
t^*=[t_x^*,t_y^*,t_h^*,t_w^*]
t∗=[tx∗,ty∗,th∗,tw∗]
t
x
∗
=
(
x
∗
−
x
a
)
/
w
a
t
y
∗
=
(
y
∗
−
y
a
)
/
h
a
,
t
w
∗
=
l
o
g
(
w
∗
/
w
a
)
t
h
∗
=
l
o
g
(
h
∗
/
h
a
)
\begin{aligned} \\ 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) \end{aligned}
tx∗ty∗tw∗th∗=(x∗−xa)/wa=(y∗−ya)/ha,=log(w∗/wa)=log(h∗/ha)
p
i
∗
L
r
e
g
r
e
s
s
p^∗_iL_{regress}
pi∗Lregress 表示回归损失仅在正锚固时被激活(
p
i
∗
=
1
p^∗_i = 1
pi∗=1),否则被禁用(
p
i
∗
=
0
p^∗_i = 0
pi∗=0 )。分类层和和回归层的输出分别由
p
i
{p_i}
pi (预测类)和
t
i
{t_i}
ti (预测框)组成。
用
N
c
l
a
s
s
N_{class}
Nclass 和
N
r
e
g
r
e
s
s
N_{regress}
Nregress 对这两项进行归一化,并用平衡参数
λ
λ
λ 加权。
然而,我们的方法通过不同于以前基于 RoI (Region of Interest)的方法,[2]的方式实现了边界框回归。在[1]和[2]中,对从任意大小的RoIs中汇集的特征执行边界框回归,回归权值由所有区域大小共享。在我们的公式中,用于回归的特征在特征地图上具有相同的空间大小(3 × 3)。为了解释不同的大小,我们学习了一组k界盒回归器。每个回归变量负责一个尺度和比例,k个回归变量不共享权重。因此,由于锚的设计,即使特征具有固定的尺寸/规模,仍有可能预测不同尺寸的边框。
RPN 和 Fast R-CNN 共享功能
独立训练的RPN和Fast R-CNN, 会以不同的方式修改它们的卷积层。因此,我们需要开发一种技术,使允许在两个网络之间共享卷积层,而不是学习两个单独的网络。我们将讨论三种具有共享特征的训练网络方式:
-
首先训练RPN,然后使用这些提议训练Fast R-CNN。然后使用Fast R-CNN调优的网络来初始化RPN,并迭代这个过程。
-
合并 RPN 和 Fast R-CNN 。在每一次SGD迭代中,前向传递生成区域提议,这些提议在训练快速R-CNN检测器时被当作固定的、预先计算的提议来处理。反向传播像往常一样发生,对于共享层,来自RPN损失和Fast R-CNN损失的反向传播信号被合并。这个解决方案很容易实现。但是这个解决方案忽略了导数的w.r.t.,提议框的坐标也是网络响应,所以是近似的。在我们的实验中,我们的经验发现,该求解器产生接近的结果,但减少训练时间约25-50%与交替训练。这个求解器包含在我们发布的Python代码中。
-
非近似联合训练。如上所述,RPN预测的边界框也是输入的函数。Fast R-CNN中的RoI池化层接受卷积特征和预测的边界盒作为输入,所以一个理论上有效的反向传播求解器也应该包含盒子坐标的梯度。这些梯度在上述近似联合训练中被忽略。在一个非近似的联合训练解中,我们需要一个RoI池化层,它是可微的w。r。t。盒坐标。这是一个重要的问题,解决方案可以通过中开发的“RoI扭曲”层给出,这超出了本文的范围。
本文采用一种实用的四步训练算法,通过交替优化学习共享特征。在第一步中,我们按照前面的描述训练RPN。该网络使用预先训练的imagenet模型初始化,并针对区域提议任务进行端到端微调。在第二步中,我们使用第一步RPN生成的提议,用Fast R-CNN训练一个单独的检测网络。该检测网络也由imagenet -预训练模型初始化。在这一点上,两个网络不共享卷积层。在第三步中,我们使用检测器网络初始化RPN训练,但是我们固定了共享的卷积层,只微调了RPN特有的层。现在这两个网络共享卷积层。最后,保持共享的卷积层固定,我们微调独特的层Fast R-CNN。因此,两个网络共享相同的卷积层,形成一个统一的网络。类似的交替训练可以用于更多的迭代,但是我们已经观察到了微不足道的改进。
实现细节
我们在单一尺度[1],[2]的图像上训练和测试区域提议和目标检测网络。我们重新缩放图像,使其较短的边是s = 600像素[2]。多尺度特征提取(使用图像金字塔)可以提高精度,但没有表现出良好的速度-精度权衡[2]。在重新缩放的图像上,ZF和VGG网络在最后一个卷积层上的总跨度是16像素,因此在调整大小之前,典型的PASCAL图像上的跨度是约为10像素(约为500×375)。即使是这样一个大的步幅也能提供良好的结果,虽然精度可以通过更小的步幅得到进一步提高。
对于锚点,我们使用3个缩放,边框区域为1282、2562和51222像素,3个高宽比为1:1、1:2和2:1。这些超参数不是为特定的数据集精心选择的,我们在下一节提供有关它们影响的消融实验。如前所述,我们的解决方案不需要图像金字塔或滤波器金字塔来预测多个尺度的区域,节省了相当多的运行时间。下图(右)显示了我们的方法对于各种尺度和比例的能力。下表显示了使用ZF网学习到的每个锚的平均提议大小。我们注意到,我们的算法允许比潜在的接受域更大的预测。这样的预测并非不可能——如果一个物体只有中间是可见的,人们仍然可以粗略地推断出它的范围。
需要小心处理跨图像边界的锚框。在训练期间,我们忽略了所有的跨界锚,因此他们不会造成损失。对于一个典型的1000 × 600图像,总共大约有20000(≈60 × 40 × 9)个锚点。忽略了跨界锚点,每幅图像大约有6000个锚点用于训练。如果在训练中没有忽略跨越边界的异常值,它们会在目标中引入大的、难以修正的误差项,并且训练不会收敛。然而,在测试过程中,我们仍然将完全卷积RPN应用于整个图像。这可能会生成跨边界的提议框,我们将其剪辑到图像边界。
一些RPN方案彼此高度重叠。为了减少冗余,我们采用非极大值抑制(non-maximum suppression, NMS)对基于分类评分的提议区域进行抑制。我们将NMS的 IoU 阈值固定在0.7,这使我们在每张图像上留下大约2000个提议区域。正如我们将要展示的那样,NMS并不会损害最终的检测精度,而是大大减少了提议的数量。在NMS之后,我们使用排名前n的提议区域进行检测。下面,我们使用2000个RPN提议训练Fast R-CNN,但是在测试时评估不同数量的提议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)