环视感知与潜在世界模型:高效端到端自动驾驶的新范式
2026/9/8 19:56:38 网站建设 项目流程

前几天在开源社区刷到 SV-WAM 这篇工作,标题里三个关键词正好击中我最近一直在琢磨的事情:环视感知、世界模型、端到端驾驶。传统上我们做的端到端模型,输入相机图像,输出轨迹或者控制量,中间用 Transformer 把感知、预测、规划揉在一起。但这种做法本质上还是“看到什么就做什么”,没有对未来环境的主动预判。世界模型解决的就是这个问题:让车在脑子里先跑一遍,推演下一步会发生什么,再决定怎么开。SV-WAM 把这种推演放在潜在空间里,用环视图像作为输入,整个模型端到端训练,效率还做得特别高。这篇文章我打算从设计动机、架构细节、训练方式、效率分析到复现踩坑,一层层拆开聊,希望对正在做端到端规划或者想引入世界模型的朋友有实际帮助。

1. 端到端驾驶的进化脉络:从“看到就开”到“先想后开”

1.1 模块化时代的流水线机器

在端到端方案大规模流行之前,自动驾驶系统基本是模块化设计的:感知模块检测物体和车道线,融合模块把相机、雷达、激光雷达的数据对齐到世界坐标系,预测模块估计其他交通参与者的未来轨迹,规划模块再根据这些结果生成一条安全轨迹,最后交给控制模块执行。

这套流水线每个环节都有独立的团队优化,问题也出在“独立”上。上游感知一旦漏检或误检,下游预测和规划立刻被带偏,整个链路像多米诺骨牌一样崩溃。我曾在雨天场景调试过一版系统,前视相机把水雾当成障碍物,规划模块直接踩了一脚急刹,后来发现是感知的天气鲁棒性不够。这种错误在每个模块各自最优的情况下依然会发生,因为模块之间传递的是经过人工定义的中间表示,比如“车道中心线”“障碍物3D框”,这些表示会丢掉大量对驾驶决策有用的原始信息。

1.2 端到端模型的“短视”问题

端到端自动驾驶的思路是:不人工定义中间表示,输入传感器数据,直接输出规划轨迹或控制指令。从 UniAD 到 VAD,这些工作把感知、预测、规划统一到一个Transformer框架里,用查询向量在不同任务间交互,确实解决了累加误差的问题,也取得了不错的实车表现。

但现有端到端模型有一个明显短板——它们本质上是“反应式”的。模型看到当前帧的图像,结合历史信息,输出一个动作。它不会主动去想象“如果我这样开,下一秒会不会撞上那个正在跑出来的行人”。缺少这种对未来世界的模拟能力,导致模型在人车混杂、遮挡严重、事件罕见的情况下表现得像个新手司机。

一个反直觉的现实是:人类司机开车时,眼睛看的是前面,大脑里却同时构建了未来几秒的动态画面。比如看到路边皮球的瞬间,大脑会自动预演“有小孩可能会冲出来”的场景,然后提前松油门。这种能力来自大脑中的世界模型——对环境变化的压缩模拟。自动驾驶业界一直在研究怎么能把这种能力装进模型里,这就是世界模型在自动驾驶中越来越受关注的原因。

1.3 世界模型在自动驾驶中的三种常见形态

大体上世界模型有三种做法。一种是像素级世界模型,也就是预测未来视频帧。理论上最完整,但计算量巨大,而且视频空间中大量像素是静止背景,对驾驶决策来说信息冗余严重。第二种是基于结构化表示的世界模型,比如预测未来 BEV 占据栅格或者目标轨迹,计算量可控,但受限于显式表示的表达能力,很多细节被抹掉了。第三种是潜在空间世界模型,只在隐空间里预测未来的状态变化,不直接重建图像,也不显式输出语义地图。SV-WAM 走的就是这个路线。

潜在空间的好处在于,模型在训练时学到的隐状态已经压缩出了和驾驶最相关的信息,不需要浪费算力去重建路边的树叶或者天空的云。下一帧变化的关键要素,比如其他车辆的位置、自身车辆的状态,都会在隐状态里以某种编码形式保留下来。SV-WAM 在此基础上还引入了环视输入,让模型能够建模车辆周围的完整场景动态。这比只用前视相机的方案视野更广,比用激光雷达的方案成本更低,也更适合量产。

