GO-SLAM

Zhang 2023 · 论文

一句话总结 — 为神经隐式SLAM带来了在线回环检测与完整光束法平差:采用DROID-SLAM式的学习跟踪加全局关键帧图,以及一个随着位姿被全局校正而实时重新拟合的Instant-NGP SDF地图。

问题

神经隐式SLAM已经展示出令人瞩目的稠密重建结果,但iMAP/NICE-SLAM这一代系统只做局部优化:“由于缺乏全局在线优化,例如回环检测(LC)和全局光束法平差(BA),相机漂移误差会随着处理帧数的增加而累积,三维重建很快就会崩溃。“即便是与DROID-SLAM共享前端的NeRF-SLAM,也”缺乏在线回环检测和完整BA。“GO-SLAM的目标是构建一个能够实时地将位姿与重建联合进行全局优化的深度学习稠密SLAM框架——并在每次校正之后重新拟合神经地图,使轨迹与表面永不发散。

方法与架构

前端跟踪与回环检测。 一个基于RAFT的循环更新算子相对上一个关键帧计算光流;当平均光流超过τflow\tau_{flow}时创建新关键帧。基于共视矩阵(Nlocal×NKFN_{local} \times N_{KF})构建关键帧图(V,E)(\mathcal{V},\mathcal{E}),其中共视度定义为关键帧对之间的平均刚性光流(光流高于τco=25\tau_{co}=25的对会被丢弃)。回环边按共视度降序从矩阵的历史部分采样,并施加半径为rloop=Nlocal/2r_{loop}=N_{local}/2的邻域抑制;只有在连续三个候选都通过验证后,才接受一个回环。为保证实时优化,边数上限为sedgeNlocals_{edge}\cdot N_{local}。所有边都输入DROID-SLAM的可微稠密光束法平差层,通过带阻尼的Gauss-Newton对位姿GSE(3)\mathbf{G} \in SE(3)和逐像素逆深度d\mathbf{d}进行最小化:

E(G,d)=(i,j)EpijΠc(GijΠc1(pi,di))Σij2,Σij=diagwij,\mathbf{E}(\mathbf{G},\mathbf{d})=\sum_{(i,j)\in\mathcal{E}}\bigl\lVert\mathbf{p}_{ij}^{*}-\Pi_{c}\bigl(\mathbf{G}_{ij}\circ\Pi_{c}^{-1}(\mathbf{p}_{i},\mathbf{d}_{i})\bigr)\bigr\rVert_{\Sigma_{ij}}^{2}, \qquad \Sigma_{ij}=\operatorname{diag}\,\mathbf{w}_{ij},

其中pij\mathbf{p}^*_{ij}为预测光流,wij\mathbf{w}_{ij}为其置信度,Πc\Pi_c/Πc1\Pi_c^{-1}为投影/反投影。

后端完整BA在单独线程中,对完整的关键帧历史(拥有自己的高共视度加时间上相邻对的图,并以半径rglobalr_{global}抑制冗余)运行,由于回环检测已经消除了大部分误差,即使面对”多达数万输入帧”也依然高效。

即时建图。 建图线程会对所有关键帧的位姿/深度做一次快照,然后选择需要更新的关键帧:始终包括最新的两个关键帧以及任何尚未建图的关键帧,再加上自上次建图以来位姿变化最大的前10个关键帧,以及为防止遗忘而分层采样的10个关键帧。每个三维采样点x\mathbf{x}经过多分辨率哈希编码(Instant-NGP);一个单层SDF MLP预测Φ(x),g=fΘsdf(x,hΘhash(x))\Phi(\mathbf{x}), \mathbf{g} = f_{\Theta_{sdf}}(\mathbf{x}, h_{\Theta_{hash}}(\mathbf{x})),一个双层颜色MLP根据SDF梯度n\mathbf{n}预测Ω(x)=fΘcolor(x,n,g)\Omega(\mathbf{x}) = f_{\Theta_{color}}(\mathbf{x}, \mathbf{n}, \mathbf{g})。渲染采用NeuS风格的无偏体渲染,权重为wi=αij=1i1(1αj)w_i = \alpha_i \prod_{j=1}^{i-1}(1-\alpha_j),其中

αi=max(σ(Φ(xi))σ(Φ(xi+1))σ(Φ(xi)),0),c^=i=1NraywiΩ(xi),D^=i=1NraywiDiray.\alpha_{i}=\max\left(\frac{\sigma(\Phi(\mathbf{x}_{i}))-\sigma(\Phi(\mathbf{x}_{i+1}))}{\sigma(\Phi(\mathbf{x}_{i}))},\,0\right), \qquad \hat{\mathbf{c}}=\sum_{i=1}^{N_{ray}}w_{i}\,\Omega(\mathbf{x}_{i}), \quad \hat{\mathbf{D}}=\sum_{i=1}^{N_{ray}}w_{i}\,D_{i}^{ray}.

训练最小化L=λcLc+λdepLdep+λeikLeik+λsdfLsdf\mathcal{L}=\lambda_{c}\mathcal{L}_{c}+\lambda_{dep}\mathcal{L}_{dep}+\lambda_{eik}\mathcal{L}_{eik}+\lambda_{sdf}\mathcal{L}_{sdf}(权重分别为1.0、1.0、0.1、1.0):一个L1颜色损失;一个按渲染深度方差降权的深度损失,Ldep=1MmDmD^m/D^mvar\mathcal{L}_{dep}=\frac{1}{M}\sum_{m}\lvert\mathbf{D}_{m}-\hat{\mathbf{D}}_{m}\rvert/\sqrt{\hat{\mathbf{D}}_{m}^{var}};一个Eikonal项;以及一个使用b(xi)=DmDm,iray\mathbf{b}(\mathbf{x}_i)=\mathbf{D}_m - D^{ray}_{m,i}作为伪真值的SDF损失——在16 cm的截断带内为Lnear=Φ(xi)b(xi)\mathcal{L}_{near}=\lvert\Phi(\mathbf{x}_{i})-\mathbf{b}(\mathbf{x}_{i})\rvert,而在自由空间中为松弛后的Lfree=max(eβΦ(xi)1, Φ(xi)b(xi), 0)\mathcal{L}_{free}=\max(e^{-\beta\Phi(\mathbf{x}_{i})}-1,\ \Phi(\mathbf{x}_{i})-\mathbf{b}(\mathbf{x}_{i}),\ 0),β=5\beta=5。建图使用全局优化后的位姿/深度,不再做进一步精细化。同一框架同时支持单目(Nlocal=50N_{local}=50)、双目以及RGB-D(Nlocal=25N_{local}=25);网格通过对SDF做marching cubes得到。

实验结果

对SLAM的意义

GO-SLAM解决了神经渲染SLAM与ORB-SLAM等成熟系统之间最明显的差距:全局一致性。ScanNet单目数据(17.59对52.60 cm)展示了缺失回环检测在长轨迹上是多么灾难性的,而实时地图重拟合则证明了神经地图在位姿校正后不必是冻结不变的。它的DROID-SLAM前端加神经地图后端模式(与NeRF-SLAM共享,并补上了NeRF-SLAM所缺乏的全局优化)已成为全局一致稠密神经SLAM的标准方案,而对单目/双目/RGB-D的支持也使其成为更具部署价值的基于NeRF的系统之一。

相关条目