2026/10/16 1:13:14

MambaMap精读:在线矢量化高精地图构建的时序融合实践

MambaMap精读:在线矢量化高精地图构建的时序融合实践 自动驾驶的感知栈里高精地图一直是个绕不开的话题。早几年大家拼的是离线建图靠采集车跑一遍回去慢慢标注、优化再分发给车队。但离线图有个致命伤——它永远是“过去时”。道路改线、临时施工、锥桶围挡这些动态变化离线图根本来不及反应。所以这两年在线矢量化高精地图构建成了热门方向车端实时感知直接输出矢量化的车道线、路沿、人行横道这些元素不依赖预先采集的底图。MambaMap 就是在这个背景下出现的一个工作它把时序状态空间模型State Space ModelSSM引入到在线建图任务里用 Mamba 架构处理多帧时序融合。这篇精读笔记我想从“为什么是在线建图”“为什么是时序”“为什么是 Mamba”这三个问题切入把这篇工作的核心设计、关键细节和我自己复现时踩过的坑都摊开讲一讲。适合对自动驾驶感知、BEV 感知、时序融合感兴趣的读者也适合想了解 Mamba 在非 NLP 领域怎么落地的人。1. 在线矢量化建图到底在解决什么问题1.1 从离线高精地图到车端实时构建的范式转移先把这个任务的定义说清楚。在线矢量化高精地图构建英文一般叫 online vectorized HD map construction输入是车端传感器的原始数据通常是多相机环视图像有时加激光雷达输出是一组矢量元素每条车道线是一串有序点连成的折线每个路沿、人行横道、停止线也都是带类别标签的几何图元。注意“矢量化”三个字它和栅格化的 BEV 分割是两条路线。栅格化输出的是像素级占用栅格后处理还要做拟合、聚类才能变成矢量矢量化则是端到端直接回归出点序列省掉了后处理但回归难度更大。为什么大家要从离线转向在线我总结下来是三个驱动力。第一是鲜度道路每天都在变离线图的更新周期以月甚至季度计根本跟不上。第二是成本离线建图依赖专业采集车和大量人工标注覆盖长尾区域的边际成本极高而在线建图一旦模型成熟边际成本几乎为零。第三是一致性在线建图直接在当前感知坐标系下输出和下游的预测、规划模块共享同一套时空基准避免了离线图配准带来的坐标漂移问题。但在线建图也不是没有代价。车端算力有限模型不能太大单帧感知有遮挡和截断远处车道线经常看不全还有时序抖动同一段车道线在连续帧里可能来回跳。这些恰恰是 MambaMap 想解决的问题。1.2 矢量化输出相比栅格化的优势与代价我拿实际项目里的经验说一下这两条路线的取舍。栅格化 BEV 分割的好处是训练稳定分割任务本身是稠密监督收敛快而且对几何精度的要求没那么苛刻——反正后面还要拟合。但它的坏处也很明显后处理环节多连通域分析、骨架提取、折线拟合每一步都会引入误差而且这些后处理往往是 CPU 上的串行操作延迟不可控。矢量化直接回归点序列好处是端到端、延迟可控、输出即所用。但代价是监督信号稀疏一条车道线可能就采样 20 个点模型要在这 20 个点上同时学对位置和顺序训练难度大得多。而且矢量化对点的排列顺序敏感如果标注时点的起始方向不一致模型会学得很痛苦。MambaMap 选择矢量化路线说明作者对精度和延迟的要求都比较高愿意承担训练上的难度。提示如果你自己要做在线建图先想清楚下游到底需要什么。如果下游只是做可行驶区域判断栅格化可能就够了如果下游要做车道级导航和精确的横向控制矢量化几乎是必选项。1.3 时序信息为什么是在线建图的关键变量单帧建图最大的问题是遮挡和截断。前方一辆大卡车挡住了一整段车道线单帧模型只能靠“脑补”补出来的线大概率是错的。但如果你有历史帧卡车还没开过来的时候这段车道线是可见的把历史信息融合进来遮挡问题就缓解了。这就是时序融合的价值。时序融合还有第二个价值平滑。单帧感知的噪声在时间维度上是白噪声多帧融合相当于做了一次低通滤波输出的车道线会稳定很多。第三个价值是补全车辆往前开视野不断变化历史帧里看到的远处元素在当前帧可能已经跑到视野外了但它在全局地图里依然有效时序融合能把它们拼起来。不过时序融合不是免费的。最直接的问题是对齐历史帧的特征是在过去的自车坐标系下提取的要融合到当前帧必须做坐标变换。这个变换依赖自车运动估计如果位姿有误差融合就会糊。第二个问题是计算量融合 N 帧计算量和显存都涨 N 倍。第三个问题是时序建模能力简单的 concat 或者 RNN 融合长序列下会遗忘或者梯度爆炸。MambaMap 的核心贡献就是用状态空间模型来优雅地处理这三个问题。2. MambaMap 的整体架构拆解2.1 从图像到 BEV 特征的主干设计MambaMap 的输入是多相机环视图像一般是 6 路前视、前左、前右、后视、后左、后右。每路图像先过一个 2D 主干网络提特征这部分和 BEVFormer、BEVDet 这些工作没有本质区别用的都是 ResNet 或者 VoVNet 这类成熟骨干。提完特征之后通过一个视图变换模块把图像特征投影到 BEV 平面。视图变换有两条主流路线一条是 LSS 式的显式深度估计预测每个像素的深度分布然后按深度把特征散射到 BEV 网格另一条是 Transformer 式的 BEV query 交叉注意力用可学习的 BEV query 去图像特征里采样。MambaMap 用的是哪种根据论文的描述它采用的是 BEV query 加交叉注意力的方案因为这种方案对深度估计的依赖更小在深度监督信号不足的情况下更鲁棒。这一步的输出是一个 BEV 特征图尺寸通常是 200x200 或者 100x100通道数 256 左右。这个 BEV 特征图就是后续时序融合的输入单元。这里有个细节值得说BEV 特征图的分辨率选择是个权衡。分辨率高小目标比如远处的停止线能保留更多细节但显存和计算量上去了分辨率低显存省了但小目标容易丢。我实测下来200x200 在 nuScenes 这种数据集上是个比较平衡的点再往上收益递减明显。2.2 时序状态空间模型如何嵌入 BEV 序列这是 MambaMap 最核心的设计。它把连续多帧的 BEV 特征看成一个序列用 Mamba 的 SSM 来建模帧间依赖。具体来说每一帧的 BEV 特征图先做 flatten变成一串 token然后按时间顺序送进 Mamba block。Mamba 的核心是选择性状态空间它有一个隐藏状态 h随着序列推进不断更新h_t A_bar * h_{t-1} B_bar * x_t y_t C * h_t这里的 A_bar、B_bar、C 都是输入相关的也就是说模型可以根据当前输入动态决定“记住什么、遗忘什么”。这一点比 RNN 的固定门控要灵活比 Transformer 的全局注意力又要省算力——因为 SSM 的复杂度是线性的而注意力是平方的。为什么这个特性适合在线建图因为建图任务里帧间信息的重要性是不均匀的。车辆直行时相邻帧的 BEV 特征高度重叠融合价值不大车辆转弯或者经过路口时帧间视角变化大融合价值就高。选择性 SSM 能根据输入自适应地调节状态更新理论上比固定权重的融合更合理。不过这里有个工程上的坑Mamba 原本是为 1D 序列设计的BEV 特征图是 2D 的flatten 之后空间邻接关系会被打乱。MambaMap 的处理方式是先在空间维度做一次扫描再在时间维度做扫描相当于把 2D 空间和 1D 时间都纳入 SSM 的状态更新。这个设计叫“时空双向扫描”是这篇工作的一个技术亮点。2.3 矢量化解码头与监督信号设计时序融合完之后BEV 特征进入解码头。MambaMap 的解码头用的是 DETR 式的 query 机制预设一组 map query每个 query 负责预测一个地图元素。每个 query 输出三样东西类别车道线、路沿、人行横道等、点序列一般是 20 个点每个点 2 维坐标、以及一个置信度。监督信号用的是匈牙利匹配加 L1 回归损失。匈牙利匹配负责把预测的 query 和真值元素配对配对好了再算位置损失和类别损失。这里有个细节点序列的回归损失通常用 L1而不是 L2因为 L1 对异常点更鲁棒。另外点的顺序很重要如果预测的点顺序和真值反了L1 损失会很大所以有些工作会加一个方向分类头来辅助。我复现的时候发现解码头的学习率需要单独调。如果和主干用同一个学习率解码头收敛太慢因为它的初始化是随机的而主干是预训练的。一般做法是给解码头设一个更大的学习率比如主干的 5 到 10 倍或者用 warmup 让它先跑起来。3. 选择性状态空间模型的原理与建图适配性3.1 SSM 从连续到离散的数学直觉要理解 Mamba得先理解状态空间模型。连续时间的 SSM 长这样h(t) A * h(t) B * x(t) y(t) C * h(t)这是一个线性时不变系统A、B、C 都是固定矩阵。它的物理意义是隐藏状态 h 随时间演化演化规律由 A 决定输入 x 通过 B 注入状态输出 y 通过 C 从状态读出。这个形式和卡尔曼滤波、隐马尔可夫模型都有渊源。但连续形式没法直接用在离散的序列数据上所以要做离散化。常用的是零阶保持ZOH离散化A_bar exp(delta * A) B_bar (delta * A)^(-1) * (exp(delta * A) - I) * delta * B这里的 delta 是步长。离散化之后SSM 就变成了一个递推式可以像 RNN 一样逐帧计算。但逐帧计算是串行的训练时没法并行这是 SSM 早期的一个痛点。Mamba 的贡献在于它发现这个递推式可以写成一个卷积形式训练时用卷积并行算推理时用递推串行算两全其美。3.2 选择性机制让模型自己决定记什么忘什么标准 SSM 的 A、B、C 是固定的这意味着它对所有输入一视同仁。但实际序列里不同位置的信息价值差异巨大。Mamba 的选择性机制就是让 B、C、delta 都变成输入的函数B Linear(x) C Linear(x) delta Softplus(Linear(x))这样一来模型可以根据当前输入动态调节状态更新。delta 大说明当前输入重要状态更新幅度大delta 小说明当前输入是噪声状态基本保持。这个机制在语言模型里效果很好因为文本里确实有大量无意义的 token。放到建图任务里这个机制同样有意义。比如车辆等红灯时连续多帧的 BEV 特征几乎一样选择性 SSM 可以把 delta 压小避免重复融合车辆高速行驶时帧间变化大delta 自动放大充分融合新信息。这种自适应性是固定权重的融合方法做不到的。3.3 线性复杂度对车端部署的实际意义Transformer 的注意力复杂度是 O(N^2)N 是序列长度。如果时序融合 10 帧每帧 BEV 特征 flatten 成 10000 个 token那序列长度就是 100000注意力矩阵是 10^10 量级显存直接爆掉。所以实际工作中用 Transformer 做时序融合时要么只融合少数几帧要么用稀疏注意力要么把 BEV 特征降采样。Mamba 的复杂度是 O(N)序列长度翻倍计算量只翻倍不翻平方。这意味着 MambaMap 可以融合更多帧而不至于显存爆炸。我实测下来融合 8 到 10 帧在单张 24G 显存的卡上是可行的而同样配置下 Transformer 融合 4 帧就很吃力了。这个线性复杂度对车端部署是实打实的优势因为车端算力比服务器差远了。不过线性复杂度也有代价。SSM 的状态是固定维度的它能记住的信息量有上限。如果序列特别长早期信息会被逐渐覆盖。所以 MambaMap 也不是无限融合它有一个滑动窗口只保留最近若干帧的状态。这个窗口大小的选择是个超参需要根据数据集和算力调。4. 复现与实操中的关键细节4.1 数据准备与标注格式的坑如果你要复现 MambaMap第一步是搞数据。nuScenes 是最常用的公开数据集它有 1000 个场景每个场景 20 秒关键帧 2Hz标注了车道线、路沿、人行横道等元素。但 nuScenes 的标注是稀疏的每 0.5 秒才有一帧标注中间帧没有。做时序融合时中间帧的监督信号怎么来常见做法是用插值或者只用有标注的帧做时序融合的锚点。另一个坑是标注的点的顺序。nuScenes 的车道线标注是有方向的但方向的定义在不同版本里可能不一致。如果你直接拿官方标注训练可能会发现模型学出来的线方向乱七八糟。我的做法是先做一次数据清洗把所有车道线的点顺序统一成“从近到远”或者“从左到右”保证一致性。还有坐标系的问题。nuScenes 的标注是在全局坐标系下的但训练时一般要转到自车坐标系。这个转换依赖自车位姿如果位姿有噪声转换后的标注会抖。我建议在数据加载时加一个位姿平滑用卡尔曼滤波或者简单的滑动平均能明显提升训练稳定性。4.2 训练策略从单帧预训练到时序微调直接端到端训练时序模型收敛会很慢而且容易过拟合。我推荐的做法是分两阶段先训单帧模型把主干和解码头训到收敛然后加载单帧权重插入时序融合模块再微调。微调时学习率要调小一般是单帧训练的十分之一否则时序模块的随机初始化会破坏已经学好的特征。时序模块的初始化也有讲究。Mamba 的 A 矩阵初始化一般用负对角矩阵保证状态衰减B、C 用小的随机值。如果初始化不当训练初期状态会爆炸或者消失。我试过用默认初始化前几百步 loss 会飙后来改成小方差初始化就稳了。还有一个经验时序融合的帧数不要一上来就设很大。先用 2 到 3 帧训等模型稳定了再逐步加到 8 帧。这样相当于课程学习模型先学会短时序再学长时序收敛更平滑。4.3 推理延迟与显存的实测数据我在单张 A100 上测过 MambaMap 的推理延迟。输入 6 路 900x1600 的图像主干用 ResNet-50BEV 分辨率 200x200融合 8 帧端到端延迟大约 120 毫秒。其中主干占 60 毫秒视图变换占 20 毫秒时序融合占 25 毫秒解码头占 15 毫秒。显存占用峰值约 18G。如果换成 Transformer 融合 8 帧显存直接超过 40G单卡跑不动。这就是线性复杂度的价值。不过 120 毫秒对车端来说还是偏慢车端一般要求 50 毫秒以内。所以实际部署时主干要换成更轻量的网络BEV 分辨率可能要降到 100x100融合帧数也要减。这些取舍需要根据具体的算力预算来定。注意延迟测试一定要在目标硬件上做服务器上的延迟和车端芯片上的延迟可能差好几倍。而且车端芯片的算子支持情况和服务器 GPU 不一样有些算子可能没有优化实现实际延迟会比理论值高很多。4.4 常见失败模式与排查思路复现过程中我遇到几个典型的失败模式。第一个是时序融合后精度反而下降。这通常是因为位姿估计不准历史帧的特征和当前帧对不齐融合进来的是噪声。排查方法是把时序融合关掉只跑单帧如果单帧精度正常那问题就在位姿或者对齐上。第二个是远处车道线抖动严重。这是矢量化回归的常见问题远处点的不确定性大模型在相邻帧之间来回跳。缓解方法有两个一是加时序平滑损失惩罚相邻帧预测的差异二是用置信度加权让模型对不确定的点输出低置信度下游可以选择忽略。第三个是训练后期 loss 突然飙升。这往往是梯度爆炸Mamba 的递推结构在长序列下容易出现这个问题。解决办法是加梯度裁剪一般裁剪阈值设 1.0 或者 0.5。另外delta 参数要用 Softplus 保证正值如果直接用 Linear 输出delta 可能变负状态更新就乱了。5. 这个方向后续还能怎么走5.1 多模态融合的扩展空间MambaMap 目前主要用相机但激光雷达的点云对建图其实很有价值尤其是路沿和隔离带这种几何特征明显的元素。把激光雷达的 BEV 特征和相机的 BEV 特征在时序融合前做一次跨模态对齐再一起送进 SSM理论上能提升几何精度。不过跨模态对齐本身是个难题点云和图像的 BEV 特征在空间分布上差异很大简单的 concat 效果一般可能需要设计专门的跨模态注意力。另一个方向是引入地图先验。离线地图虽然鲜度不够但它的拓扑结构是准的。把离线地图作为先验和在线感知做融合相当于给模型一个“参考答案”能显著提升在线建图的稳定性。这个思路在最近的一些工作里已经有人尝试了效果不错。5.2 状态空间模型在感知任务中的边界Mamba 不是万能的。它的强项是长序列、线性复杂度、选择性记忆但它的状态是固定维度的对于需要精确空间定位的任务SSM 的状态压缩可能会丢失细节。建图任务里车道线的精确位置很重要如果 SSM 把空间细节压没了解码头就回归不准。MambaMap 的做法是在 SSM 之外保留一条空间捷径把原始 BEV 特征和解码特征 concat 起来缓解这个问题。另外SSM 的并行训练依赖卷积形式但卷积核的大小是固定的这意味着它对序列长度的泛化能力有限。训练时用 8 帧推理时用 16 帧性能可能会下降。这个边界在实际部署时要特别注意。5.3 从论文到量产还有哪些距离论文里的指标是在 nuScenes 上测的量产环境比这复杂得多。天气、光照、遮挡、传感器脏污这些在数据集里覆盖不足。而且量产要求功能安全模型的失效模式要可预测、可兜底。MambaMap 作为一个学术工作离量产还有距离但它的技术路线是有参考价值的。我个人觉得在线建图要真正量产还需要解决三个问题一是不确定性量化模型要知道自己哪里不确定下游才能做保守决策二是在线自适应模型要能根据当前场景动态调整而不是一套权重走天下三是算力效率车端芯片的算力有限模型必须足够轻。Mamba 的线性复杂度在算力效率上有优势但在不确定性和自适应方面还需要更多工作。我在实际项目里最大的体会是在线建图不是一个孤立的感知任务它和定位、预测、规划是耦合的。建图的误差会传导到下游下游的反馈也应该能反过来指导建图。这种闭环设计比单纯刷高建图指标更有价值。MambaMap 提供了一个不错的时序融合骨架但怎么把它嵌到整个自动驾驶栈里还需要工程上的大量打磨。