2. SV-WAM 核心架构拆解:环视图像与潜在世界模型如何协同

2.1 环视输入是怎么整合进网络的

环视系统一般由 6 颗鱼眼或广角相机组成,覆盖车辆周围 360 度。但多相机输入不是简单地把图像横向拼接在一起,因为不同相机有不同的内参和安装位置,直接拼出来的全景图在视角交界处会有严重的几何畸变。SV-WAM 这类模型通常的做法是:先用一个共享的视觉编码器对每路图像分别提取特征,然后通过内外参把图像特征投影到统一的 BEV 空间,再在 BEV 特征上做跨视角融合。

投影过程听起来简单,实现的时候麻烦事不少。首先是外参标定的微小误差会直接导致特征错位,在 40 米远处可能错开 1 到 2 个格子的分辨率。其次是不同相机的曝光和白平衡不一致,同一块路面在左前和右前相机里可能颜色完全不同,这会让 BEV 特征在边界处出现明显的“接缝”。SV-WAM 采用的做法是保留多相机特征的同时引入视角注意力,让模型自己去学如何把相邻视角的信息对齐,而不是强制投射到严格的物理网格上。我之前测试过纯投影和可微配准两种路线,结果后者的鲁棒性明显更好,代价是多了一些参数量,但换来的是对轻微标定误差的容忍度。

2.2 “潜在世界模型”到底预测什么

先明确一个概念:潜在世界模型不是预测像素,也不是预测 BEV 语义图,而是在模型的隐空间里预测未来的隐状态。你可以把隐状态理解成一个被压缩到几百或上千维的向量,这个向量浓缩了当前场景和自车状态的所有关键信息。

SV-WAM 的潜在世界模型模块通过一个时序状态转移网络,把时刻 t 的隐状态变成 t+1 的隐状态。这个转移网络可以是一个 GRU,也可以是一个带时序注意力的 Transformer。它预测的是隐状态的变化量,而不是直接预测整个隐状态,这样在数值上更稳定,不容易出现隐状态漂移。我在实验里发现,直接让网络输出下一个隐状态,训练到后期容易出现隐状态幅值越来越大或越来越小的情况,而改成残差形式之后,训练稳定度提升非常明显。

还有一个关键细节是,潜在世界模型需要感知到“动作”。也就是说,状态转移不仅取决于当前隐状态,还依赖于自车打算执行的动作。SV-WAM 把动作压缩成动作嵌入向量,和隐状态拼接在一起输入到转移网络,从而学习不同驾驶行为对未来场景的影响。这个设计让世界模型不再是一个旁观者,而是真正参与驾驶决策的推演者。

2.3 World-Action 联合建模:共享时序上下文的艺术

SV-WAM 的命名里有一个关键词是“World-Action”,意思是不把世界预测和动作规划割裂成两个独立模块,而是放在一个统一的时序上下文里联合优化。

具体来讲,模型首先从环视图像序列中提取多帧特征,通过时序编码器得到当前的历史上下文。世界模型在这个上下文的基础上逐帧推演未来若干步的隐状态,同时动作规划头根据当前隐状态和推演出的未来隐状态生成自车的轨迹。换句话说,世界模型提供的“未来”不只是展示给用户的模拟视频,而是直接被规划头用来计算最优路径。

我特别喜欢这个设计的一点是:它让世界模型和动作规划之间形成了一种“想象—评估—决策”的闭环。未来隐状态如果显示前方有碰撞风险,规划头就可以提前调整轨迹;规划出的轨迹又会反馈给世界模型,继续推演更远的未来。这种双向交互比单纯堆一个世界模型做预训练再接规划头要自然得多,也更容易让两个模块统一收敛。

2.4 效率从哪来:共享编码器和轻量状态转移

SV-WAM 敢叫“Efficient”,核心原因是它没有做像素级未来重建。像素级视频预测模型,每推演一步就要解码一帧高分辨率图像,显存占用随推演步数线性增长,很难在车上实时跑。而潜在世界模型只在低维隐空间里做状态转移,一步推演只需要一个轻量的 MLP 或注意力层,计算量小了两个数量级。

