
先说结论MeanFuser 这个工作我看完第一反应是“怎么现在才有人把单步扩散堂堂正正用到轨迹生成上”。自动化所和某手机大厂在 CVPR 2026 上放出的这套多模态轨迹生成方案把纯规划推理干到了 434FPS单步生成不需要迭代去噪。这个数字放在实车部署的语境里是什么概念通常车上感知模块 10Hz 到 20Hz 就够用了规划模块如果能跑满 50Hz 已经算很宽裕434FPS 意味着单个规划帧的时间预算只有 2.3 毫秒左右给上层规控、底盘执行留出了极大的余量。所以这不是一个“跑分好看”的玩具它是真的冲着量产部署去的。这篇文章我不打算复述论文里的公式而是站在从业者的角度拆一下 MeanFuser 到底解决了什么问题、单步生成为什么难、434FPS 是怎么抠出来的、以及它跟现有主流方案比如 DenseTNT、LAV、VAD 这类的差异在哪。最后我会聊一些自己复现和部署这类模型时的实际感受包括踩过的坑。1. 背景为什么轨迹生成要谈“多模态”和“速度”1.1 多模态轨迹预测的必要性先说多模态。自动驾驶里轨迹生成不是简单的“从 A 点到 B 点找条路”而是在一个高度不确定的环境中给自车找一条安全、合规、舒适、且能够被执行器跟踪的路径。这个“找”字背后有一个核心难点未来是分叉的。旁边车可能加塞、可能减速让你、可能跟在你后面行人有可能会突然起步路口另一侧的车可能直行也可能左转。面对这些可能性规划算法如果不能同时给出多种合理的行为假设它就很容易在关键时刻变得过于保守一直减速等待或过于激进无视潜在冲突直接冲。所以现在主流的预测规划方案基本都走“多模态”路线一次前向输出 K 条候选轨迹每条轨迹附带一个概率分数。K 通常取 3、6、12甚至 64。MeanFuser 在这个方向上没有另辟蹊径它的多模态输出依然是“K 条轨迹 置信度”的结构但在生成方式上换了底层引擎。1.2 单步生成的挑战与价值轨迹生成领域前几年最火的是基于扩散模型的做法。扩散模型能刻画复杂多峰分布生成质量高代价是推理时要反复迭代去噪一般要 5 到 50 步。在 GPU 上 50 步勉强能接受但到了车端盒子或者车上域控50 步换来的延迟是灾难——规划链路晚 100 毫秒上游感知的预测就可能已经过期了。这也是为什么很多团队最后宁可牺牲一部分轨迹质量也要把模型换成一步出结果的 CVAE 或基于 Transformer 的直接回归。MeanFuser 的思路很直接保留扩散模型对多模态分布的表达能力但通过“单步生成”把迭代过程压缩到一次前向。它本质上是把多步去噪过程蒸馏成一个单步映射类似于图像生成领域 Consistency Model 或者 Latent Consistency Model 的做法但针对轨迹数据的特点做了定制化设计。单步的价值不仅在于快更在于让“扩散模型上车”这件事变得现实——你在推理时只需要执行一个网络前向不需要维护去噪循环、不需要反复查询噪声调度器、不需要为每一步单独做特征重编码。这里插一句个人观点单步生成不是简单地把迭代次数设成 1。直接把多步采样改成 1 步生成结果会糊、会退化成均值模式多模态能力基本丢失。MeanFuser 能在单步下保住多模态说明它在训练策略上一定做了特殊处理这也是本文最值得读的部分。2. MeanFuser 的核心思路拆解2.1 整体架构多模态轨迹生成与规划一体化从论文公开的信息看MeanFuser 走的是“感知特征输入 多模态轨迹头输出”的端到端规划结构。输入包括高精地图或者在线矢量的车道线、自车历史状态、周围障碍物车辆/行人/自行车等的历史轨迹和当前状态。这些信息先被编码成一个统一的环境表示然后在隐空间里做单步生成最后解码成多条未来轨迹。值得注意的一点是“纯规划”这个词。在我的理解里它指的是推理阶段不依赖规则后处理中的暴力搜索或多次优化迭代模型直接产出规划的轨迹点序列。传统方案里即使神经网络给出候选轨迹后面往往还要接一条 Frenet 或二次规划做平滑、碰撞检查、动态可行域筛选。MeanFuser 把“生成轨迹”和“规划轨迹”这两个概念用同一个网络融合了输出本身就具备可执行性后处理只做必要的安全检查而不是重新规划。这种做法的好处是系统简单、模块边界清晰。模型承担了从“理解环境”到“形成驾驶意图”的映射后处理只负责兜底安全。坏处是对模型的鲁棒性要求更高——它一旦在罕见场景下输出不合理轨迹你很难通过修改规则函数去局部修正。所以单步模型在实际部署时安全层依然不可省只是它的负担变小了。2.2 单步逆过程怎么实现这是 MeanFuser 的技术核心。扩散模型的前向过程是一个逐步加噪的过程把干净轨迹 x 变成纯噪声 z反向过程则是一步步去噪从 z 逐步恢复出 x。标准做法里反向过程的每一步都依赖一个神经网络预测噪声或直接预测干净信号但需要循环执行 T 次。MeanFuser 的单步化思路我认为核心是训练一个“从任意噪声级别直接映射到干净轨迹”的模型。这跟图像领域的 Consistency Model 思想一致不再要求模型学会 T 个去噪步而是要求它对同一个数据点在不同噪声级别下的预测保持一致。训练的时候模型同时看同一个轨迹样本的多个噪声版本并约束它们的输出彼此一致同时向真实轨迹对齐。这样训练出来的模型在推理时无论输入什么噪声甚至可以输入全零或固定随机种子一次前向就能给出合理轨迹。但轨迹跟图像不一样的地方在于轨迹的“噪声”不仅加了高斯扰动还可能涉及“语义层面的不确定性”。一条轨迹在十字路口可能左转也可能直行这两种行为在轨迹分布里是两个峰。如果只在像素级或点级做一致性约束模型很容易把两个峰糊在一起输出一条“既左转又直行”的平均轨迹。所以我推测 MeanFuser 在一致性约束之外一定引入了显式的模态条件或者聚类引导——比如在隐空间里预定义 K 个可学习的模态 token让模型在单步生成时明确选择走哪个分支。2.3 条件信息怎么注入轨迹生成不是凭空画线它必须服从环境约束。MeanFuser 对条件信息的处理我估计是“分路注入”的方式静态环境车道线、路沿、红绿灯状态走一个地图编码器动态环境障碍物轨迹、速度走另一个时序编码器最后通过 cross-attention 让生成器按需查询这两路信息。这里有个容易被忽视的细节地图和障碍物的特征分辨率不一样。车道线是细长的几何结构障碍物是离散的目标框和历史轨迹。如果粗暴地把它们拼成一个长向量模型很难分别关注到“前方 30 米右转车道”和“左后方车辆 3 秒内可能切入”这两个完全不同的线索。分路编码、交叉注意力融合是更稳妥的做法也是目前绝大多数端到端模型的标配。条件信息注入的另一个问题是“过强”或“过弱”。过强时模型会完全跟着参考线走失去超车、绕障等灵活性过弱时模型会无视车道边界生成压线甚至逆行轨迹。MeanFuser 既然声称在纯规划指标上有竞争力它在条件注入的“力度”上应该做了精细的平衡比如对静态地图特征和动态目标特征设置不同的注意力权重或者在损失函数里对“轨迹到车道边界距离”做显式约束。3. 关键技术点详解3.1 轨迹表示参数化还是点序列轨迹生成的输出表示直接影响后续的损失函数设计和轨迹平滑性。常见的表示有三种原始点序列直接输出未来 T 个时刻的 (x, y) 坐标最简单但容易出现抖动、不满足动力学约束。多项式曲线用三阶或五阶多项式拟合 x(t) 和 y(t)天然平滑但表达复杂机动如掉头时能力有限。B-spline / Bezier 控制点兼顾平滑和灵活度是当前轨迹生成模型里比较均衡的选择。MeanFuser 大概率采用控制点或者带速度/航向信息的点序列方式。为什么这么判断因为论文标题里强调的是“轨迹生成”而不仅是“轨迹预测”生成意味着要保证可执行性。如果只输出裸坐标点后面还要做动力学平滑那纯规划的速度优势就会被后处理消耗掉一部分。直接输出带速度、加速度约束的控制点可以让后处理几乎只做碰撞检查不做轨迹整形。3.2 损失函数与多模态分配多模态轨迹生成训练中的经典痛点是“模态坍缩”——K 条轨迹最后全都收敛到同一条。解决这个问题通常有两种框架一种是 Winner-takes-all (WTA)。每条预测轨迹只跟离它最近的 GT 轨迹算损失其他轨迹虽然预测得不好也不惩罚。这个方案简单但容易出现“某条轨迹总是赢其他轨迹被冷落”的情况。另一种是基于最优传输或者二分图匹配的方式比如 DETR 里的 Hungarian matching。把 K 条预测轨迹和 K 个 GT 模态做匹配然后逐对被匹配上的轨迹算损失。MeanFuser 既然强调多模态质量我判断它用了类似 Hungarian 匹配的机制配合一个额外的分类损失来预测每条轨迹的置信度。除了一般的 L2 或 SmoothL1 距离损失轨迹规划里还常加三类辅助损失碰撞损失预测轨迹与障碍物边界距离太近时惩罚。偏离损失预测轨迹与参考车道中心线偏离过大时惩罚。舒适性损失对加速度、加加速度jerk做惩罚。单步扩散模型里由于没有多步去噪的“中间修正”机会损失函数的设计更加关键。每一步训练都相当于“一步到位”所以模型必须在单个前向里把以上所有约束都考虑进去。这实际上对网络的容量和训练数据的质量提出了更高的要求。3.3 434FPS 是怎么算出来的FPSFrames Per Second是每秒能够完成的规划次数。要理解 434FPS 这个数字得先看一次推理包含哪些环节输入预处理地图元素矢量化、障碍物历史轨迹整理成张量。这部分如果用 CPU 做很容易成为瓶颈。特征编码地图编码器 目标编码器前向计算。生成器前向单步去噪网络执行一次。轨迹解码从隐空间或控制点解码成物理轨迹。后处理简单安全检查、坐标变换。在 GPU 上如果整条链路都是 TensorRT 优化过的单次前向 2.3 毫秒是合理的。需要注意的是434FPS 大概率是在“纯模型推理”的设定下测的也就是不计入前后处理的时间。实车部署时算上数据拷贝、CPU-GPU 同步、后处理安全校验实际端到端频率会在 100 到 200Hz 之间依然是远远够用的。我个人关注的不是 434FPS 这个具体数字本身而是它反映出来的“单步 纯规划”的架构红利。只要模型是单步的你可以通过换更小的 backbone、量化、剪枝等手段继续往上压速度。多步扩散模型就没这么好运因为你省不掉循环调度的开销。3.4 与主流方案的对比视角这里我列一个简单对比帮大家直观感受 MeanFuser 所处的生态位。方案生成方式迭代步数多模态端到端延迟量级传统 CVAE 规划隐变量采样 解码1 步依赖潜变量维度低扩散轨迹生成如 DGLR迭代去噪5~50 步天然多模态高回归式 Transformer 规划自回归逐个输出序列长度步需特化设计中等MeanFuser单步隐空间生成1 步模态 token 匹配低从表格可以看出来CVAE 虽然快但多模态能力弱扩散慢但多模态强回归式居中。MeanFuser 踩的点非常精准在扩散模型的结构优势上把迭代开销干掉。它本质上是在用“更强的训练约束”换取“推理时的极速”。4. 实验效果与关键指标解读4.1 规划质量指标轨迹规划的评测现在业内比较认可的是三类指标最小碰撞距离轨迹与障碍物的最近距离越大越好但要结合场景判断。跟线误差与参考线或人类轨迹的横向偏差反映“拟人度”。舒适性指标加速度变化率。单步生成模型最容易翻车的就是“跟线误差”——因为它在拟合多模态分布时容易把 GT 轨迹的噪声也学进去或者因为模态分配不当导致每条轨迹都偏向训练分布的平均位置。从 MeanFuser 公开的定量结果看它在这些指标上与多步扩散模型基本持平这是个很强的信号说明蒸馏的一致性训练确实有效没有因为压缩迭代步数而牺牲太多表达力。不过我也要提醒论文里的指标是在特定数据集一般是 nuScenes 或内部数据集上取得的换到自己的场景、自己的地图规范、自己的障碍物定义性能会有浮动。复现时重点看相对趋势别迷信绝对值。4.2 速度提升的来源分解我尝试把 434FPS 相对于传统多步扩散的加速做一次粗略分解基于我对类似工作的经验估算不代表论文原文数据去掉多步迭代比如从 20 步变为 1 步理论提速约 20 倍。但是单步模型的网络容量通常会比单步的常规去噪网络更大一些这部分会吃掉一部分理论收益。TensorRT FP16 部署额外提速约 2 至 3 倍。最终相对原始多步扩散的整体加速通常在 10 到 15 倍之间。也就是说即使你手里有一个 20 步的扩散规划模型在 GPU 上跑 30FPS换成 MeanFuser 思路优化后跑到 300 到 450FPS 是符合预期的。这不是魔法是结构上省掉了循环。4.3 对比实验里的“陷阱”看这类论文的实验部分我会格外注意两个地方第一是评估场景的多样性。如果测试集里大多是直线或缓弯场景多模态能力很难体现差距。要做区分度应该单独做一个“交互强场景”的子集比如无保护左转、变道博弈、被加塞这时候多模态的优势才会显现。第二是跟 baseline 的公平性。有些工作给 baseline 用了相同 backbone有些则直接引论文里的数字——后者往往高估了自己的提升。MeanFuser 的作者来自自动化所和手机大厂他们跟工业界结合比较紧密实验设置的公允性应该是有保障的但评审视角和工程视角依然会有偏差。我在实际落地时会自己做一轮小规模的对比测试用同一份数据、同一套评测代码跑所有方案。5. 实操思路与踩坑记录5.1 数据准备阶段的注意点你要复现或基于 MeanFuser 做二次开发第一步不是改模型而是搞定数据。轨迹生成模型对数据质量极其敏感尤其是多模态模型。我建议重点做三件事多模态 GT 聚类把训练集里的所有人类驾驶轨迹按场景聚类通常用终点位置 行为模式转向、换道、停车做特征。聚类的 K 要跟你的模态头数量匹配。场景均衡如果数据集里直行场景占 80%模型学出来的多模态能力会偏科。需要按“行为类别”做重采样或者给稀有行为如掉头、连续变道加权重。噪声轨迹清洗轨迹里偶发的跳变点GPS 点抖动、标注错误会严重干扰一致性训练。我一般会先做速度连续性检查凡是相邻帧位移超过物理极限的轨迹直接剔除。5.2 训练策略上的建议单步扩散模型训练比普通监督生成要敏感得多。我基于类似模型的经验给出几条可落地的建议先做预训练先按普通 CVAE 或者回归的方式训一个能产出合理轨迹的模型再用一致性损失做微调。直接端到端硬训单步模型很容易不收敛或者收敛到平庸解。模态初始化如果用了 K 个模态 token最好先用 K-means 聚类把轨迹终点分成 K 类然后用聚类中心初始化 token 的隐向量。这样模型一开始就知道“K 条轨迹要分得开”。学习率调度蒸馏类训练经常出现后期震荡。建议使用带热重启的余弦退火或者干脆在最后 20% 训练轮数把学习率降到 1/10让模型把注意力从“探索新模态”转到“稳定已有模态”。另外损失函数的权重也需要自己调。碰撞损失跟跟线损失放在一起量纲不同直接相加会让模型只优化量大的一项。我会用“梯度归一化”或者“不确定性加权”的方式把各损失项的尺度对齐具体做法是给每个损失项设一个可学习的权重参数。5.3 部署时容易忽略的性能瓶颈就算模型本身单步了真正部署到车端还是会遇到几个性能杀手地图预处理在 CPU 上计算每次规划要查询周围 100 米范围内的车道线矢量化、采样、排序如果这段代码没优化耗时可能比模型前向还高。建议把地图查询做成常驻内存的缓存只在车辆驶入新区域时更新。输入拼接的 IO 开销模型输入里既有稠密的 map 特征又有稀疏的障碍物特征如果每次都重新 clone 和 reshape显存带宽会成为瓶颈。在 TensorRT 里用静态输入形状提前分配好显存缓冲区能省 30% 以上延迟。多线程竞争实车上规划模块和感知模块经常争抢 CPU 资源。最好把模型推理固定到独立 GPU stream输入数据用零拷贝方式从感知模块传递避免锁竞争和 memcpy。5.4 场景层面的一个短板与对策单步生成模型最怕什么最怕“分布外”场景——训练集里从来没有出现过的极端交通情况比如五岔路口、标准标线严重磨损、行人突然横穿多车道。多步扩散模型在遇到分布外输入时至少有迭代修正的机会单步模型是真的“一步错、步步错”。我的对策是双轨并行主模型依然用 MeanFuser旁边挂一个轻量级的规则兜底。规则模块检查主模型输出的轨迹是否触碰安全边界车道边界、障碍物膨胀区域、速度上限。如果违反就启用一个经典规划算法从新的起点重新规划一条安全轨迹。虽然听起来有点“不够端到端”但量产系统讲究的是可解释、可兜底而不是纯粹的炫技。6. 常见问题速查与避坑清单这个部分整理我平时被问得最多的几个问题也作为大家的自查手册。6.1 训练不收敛或者生成轨迹全是直行大概率是模态坍缩。检查以下三处模态 token 是否参与损失计算如果 token 只是作为查询向量但没有梯度传回去模型就没动力学出不同模态。可以使用“令牌级 Contrastive 损失”强制 K 个 token 的隐向量彼此远离。匹配策略是否稳定Hungarian 匹配本身是离散的梯度无法穿过匹配过程。解决办法是在匹配结果固定后把被匹配的模态 index 当成 stop-gradient 条件只更新跟 GT 配对的轨迹分支。数据本身的模态区分度够不够聚类 K 设太大而数据里没有那么多真实分叉也会导致冗余模态。K 宁少勿多先用 K3 跑通再逐步放大。6.2 单步生成轨迹“不连贯”前 0.5 秒正常、后 3 秒乱飘这种情况一般是时序建模的“长期记忆”不足。轨迹预测在时间维度上跟语言模型类似前面的点需要引导后面的点。如果编码器只是简单地把历史轨迹过一遍 Transformer而没有对“未来意图”做显式建模模型很容易在远端时间步崩掉。我建议的解决方法是把损失函数里“远端时间步”的权重调高比如前 0.5 秒权重 0.5中间 1 秒权重 1.0后 1.5 秒权重 2.0。强制模型在远端时间步投入更多容量。如果还是不行可以把预测时域缩短比如从 8 秒降到 5 秒牺牲一点规划视距换取稳定性。6.3 换了数据集之后FPS 掉了一半不要慌多半是输入分辨率或者序列长度变了。原模型如果按 200 米范围、300 个地图点、32 个障碍物设计换到更复杂的路口场景数据量翻倍导致 attention 计算量变成平方级增长。性能优化思路从高到低排列稀疏注意力只让轨迹查询跟最近的 N 个地图元素做 attention而不是全图。地图元素降采样直道上的车道线每隔 5 米采一个点就够了不需要 1 米一个点。量化感知训练直接在训练阶段做 QAT量化感知训练部署时用 INT8 推理通常能再快 2 倍。6.4 安全层检测到轨迹碰撞但每次都预警这说明主模型的轨迹分布太贴障碍物边缘。一个有效的调参方向是扩大障碍物的“膨胀半径”。通常规划里会给障碍物加 20 到 30 厘米的膨胀量如果你的车辆比较宽比如接近 2 米可以加到 50 厘米。这样会让模型被迫往更安全的区域生成轨迹。还有一种做法是在训练数据层面“人为污染”把障碍物边界往内缩 10 厘米让模型学到的障碍物比实际“大了一圈”推理时反而更安全。6.5 想要更高 FPS 怎么办434FPS 确实是目前我看到过的顶级速度了但还能再进一步。路线有三条模型剪枝把注意力头数从 8 减到 4或者把 FFN 中间层维度减半精度损失通常可控。知识蒸馏用一个更大的教师模型甚至一个多步扩散模型蒸馏当前的单步模型教师能为单步学生提供更高质量的训练信号。算子融合把 LayerNorm、残差连接、线性层合并成单个 TensorRT 插件减少 kernel launch 次数。不过我的个人经验是规划模块没必要无脑追求速度最大化。车规域的决策周期通常在 100 毫秒级别规划 50 到 100Hz 已经完全够用剩下算力留给感知和冗余校验会更值。7. 我的整体评价与适用场景判断如果你正在做一个端到端自动驾驶项目尤其是想把轨迹生成模型量产化MeanFuser 的参考价值非常大。它证明了“扩散模型级的多模态质量”和“单步推理级的速度”可以兼得。这个结论对行业的影响不在于它本身的跑分而在于它重新打开了“扩散模型上车”的可行性大门。但我也要说一句大实话这类模型并不适合每一个团队去直接复现。它对数据质量、训练技巧、部署工程的要求远高于普通的回归式规划模型。如果你的团队没有积累足够的驾驶数据也没有专门的模型优化工程师从 CVAE 或 Transformer 回归开始反而更容易落地。MeanFuser 是“高阶玩家的进阶武器”不是新手的入门教程。我个人的建议是分两步走。第一步用你已经有的数据把这个项目的单步生成概念做成一个 demo在 nuScenes 或者自己的仿真器里跑通观察它在多模态分叉、连续交互场景的表现。第二步如果效果确实比现有 baseline 好再投入资源去做训练加速和工程部署。整个过程里保留安全兜底层永远是最重要的原则——模型不可控的时候规则还能拉住车。最后分享一个小细节。我复现类似单步模型时发现训练收敛后的模型在“感知输入轻微扰动”下轨迹输出偶尔会出现模态跳变。比如同一帧输入只是障碍物位置差了 5 厘米模型从“左转”跳到了“直行”。虽然概率很低但对量产系统来说帧间不稳定比“完全错误”更危险。我的处理办法是在输出端加一个时间维度的低通滤波或者让模型在推理时接收连续两帧的特征做对比超过阈值才允许模态切换。这个细节论文里大概率不会写但它是从 demo 到量产必须跨过的一道坎。