BA on Graph Processor

Ortiz 2020 · 论文

一句话总结 — 首次演示(CVPR 2020)了光束法平差可以在图处理器(Graphcore IPU)上通过高斯信念传播极快地求解,验证了FutureMapping所提出的算法-硬件协同设计愿景。

问题

光束法平差是SLAM和SfM计算中的核心瓶颈。经典求解器用Levenberg-Marquardt计算MAP解的点估计——这本质上是一种集中式的批量计算——而即便是像iSAM2这样基于树结构的增量式方法,也需要周期性地对图进行集中式的重构。与此同时,低功耗的具身空间人工智能(embodied Spatial AI)需要大规模并行、就地(in-place)计算,且数据传输量要最小。这篇论文表明,几乎从未被用于几何视觉的GBP(高斯信念传播)天然地映射到Graphcore的IPU上——1216个独立核心(“tile”),每个拥有256KB本地内存和6个硬件线程,采用全互连拓扑,片内访存代价约为每字节1pJ,而GPU/CPU的DRAM访存则高达每字节数百pJ。

方法与架构

将BA表示为因子图。 变量是关键帧位姿 XX 和地图点 LL;因子包括高斯先验 ϕi(xi)\phi_i(\mathbf{x}_i)θj(lj)\theta_j(\mathbf{l}_j)(用于设定单目尺度并约束2自由度的重投影消息;自动生成,强度比测量项弱100倍)以及重投影因子 ψkm\psi_{km},其测量模型为 h(xk,lm)=π(Rklm+tk)\mathbf{h}(\mathbf{x}_k,\mathbf{l}_m) = \pi(R_k\mathbf{l}_m + \mathbf{t}_k)。MAP推断最小化先验项和重投影项的马氏距离平方和。在 (xk,0,lm,0)(\mathbf{x}_{k,0},\mathbf{l}_{m,0}) 处线性化,并使用 2×92\times 9 的雅可比矩阵 J\mathrm{J},可以得到信息形式下的每个测量因子:

ηkm=JΣM1(J[xk,0lm,0]+zkmh(xk,0,lm,0)),Λkm=JΣM1J.\eta_{km} = \mathrm{J}^{\top}\Sigma_M^{-1}\left( \mathrm{J}\begin{bmatrix}\mathbf{x}_{k,0}\\ \mathbf{l}_{m,0}\end{bmatrix} + \mathbf{z}_{km} - \mathbf{h}(\mathbf{x}_{k,0},\mathbf{l}_{m,0}) \right), \qquad \Lambda_{km} = \mathrm{J}^{\top}\Sigma_M^{-1}\mathrm{J}.

GBP消息传递。 每个变量节点存储一个信念 bit(vi)=N1(vi;ηbit,Λbit)b_i^t(\mathbf{v}_i)=\mathcal{N}^{-1}(\mathbf{v}_i;\eta_{b_i}^t,\Lambda_{b_i}^t)。一个具有分块参数的成对因子 ψij\psi_{ij} 向变量 vi\mathbf{v}_i 发送:

ηjit+1=ηiijΛijij(Λjjij+ΛbjtΛijt)1(ηjij+ηbjtηijt),\eta_{j\to i}^{t+1} = \eta_i^{ij} - \Lambda_{ij}^{ij}\left( \Lambda_{jj}^{ij} + \Lambda_{b_j}^{t} - \Lambda_{i\to j}^{t} \right)^{-1} \left( \eta_j^{ij} + \eta_{b_j}^{t} - \eta_{i\to j}^{t} \right),

Λjit+1=ΛiiijΛijij(Λjjij+ΛbjtΛijt)1Λjiij,\Lambda_{j\to i}^{t+1} = \Lambda_{ii}^{ij} - \Lambda_{ij}^{ij}\left( \Lambda_{jj}^{ij} + \Lambda_{b_j}^{t} - \Lambda_{i\to j}^{t} \right)^{-1} \Lambda_{ji}^{ij},

每个变量通过累加其先验和接收到的消息来更新信念:ηbit+1=ηpi+jηjit\eta_{b_i}^{t+1} = \eta_{p_i} + \sum_j \eta_{j\to i}^{t},Λ\Lambda 同理。来自因子的消息会被阻尼处理,ηt+1(1d)ηt+1+dηt\eta^{t+1} \leftarrow (1-d)\,\eta^{t+1} + d\,\eta^{t},其中 d=0.4d=0.4。重新线性化完全是局部的:当某个因子所涉及变量的信念偏离线性化点超过 β=0.01\beta = 0.01 时(最多每10次迭代一次),该因子才重新线性化。鲁棒代价:当马氏距离 MkmM_{km} 超过 NσN_\sigma 时,通过对该因子的高斯分布重新加权来引入Huber核,从而降低疑似外点测量所发出消息的权重。

IPU映射。 每个因子/变量节点映射到一个tile上(对于更大的图,通过6个线程可以在一个tile上映射多个节点),在IPU的批量同步并行模型下运行:所有因子重新线性化并计算消息、交换数据,所有变量更新信念、交换数据——一次完整的GBP迭代耗时不到125微秒。整个实现约1000行Poplar C++代码;由于IPU只处理半精度/单精度浮点数而非双精度,先验最初以测量约束的尺度设定,并在10次迭代内逐步减弱100倍以保证数值稳定性。

实验结果

评估使用了TUM和KITTI序列的片段,以ORB-SLAM作为前端(关键帧、ORB特征、对应关系),与运行在6核i7-8700K(18线程,采用密集Schur补的LM算法、Huber核、解析导数)上的Ceres进行对比:

对SLAM的意义

这篇论文将FutureMapping系列思辨性文章中的设想变成了具体证据,证明围绕图结构、局部存储和消息传递重新构思SLAM计算能够带来数量级的加速。作者认为,真正的价值并不在于静态BA的速度,而在于”对表示空间人工智能问题的通用、动态变化的因子图进行灵活的就地优化”——异质因子、来自识别的先验、任意的增量更新。随着SLAM转向异构边缘硬件和多机器人系统,GBP的纯局部计算模型是少数能够随核心数量自然扩展的后端设计之一。

相关条目