GradSLAM

Murthy 2020 · 论文

一句话总结 — 一个PyTorch框架,将稠密SLAM表述为一个完全可微的计算图——对信赖域优化、表面测量、融合与光线投射进行平滑重参数化——从而使梯度能够从3D地图端到端地流回到2D像素。

问题

将表示学习与SLAM相结合是一个开放性问题,因为SLAM系统高度模块化且复杂。从功能上看,SLAM将原始传感器输入转化为关于机器人与环境状态的分布——如果这个映射 M=GSLAM(s)\mathcal{M}=\mathcal{G}_{SLAM}(s) 是可微的,那么梯度 sM\nabla_{s}\mathcal{M} 就能回答”某个特定像素测量对最终3D地图的贡献有多大?“这一问题,基于任务的误差信号也就可以端到端地训练表示。但稠密SLAM的多个组件是不可微的,或者其梯度几乎处处为零:LM求解器要做离散的增阻/减阻决策,建图涉及裁剪/索引/阈值化以及新元素与已有元素的硬性判定,而光线投射则沿射线进行离散步进。

方法与架构

GradSLAM将每个非平滑模块替换为尽可能精确的可微替代版本,然后将它们组合成完整的处理流程。

可微LM(\nablaLM)。 对于目标函数 12r(x)2\frac{1}{2}\sum r(x)^{2},LM步骤必须通过比较当前迭代点与前瞻迭代点处的误差范数 r0=r(x0)Tr(x0)r_{0}=r(x_{0})^{T}r(x_{0})r1=r(x1)Tr(x1)r_{1}=r(x_{1})^{T}r(x_{1}),来决定是增阻还是减阻。GradSLAM用基于广义逻辑函数构建的平滑门控函数替换这个离散开关:

λ1=Qλ(r0,r1)=λmin+λmaxλmin1+Deσ(r1r0),Qx(r0,r1)=x0+δx01+e(r1r0),\lambda_{1}=Q_{\lambda}(r_{0},r_{1})=\lambda_{min}+\frac{\lambda_{max}-\lambda_{min}}{1+De^{-\sigma(r_{1}-r_{0})}},\qquad Q_{x}(r_{0},r_{1})=x_{0}+\frac{\delta x_{0}}{1+e^{-(r_{1}-r_{0})}},

其中 D,σD,\sigma 控制衰减速率,[λmin,λmax][\lambda_{min},\lambda_{max}] 限定阻尼范围——整个优化器由此变成一个可微计算图。

可微建图与融合。 表面测量通过三种方式被平滑化:每个有效像素的测量值是其邻域的一个核函数 K(p,nbd(p))K(p, nbd(p))(在2D中为双线性插值);一次实时测量与地图元素之间的关联是软关联,以受深度传感器特性启发的高斯衰减 exp(r(P)2/2σ2)\exp(-r(P)^{2}/2\sigma^{2})(其中 r(P)r(P) 是相对相机射线的径向深度)在最近的候选元素之间进行分散;并且默认情况下每次测量都被视为一个交给可微融合步骤处理的新元素。融合操作(其使地图规模与已探索体积成正比,而非与时间成正比)使用逻辑衰减函数来平滑经典加权平均方案中生硬的截断阈值。

可微光线投射。 射线以一个以像素深度测量值为中心的高斯衰减,在其所穿过的所有体素上进行池化;射线相对于像素位置的导数采用Igehy风格的有限差分,基于相邻射线计算:vc/pc((vrvl)/2,  (vuvd)/2)T\partial v_{c}/\partial p_{c}\approx\big((v_{r}-v_{l})/2,\;(v_{u}-v_{d})/2\big)^{T}

案例研究。 三个经典稠密系统由这些模块重新组合而成:\nablaKinectFusion(TSDF体,其截断SDF sdf(p)=trunc(K1x21tp2depth(x))sdf(p)=trunc(\lVert K^{-1}x\rVert_{2}^{-1}\lVert t-p\rVert_{2}-depth(x)) 采用平滑逻辑截断,因为 x=π(Kp)x=\lfloor\pi(Kp)\rfloor 中的取整算子以及在 μ\mu 处的硬截断都会阻断梯度)、\nablaPointFusion(surfel地图,采用本文的软关联建图方法和PointFusion的融合规则),以及**\nablaICP-SLAM**(帧到帧ICP里程计以及帧到模型两种变体)。所有这些都完全在GPU上运行,并暴露出相对于任意中间变量(相机位姿、像素强度/深度、优化器参数、相机内参)的梯度。

实验结果

对SLAM的意义

GradSLAM是首个通用的可微SLAM框架,将”SLAM作为一个层”从一句口号变成了可运行的研究代码。它与BA-Net、Theseus和LieTorch属于同一运动——将几何优化嵌入到网络内部——并为使用来自下游建图质量(而非逐帧标签)的监督信号来训练感知模块(深度先验、传感器噪声模型、代价函数)打开了大门。这个开源的PyTorch库仍是可微机器人感知研究的常见起点。

相关条目