从iNeRF开始学习Pose Refinement

从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

Alt
从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^=TSE(3)argminL(TI,Θ)
其中 L \mathcal{L} L就是经典NeRF中的photometric loss function, 只是直接将loss回传到了 T T T,而非更新模型参数。
说起来简单,实现上来说还有以下三个需要注意的点:

  1. 如何在李群 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)
  2. 如何构建采样策略?(Sampling Rays)
  3. 如何利用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]TR6
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θ^=R6argminL(e[S]θT0I,Θ)
即在 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θ+(1cosθ)[ω]+(θ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.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值