从iNeRF开始学习Pose Refinement
一、前言
传统的SLAM已经能够解决pose estimation的问题,但是由于累积漂移、feature match造成误差等各个方面因素的影响,导致pose estimation存在一定的误差,这种误差在大范围场景的三维重建下会产生非常不良的影响, 比如多帧点云融合, 街景3D重建。 此时, pose refinement就显得非常重要, NeRF based pose refinement就是一个效果惊艳的解决方案,因为不像传统的SLAM需要回环检测的方式进行pose refinement, 它仅仅需要结合图像(后面也可以考虑融合LiDAR)对现有pose 进行refinement。
二、iNeRF
iNeRF研究什么
- 如何构建sample rays的方式来获取梯度信息,从而通过梯度下降实现pose refinement。
- 如何设置batch size of rays, 不同的batch size会对pose refinement 产生怎样的影响
iNeRF惊艳的地方
- iNeRF可以对category-level的instance进行位姿估计,即使这些instance未在训练集出现过,
iNeRF Pipeline
从pipeline可知,pose refinement的关键是如何构建loss再backpropagation .
作者给出的方式如下:
T
^
=
arg min
T
∈
S
E
(
3
)
L
(
T
∣
I
,
Θ
)
\hat{T}=\argmin_{T \in SE(3)}\mathcal{L}(T|I,\Theta)
T^=T∈SE(3)argminL(T∣I,Θ)
其中
L
\mathcal{L}
L就是经典NeRF中的photometric loss function, 只是直接将loss回传到了
T
T
T,而非更新模型参数。
说起来简单,实现上来说还有以下三个需要注意的点:
- 如何在李群 S E ( 3 ) SE(3) SE(3)上实现梯度下降,以保证 T ^ \hat{T} T^都在 S E ( 3 ) SE(3) SE(3) 流形的定义上? ( Gradient-based S E ( 3 ) \mathbf{SE(3)} SE(3) Optimization)
- 如何构建采样策略?(Sampling Rays)
- 如何利用iNeRF的预测位姿来提升NeRF的渲染效果?(Self -Supervising NeRF with iNeRF)
A. Gradient-based
S
E
(
3
)
\mathbf{SE(3)}
SE(3) Optimization
作者首先抛出了一个定义:screw-axis
S
\mathcal{S}
S,该定义来源于Modern robotics v2 一书中的102 页, Defination 3.24, 定义如下。
S
=
[
ω
,
v
]
T
∈
R
6
\mathcal{S}=[\omega,v]^T \in \mathcal{R}^6
S=[ω,v]T∈R6
where either (i)
∥
ω
∥
=
1
\Vert \omega \Vert=1
∥ω∥=1 or (ii)
ω
\omega
ω=0 and
∥
v
∥
=
1
\Vert v \Vert=1
∥v∥=1.
注意,从定义可知,这个玩意儿如果变换(
R
6
R^6
R6反对称变换)成这个形式,可以发现是属于李代数的.
[
S
]
=
[
[
ω
]
v
0
0
]
∈
s
e
(
3
)
[\mathcal{S}]=\lbrack \begin{aligned} [\omega&] \space &v \\0& \space &0 \end{aligned} \rbrack \in se(3)
[S]=[[ω0] v0]∈se(3)
其中
[
]
[]
[]是反对称符号,具体请看*<<SLAM十四讲>>*第四讲,李群李代数。
这个定义存在一个好处,
[
S
]
[\mathcal{S}]
[S]乘上一个系数
θ
\theta
θ还是李代数,而巧妙的是
S
θ
∈
R
6
\mathcal{S}\theta \in R^6
Sθ∈R6是一个六维的实数,这就方便了。也就是说直接用梯度下降法求解
S
θ
∈
R
6
\mathcal{S}\theta \in R^6
Sθ∈R6即可。公式如下,
S
θ
^
=
arg min
S
θ
∈
R
6
L
(
e
[
S
]
θ
T
0
∣
I
,
Θ
)
\hat{\mathcal{S}\theta}=\argmin_{S\theta \in R^6}\mathcal{L}(e^{[S]\theta}T_{0}|I,\Theta)
Sθ^=Sθ∈R6argminL(e[S]θT0∣I,Θ)
即在
T
0
T_0
T0上加一个小的左扰动作为修正,非常直观就能理解
[
S
]
θ
[S]\theta
[S]θ:
[
S
]
θ
=
[
[
ω
]
θ
v
θ
0
0
]
∈
s
e
(
3
)
,
v
θ
=
p
[\mathcal{S}]\theta=\lbrack \begin{aligned} [\omega&]\theta \space &v\theta \\0& \space &0 \end{aligned} \rbrack \in se(3), v\theta=p
[S]θ=[[ω0]θ vθ0]∈se(3),vθ=p
v
θ
v\theta
vθ就是李代数中的position,
θ
\theta
θ就是
S
θ
∈
R
6
\mathcal{S}\theta \in R^6
Sθ∈R6前三维的模。现在问题在于如何用
[
ω
,
v
,
θ
]
[\omega,v,\theta]
[ω,v,θ]三个向量表示
e
[
S
θ
]
e^{[\mathcal{S}\theta]}
e[Sθ],直接泰勒展开
e
[
S
]
θ
=
I
+
[
S
]
θ
+
[
S
]
2
θ
2
2
!
+
.
.
.
=
[
e
[
ω
]
θ
G
(
θ
)
v
0
0
]
G
(
θ
)
=
I
θ
+
[
w
]
θ
2
2
+
[
ω
]
2
θ
3
3
!
+
.
.
.
e^{[\mathcal{S}]\theta}=I+[S]\theta+[S]^2\frac{ \theta^2}{2!}+...=\lbrack \begin{aligned} e^{[\omega]\theta}& \space &G(\theta)v \\0& \space &0 \end{aligned} \rbrack \\ G(\theta)=I\theta+[w]\frac{ \theta^2}{2}+[\omega]^2\frac{\theta^3}{3!}+...
e[S]θ=I+[S]θ+[S]22!θ2+...=[e[ω]θ0 G(θ)v0]G(θ)=Iθ+[w]2θ2+[ω]23!θ3+...
根据反对称矩阵的属性
[
ω
]
3
=
−
[
ω
]
[\omega]^3=-[\omega]
[ω]3=−[ω],再结合欧拉公式,可以得到:
G
(
θ
)
=
I
θ
+
(
1
−
cos
θ
)
[
ω
]
+
(
θ
−
s
i
n
θ
)
[
ω
]
2
G(\theta)=I\theta+(1-\cos\theta)[\omega]+(\theta-sin\theta)[\omega]^2
G(θ)=Iθ+(1−cosθ)[ω]+(θ−sinθ)[ω]2
芜湖,这就和论文一致了。
B. Sampling Rays
要是还是用NeRF的random sampling 会导致计算量巨大,退而求其次次是interest point sampling, 退而求其次就是作者提的interest region sampling, 每次梯度下降只采2048个rays, 每个rays 只在interest point周围被作者morphological dilation后的interest region里面采(老经典CV了)
C. Self -Supervising NeRF with iNeRF
用iNeRF可以把一些未知pose求解出,又把这些pose加入到NeRF training set中, 让NeRF Model更强大。
参考文献:
Yen-Chen, Lin, et al. “inerf: Inverting neural radiance fields for pose estimation.” 2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2021.
Lynch, Kevin M., and Frank C. Park. Modern robotics. Cambridge University Press, 2017.