此外,SV-WAM 让环视视觉编码器在所有时刻共享。同一组图像特征被多个时间步重复利用,而不是每一帧重新提取一遍完整特征,这样在长序列训练时能省下大量算力。实际工程上,我还会把视觉编码器冻结在低层,只微调高层和世界模型,这样训练显存压力会进一步下降。当然,前提是预训练视觉编码器在驾驶员视角数据上已经有足够强的泛化能力。

3. 训练细节与损失设计:让模型的“想象力”对齐真实路况

3.1 世界模型的学习目标:特征对齐比图像重建更关键

潜在世界模型无法直接用图像重建损失来监督,因为它不输出像素。那怎么让隐状态的推演结果符合真实世界的动态规律?常用的做法是构造一个“目标隐状态”:用当前时刻的观测图像和下一时刻的观测图像分别编码,得到两个隐状态,然后要求世界模型预测出的下一时刻隐状态与真实的下一时刻隐状态尽可能接近。

这里有一个容易踩的坑:下一时刻的隐状态不能只由下一帧单帧图像编码而来,否则会丢失时序一致性。更好的做法是把下一帧以及后续几帧图像一起输入到一个慢速编码器,得到带有短期未来信息的隐状态作为回归目标。这样世界模型学到的不只是单帧外观的变化,而是更接近“短暂未来环境”的压缩表征。

损失函数可以用 L2 或余弦相似度。实际操作中,单纯 L2 会让模型趋向于平均预测,也就是在所有未来可能性中求一个中间值,导致预测出的隐状态模模糊糊。我推荐用余弦相似度加上一个小比例的 L1 损失,能让模型更专注于方向正确性,对动态场景的建模更锐利。如果计算资源允许,还可以用对比损失,把真实未来隐状态作为正样本,随机采样的其他隐状态作为负样本,效果通常会再上一个台阶。

3.2 动作规划的学习:行为克隆与安全约束的结合

端到端驾驶的动作规划通常用行为克隆来训练,也就是拿人类司机在相同场景下的真实轨迹作为监督,让模型输出的轨迹去拟合人类轨迹。行为克隆简单高效,但有两个容易忽略的问题:一是多模态问题,面对同一个场景,不同司机可能选择不同的合法路径,如果用单峰轨迹头去拟合多模态数据,模型会学到一个平均过的中间路线,往往既不是最优也不自然;二是安全约束,行为克隆的目标分布来自数据,数据里很少出现极端危险的负样本,所以模型不知道什么是“绝对不能做的事”。

SV-WAM 的 World-Action 结构天然适合缓解第一个问题。动作规划头输出的动作嵌入和世界模型交互以后,可以通过一个多模态解码器生成多条候选轨迹,再用优化算法选一条代价最低的。第二个问题需要在训练损失里加入安全正则项,比如对与障碍物距离过近的候选轨迹施加惩罚。项目实践中,我会在行为克隆损失之外加上一个线性项:

L_action = L_BC + λ1 · L_safety + λ2 · L_smooth

其中 L_BC 是模仿学习损失,L_safety 是碰撞或距离约束惩罚,L_smooth 是限制加速度和曲率变化的平滑项。λ1 和 λ2 可以先设为 0.5 和 0.1,然后根据验证集表现调整。如果你发现模型训练后期碰撞率下降缓慢,可以适当增大 λ1,但不要一次调得太猛,否则模型会变得过度保守,在空旷场地里也刹停。

3.3 多任务联合训练的顺序和超参数经验

SV-WAM 包含视觉编码、世界状态转移、动作生成三个核心部分。最稳妥的训练策略是分阶段走:第一阶段用大规模的环视图像数据预训练视觉编码器,让特征具备对光照、天气和遮挡的鲁棒性。第二阶段冻结视觉编码器的一部分参数,训练世界模型模块,让隐状态的推演能够跟上真实环境的动态。第三阶段才把所有模块联合起来训练,这个时候把世界模型损失和动作损失放在一起,但世界模型损失可以给一个稍小的权重,避免它在联合训练阶段把动作规划的梯度淹没。

