SLAM 一直是机器人、无人机、自动驾驶里绕不开的基础问题。以前我们讨论视觉 SLAM,通常关心特征点、关键帧、回环检测和全局优化;现在,Transformer 也开始进入这个领域。清华 MARS Lab 公开的“几何 Transformer SLAM”,如果只看名字,很多人会以为是给点云或图像加了一个注意力模块,但真正值得关注的是“无距离上限”和“17 公里长序列稳定建图”这两个信息。这个方向解决的不是“能不能跑”,而是“长距离大场景下会不会越跑越飘”。如果你做视觉 SLAM、机器人自主导航,或者想了解 Transformer 在几何任务上怎么落地,这篇内容会比较合适。下面围绕这个技术方向拆清楚:几何 Transformer 在 SLAM 里到底做什么,长序列稳定建图的关键在哪,以及如果你想在自己的数据上理解或验证类似方案,应该从哪几步开始。
1. 先看这套方案到底解决了 SLAM 里的哪个痛点
1.1 SLAM 的难点从来不是“画地图”,而是“别算乱”
SLAM 的全称是同步定位与建图,直白翻译就是:让机器人一边移动,一边回答两个问题——我在哪,周围是什么。单张图像或者单帧点云都比较容易理解,难的是把连续很多帧连起来。早期视觉 SLAM 用特征点匹配,后来出现直接法、半直接法,但核心问题没有变:每一帧都会带来一点误差,帧数越多,误差累积越多。长走廊、大广场、地下车库这类场景尤其明显,因为重复结构多,特征区分度低,前端稍微匹配错一次,后端就很难完全拉回来。
所以,长距离 SLAM 的稳定性本质上是一个系统问题。不是某一个网络把特征做得更准就行,而是要保证前端关联、后端优化、回环检测和地图表示之间的一致性。如果有人只跟你说“我用 Transformer 提特征,所以 SLAM 更稳”,先别急着信。真正稳定,是整套链路在长序列里没有系统性发散。
1.2 传统方法和 Transformer 方法在几何任务上的差异
传统 SLAM 前端常用 ORB 特征、SIFT 特征或者直接像素对齐。这些方法解释性好,计算量相对低,但遇到弱纹理、重复结构、光照变化大的场景容易匹配错误。Transformer 的优势在于它可以建模长距离依赖。图像里两个相距很远的区域,如果只靠局部特征感受野,可能关联不上;Transformer 的注意力机制可以把全局上下文拉进来做判断。用在 SLAM 上,最直接的想象是:用 Transformer 来学习帧间对应关系,而不是手工设计特征。
但这里要冷静一点。Transformer 在图像分类、目标检测上很成功,不代表直接往 SLAM 里塞一个就能提升稳定性。SLAM 需要的是精确的几何关系,而不是一个“大概对齐”。这也是为什么项目标题强调“几何 Transformer”。它不是单纯把 Vision Transformer 拿来做特征提取,而是把 Transformer 的能力用在几何关联、位姿估计或者匹配关系筛选上。换句话说,输出得是能让后端优化使用的几何量,而不是一个类别概率。
1.3 “无距离上限”四个字真正意味着什么
“无距离上限”听起来像营销话术,但在 SLAM 里是有明确含义的。很多视觉 SLAM 系统的测试范围要么是室内房间,要么是小范围园区,规模有限。跑 17 公里长序列,意味着系统必须在几千甚至几万帧里持续保持一致性。这个过程中,累积误差、内存占用、计算复杂度、回环检测的数据量都会一起增长。
无距离上限并不等于“随便跑多远都不飘”,更合理的理解是:方案设计上不依赖固定范围内才成立的假设,比如不依赖一个固定大小的局部地图,也不假设轨迹必须回到起点。真正落地时,还是会有算力和传感器约束,但相比把“距离”做成一个隐藏上限的方案,这是一个更接近实际任务的设计。从这个角度看,17 公里不是用来刷榜的数字,而是用来暴露系统短板的一个压力测试。
2. 几何 Transformer 在 SLAM 里承担什么角色
2.1 它不像分类任务那样做全局分类,而是做几何关联
很多刚开始接触 Transformer 的人会把它理解成“给图像做全局建模”。但在 SLAM 里,几何 Transformer 更关心两帧或者多帧之间的对应关系。比如给模型输入当前关键帧和候选关键帧,让模型输出哪些点是同一个物理点,或者给出一个相对位姿的估计。这里的输出是几何量,而不是类别概率。
所以看待这个工作时,不要问“它在下游任务里是不是涨点”,要问它能不能帮助系统在长序列里建立更可靠的几何约束。大场景中重复墙面很多,单靠特征描述子可能把 A 墙和 B 墙搞混,Transformer 可以通过更大的感受野结合上下文来判断,减少误匹配。这种能力在视觉 SLAM 里很有价值,因为“上下文”本身就是判断“我现在到底在哪个位置”的重要线索。
2.2 特征匹配、外点剔除、位姿估计中的 Transformer 用法
从一般 SLAM 框架看,Transformer 有几种常见插入位置:
- 特征提取:代替手工特征,输出适合匹配的特征描述子。
- 匹配关系:输入两帧特征,输出匹配矩阵或匹配概率。
- 外点剔除:在初始匹配后,用 Transformer 判断哪些匹配是可靠的。
- 直接回归位姿:输入多帧序列,输出相对运动。
不同位置对实时性和精度的要求不同。如果只是做特征提取,模型可以前向一次;如果要在匹配阶段做两两关联,计算量会随关键帧数量上升。特别是注意力机制的时间和空间复杂度跟序列长度有关,这里的“长度”不是时间帧数,而是特征点数量。特征点太多时,注意力矩阵会变得非常大,显存压力也会很明显。
“几何 Transformer”更侧重的应该是利用几何约束。比如已知相机内参,把极线约束、深度一致性和注意力特征一起作为依据,让网络输出的关联结果符合相机成像规律。这样比纯数据驱动更稳,也更容易和传统 SLAM 后端衔接。纯靠网络硬学几何,长序列下很容易出现不符合物理规律的输出。
2.3 为什么说“几何 Transformer”而不是纯 Transformer
“纯 Transformer”通常指一个端到端模型,输入图像序列,直接输出地图或轨迹。这种方案理论上可行,但在真实 SLAM 任务里很难保证可解释性和泛化性。尤其是室外大场景,光照、天气、路面纹理变化非常大,纯端到端模型很难覆盖所有情况。几何 Transformer 一般是把 Transformer 当成 SLAM 系统中的一个模块,换掉原来的特征匹配或位姿估计,而整个系统仍然保留关键帧、局部地图和全局优化。
这个设计的好处是能复用成熟的 SLAM 后端。如果 Transformer 模块输出不准,后端优化至少还能通过多帧约束拉回来一部分;反过来,如果后端发现位姿发散,也可以让前端重新匹配关键帧。简单说,几何 Transformer 是在一个成熟系统内部做升级,不是另起炉灶。这样既保住了系统稳定性,又拿到了注意力机制带来的全局建模能力。
3. 长序列稳定建图的关键:不是模型强,而是前端和后端配合
3.1 从传感器输入到位姿估计的完整链路
一次典型的 SLAM 运行会经历以下几步:传感器采集图像或点云,预处理,前端计算帧间相对位姿和地图点,局部地图维护,后端优化位姿和地图点,回环检测纠正累计漂移,最后输出轨迹和地图。Transformer 不管替换哪一步,链路本身必须有清晰的输入输出。
很多人在自己实验时只关注神经网络部分,忽略了传感器标定和时间戳同步。如果双目相机或激光雷达的外参没有标定好,再好的模型也会输出错误结果。在长距离序列里,这个问题会被放大:哪怕是零点几度的外参误差,走到几公里之后都会造成明显轨迹漂移。所以我在看一个 SLAM 项目时,会先看它的数据预处理和坐标系定义,再去看模型结构。模型负责“聪明”,数据负责“正确”,两者缺一不可。
3.2 局部关联、全局一致性和回环检测的分工
前端解决的是“短时间内的准确”,后端解决“长时间的一致”。局部关联模型可以很准,但每一帧仍然有微小误差;后端全局优化通过最小化所有关键帧的位姿和地图点误差,把局部误差分散到整体里。回环检测则是识别“我又回到了之前来过的地方”,当检测到回环时,才可能把累积漂移一次性拉回来。
17 公里长序列上,系统不可能一直依靠回环来纠正,因为中途很可能没有回环。这时“无距离上限”就体现为一个更严格的要求:前端的单帧精度、局部地图的维护频率、后端的优化规模都必须可持续。否则,一段没有回环的几公里直路,就足以让累计漂移大到不可接受。这个场景比室内“回字形”路径难很多,因为少了回环这个天然的“修正锚点”。
3.3 17 公里序列测试带来的实际工程约束
从工程角度看,17 公里意味着大量数据。假设车速不快,10 米一帧也要几千帧,如果每秒 30 帧就是几万帧。每一步都要考虑关键帧不会无限增加,地图点不会无限膨胀,否则内存迟早爆掉。实际系统通常会做关键帧抽稀、地图点剔除、局部窗口优化和边缘化。
边缘化听起来复杂,其实就是把已经优化过的旧帧和旧点从活跃优化窗口里“请出去”,同时保留它们对当前状态的约束信息。这个机制在长序列里非常重要。如果不做边缘化,所有历史帧都留在优化窗口里,全局优化的计算量会随轨迹长度无限增长,最后变成跑不动。所以,17 公里稳定建图的关键可能不只在 Transformer,更在整套地图管理策略。
注意:关键帧和地图点不控制的话,17 公里跑不到一半,内存就可能先扛不住。
4. 想在自己的环境复现或理解这套方案,怎么入手
4.1 先准备数据、模型框架和基本算力
如果你想理解或复现这类“几何 Transformer + SLAM”的方案,我建议先不要直接奔着 17 公里去。先准备一个包含图像或点云、位姿真值、相机内参的数据集。常见的有 TUM RGB-D、EuRoC MAV、KITTI 等。不同数据集的传感器频率、运动速度和场景差异很大,先用小序列把链路跑通,再切到大序列。
算力方面,如果只是验证可行性,一张中端 GPU 就够。但要注意,如果方案里有 Transformer 做两两匹配,显存占用会随着输入帧的分辨率和匹配数量上升。建议先开一个低分辨率版本跑通,确认输入输出格式没有问题,再去开高分辨率。别一上来就追求和项目一样的视觉效果,先保证能复现一个“不飘”的小轨迹。
4.2 最小验证:先看单条短序列能不能稳定输出
我最建议的流程是三步:单帧、短序列、长序列。
单帧或单次匹配:跑一次模型前向,确认输入输出张量维度对得上,位姿结果不是 NaN,地图点没有飞到无穷远。
短序列:拿一段几秒到几十秒的数据,跑整个 SLAM 流程。这时重点看轨迹和真值是否大致重合,有没有明显跳变。
长序列:再逐渐增加数据长度,观察累计漂移和资源占用变化。
这一步容易犯的错是直接拿 17 公里数据做测试。一旦失败,很难判断是前端、后端、回环还是资源问题。先缩小范围,定位会快很多。我一般会在日志里按 100 帧输出一次关键帧数量、地图点数量和最近一次位姿更新耗时,这样能提前发现膨胀趋势。
注意:不要一上来就开大分辨率长序列。先用一小段数据跑通输入、输出和日志,再逐步加数据量。
4.3 从单帧到批量:长序列处理的资源消耗
很多 SLAM 代码都支持离线批量处理,但这不等于把所有帧一次性塞进显存。通常做法是循环读取数据,维护关键帧列表和地图。Transformer 模块如果只在关键帧之间匹配,计算量可以控制。
要监控的资源包括:显存、内存、CPU 占用和每帧处理耗时。如果单帧处理时间超过传感器帧间隔,实时系统就会掉帧。离线建图可以慢一点,但内存也要控制。尤其是关键帧数量增长,如果没有任何抽稀策略,几千帧之后内存曲线会非常难看。长序列处理不是“把数据集喂给模型”这么简单,更像是在维护一个持续增长的小型数据库。
4.4 判断结果稳定性的指标
不要只看最终轨迹图“看起来差不多”。更可靠的指标是相对位姿误差(RPE)和绝对轨迹误差(ATE)。RPE 衡量相邻位姿误差,反映前端稳定性;ATE 衡量全局轨迹和真值的一致性,能体现回环和全局优化的效果。
长序列里还要关注误差随距离的增长情况。如果误差增长接近线性,说明漂移控制正常;如果超线性爆炸,多半是前端匹配出现系统性错误。另外,地图重叠区域是否对齐、回环处是否出现跳变,也都是肉眼可查的稳定性信号。我通常会把轨迹和真值画在同一张图里,再打开点云地图,从多几个视角观察重叠区域有没有错位。这种简单可视化往往比一堆数值更直观。
5. 常见误判和排查思路
5.1 不是所有 SLAM 问题都要上 Transformer
Transformer 是工具,不是银弹。如果一个小房间场景用 ORB-SLAM 已经能跑得很稳,没必要为了“用 Transformer”而增加复杂度。几何 Transformer 的优势主要体现在大场景、弱纹理、重复结构、长距离依赖这些条件下。如果你的任务只是扫地机器人回字形路径,传统的特征法加回环检测通常已经够用。
换个角度说,Transformer 模块可能会带来计算开销和调参难度。短序列里效果提升不明显,长序列里才可能看到差别。这是正常现象。不要因为某个模型在 benchmark 上拿了高分,就觉得它一定适合你的场景。先定义一个自己的最小验证集,再对比有没有真实提升。
5.2 跑不出稳定结果时,先检查数据对齐和坐标系
很多情况下,报错或者轨迹发散不是模型的问题,而是数据对齐的问题。常见错误包括:图像时间戳和位姿真值没对齐,IMU 频率和相机频率不同步,坐标系的单位从毫米写成米,雷达和相机外参符号反了。
我的排查顺序是:先看数据读取是否完整,再做一次简单的视觉检查。比如把相机轨迹和点云同时绘制出来,如果轨迹初始方向和真实运动方向都不一致,就不要继续调模型参数了。坐标系问题在长距离测试里会放大得特别明显,因为一个小角度的旋转误差,会在几十米后变成几米的横向偏移。
5.3 资源占用异常的排查顺序
如果长序列跑着跑着内存增长很快,先看关键帧数量是否持续增加。再看地图点数量。如果两个都在线性增长,说明系统没有做抽稀或边缘化,这不是模型问题,是工程机制缺失。
如果显存突然爆掉,先看输入图片的分辨率,再看 batch size 和 Transformer 的注意力矩阵大小。注意力机制的时间和空间复杂度跟序列长度有关,两帧匹配时序列长度是特征数量,特征数量太多会非常吃显存。解决办法通常是限制每帧特征数量或改用局部注意力,而不是直接买更大显存的卡。换个低分辨率输入,或者减少候选匹配数量,往往就能压住占用。
排查资源问题时,先看关键帧和地图点数量,再看显存占用。这两步能过滤掉大部分“假模型问题”。
5.4 回环检测失效时的常见原因
回环检测经常是长距离 SLAM 里最先出问题的地方。如果回环没触发,可能是因为关键帧的局部特征变化太大,也可能是因为描述子没有区分度,还可能因为地图在回环处已经漂移得很厉害,导致候选者位置差太远。
排查时可以手动把回环时刻附近的数据提取出来,看模型是否能找到匹配关系。如果手动都不能匹配,说明回环检测的输入特征太弱;如果手动能匹配但系统没找到,可能是候选搜索范围或阈值设置问题。单个场景下回环失效,不一定代表整个系统不行,更可能是参数和场景不匹配。长距离建图如果全程没有回环,依然要靠前端和后端把漂移控制住,这个能力比“偶尔能闭环”更重要。
6. 后续优化和应用边界
6.1 低算力设备上的应用限制
清华 MARS Lab 这个方向是学术研究,不等于马上就能轻量化部署。Transformer 带来的计算量在嵌入式设备上仍然偏高。如果要上无人机、扫地机器人或 AR 设备,通常需要做剪枝、量化和蒸馏,甚至只在关键帧上用 Transformer,普通帧继续用传统特征。
我的建议是:先用离线环境评估收益,再决定是否投入工程化。如果离线长序列测试已经领先传统方法很多,再考虑轻量化;如果差距不大,就不要为复杂度买单。对大多数学习者来说,在台式机上用开源数据和模型跑通流程,比追求嵌入式实时更重要。先建立手感,再考虑产品化。
6.2 与语义信息、占用网格、NeRF/3DGS 结合的想象空间
几何 Transformer 不只可以用在稀疏特征 SLAM。它也可以用来辅助稠密重建、语义建图和神经渲染。比如把注意力机制用在多视角特征融合上,帮助 NeRF 或 3DGS 在长序列中保持相机位姿准确。反过来,高质量的稠密地图也可以为 Transformer 提供更多几何约束。
这类结合目前仍在探索阶段,但方向是明确的:大场景、长时间、多传感器融合的场景里,只靠手工特征已经不够,可学习的几何关联会成为系统里更核心的一部分。以后做三维重建、自动驾驶众包地图、机器人大范围探索,可能都会用到类似的“几何注意力”模块。但这也意味着需要同时理解 Transformer、多视图几何和优化理论,而不是只会跑一个预训练模型。
6.3 学习和工作建议
如果你刚接触 SLAM,建议先把《视觉 SLAM 十四讲》里的基本流程吃透,再来看 Transformer 怎么替换其中的某个模块。先理解关键帧、图优化和回环检测,再研究注意力机制,否则很容易被模型细节带偏。别急着读论文里的公式,先把“数据怎么进、位姿怎么出、地图怎么更新”这条主线理顺。
如果你已经在做相关工作,可以重点关注“几何 Transformer”和传统几何约束的结合方式。只看标题和实验数据不够,最好去读论文里的系统结构图,看它把 Transformer 放在了哪个环节,用了什么 Loss,特征对齐是怎么做的。千万不要只看一张轨迹图就下结论。每个项目跑通背后都有大量数据清洗、参数调节和工程调试,这些才是真正拉高门槛的地方。
整体来看,清华 MARS Lab 的几何 Transformer SLAM 并不是一个玩具 Demo。它解决的是长距离建图里最麻烦的漂移与一致性问题,也把 Transformer 从图像分类、自然语言处理这些常见领域,拉到了需要严格几何约束的 3D 空间。这个方向的价值不是“涨点”,而是给出了一条用序列建模处理空间关联的工程路径。真要落地时,最值得盯住的不是模型结构有多新,还是输入数据、资源占用和失败重试这些基本功。如果你打算深入研究,先拷贝样例数据,跑通短序列,再逐步拉长轨迹。踩过几次之后就会发现,很多问题不是 Transformer 不够强,而是前面的数据对齐和后端优化没有准备好。