X-SLAM: Scalable Dense SLAM for Task-aware Optimization using CSFD
Zhejiang University; University of Utah; University of California, Los Angeles
一句话总结
X-SLAM 是首个实时可微稠密 SLAM 系统,用复步有限差分(CSFD)代替自动微分来计算 SLAM 各步骤对关键参数的导数,绕开了随帧不断膨胀的计算图,从而在内存友好、实时的前提下支持高阶微分(如 Hessian)与二阶优化器,并落地到相机重定位与机器人主动扫描两个下游任务。
问题背景
SLAM(同时定位与建图)是 AR、机器人导航、自动驾驶等领域的核心技术。传统做法把 SLAM 系统与下游任务当作彼此独立的模块:SLAM 先输出三维重建与相机位姿,下游应用再基于这些输出做决策。这样一来,一旦扫描过程中误差累积,下游任务只能在错误的 SLAM 结果上继续工作。
为把任务端的误差信号反传回原始传感器观测、实现端到端优化,研究者提出把 SLAM 表示成可微函数。代表工作 ∇SLAM 首次给出完全可微的稠密 SLAM 系统,对传统 SLAM 中不可微的步骤给出数学上可微的近似。但它依赖计算图(computational graph):每一帧的跟踪/建图函数都要把计算图维护下来,内存消耗随帧数持续增长。基于其公开代码,在 640×480 分辨率下 PointFusion 跑到 60 次迭代后就会崩溃,反向传播在大计算图上的开销也让实时应用难以承受。
本文要解决的正是让可微 SLAM 变得实用的三个根本挑战:
- 内存高效地计算微分,避免计算图膨胀带来的内存问题;
- 微分计算要实时,匹配 SLAM 的帧率;
- 支持高阶微分,因为很多真实任务中一阶优化容易陷入局部极小、限制端到端优化的精度。
核心方法
用 CSFD 取代自动微分
复步有限差分(CSFD)是全文的基石。对可微函数 \(f: \mathbb{R} \to \mathbb{R}\),普通前向差分需要做减法,而减法在两个量接近时会发生”相减相消”(subtraction cancellation),丢失有效数字、数值不稳定。CSFD 换一种思路:把扰动放到虚部上,即 \(hi\),对提升到复数域的函数 \(f^*\) 做泰勒展开:
\[f^*(x_0 + hi) = f^*(x_0) + f^{*\prime}(x_0)\cdot hi + O(h^2)\]
一阶导数直接取虚部即可:
\[f'(x_0) \approx \frac{\mathrm{Im}\, f^*(x_0 + hi)}{h}\]
这样做有两大好处:其一,收敛阶为 \(O(h^2)\);其二,完全不涉及减法,因此可以把 \(h\) 取到极小(当 \(h\) 在机器精度 \(\epsilon\) 的平方根量级时,CSFD 精度逼近解析导数)。文中取 \(h = 10^{-8}\)。
关键在于:CSFD 把初始扰动 \(hi\) 沿着整条计算流程自动携带传播,最终结果的虚部就是导数,因此链式法则从不需要显式求值,也不需要维护计算图、不需要反向传播——本质上像”前向自动微分”,但用复数运算实现。
高阶微分与多复数
CSFD 可推广到高阶微分:把扰动进一步提升为”多复数”(multicomplex number)。多复数按递归定义,\(n\) 阶集合为 \(\mathbb{C}_n = \{z_1 + z_2 i_n \mid z_1, z_2 \in \mathbb{C}_{n-1}\}\)。在多复数扰动下做泰勒展开,不同阶的导数对应不同的虚部方向组合,抽取相应的虚部组合即可得到任意阶导数。例如 Hessian 矩阵的元素可这样得到:
\[\frac{\partial^2 f(x,y)}{\partial x \partial y} \approx \frac{\mathrm{Im}^{(2)}\, f(x + h i_1, y + h i_2)}{h^2}\]
这使得系统能实时算出 Hessian,进而用牛顿法等二阶优化器换取更高精度与更快收敛。
简化复数运算库
由于虚部只用于表示导数、始终是很小的量,作者放弃通用复数运算,丢掉两个虚量之间的高阶乘积。例如复数乘法 \(z_1 z_2 = (a_1 a_2 - b_1 b_2) + (a_1 b_2 + a_2 b_1)i \approx a_1 a_2 + (a_1 b_2 + a_2 b_1)i\)。基于这一简化,作者用 C++(CPU)和 CUDA(GPU)重载浮点运算符,实现了一个专用复数库,比 STD、libcu++ 等通用库更快(GPU 上 X-KF 用自研库达 92.6 FPS,用 libcu++ 仅 59.4 FPS)。
把 SLAM 各步骤复数化
作者把经典稠密 SLAM 流程逐步”复数化”,得到 X-KinectFusion(X-KF)与 X-ElasticFusion/X-PointFusion(X-EF/X-PF):
- 表面测量(surface measurement):对深度 \(D_k(u)\) 施加复扰动 \(D_k^*(u) = D_k(u) + hi\),让顶点图 \(V_k\) 与法向图 \(N_k\) 变复数,取虚部得到它们对深度变化的偏导,从而掌握深度噪声如何传播。
- 光线投射 / 表面预测:在相机旋转的指数映射上施加复扰动,把位姿参数 \(\xi^*_k\) 提升到 \(\mathbb{C}^6\),得到预测表面几何 \(V_{g,k}, N_{g,k}\) 对位姿的导数。对离散的像素坐标 \(u \in \mathbb{Z}^2\),用双线性插值推广到 \(\mathbb{R}^2\);当顶点深度与邻居差异过大时不施加扰动,避免噪声梯度。
- 可微 ICP:由于 CSFD 不依赖计算图、导数评估与全局计算无关,可以使用任意迭代次数的优化算法,不必像常规可微框架那样假设固定迭代数。作者实现了每步用牛顿法的二阶 ICP,Hessian 由多复数直接得到,也无需像原始 KF 那样对三角函数做小角度线性近似。
- 表面更新:TSDF 体(X-KF)或面元集合(X-EF/X-PF)都随位姿复数化,取虚部得到梯度。针对面元方法,作者提出”一对多关联”(one-to-many association)策略:用高斯核按距离对多个全局模型点加权更新,缓解一对一关联导致的梯度稀疏/消失问题。
技术细节与实验结果
CSFD vs AD vs FD(微观基准):对一个标量函数求百万次一阶导,AD(PyTorch)耗时 120.2s、内存 1.53MB;FD 耗时 163.8ms、相对误差 6.49e-02;CSFD 耗时 227.2ms、相对误差仅 8.93e-08。CSFD 在精度上远胜 FD,在时间/内存上远胜 AD(因为不需维护计算图)。作者也指出:当需要对大量参数求导时(如深度学习),逆向 AD 一次反传即可拿到所有梯度,反而更划算;CSFD 适合参数维度小的场景(如 6-DOF 位姿)。
X-KF vs ∇KF:因 ∇KF 显存消耗巨大,只能跑每序列前 100 帧。即便如此,X-KF 达到约 10× 于 ∇KF 的速度,跟踪精度(ATE RMSE)相当。相比原始 KF,X-KF 因复数计算略慢(如 fr1_desk 82.9 vs 101.5 FPS),显存约多 33%(TSDF 值多存一个 float 虚部),作者认为这是可接受的代价。
高阶 ICP:对比梯度下降、非线性 CG、牛顿法,牛顿法收敛显著更快。随着帧步长增大(相机运动更快),X-KF 的跟踪精度反超原始 KF——因为原始 KF 的 ICP 线性近似只在相邻帧位姿差异小时成立。
相机重定位(基于 X-KF):给定参考图像与位姿,对查询图像用 X-KF 重建 TSDF 体,构造目标函数 \(E(T_{g,q}) = \sum_p (F_r(p) - F_q(p))^2\),用牛顿法优化 6-DOF 位姿(对初值敏感时先用梯度方向、损失降下来再切牛顿方向)。在 7-Scenes 数据集上,无论底座方法是否用深度(HLoc、PixLoc、SC-wLS 仅用 RGB;DSM、DSAC* 已用深度),X-KF 优化都能进一步提升精度,牛顿法优于梯度下降、也优于用 FD 梯度的版本。作者还自建了含室外建筑与办公室的大规模 RGBD 数据集,用查询深度到参考模型的最近邻距离评估,同样显示优化能提升重定位精度。
机器人主动扫描(基于 X-EF):沿用 [Liu et al. 2018] 的流程(物体分割 → 选下一最佳物体 NBO → 选下一最佳视角 NBV → 重复扫描)。NBV 选择目标是最大化 PointNet 识别分数,目标函数 \(E(T_{g,k}) = -\text{point\_net}(P_O)\)。梯度按链式分解:网络部分 \(\partial S / \partial p_O\) 用 AD,SLAM 部分 \(\partial p_O / \partial \xi_{k,i}\) 用 X-EF(CSFD)算,Hessian 用基于梯度的有限差分。实验(Gazebo 仿真、3D-FRONT 虚拟场景、五个真实场景)显示:本方法在多数物体类别上以更短移动距离达到同等识别精度,牛顿法路径更短更平滑,避免了梯度下降的过冲导致的来回移动。
贡献与局限
贡献:
- 首个利用 CSFD 的实时可微稠密 SLAM 系统,用复数域泰勒展开求导,彻底绕开自动微分的计算图,内存开销为 \(O(N)\)、最坏约翻倍;
- 不仅能实时算梯度,还能算高阶导(Hessian),支持牛顿法等二阶优化器换取更高精度与更快收敛;
- 给出 X-KF、X-EF/X-PF 三种经典稠密 SLAM 的可微版本,并配套自研的高阶复数运算库;
- 落地相机重定位与机器人主动扫描两个端到端任务框架,在多个公开数据集与真实场景上验证。
局限:CSFD 需要对变量逐个施加扰动来求导,总计算量随参数个数线性增长,因此方法主要面向自由度较少的位姿优化(6-DOF)。在 SLAM 系统中对高维自由度做高阶微分仍然困难——这也是与逆向 AD “一次反传得全部梯度”相比的根本权衡。
延伸思考
X-SLAM 的核心启示是:当待求导参数维度不高、但计算流程冗长且含迭代(导致计算图难以维护)时,前向式的 CSFD 可能比反向 AD 更实用——它把”是否可微”“迭代多少次”这类工程约束从优化器中解耦出来。这一思路对其他需要对少量物理/几何参数求高阶导的实时系统(如可微物理、在线标定、模型预测控制)同样有借鉴意义。反过来,其”逐参数扰动、成本线性增长”的特性也划定了适用边界:一旦要对网络权重这类高维参数求导,仍需回到反向 AD。把 CSFD 与全局回环优化、以及可微 AD 的混合式微分结合,或许能进一步拓宽可微 SLAM 的实用边界。