我自己在类似模型上调参的经验是:世界模型损失权重先设成动作损失的 0.3 到 0.5 倍。如果一开始权重设得太大,模型会把大量容量花在“想象”上,但它想象中的未来和实际驾驶规划并不完全一致,导致最终驾驶性能反而不如不带世界模型的基线。这种情况在验证集上很典型:世界模型重建误差很低,但驾驶碰撞率却不降反升,说明两个任务没有对齐好,需要降低世界模型损失权重,同时检查动作嵌入是否真的传到了状态转移网络里。

3.4 评价指标:不仅要看驾驶分数,还要看“想象质量”

规划任务的常用评价指标是规划误差(L2 误差)、碰撞率和驾驶分数,但世界模型的效果不能只用这些指标来衡量。如果模型的驾驶表现变好了,我们很难知道是世界模型带来的提升,还是单纯因为模型参数量增加了。因此,建议额外设计几个“想象质量”指标:

  • 隐状态预测误差:用验证集中 t 到 t+K 帧的观测计算真实隐状态,与世界模型预测的隐状态做距离度量。
  • 未来特征对齐精度:把预测出的隐状态解码回特征空间,与真实未来图像特征做召回率对比。
  • 条件扰动敏感度:稍微改变自车动作嵌入,观察隐状态是否相应地发生可解释的变化。如果动作嵌入前加一个小扰动,隐状态完全没有反应,说明世界模型没有真正学到动作对环境的影响。

最后这一点看起来偏学术,但在实际调试中非常有用。我遇到过一次模型训练正常但动作控制总慢半拍的问题,后来用扰动测试发现,动作嵌入的缩放因子太小,被残差连接稀释了,导致世界模型几乎看不到动作的影响。把动作嵌入层的权重初始化范围调大之后,问题立刻缓解。

4. 效率优势从哪来:显存占用、推理延迟与工程压缩

4.1 模型各部分计算量分解

一个典型的端到端环视模型,计算量的大头往往不是时间序列部分,而是视觉编码器。6 路 1280×720 分辨率图像经过一个 Swin-T 或者 ResNet-50 级别的编码器,每秒推理的 FLOPs 轻松超过 200 G。SV-WAM 虽然引入了世界模型,但它的状态转移网络只在低维隐空间运行,占用的计算量不到视觉编码器的十分之一。

我们可以大致估算一下:假设视觉编码器每帧处理 6 张图,总计算量约 260 GFLOPs;时序编码器处理 8 帧隐状态,约 20 GFLOPs;世界模型推演 5 步隐状态,共享轻量转移层,约 5 GFLOPs。如果使用 NVIDIA Orin 级别的平台,在 FP16 精度下合理剪枝和量化,可以达到 15 到 25 FPS 的推理速度,基本接近实时需求。

4.2 和像素级世界模型的直观对比

很多人会问:为什么不直接上视频预测模型,就像 GameGAN 或者 Dreamer 那样直接生成未来画面?我拿一个典型的视频预测世界模型和 SV-WAM 做对比:

维度像素级世界模型SV-WAM 潜在世界模型
未来表征RGB/深度视频帧低维隐状态
单步推演计算量解码一整帧 256×512 图像,约 50-100 GFLOPsMLP/注意力在 512 维上操作,约 1 GFLOPs
下一步输入需要把生成帧送入编码器提取特征隐状态直接作为转移网络输入
显存占用随推演步数线性增长,长时序容易爆显存只有少量张量累积,显存增长缓慢
对驾驶决策的直接帮助需要额外模块从视频中提取语义隐状态可以直接接规划头

当然像素级世界模型也有它的优势,比如可解释性强、可以可视化模型内部的想象结果,方便向非技术决策者解释。但从量产落地的角度,潜在世界模型显然更现实。SV-WAM 的效果可能不是最好的,但它的效率模型打开了把世界模型塞进车端芯片的想象空间。

4.3 推理延迟控制与工程优化

