ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

环视感知与潜在世界模型:高效端到端自动驾驶的新范式

环视感知与潜在世界模型:高效端到端自动驾驶的新范式 前几天在开源社区刷到 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 的隐状态变成 t1 的隐状态。这个转移网络可以是一个 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 到 tK 帧的观测计算真实隐状态与世界模型预测的隐状态做距离度量。未来特征对齐精度把预测出的隐状态解码回特征空间与真实未来图像特征做召回率对比。条件扰动敏感度稍微改变自车动作嵌入观察隐状态是否相应地发生可解释的变化。如果动作嵌入前加一个小扰动隐状态完全没有反应说明世界模型没有真正学到动作对环境的影响。最后这一点看起来偏学术但在实际调试中非常有用。我遇到过一次模型训练正常但动作控制总慢半拍的问题后来用扰动测试发现动作嵌入的缩放因子太小被残差连接稀释了导致世界模型几乎看不到动作的影响。把动作嵌入层的权重初始化范围调大之后问题立刻缓解。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 推理延迟控制与工程优化即使结构再高效工程上仍然需要注意推理延迟分配。环视相机同步、图像去畸变、特征提取、时序融合、规划输出每个环节都可能成为瓶颈。我在部署中发现几个特别容易忽视的点环视图像预处理很耗时。如果用 CPU 做去畸变和裁剪会占用 5 到 8 毫秒最好放到 GPU 上用 CUDA kernel 做或者在下采样之后再做去畸变。视觉编码器可以用 TensorRT 加 INT8 量化但要注意量化对环视边界特征的影响。鱼眼相机边缘的物体拉伸严重量化误差在边缘区域会被放大建议保留敏感层的 FP16。时序模块的帧间重叠率需要和系统延迟匹配。如果整个感知到规划的延迟已经超过 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 怎么设计消融实验来证明“世界模型真的有用”复现之后你需要自己动手验证每个模块的价值否则论文里说的提升没法生效。我强烈建议做以下几组消融去掉世界模型只保留感知和规划头对比驾驶性能。这一步能验证世界模型是否带来了整体提升。用随机初始化的隐状态转移替换训练好的状态转移网络看模型表现是否退步。这个实验可以排除“只是多了参数所以效果好”的可能。不把动作嵌入传入世界模型对比状态预测误差。这个实验能验证“World-Action”联合建模是否真的学习到了动作对未来环境的影响。改变推演步数从 0 步到 10 步画一条性能曲线。你会看到曲线通常会在 3 到 5 步之间出现拐点这个拐点也能指导最终部署时的效率取舍。如果第一组消融显示去掉世界模型后性能并没有下降那说明模型的两个任务并没有有效协同。别急着继续增大世界模型权重先检查一下隐状态中是否包含了足够的时间信息。一个常见的问题是视觉编码器提取的只是单帧外观特征没有显式编码时序速度。这种情况下世界模型其实在做“无米之炊”自然很难预测未来需要先引入光流或差分特征来丰富隐状态的动态信息。6. 写在最后我对世界模型落地的一点个人判断SV-WAM 不是第一个把世界模型用在自动驾驶上的工作也不会是最后一个。但它的设计思路确实给工程落地提供了一条更务实的路径不在像素空间里卷只在潜在空间里“预演未来”。这背后是一种计算资源的重新分配——把省下来的算力留给真正影响决策的高维语义信息。从我自己的实测体会来看潜在世界模型对遮挡场景和交互场景的帮助最明显。比如前车遮挡了一个行人纯反应式模型只能等到行人露出半个身子才开始刹车而带有世界模型的模型可以在前车减速的瞬间预判出“前方大概率有人”从而提前做好准备。这种能力在公开数据集上可能只能带来零点几个百分点的提升但在真实道路上的体验差异是巨大的。当然潜在世界模型也有代价。隐状态的可解释性远不如像素级预测出了事故之后很难追查模型当时“想象”了什么。所以我建议在量产落地时保留一个轻量的日志记录模块定期把隐状态解码到语义特征空间用可视化工具记录模型的关键推演节点。这既能满足安全审查的需求也能用来发现世界模型在长尾场景下的幻觉模式。如果你正准备在一个端到端驾驶项目中引入世界模型我的建议是先在小规模场景里跑通 SV-WAM 这样的潜在世界模型路线用消融实验确认收益再逐步扩展到更大范围。效率问题和安全验证问题会一直存在但在算力允许的前提下让模型先学会“想象”一步再决定怎么踩下油门这个方向值得花时间投入。
返回列表