Efficient multi-output scene coordinate prediction for fast and accurate camera relocalization from a single RGB image
巴黎中央理工
这是一篇混合方法,使用重新设计的CNN网络提取patches的特征,
然后输入到回归森林对patches的中心点像素坐标进行预测,得到多个3D坐标,选择置信度最高的一个作为预测,由此得到2D-3D对应关系。
最后根据Pnp和RANSAC求解相机位姿
论文方法
1.patch选择和对应标签制作
使用patch可以过滤掉与场景无关的位置(天空、墙壁等),去除噪声可以减少RANSAC的工作量进而加快运行速度。
本文只取以SURF特征点为中心的49X49的区域作为patch输入。
对应中心点的3D坐标标签计算:(使用RGBD信息,D为深度,p为图像二维坐标,k为相机内参)
相
机
坐
标
系
下
坐
标
:
P
i
c
=
D
i
K
−
1
[
p
i
1
]
相机坐标系下坐标:P_{i}^{c}=D_{i} K^{-1}\left[\begin{array}{c}p_{i} \\1\end{array}\right]
相机坐标系下坐标:Pic=DiK−1[pi1]
使 用 已 知 相 机 位 姿 转 换 到 世 界 坐 标 系 : [ P i w 1 ] = [ R t 0 1 ] [ P i c 1 ] 使用已知相机位姿转换到世界坐标系:\left[\begin{array}{c}P_{i}^{w} \\1\end{array}\right]=\left[\begin{array}{c|c}R & t \\0 & 1\end{array}\right]\left[\begin{array}{c}P_{i}^{c} \\1\end{array}\right] 使用已知相机位姿转换到世界坐标系:[Piw1]=[R0t1][Pic1]
得到训练标签。
2.patch特征提取网络xyzNet
xyzNet和后面的回归森林是分开训练的,单独训练流程图:
在后面加了两个FC层用于输出位姿预测。
损失函数是绝对位姿误差:
l
(
p
)
=
∑
p
i
∈
p
∥
P
i
w
−
P
^
i
w
∥
2
2
l(p)=\sum_{p_{i} \in p}\left\|P_{i}^{w}-\hat{P}_{i}^{w}\right\|_{2}^{2}
l(p)=pi∈p∑∥∥∥Piw−P^iw∥∥∥22
3.多输出深度回归森林
论文使用回归森法融合xyzNet的输出特征
每个回归树中的每个节点都以全部特征向量为输入,来训练回归森林
对于每个回归树,选择一个特征子集S作为输入,分裂节点i将其分类到左子树和右子树,直到到达叶子节点:
h
(
f
j
,
θ
i
)
=
{
0
,
if
d
(
r
e
f
i
,
f
j
)
<
τ
i
,
go to left child node
1
,
if
d
(
r
e
f
i
,
f
j
)
⩾
τ
i
,
otherwise
h\left(f_{j}, \theta_{i}\right)=\left\{\begin{array}{ll}0, & \text { if } d\left(r e f_{i}, f_{j}\right)<\tau_{i}, \text { go to left child node } \\1, & \text { if } d\left(r e f_{i}, f_{j}\right) \geqslant \tau_{i}, \text { otherwise }\end{array}\right.
h(fj,θi)={0,1, if d(refi,fj)<τi, go to left child node if d(refi,fj)⩾τi, otherwise
其中fi为特征向量, θ i = d ( r e f i , f j ) \theta_{i}=d\left(r e f_{i}, f_{j}\right) θi=d(refi,fj)为节点参数。
优化目标为最小化叶子节点的特征方差:
Q
(
S
i
,
θ
i
)
=
∑
d
∈
{
L
,
R
}
∣
S
i
d
(
θ
i
)
∣
∣
S
i
∣
V
(
S
i
d
(
θ
i
)
)
with
V
(
S
)
=
1
∣
S
∣
∑
m
∈
S
∥
m
−
m
ˉ
∥
2
2
\begin{array}{l}Q\left(S_{i}, \theta_{i}\right)=\sum_{d \in\{L, R\}} \frac{\left|S_{i}^{d}\left(\theta_{i}\right)\right|}{\left|S_{i}\right|} V\left(S_{i}^{d}\left(\theta_{i}\right)\right) \\\text { with } V(S)=\frac{1}{|S|} \sum_{m \in S}\|m-\bar{m}\|_{2}^{2}\end{array}
Q(Si,θi)=∑d∈{L,R}∣Si∣∣Sid(θi)∣V(Sid(θi)) with V(S)=∣S∣1∑m∈S∥m−mˉ∥22
为了使回归树尽可能平衡,减少树的深度,需要自适应的改变节点参数,因此作者设计为可学习的参数形式,其损失函数:
θ
i
=
{
ref
i
,
τ
i
∣
∣
S
i
L
∣
=
∣
S
i
R
∣
}
\theta_{i}=\left\{\operatorname{ref}_{i}, \tau_{i}|| S_{i}^{L}|=| S_{i}^{R} \mid\right\}
θi={refi,τi∣∣SiL∣=∣SiR∣}
最终每个叶节点的输出可以根据其置信度来选择出最有可能的3D坐标预测,得到2D-3D对应关系
4.位姿估计
先用RANSAC和PnP去除离群点,然后生成位姿估计。RANSAC中的内点数目可以作为最后预测位姿的置信度。
5.实验验证
7—scenes:
户外数据集:cambridge
和AC差不多,超越PoseNet2
作者认为没有显著超越AC的原因是在特征点密集的场景中,需要更深的回归树来进行分类。、
在重复结构、遮挡、运动场景、动态环境下性能更好。