即使结构再高效,工程上仍然需要注意推理延迟分配。环视相机同步、图像去畸变、特征提取、时序融合、规划输出,每个环节都可能成为瓶颈。我在部署中发现几个特别容易忽视的点:

  1. 环视图像预处理很耗时。如果用 CPU 做去畸变和裁剪,会占用 5 到 8 毫秒,最好放到 GPU 上用 CUDA kernel 做,或者在下采样之后再做去畸变。
  2. 视觉编码器可以用 TensorRT 加 INT8 量化,但要注意量化对环视边界特征的影响。鱼眼相机边缘的物体拉伸严重,量化误差在边缘区域会被放大,建议保留敏感层的 FP16。
  3. 时序模块的帧间重叠率需要和系统延迟匹配。如果整个感知到规划的延迟已经超过 100 毫秒,那么“历史帧”其实已经很老了,使用太长的历史序列意义不大,反而增加计算量。

还有一个经验是:SV-WAM 的世界模型推演步数不用太长。步数从 1 提升到 5,驾驶碰撞率会有明显下降;从 5 提升到 15,收益就开始饱和,计算量却翻倍。如果你的计算预算有限,先使用 5 步推演,把省下来的算力给到更高分辨率的输入,收益通常更大。

4.4 从“足够好”到“更高效”的迭代路径

模型做出来和做高效是两回事。我习惯用计算图剖析工具逐层查看耗时分布,定下优化优先级:

第一优先级是输入分辨率。把图像从 1280×720 降到 960×544,视觉编码器计算量直接减半,而规划精度下降幅度很小。第二优先级是视觉编码器结构,可以考虑用轻量级的 MSCAN 或者 FastViT 替代 ResNet-50,同精度下推理速度快 30% 以上。第三优先级才是世界模型本身,因为它本身已经够轻量,折腾空间不大。

如果后续要做实车验证,建议提前引入时序一致性测试。在轨迹输出后加上一套低延迟安全校验,虽然会引入额外算力,但能在世界模型误判时兜底。不要让世界模型直接闭环控制油门刹车,先让它作为规划模块的“安全建议平滑器”,等模型在各种天气下都表现稳定后,再逐步放开控制权限。

5. 复现 SV-WAM 的实操记录与踩坑手记

5.1 数据准备:环视时间戳对齐比想象中麻烦

我最初在 nuScenes 数据集上尝试复现,第一步就栽在时间戳上。环视相机的采集时间并不是完全同步的,有的相机比主相机早十几毫秒,有的晚几毫秒。如果直接把 6 路图当作同一时刻输入网络,模型会学到模糊的时序关系,在动态场景上的表现会明显变差。

解决办法是做一个轻量级的插值对齐。先通过外参把每路图像的特征投射到统一的 BEV 网格上,然后按时间戳顺序对 BEV 特征做线性或样条插值,得到“虚拟同步时刻”的特征。这个操作看起来简单,但特征插值比图像插值要稳定很多,因为特征图经过编码器之后已经有了更强的语义一致性。如果不想自己做,也可以直接用 nuScenes 提供的校准后的版本,但要注意官方数据里的时间补偿是否已经正确应用。

5.2 网络搭建时的关键超参数建议

根据我复现同类模型的实践经验,几个关键参数可以这样设置:

  • 隐状态维度:建议取 256 到 512。太小了装不下复杂场景的动态信息,太大了世界模型的计算量和过拟合风险都会上升。512 维在大多数情况下是一个均衡选择。
  • 时序上下文长度:建议 8 帧。少于 4 帧,世界模型很难掌握车辆的加减速趋势;超过 16 帧,训练显存压力大,而且模型容易对遥远过去的特征过拟合。
  • 世界模型状态转移网络层数:2 到 4 层 Transformer decoder 就够。层数太深不一定会带来精度提升,反而会出现隐状态振荡。
  • BEV 特征分辨率:0.5 米每格,范围前后 60 米、左右 30 米,也就是 240×120 的网格。如果算力允许,0.4 米每格更好,但对标定误差会更敏感。

我建议先在小规模数据子集上做一个“世界模型是否有效”的快速验证。具体做法是:固定视觉编码器,只训练世界模型和动作头,观察隐状态预测误差在前 10 个 epoch 内有没有明显下降。如果误差曲线一直降不下来,很可能是时序编码器的上下文信息不够,或者目标隐状态的构造有问题,需要先解决这些问题,再投入全部数据去跑长训练。

5.3 我踩过的几个典型坑

坑一:隐状态预测误差降了,但驾驶表现变差。

