资讯动态

F²SLAM:把3D基础模型写进优化器,让几何先验真正参与SLAM求解

发布时间:2026/10/19 5:40:00 来源:尧图企业网站定制
做SLAM这些年我见惯了各种新模型被当作外挂塞进旧系统的做法。3D Foundation Model这批模型火起来之后社区里最常见的玩法就是在现有系统前面加一个模块让模型输出深度、稠密匹配或者语义信息再把这些结果喂给后端的BA和位姿图优化。这套路简单、见效快可它有一个我很不喜欢的地方模型和优化器之间隔了一堵墙。前端模型哪怕犯了很自信的错误后端也只能硬着头皮去调这个错误输入。最近读到F²SLAM的思路一句话就把症结点透了别再把3D Foundation Model当外挂把Feed-Forward几何直接写进SLAM优化器。我打算把这句“设计宣言”拆开聊聊看看这种内嵌式的做法到底改了哪些东西也聊聊落地时会遇到哪些现实问题。不管你是做VIO/SLAM的老手还是刚想跟大模型接轨的新人这篇都值得看。1. 从“外挂”说起3D Foundation Model接进SLAM的常见姿势与真实效果1.1 我见过的三种集成方式本质上都是把模型输出当“传感器读数”先说说什么叫“外挂式接入”。我在各种项目里见到的做法基本逃不出下面三类第一类是深度补全。把预训练模型的输出当作一个深度传感器来用。模型对当前帧图像做一次前向推理得到稠密深度图或点云然后就像处理深度相机的测量一样把这些深度值作为约束丢进后端。代码上甚至可以直接复用现有的深度图残差接口把传感器数据替换成模型输出就行。第二类是匹配增强。模型作为特征匹配网络给定两帧图像一次性输出稠密的对应关系或者匹配得分图。传统SLAM里最贵、最容易炸的环节就是数据关联这部分被模型替换之后特征提取和描述子匹配整个都可以省掉或者只做一层很薄的采样。第三类是语义几何并行。一张图像输入多任务模型同时输出深度、法向、分割和关键点。每个输出分别接进SLAM的不同子模块比如语义标签去辅助动态物体剔除深度去辅助建图匹配去辅助定位。这三类做法表面上看路线不同本质上是一样的模型的输出都是“输入数据”位于整个系统流水线的最前端或者预处理阶段。后端优化的对象依然是传统意义上的位姿节点和地图点坐标模型预测本身从来不会进入优化目标也不会被优化过程反向修正。我把这种关系称为“传感器化”集成——模型被当成一个聪明但不可质疑的传感器。1.2 外挂式接法为什么在复杂场景里靠不住把模型当成传感器最大的问题不是精度而是信任关系。传感器读数出错属于硬件噪声后端通过协方差建模还能勉强处理可模型输出出错往往是结构性的、系统性的而且它出错的时候通常非常自信。我可以举一个典型场景在一段几乎没有纹理的长廊里模型基于整体光度轮廓预测了一个比较光滑的稠密深度置信度也很高。但这个深度在几何上跟真实尺度略有偏差比如整体偏薄了2%。传统SLAM的数据关联经过BA之后可能还有机会把位姿“拽”回正确的方向可是在外挂式接法里这个2%的偏差直接进入了后端的优化项BA只能在这个错误约束的牵引下寻找折中解于是轨迹整体偏向模型预测的方向。最麻烦的是你很难在系统里找到哪个环节出了问题因为前后端接口表现都很正常。更隐蔽的问题在于梯度被切断。外挂式接法里模型只做一次性前向推理它的预测结果固定之后不再变化。系统下游计算的位姿误差没有任何通路回流到模型内部。这意味着模型的泛化能力没有被利用到极致——它明明可以根据当前场景的反馈做微小调整但在“外挂”这个结构里它完全失聪。模型对你的环境一无所知只能依靠预训练时候见过的数据来猜测。还有坐标系和尺度的坑。模型的几何输出一般定义在自己的参考坐标系里尺度约定、坐标朝向可能跟SLAM地图完全不同。接入时要额外做变换对齐这步一旦做错整个后端优化等于在错误的坐标系里硬算。我在好几个项目里看到过这种情况离线评测看起来效果很好一跑到在线场景就漂得离谱查到最后都是坐标变换的兼容性问题。1.3 一张表看懂外挂式与内嵌式的本质差异对比维度外挂式接入内嵌式F²SLAM风格模型输出的角色前端数据输入优化目标中的一项约束优化器能否修正模型误差不能能通过权重机制自动降权梯度是否回流到模型完全切断可选但至少参与目标函数构建置信度的使用方式简单过滤或忽略映射为信息矩阵参与加权对系统架构的改变小接口替换即可大后端需要增加新的因子类型这张表基本概括了我对这两种路线的理解。外挂式胜在改动小、跑得快适合做Demo验证内嵌式则需要打破“前端出数据、后端做优化”的旧分工让几何先验直接成为优化问题的一部分。F²SLAM选择了后一条路而它最关键的设计就在于Feed-Forward几何不是模型丢给系统的一份“答案”而是系统优化时手里的一张“选票”。2. F²SLAM的核心动作把几何先验从“输入材料”变成“优化目标”2.1 “写进优化器”到底写了什么F²SLAM的原话是“把Feed-Forward几何直接写进SLAM优化器”。第一次看到这句话我以为又是某种工程技巧比如把模型的推理结果缓存下来然后给BA加一个先验项。但仔细理解之后发现它动的不是某个接口而是整个系统的数据流方向。传统SLAM里几何信息的流向是单向的传感器 - 前端特征/匹配 - 后端优化。模型介入之后只是替换了“前端特征/匹配”这一段流向依然是单向的。而F²SLAM的设计里模型输出的几何预测和不确定性不再只是喂给后端的材料而是作为目标函数的一部分直接参与到最优位姿和结构的求解过程中。具体一点说系统里会存在一种新的约束项几何先验因子。这个因子把两个关键帧的位姿和模型预测的稠密几何联系到一起。优化器每次迭代时不仅要考虑传统重投影误差还要考虑“当前位姿变换后得到的几何结构是否符合模型对这个场景的前向预测”。如果符合这一项误差就小如果不符合这一项误差就大优化器会自动在传统约束和模型约束之间寻找平衡点。这样一来模型的地位从“输入来源”变成了“优化伙伴”。它不是给出一个不可修改的答案而是持续参与整个求解过程并且通过自身的置信度决定自己说话的分量。2.2 点图残差与信息矩阵的配合逻辑要理解这个几何因子怎么工作必须看两个东西点图残差和信息矩阵。先说点图。这类双视图预训练模型的输出往往是一张稠密点图也就是每个像素位置都对应一个三维空间坐标预测。模型对两个视图做一次前向推理就能得到两帧之间稠密的几何对应包括每个点的空间位置和可信程度。这个输出本质上是模型对“这两帧图像的3D关系”的一次性估计。优化器使用这个输出时残差可以写成形如r T_ij * P_j - P_pred_j的形式。其中T_ij是当前估计的两个关键帧之间的相对位姿P_j是其中一个视图里的3D点坐标P_pred_j是模型预测的对应位置。如果我们的位姿估计是对的那么经过变换之后的几何位置应该跟模型预测的位置接近残差小如果位姿偏了残差就会变大。但模型不一定永远正确所以不能让它跟普通约束平起平坐。这里就要引入信息矩阵。模型输出的置信度经过一定变换后作为信息矩阵的权重置信度越高这个残差项在优化中所占的权值越大置信度越低它的话就越不被当回事。形式上就是马氏距离项r^T * Ω * r进入总代价。这样整套逻辑就闭环了模型既提供了几何约束又提供了自己可信程度的估计优化器根据这些信息动态决定采信多少。2.3 优化器终于可以“反驳”模型了联合优化的真正含义我最看重的一点是这种设计让优化器第一次有了“反驳”模型的能力。外挂式接入中模型说什么就是什么后端只能将就。而在F²SLAM这种内嵌式设计中模型只是众多约束中的一方它的建议要跟里程计约束、重投影约束、回环约束一起参与投票。举个例子。在一个快速旋转的镜头里模型由于训练分布的影响对某两块区域的对应关系给出了高置信度的预测但这两块区域其实存在微弱的光照变化导致模型被误导。传统接法下这些错误对应会直接进入BA把轨迹带歪而在内嵌式设计里优化器同时看到了其他约束——比如IMU给出的运动趋势、其他区域的重投影误差——这些约束会把位姿往另一个方向拉。最终解出来的位姿可能既不完全听模型的也不完全听里程计的而是所有约束的折中。模型预测里那些“孤零零的错误”会在这种多方博弈中被大幅削弱。更深一层这种结构还暗示了一个可能性后端计算出的误差可以反向传给模型做微调。虽然在线SLAM场景中受计算限制很难频繁微调但至少架构上没有物理阻断。模型和优化器之间的墙被拆掉了。3. 拆解实现路径一个“优化器内几何模型”需要解决的设计问题3.1 因子图侧几何因子如何与里程计因子共存想把这个思路落地第一件事就是设计因子图的拓扑结构。F²SLAM风格的系统显然不是把几何因子加到每个帧对上那样计算量会爆炸。从工程常规做法来看它大概率是在关键帧层做文章每隔若干帧选一对关键帧在这两个位姿节点之间连接一个几何因子。这个几何因子是几元的常规设计下它是二元因子连接两个关键帧的位姿节点残差取决于它们的相对变换以及模型的点图输出。如果某个时刻系统同时联系了多个视图也可以扩展为多元因子让多帧几何互相印证。这样做的意义在于它直接约束的是相对位姿而不是地图点坐标。也就是说即便场景里没有稳定的路标点只要有模型的稠密几何预测位姿之间依然存在可用的约束。与里程计因子的关系我倾向于理解为互补而非替代。里程计因子是短时间尺度的、高频的、局部的约束它负责维持帧与帧之间的平滑运动。几何因子是长时间尺度的、稀疏的、稠密几何的约束它负责抑制漂移。在因子图里两类因子叠加在一起优化器会根据各自的协方差决定偏向哪一边。如果里程计很稳几何因子的权重高一点也不会坏事如果里程计漂了几何因子能充当“锚点”把轨迹拉回来。3.2 不确定性侧低置信度不是垃圾信号是珍贵的权值信息做外挂式接入时大部分人的习惯是把模型输出的置信度用一个阈值卡掉小于阈值的点直接丢弃大于阈值的点保留。这个方法在视觉上很直观但实际效果往往不是最优的。原因在于硬门控会引入边界效应置信度0.49和0.51的点一个被扔掉一个被留下但它们其实差不多的可信程度。同时被丢弃的点并不是噪声它们往往位于遮挡边缘、动态物体、弱纹理区域这些区域恰恰包含了对位姿约束有用的信息只是需要以极小的权重参与而不是完全消失。F²SLAM这类内嵌式设计给了另一条路把置信度映射成方差用方差的倒数构建信息矩阵。低置信度对应大方差大方差导致该项在优化中的影响力变小但并未完全消失。当大量低置信度点的方向一致时它们在统计上仍然能提供微弱的全局信息帮助优化器判断整体趋势。这比“一刀切”丢掉要好得多。不过这里有个大坑模型输出的置信度经常不校准也就是所谓的“过度自信”。模型嘴上说置信度0.95真实误差分布可能相当于0.6的水平。如果直接把原始置信度当信息矩阵用优化器会过度信任模型。所以实践中需要用验证序列对置信度做一次校准估计一个映射关系把模型原始置信度映射到实际残差方差。这一步看起来简单却往往是决定系统稳定性的关键。校准做好了模型再蠢也只是偶尔说错话系统不会崩溃校准没做模型自信满满地错一次整个轨迹就废了。3.3 工程侧模型推理与优化迭代的分工以及端到端微调的边界很多人听到“写进优化器”以为每次优化迭代都要跑一遍神经网络。要是真这么做计算开销谁也扛不住。实际实现更可能是分层的模型推理是一次性的前向过程在关键帧被选入优化窗口时执行推理产出的点图、置信度被缓存下来作为后续所有优化迭代中的固定参数。每次迭代时优化器只计算几何残差跟当前位姿有关的雅可比不再重新跑网络。这样带来的额外开销主要是残差和雅可比的矩阵运算而不是神经网络推理。这种分工意味着整个系统里模型和优化器之间并不需要非常紧密的耦合。你可以先用PyTorch跑模型出一批点图结果然后用C的图优化库加载这些结果做后端优化流程完全跑得通。这反而降低了入门门槛。至于端到端微调我的态度是能做但要控制场景。如果希望把后端损失梯度回流到模型参数里就意味着模型推理和优化必须在一个可微的框架里串起来每次迭代都要前向反向这对在线实时SLAM来说基本不现实。更可行的折中是离线微调拿特定场景的数据集先用SLAM后端的损失做一轮训练让模型适配当前环境的光度特性和纹理分布然后固定模型权重部署。这样既不牺牲在线效率又能让模型学到一点“本地经验”。4. 实战视角哪些场景救得回来哪些场景别硬上4.1 三类明显受益的部署场景第一种是低纹理大范围环境。典型代表是办公楼长走廊、停车场、大型空旷展厅。传统特征SLAM在这种地方很容易丢失或者退化因为匹配点太少而双视图几何模型可以依靠整体光度轮廓和高层语义给出稠密的空间约束即便没有明显的角点墙面、地板、天花板的连续轮廓也能提供定位信息。第二种是快速运动和大抖动场景。手持设备快速甩动、无人机急转弯、机器人被碰撞之后帧间位移非常大特征匹配和光流跟踪很容易跟丢。模型基于单次前向推理就能给出帧间对应不需要依赖前一帧的小范围搜索窗口所以在这种场景下反而更稳。第三种是传感器退化的场景。比如深度相机在阳光下花屏、IMU在剧烈运动下饱和、或者设备本身只搭载了单目相机。模型预测的稠密几何可以作为额外的观测来源跟现有传感器形成互补。这就是多传感器融合的思路——只不过这次的“传感器”是一个从数据里学出来的几何预测器。4.2 算力、数据与调参部署前必须想清楚的现实问题先说算力。双视图几何模型的参数量普遍不小在桌面级GPU上前向推理一次可能需要几十毫秒。如果希望在线跑就必须放弃逐帧推理改成关键帧稀疏调度系统从普通VO前端拿到帧率每隔一定时间或者检测到位姿不确定性变大时才触发一次模型推理。这种模式下模型推理延迟不会阻塞主流程但代价是它提供的几何约束是稀疏的只能在关键帧层面抑制漂移。再说数据域差异。模型在互联网图像或者某个公开数据集上预训练到了实际部署环境传感器噪声特性、镜头畸变、光照条件、物体类别分布都变了预测精度会肉眼可见地下降。这时候最忌讳的是一味提高几何因子的权重。正确做法是重新做不确定性校准甚至准备几十帧目标域的微调数据让模型先适应一下新环境的光度分布。很多项目在公开数据集上效果暴涨、实地测试就崩问题往往出在这一步而不是模型本身。最后是调参里的一个常见坑几何因子权重从零开始慢慢加。我见过有人一上来就给了很高的权重结果整个轨迹被模型预测拉得不断抖动优化甚至直接发散。正确的做法是先让系统跑稳定把几何因子权重设一个很小的值观察残差项是否随迭代下降再逐步提高。这个过程中的判断标准不是轨迹质量而是优化收敛性。4.3 想自己动手验证从最小改动路径开始如果你现在手头有一套能跑的稀疏SLAM想验证“优化器内几何模型”的思路我不建议一开始就重写后端。更稳的路径是分三步走。第一步选一个能输出点图和置信度的双视图预训练模型准备好一个带真值的室内序列。跑标准SLAM记录轨迹、关键帧和地图。第二步离线构建位姿图。在回环密集或者漂移比较明显的段手动添加几何约束从之前缓存的模型输出里提取点图和置信度作为二元因子加到优化问题里。坐标对齐不能省模型点图坐标系和SLAM地图坐标系需要先估计出一个相似变换可以用对齐点云的经典方法估算尺度、旋转和平移。第三步对比添加前后轨迹误差曲线。重点看长距离漂移段是否被抑制同时观察添加因子之后优化是否还稳定收敛。跑通之后再谈如何把模型推理异步集成到在线系统里。我个人的实际体会是这类方法最值得学的不是某一个具体模型而是“让先验进入目标函数”的思维方式。给模型一个被优化器反驳的机会比给它更多信任更重要。F²SLAM最大的贡献就是把这种理念变成了一个清晰的系统设计Feed-Forward几何不是外挂的答案而是优化器手里可以用来博弈的一张牌。沿着这个思路继续往下走未来我们或许能看到更多“模型与优化器共生”的系统设计而不再只是简单地把大模型粘在流水线外面。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