澳大利亚国立大学,澳大利亚机器人视觉中心
本文解决的问题:BLind Perspective-n-Point(BPnP)
与Perspective-n-Point(PnP) 问题的区别在于PnP是已知2D与3D点之间的匹配关系的,而BPnP问题只有给定的2D点集和3D点集。因此BPnP需要额外求解一个匹配关系矩阵。
论文使用深度声明层将RANSAC结合到BPnP求解网络中,提出了第一个完全端到端可训练网路来解决BPnP问题
什么是深度声明层?
应该是在《deep declarative networks: A new hope》中首先提出的,与常见的具有显式前向函数、可以逐步进行梯度计算的命令层(如卷积层就是命令层)相对应。
声明层以优化目标函数的形式计算输出值,相比于命令层网络的逐层求梯度反向传播,其梯度计算是一步得到的,且允许递归或不可微算子存在,只要保证最后一个前向层是可微的。具体见其论文。
网络架构:
数据预处理 :将3D点云
p
∈
R
3
\mathbf{p} \in \mathbb{R}^{3}
p ∈ R 3 进行输入变换以规范其朝向。(借鉴了PoseNet);2D点是以三维方位向量
f
∈
R
3
\mathbf{f} \in \mathbb{R}^{3}
f ∈ R 3 的形式表示:
∥
f
∥
=
1
\|\mathbf{f}\|=1
∥ f ∥ = 1 且
f
∝
K
?
1
[
u
,
v
,
1
]
?
\mathbf{f} \propto \mathbf{K}^{-1}[u, v, 1]^{\top}
f ∝ K ? 1 [ u , v , 1 ] ? ,在此基础上对f除以Z轴坐标转为2D点,以减少网络参数量。
特征提取 :将P和f输入到各自的特征提取网络中,得到128维度的特征Zp和Zf.
特征提取器使用了论文《learning to findgood correspondence》
计算匹配概率 :首先计算L2距离矩阵M:
M
i
j
=
∥
z
f
i
?
z
p
j
∥
2
\mathbf{M}_{i j}=\left\|\mathbf{z}_{\mathbf{f}_{i}}-\mathbf{z}_{\mathbf{p}_{j}}\right\|_{2}
M i j ? = ∥ ∥ ? z f i ? ? ? z p j ? ? ∥ ∥ ? 2 ? ,Mij表示第i个2D点与第j个3D点之间的特征距离。然后使用 Sinkhorn 算法求解运输问题得到匹配概率矩阵P。
Sinkhorn 算法是在声明层中封装的:输入M,输出P
该层优化的目标函数:
f
(
M
,
P
)
=
∑
i
=
1
m
∑
j
=
1
n
(
M
i
j
P
i
j
+
μ
P
i
j
(
log
?
P
i
j
?
1
)
)
其
中
U
(
r
,
c
)
=
{
P
∈
R
+
m
×
n
∣
P
1
n
=
r
,
P
?
1
m
=
c
}
f(\mathbf{M}, \mathbf{P})=\sum_{i=1}^{m} \sum_{j=1}^{n}\left(\mathbf{M}_{i j} \mathbf{P}_{i j}+\mu \mathbf{P}_{i j}\left(\log \mathbf{P}_{i j}-1\right)\right)\\ 其中 \ \ \ U(\mathbf{r}, \mathbf{c})=\left\{\mathbf{P} \in \mathbb{R}_{+}^{m \times n} \mid \mathbf{P} \mathbf{1}^{n}=\mathbf{r}, \mathbf{P}^{\top} \mathbf{1}^{m}=\mathbf{c}\right\}\\
f ( M , P ) = i = 1 ∑ m ? j = 1 ∑ n ? ( M i j ? P i j ? + μ P i j ? ( log P i j ? ? 1 ) ) 其 中 U ( r , c ) = { P ∈ R + m × n ? ∣ P 1 n = r , P ? 1 m = c } r,c是先验概率, 初始化时使用均匀分布作为先验 相比于匈牙利算法O(n3),Sinkhorn算法时间复杂度为O(n 2)。
给定最优的概率匹配矩阵P,根据下列公式(引理2)计算P关于M的梯度:
若
:
欠
约
束
线
性
方
程
组
:
A
u
=
d
y
(
x
)
∈
arg
?
min
?
u
f
(
x
,
u
)
subject to
A
u
=
d
H
=
D
Y
Y
2
f
(
x
,
y
)
and
B
=
D
X
Y
2
f
(
x
,
y
)
则
:
Dy
?
(
x
)
=
(
H
?
1
A
?
(
A
H
?
1
A
?
)
?
1
A
H
?
1
?
H
?
1
)
B
若:\\ 欠约束线性方程组: Au=d\\ \mathbf{y}(\mathbf{x}) \in \arg \min _{\mathbf{u}} f(\mathbf{x}, \mathbf{u}) \text { subject to } \mathbf{A} \mathbf{u}=\mathbf{d} \\ \mathbf{H}=\mathrm{D}_{Y Y}^{2} f(\mathbf{x}, \mathbf{y}) \text { and } \mathbf{B}=\mathrm{D}_{X Y}^{2} f(\mathbf{x}, \mathbf{y}) \\ 则:\\ \operatorname{Dy}(\mathbf{x})=\left(\mathbf{H}^{-1} \mathbf{A}^{\top}\left(\mathbf{A} \mathbf{H}^{-1} \mathbf{A}^{\top}\right)^{-1} \mathbf{A} \mathbf{H}^{-1}-\mathbf{H}^{-1}\right) \mathbf{B}
若 : 欠 约 束 线 性 方 程 组 : A u = d y ( x ) ∈ arg u min ? f ( x , u ) subject to A u = d H = D Y Y 2 ? f ( x , y ) and B = D X Y 2 ? f ( x , y ) 则 : D y ( x ) = ( H ? 1 A ? ( A H ? 1 A ? ) ? 1 A H ? 1 ? H ? 1 ) B 将这种算法封装在声明层中能够使算法运行到收敛,而不是固定其迭代次数,并且无需展开算法步骤并维护计算图,从而节省了大量的运算量。
BPnP优化 : 已知匹配概率矩阵P,优化目标函数得到局部 最优位姿(R,t)
目标函数:
f
(
P
,
r
,
t
)
=
∑
i
=
1
m
∑
j
=
1
n
P
i
j
(
1
?
f
i
?
R
r
p
j
+
t
∥
R
r
p
j
+
t
∥
)
f(\mathbf{P}, \mathbf{r}, \mathbf{t})=\sum_{i=1}^{m} \sum_{j=1}^{n} \mathbf{P}_{i j}\left(1-\mathbf{f}_{i}^{\top} \frac{\mathbf{R}_{\mathbf{r}} \mathbf{p}_{j}+\mathbf{t}}{\left\|\mathbf{R}_{\mathbf{r}} \mathbf{p}_{j}+\mathbf{t}\right\|}\right)
f ( P , r , t ) = i = 1 ∑ m ? j = 1 ∑ n ? P i j ? ( 1 ? f i ? ? ∥ R r ? p j ? + t ∥ R r ? p j ? + t ? ) 优化算法:pytorch自带的 L-BFGS 算法,关于这个算法,这个博客讲的很清楚。
由于目标函数是二阶可微的,所以可以用如下的方式求解r和t 关于P的导数,而不是通过L-BFGS迭代计算其反向传播:给定了(r*,t *),可以通过如下公式(论文中引理1)求r和t 关于P的导数
Dr
?
?
(
P
)
\operatorname{Dr}^{\star}(\mathbf{P})
D r ? ( P ) and
D
t
?
(
P
)
\mathrm{D} \mathbf{t}^{\star}(\mathbf{P})
D t ? ( P ) :
若
:
H
=
D
Y
Y
2
f
(
x
,
y
(
x
)
)
∈
R
m
×
m
;
B
=
D
X
Y
2
f
(
x
,
y
(
x
)
)
∈
R
m
×
m
;
y
(
x
)
∈
arg
?
min
?
u
f
(
x
,
u
)
则
:
Dy
?
(
x
)
=
?
H
?
1
B
若:\mathbf{H}=\mathrm{D}_{Y Y}^{2} f(\mathbf{x}, \mathbf{y}(\mathbf{x})) \in \mathbb{R}^{m \times m} ; \quad B=\mathrm{D}_{X Y}^{2} f(\mathbf{x}, \mathbf{y}(\mathbf{x}))\in \mathbb{R}^{m \times m};\quad \mathbf{y}(\mathbf{x}) \in \arg \min _{\mathbf{u}} f(\mathbf{x}, \mathbf{u}) \\ 则:\operatorname{Dy}(\mathbf{x})=-\mathbf{H}^{-1} \mathbf{B}
若 : H = D Y Y 2 ? f ( x , y ( x ) ) ∈ R m × m ; B = D X Y 2 ? f ( x , y ( x ) ) ∈ R m × m ; y ( x ) ∈ arg u min ? f ( x , u ) 则 : D y ( x ) = ? H ? 1 B 单步求解只需要求解(局部)最优解用于计算梯度即可,尽管可以获得梯度的解析解,但它相当难计算。
作为替代,论文使用自动微分来计算必要的雅可比矩阵和黑森矩阵。
注意这里自动微分应用于规范目标函数,而不是用于优化目标函数的算法步骤,与深度学习中的标准用法不同。
对现有的可微PnP求解器(DSAC,DLT等),对应关系集合太大了,对于m = n = 1000,99.9%的对应关系是异常值。
声明层集成RANSAC
根据概率匹配矩阵P选择前K个匹配关系,这里k=1.5min{m,n},用RANSAC选择内点,然后使用EPnP优化位姿调整。EPnP: 《EPnP: An accurate O(n) solution to thePnP problem》
由于声明层中的最终处理节点优化了二次可微分的目标函数,因此任何中间不可微的计算与梯度计算无关。
RANSAC不可微,且没有显式解,不可能使用诸如显式或自动微分之类的标准技术来获得梯度。
损失函数:
衡
量
匹
配
矩
阵
的
损
失
项
:
L
c
=
∑
i
m
∑
j
n
P
i
j
(
1
?
2
[
∠
(
f
i
,
R
g
t
p
j
+
t
g
t
)
?
θ
]
)
衡
量
位
姿
预
测
的
损
失
项
目
:
L
p
=
L
r
+
L
t
L
r
=
∠
(
R
,
R
g
t
)
=
arccos
?
1
2
(
trace
?
R
g
t
?
R
?
1
)
L
t
=
∥
t
?
t
g
t
∥
2
衡量匹配矩阵的损失项:\\L_{\mathrm{c}}=\sum_{i}^{m} \sum_{j}^{n} \mathbf{P}_{i j}\left(1-2\left[\angle\left(\mathbf{f}_{i}, \mathbf{R}_{\mathrm{gt}} \mathbf{p}_{j}+\mathbf{t}_{\mathrm{gt}}\right) \leqslant \theta\right]\right)\\\begin{array}{l}\\衡量位姿预测的损失项目:\\L_{\mathrm{p}}=L_{\mathrm{r}}+L_{\mathrm{t}} \\L_{\mathrm{r}}=\angle\left(\mathbf{R}, \mathbf{R}_{\mathrm{gt}}\right)=\arccos \frac{1}{2}\left(\operatorname{trace} \mathbf{R}_{\mathrm{gt}}^{\top} \mathbf{R}-1\right) \\L_{\mathrm{t}}=\left\|\mathbf{t}-\mathbf{t}_{\mathrm{gt}}\right\|_{2}\end{array}
衡 量 匹 配 矩 阵 的 损 失 项 : L c ? = i ∑ m ? j ∑ n ? P i j ? ( 1 ? 2 [ ∠ ( f i ? , R g t ? p j ? + t g t ? ) ? θ ] ) 衡 量 位 姿 预 测 的 损 失 项 目 : L p ? = L r ? + L t ? L r ? = ∠ ( R , R g t ? ) = arccos 2 1 ? ( t r a c e R g t ? ? R ? 1 ) L t ? = ∥ t ? t g t ? ∥ 2 ? ? 总的损失函数:
L
=
L
c
+
γ
p
L
p
L=L_{\mathrm{c}}+\gamma_{\mathrm{p}} L_{\mathrm{p}}
L = L c ? + γ p ? L p ?
训练时先使用L_c进行训练120epoch,然后用总损失训练。先学习好对应关系预测,可以有效减少搜索空间。
实验结果:SOTA
仿真数据集:
真实数据集:
速度:0.12s