这个现象一开始让我很困惑,后来发现是世界模型和规划头没有有效衔接。规划头只使用当前时刻的隐状态,而世界模型预测的未来隐状态被丢弃了。换句话说,世界模型成了“吉祥物”,没有参与决策。解决方法是修改注意力掩码,让规划头对未来的隐状态进行交叉注意力读取,把未来信息真正注入轨迹生成的每个解码层。

坑二:环视相机的标定误差让 BEV 特征出现重影。

训练时如果直接把投影坐标四舍五入到整数网格,外参稍有误差就会在多视角重叠区域造成“双层影”。解决方式是在投影时对坐标进行双线性采样,保留亚像素精度,让模型可以自己学习如何修正偏移。代价是 BEV 特征的生成慢了一些,但鲁棒性提升非常明显。

坑三:训练时显存爆炸,特别是推演步数变长后。

我的做法是把“隐状态转移”和“动作头”的梯度在时间维度上进行截断,类似于 Truncated BPTT。具体来说,每 4 步做一个梯度更新,而不是对整个推演序列的反向传播。这样显存占用明显下降,训练速度提升,精度损失几乎可以忽略。SV-WAM 的潜在空间模型天然适合这种离散化训练,因为隐状态之间是连续向量,截断误差可以被下一段训练数据覆盖。

5.4 怎么设计消融实验来证明“世界模型真的有用”

复现之后,你需要自己动手验证每个模块的价值,否则论文里说的提升没法生效。我强烈建议做以下几组消融:

  1. 去掉世界模型,只保留感知和规划头,对比驾驶性能。这一步能验证世界模型是否带来了整体提升。
  2. 用随机初始化的隐状态转移替换训练好的状态转移网络,看模型表现是否退步。这个实验可以排除“只是多了参数所以效果好”的可能。
  3. 不把动作嵌入传入世界模型,对比状态预测误差。这个实验能验证“World-Action”联合建模是否真的学习到了动作对未来环境的影响。
  4. 改变推演步数,从 0 步到 10 步画一条性能曲线。你会看到曲线通常会在 3 到 5 步之间出现拐点,这个拐点也能指导最终部署时的效率取舍。

如果第一组消融显示去掉世界模型后性能并没有下降,那说明模型的两个任务并没有有效协同。别急着继续增大世界模型权重,先检查一下隐状态中是否包含了足够的时间信息。一个常见的问题是,视觉编码器提取的只是单帧外观特征,没有显式编码时序速度。这种情况下世界模型其实在做“无米之炊”,自然很难预测未来,需要先引入光流或差分特征来丰富隐状态的动态信息。

6. 写在最后:我对世界模型落地的一点个人判断

SV-WAM 不是第一个把世界模型用在自动驾驶上的工作,也不会是最后一个。但它的设计思路确实给工程落地提供了一条更务实的路径:不在像素空间里卷,只在潜在空间里“预演未来”。这背后是一种计算资源的重新分配——把省下来的算力留给真正影响决策的高维语义信息。

从我自己的实测体会来看,潜在世界模型对遮挡场景和交互场景的帮助最明显。比如前车遮挡了一个行人,纯反应式模型只能等到行人露出半个身子才开始刹车,而带有世界模型的模型可以在前车减速的瞬间预判出“前方大概率有人”,从而提前做好准备。这种能力在公开数据集上可能只能带来零点几个百分点的提升,但在真实道路上的体验差异是巨大的。

当然,潜在世界模型也有代价。隐状态的可解释性远不如像素级预测,出了事故之后很难追查模型当时“想象”了什么。所以我建议在量产落地时,保留一个轻量的日志记录模块,定期把隐状态解码到语义特征空间,用可视化工具记录模型的关键推演节点。这既能满足安全审查的需求,也能用来发现世界模型在长尾场景下的幻觉模式。

如果你正准备在一个端到端驾驶项目中引入世界模型,我的建议是:先在小规模场景里跑通 SV-WAM 这样的潜在世界模型路线,用消融实验确认收益,再逐步扩展到更大范围。效率问题和安全验证问题会一直存在,但在算力允许的前提下,让模型先学会“想象”一步,再决定怎么踩下油门,这个方向值得花时间投入。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询