自动驾驶基础模型综述:数据、模型、任务、评测与工程落地 基础模型在自动驾驶里到底该怎么用这两年被问得越来越多。这篇题为 A Survey for Foundation Models in Autonomous Driving 的综述干的事情其实很朴素把散落在感知、预测、规划、仿真各个角落的零散工作按一条统一的线索重新串起来。它不教你写代码也不会给你一个能直接开上路的方案它回答的是一个更前置的问题——当参数量从千万级跨到十亿级当训练数据从几十万帧标注样本跨到上千万段无标注视频自动驾驶这套系统的分工方式要不要跟着改改成什么样才不塌。适合读这篇东西的人有三类刚进这个方向、需要一张全景图把名词对齐的同学已经在做感知或规划某一个模块、想判断自己那块会不会被整体重构的工程师以及要为技术路线排优先级、需要知道哪些说法是真实进展、哪些只是论文里的漂亮话的技术负责人。下面我按自己读这类综述的习惯把它的骨架拆开再把几个真正影响落地效果的技术点掰碎讲最后给一条能真跑起来的最小复现路径。1. 这篇综述到底在解决什么问题1.1 模块化流水线的天花板卡在哪传统自动驾驶架构的分工非常清晰感知出框和语义预测出轨迹规划出动作控制出油门刹车。每个模块单独优化接口是人工定义的低维结构——几个边界框、几条候选轨迹、一组速度曲线。这套做法在工程上极其稳妥出问题能定位到具体模块迭代节奏也好控制。但它的代价是信息在接口处被大幅压缩。感知模块看到一块被遮挡的施工围挡后面有反光它没法把这种说不清但可能重要的线索传给下游因为接口里没有这个字段。下游拿到的是一个框置信度 0.3然后就没了。所有模块都在为这个低带宽接口买单误差一层层累积长尾场景的覆盖率始终上不去。我自己的体会是模块化架构真正的瓶颈不在单个模块的精度而在接口设计的表达能力。你把检测精度从 0.7 提到 0.75端到端表现可能只动了一点点但如果你在接口里多塞进去一路自车历史状态或者高精地图的拓扑约束提升往往更明显。这说明什么说明瓶颈在传什么不在算得多准。基础模型这条路线本质上是想把这个低带宽接口换成一个高维、可学习、端到端可微的表征空间。所有传感器数据、语言指令、历史轨迹全部扔进同一个表征里让网络自己决定哪些信息重要。这是它的核心卖点也是它的核心风险——接口一旦变成黑盒调试成本会指数级上升。1.2 综述真正要回答的四个问题读这类综述我一向不指望它给我一个新方法我指望它帮我理清边界。这篇东西实际上在回答四个问题我按重要性排序。第一个是什么才算基础模型。不是参数量大就叫基础模型得同时满足几个条件在海量且相对通用的数据上做过预训练具备跨任务、跨场景的迁移能力最好还能表现出一些在小模型上观察不到的涌现行为。这三个条件在自动驾驶语境下会被进一步收紧——你的通用数据到底是互联网图文还是行车视频还是仿真渲染出来的合成数据这直接决定了模型学到的东西能不能对上物理世界的规律。第二个是数据从哪来、怎么配比。自动驾驶的数据非常特殊它高度冗余直道上跑十小时和跑十分钟信息量差不多高度长尾真正决定安全的是那千分之几的极端场景而且标注成本极高。基础模型需要的数据量和传统监督学习完全不是一个量级这个矛盾怎么解综述里给的方向基本集中在自监督预训练、仿真合成、以及跨数据集统一表征这几条路上。第三个是任务怎么接。预训练出来的表征怎么接到具体的感知、预测、规划任务上。是加个 head 微调还是用 prompt 的方式零样本迁移还是干脆把任务描述成自然语言让模型自己生成动作。这三种接法对应完全不同的工程复杂度和验证方式。第四个是怎么评。这是我认为最容易被低估的部分。开环指标刷得再高闭环一跑就露馅的工作这两年实在太多了。提示读综述的时候凡是看到在某公开数据集上取得了 SOTA这句话一定要往后翻看它的评测协议是开环还是闭环。这两个词背后的含金量差了一个数量级。1.3 为什么现在做这件事而不是三年前三年前做不了不是想法不够是三个前提条件都不满足。算力上训练一个十亿参数级别的多模态模型需要的卡时数在当时是实验室级别的开销现在至少降了一个数量级。数据上行车视频的采集和存储成本下来了一个中等规模的车队跑一年积累的原始数据量放在五年前是不可想象的。算法上视觉主干网络、序列建模、扩散模型这几条线的成熟度都到位了把图像、点云、文本对齐到同一个空间的工程手段也基本标准化了。还有一个不太被提起但很关键的变化评价体系开始松动。以前大家只认那几个开环指标现在闭环仿真、真实路测的权重在往上走。评价体系一旦变优化方向就会跟着变整个领域的注意力才会从刷榜迁移到能不能真跑。2. 拆骨架数据、模型、任务、评测四条主线2.1 数据层语料不是越多越好是配比越准越好基础模型在自动驾驶里的数据问题和语言模型完全不是一回事。语言模型面对的是近乎无限的文本你只需要过滤掉低质内容。自动驾驶面对的是有限的、高度重复的、且长尾极度稀疏的数据流。我看过的做法基本分三层。第一层是原始传感器流多路相机、激光雷达、毫米波雷达按时间戳对齐。这一层的难点不在采在对齐和标定——相机和激光雷达之间的外参有一点点漂移投影到 BEV 上就是几个像素的错位模型会学到一个系统性的偏置。第二层是结构化中间产物包括三维框、语义分割、车道线、可行驶区域、自车轨迹。这一层是人工标注的重灾区也是成本大头。第三层是语言与知识交通规则条文、场景描述、驾驶意图标注这一层最薄但对 VLA 类模型至关重要。配比这件事上我踩过一个很典型的坑。早期做预训练的时候我按自然驾驶里程的比例来采样数据结果模型在训练集上 loss 降得很漂亮一到测试就发现它对正常跟车这类场景过拟合得厉害遇到环岛、无保护左转就开始胡来。原因很简单自然驾驶里 95% 以上是直道和缓弯模型把所有容量都花在拟合这 95% 上了。后来改成了按场景类别做重采样直道降采样到原来的三分之一施工区、无标线、夜间、雨雾这类场景上采样三到五倍。loss 曲线反而没那么顺滑了但闭环测试的脱离次数明显下降。这个经验我后来在好几个项目里都验证过预训练数据的分布决定了模型的注意力分配而不是它的能力上限。数据类型采集难度标注成本对闭环的影响建议配比思路常规直道跟车低低小大幅降采样城市路口中高大保持或适度上采样施工与临时改道高很高极大重点上采样 仿真补恶劣天气与夜间中高大上采样注意传感器退化长尾异常事件极高极高决定性仿真生成 人工构造2.2 模型层三种角色别混着谈综述里把模型按角色分了三大类这个分法我觉得很实用因为它直接对应三种工程投入方式。第一类是表征型主干。干的事情是把原始传感器数据压成一个稠密的、语义丰富的特征张量。BEV 编码器、占用栅格预测网络、多模态融合主干都属于这一类。它的特点是参数量大、训练成本高、但一旦训好可以复用到多个下游任务。工程上我一般把它当成一次投入长期收益的资产值得花力气打磨。第二类是世界模型。它的输入是当前状态加一个动作输出是未来若干帧的预测。这个东西的价值不在于预测得多准而在于它能在规划阶段提供如果我这么开会发生什么的推演能力。仿真环境本质上就是一个人工构造的世界模型只不过现在开始用神经网络来学。第三类是推理与决策型模型。视觉-语言-动作模型是典型代表它接收图像和自然语言指令输出驾驶动作序列或者高层决策。这类模型最吸引眼球但工程成熟度也最低主要原因在于它的输出空间太大验证困难。我的判断是短期内在量产项目里真正能落地的是第一类和第二类的组合第三类更适合放在仿真和离线数据挖掘环节先跑起来用它来生成高质量的决策标签反哺前两类模型。2.3 任务层接口被重写的地方接口重写体现在几个很具体的点上不是抽象概念。感知到预测这个接口以前传的是三维框序列。现在越来越多地传占用栅格的时序体素或者干脆传 BEV 特征的时序堆叠。好处是保留了形状和不确定性信息坏处是数据量涨了几十倍下游的计算压力陡增。我在一个项目里做过对比把框换成占用栅格之后预测模块的输入带宽从每帧几 KB 涨到了接近 2 MB整套流水线的推理延迟增加了 8 ms 左右。这个代价值不值取决于你的算力余量。预测到规划这个接口以前传的是几条候选轨迹加概率。现在有两条路一条是保留候选轨迹但增加数量并提高多样性另一条是直接把预测模型和规划模型合并成一个联合优化问题让规划器在预测的分布上做期望优化。后者理论上更优雅实际调试起来非常痛苦因为梯度要从规划损失一路传回预测网络中间的不可微环节要全部软化训练稳定性很难保证。规划到控制这个接口变化最小因为控制层的物理约束是硬的容不得太多自由度。但规划输出的轨迹如果带上了不确定性估计控制层可以据此调整跟车距离和横向柔度这一块的实际收益比想象中大。2.4 评测层开环漂亮闭环崩是常态不是意外这一节我想说得直白一点。开环评测的做法是给定一段真实驾驶记录让模型在每一帧预测未来的轨迹然后和真实轨迹算位移误差。这个指标非常容易刷因为模型可以学到跟着前车走这个强先验而真实轨迹在绝大多数情况下就是跟着前车走。问题在于闭环里模型自己产生的动作会改变后续的输入分布。一旦它犯了一个小错比如在某帧多打了半度方向下一帧它看到的画面就偏离了训练分布误差会自我放大。这就是经典的分布偏移问题。我在实际项目里立过一条规矩任何模型上线评估前必须在闭环仿真里跑满至少 500 个场景其中至少 100 个是长尾场景。开环指标只作为训练过程中的监控信号不作为决策依据。闭环评测里我会重点看四个数路线完成率、人工接管的次数与位置分布、乘坐舒适度纵向加速度和横向 jerk 的分布、以及极端情况下的最小安全距离。前两个是能力后两个是体验和底线。四个数里我最看重接管位置的分布因为它能直接告诉你模型在什么类型的场景上系统性失效。3. 关键技术点逐个拆3.1 BEV 与占用栅格把三维世界压成网络能吃的张量BEV 这个东西的原理不复杂把多路相机拍的图像通过已知的内外参投影到自车坐标系下的俯视平面上形成一个统一的二维表征。好处是所有传感器都在同一个坐标系里说话融合变得自然下游的规划也直接在这个平面上做。真正麻烦的是投影过程中的信息损失。一张 1600×900 的图像投影到 BEV 平面上可能只占几十个格子远处的物体甚至分不到一个完整的格子。所以纯几何投影的做法在远距离上效果很差现在主流是让网络自己学一个隐式的深度分布用注意力机制把图像特征抬到三维空间里再压平。占用栅格是 BEV 的三维升级版。它把空间离散成体素每个体素预测是否被占据以及属于什么语义类别。我给一组常用的参数你可以直接拿去估资源感知范围取前后各 40 米、左右各 40 米、高度从 -1 米到 5.4 米体素边长取 0.4 米那么栅格尺寸就是 200 × 200 × 16总共 64 万个格子。如果每个格子输出 16 类语义加 1 个占据概率用 fp16 存储单帧输出就是 640000 × 17 × 2 字节约 21 MB。时序堆叠 4 帧就是 84 MB这个量级在训练时对显存的压力很实在。体素边长这个参数是要权衡的。0.4 米对小障碍物比如倒地的锥桶、路面坑洞已经偏粗了但如果缩到 0.2 米格子数变成 512 万计算量和显存直接翻 8 倍。我一般的做法是近处用细粒度、远处用粗粒度做一个分层或者稀疏的结构只对非空区域做稠密计算。注意占用栅格的语义类别不要贪多。我见过把类别设到 30 类以上的方案结果每一类的样本量都不够稀有类别几乎学不出来反而拖累了整体的占据预测精度。16 类左右是个比较务实的上限。3.2 世界模型预测未来的那部分到底怎么用世界模型听起来玄落地形态其实就两种。一种是隐空间预测。把当前观测编码成一个低维隐向量给定一个动作预测下一时刻的隐向量。它不生成图像只预测表征的演化。这种做法的好处是计算量小可以直接嵌到规划循环里做 rollout坏处是不可视调试的时候你只能看损失曲线很难判断它到底学到了什么。另一种是生成式预测直接生成未来的图像或者占用栅格。这种做法的好处是可视化程度高人一眼就能看出模型是不是在胡编坏处是生成质量本身就成了一个问题而且生成速度慢很难放进实时循环。我在项目里用得多的是第一种但会额外加一个辅助的生成任务作为正则逼着隐空间保留足够的几何信息。具体做法是隐空间预测头之外再挂一个轻量的解码器要求它从预测出的隐向量重建出下一帧的粗略占用栅格。这个辅助损失权重不用大0.1 左右就够主要作用是防止隐空间塌缩成一个只包含车速这一维信息的退化表征。世界模型在规划里的用法我总结成一句话不是用它来替代真实感知而是用它来给候选轨迹打分。规划器生成 N 条候选轨迹每条扔进世界模型推演 2 秒看推演出来的状态是否安全、是否舒适选一条最好的执行。这样即使世界模型有误差最坏情况也只是选了一条次优轨迹不会直接把车带沟里。3.3 视觉-语言-动作模型把自然语言接到方向盘上这类模型的结构可以概括成三段视觉编码器把图像变成 token语言模型把这些 token 和指令文本一起处理动作头把语言模型的输出解码成驾驶动作。最直接的诱惑是把它当成一个通用的驾驶决策器——你给它一句在前方路口左转注意避让直行车辆它就输出转向角和油门。听起来很美好实际做起来有几个硬骨头。第一个是动作空间的定义。输出离散的元动作左转、直行、跟车、变道容易学但表达力不够落到控制层还要再做一层规划。输出连续的轨迹点表达力够但回归任务的训练稳定性差而且模型的输出维度一高推理延迟就上去了。我见过的折中方案是输出一串离散化的轨迹基元系数兼顾表达力和稳定性。第二个是指令的粒度。训练数据里的语言标注质量参差不齐有的是人工写的精细描述有的是模板生成的粗糙标签。模型会学到模板里的捷径比如看到路口这个词就倾向于减速而不管实际场景。缓解办法是在训练时对指令做随机掩码和改写逼模型更多依赖视觉信息。第三个是验证。一个输出自然语言的模型你怎么判断它理解了场景还是纯粹在背诵我的做法是构造反事实测试集把同一场景里的关键物体 P 掉或者替换掉看模型的输出是否发生合理的变化。如果 P 掉一个行人模型还是照样往前开说明它根本没在看那个行人。3.4 训练范式预训练只是上半场整个训练流程可以拆成四段每一段的目标完全不同。自监督预训练阶段目标是把表征学厚。常用的任务有掩码图像重建、对比学习、时序一致性约束。这一阶段不需要标注可以用海量的行车视频。我一般会在这个阶段投入总训练算力的六成以上因为表征质量决定了后面所有任务的上限。多任务监督微调阶段把感知、预测、占用预测这些有标注的任务一起训。这里的关键是损失权重的平衡我一般按各任务损失的量级做归一化让它们在同一数量级上然后手工调几个关键权重。不要用自动搜索太贵且不稳定。蒸馏阶段把大模型的能力迁移到小模型上。车端算力有限十亿参数的模型基本没法实时跑必须蒸馏。蒸馏的时候要注意不要只蒸最终的输出中间层的特征也要蒸尤其是 BEV 特征这一层它对下游任务的影响最大。后训练阶段用闭环仿真或者真实接管数据做针对性优化。这一阶段的数据量最小但对最终表现的影响最大。我的经验是这部分数据要精挑细选宁可少而准不要多而杂。4. 一次最小可跑的复现实验4.1 环境与数据准备我用的是一套公开的多传感器城市道路数据集规格大致是 1000 段左右、每段 20 秒的序列包含 6 路环视相机、一路激光雷达和若干毫米波雷达采样率相机 12 Hz、激光雷达 20 Hz。这个规模对于验证方法论足够了别指望它能训出量产级别的模型。硬件上一台 8 卡、每卡 80 GB 显存的训练服务器加上一台带同型号单卡的工作站做调试。存储至少要准备 4 TB 的 NVMe原始数据解压之后膨胀得很快。软件栈用 PyTorch 加分布式训练框架数据加载用多进程加内存映射避免 IO 成为瓶颈。这一点很关键我见过不少项目模型设计得很漂亮结果卡在数据加载上GPU 利用率长期在 40% 以下。预处理流程分四步时间戳对齐以激光雷达为基准相机帧做插值对齐、外参标定校验用标定板数据回归一遍偏差超过阈值的序列直接丢弃、图像去畸变与裁剪、以及把标注统一到自车坐标系。第三步的裁剪策略要注意我一般裁掉图像上下各 15% 的区域因为那部分主要是天空和车头引擎盖对 BEV 投影没贡献白算。4.2 模型选型与算力估算主干选一个 ViT-B 量级的视觉编码器patch 大小取 16。这里要做一次实打实的参数计算很多人就是没算这一步直接把 6 路图像拼成一个大 batch 喂进去然后显存炸了。单路图像分辨率 1600×900patch 16×16那么每路的 token 数是 (1600/16) × (900/16) 100 × 56 5600 个。6 路拼在一起就是 33600 个 token。如果做全局自注意力注意力矩阵的元素数是 33600²约 11.3 亿个。单头 fp16 存储就是 2.26 GB多头并行的话直接爆掉。所以工程上的标准做法是分层先让每一路图像独立过编码器每路 5600 个 token注意力矩阵 5600² 约 3136 万个元素单头 fp16 约 63 MB8 头 batch 8 的情况下大概几个 GB可控。每路编码完之后做 4 倍下采样token 降到 1400 个6 路拼起来 8400 个 token再做跨视角融合。这时候注意力矩阵是 8400² 约 7056 万个元素完全在承受范围内。显存估算上ViT-B 参数量约 8600 万fp16 权重约 172 MB。用 AdamW 优化器fp32 主权重 344 MB一阶动量 344 MB二阶动量 344 MB合计约 1.2 GB。这部分是小头真正的大头是激活值。batch size 取 8、序列长度取 4 帧的情况下激活值大概在 6 到 10 GB 之间具体取决于有没有用梯度检查点。80 GB 的卡跑这个配置绰绰有余甚至可以开到 batch 16。训练时长估算1000 段序列每段 200 帧总共 20 万帧。batch 16 的话一个 epoch 是 12500 步。按每步 0.3 秒估一个 epoch 约 1 小时。预训练阶段跑 30 个 epoch单卡 30 小时8 卡数据并行可以压到 4 到 5 小时。这个规模一个星期内能跑完几轮完整实验节奏还算舒服。4.3 训练流程与关键参数第一轮先做自监督预训练。掩码比例取 0.6这个值我试过 0.4 和 0.750.4 太容易模型学不到东西0.75 又太难收敛很慢0.6 是个比较甜的区间。学习率用余弦退火峰值 1.5e-4warmup 占 5%。权重衰减 0.05。第二轮接多任务监督微调。这里加三个头BEV 语义分割、占用栅格预测、以及自车轨迹预测。损失权重初始设成 1.0、1.0、0.5跑几百步之后看各任务的损失量级再手工调。学习率降到 5e-5因为预训练好的表征不需要大改改太狠反而破坏。第三轮做蒸馏。教师模型用同一套结构但宽度翻倍学生模型保持原样。蒸馏损失用 KL 散度温度和权重各取 2.0 和 0.7。这里有个细节中间层特征的蒸馏用余弦相似度比用 MSE 效果好因为特征的方向比幅值更重要。注意三轮训练之间不要清空优化器状态尤其是从预训练切到微调的时候。我有一次顺手重置了结果前 2000 步 loss 剧烈震荡白跑了一整天。保留优化器状态能让切换平滑很多。4.4 结果检查与可视化训练跑完不要急着看指标数字先看可视化。我一般检查三样东西。第一样是 BEV 分割的叠加图。把预测结果和原始图像对齐叠在一起看车道线的走向对不对、路口边界有没有糊成一团。如果车道线出现明显的锯齿或者断裂通常是位置编码或者分辨率的问题。第二样是占用栅格在垂直方向的切片。取几个不同高度的水平切面看远处的高柱子比如交通标志有没有被正确预测出来。我踩过一次坑模型在近处的表现近乎完美但 30 米以外的立柱全部丢失原因是感受野不够后来加了膨胀卷积才解决。第三样是轨迹预测的分布。把模型输出的多条候选轨迹画出来看它们是不是真的有多样性。如果所有候选轨迹几乎重合说明模型塌缩到了均值解这在回归任务里非常常见要么加多样性损失要么改用基于锚点的输出方式。指标上开环的位移误差我一般要求控制在 1 米以内3 秒预测时域但这个数字本身意义有限。真正要看的是分类统计直道、弯道、路口、跟车、变道这五类场景分别的误差。如果某一类的误差是其他类的两倍以上那就说明这一类是短板需要针对性补数据。5. 常见问题与排查实录5.1 训练不收敛的排查顺序这个问题我遇到过太多次现在有一套固定的排查顺序从便宜到贵逐级往下走。先看数据。取一个 batch 出来把图像张量和标注张量分别可视化确认图像没有全黑、没有全白、没有通道顺序错乱BGR 和 RGB 搞反是经典错误标注没有越界、类别 ID 没有错位。这一步能解决我见过的将近一半问题。再看学习率。把学习率降一个数量级跑 500 步如果 loss 开始下降那就是学习率太大如果还是不动继续往下查。然后看损失函数本身。把每一项损失单独打出来看是哪一项不降。常见情况是某一项损失的量级比其他大两三个数量级把梯度带偏了。解决办法是做归一化或者调权重。最后看模型结构。重点查梯度回传路径上有没有断点比如某个不可微的操作argmax、采样被放在了主干和损失之间。如果有要么用直通估计器要么换成软化的近似。现象最可能原因快速验证方法处理方式loss 完全不降数据异常 / 学习率过大可视化一个 batch修数据降学习率loss 抖动剧烈batch 太小 / 学习率过高增大 batch 试试调大 batch加梯度裁剪某一项 loss 独大权重失衡 / 量级不一致分项打印损失归一化后重调权重训练降测试不降过拟合 / 分布偏移看训练验证曲线间距加正则检查数据划分前期正常后期发散学习率调度不当看学习率曲线改余弦加 warmup5.2 开环漂亮闭环崩掉的定位方法这是最折磨人的一类问题。我的定位方法分三步。第一步确认是不是分布偏移。做法很简单在闭环仿真里记录模型实际看到的输入然后把它们当成新的测试集重新跑一遍开环评测。如果开环指标也掉了说明模型对训练分布依赖太强需要加数据增强或者用 DAgger 式的迭代训练把模型自己产生的状态拿回来重新标注。第二步确认是不是因果混淆。模型可能学到了一个虚假的关联比如看到前车刹车灯亮就减速而真实因果是前车刹车灯亮是因为前方有障碍。在闭环里如果前车是一辆没有刹车灯的老车模型就瞎了。验证方法是做消融实验把刹车灯这个视觉线索在测试时抹掉看模型表现下降多少。第三步确认是不是缺少自车状态输入。我见过不少模型只吃传感器数据不吃自车速度、转向角、加速度这些状态量。这在开环里没问题因为轨迹是给定的但在闭环里模型不知道自己开多快就会做出很离谱的决策。加一路自车状态输入往往能立竿见影。提示闭环测试里接管位置的分布比接管次数本身信息量大得多。把接管点按场景类型聚类你很快就能找到模型的系统性短板。5.3 车端部署的算力与延迟账模型训得再好端上跑不动就是零。这笔账要提前算不要等到最后。车端的推理芯片典型算力在 200 到 500 TOPS 之间INT8。一个十亿参数的模型INT8 量化之后光权重就是 1 GB每帧都要从内存读一遍带宽压力非常大。如果控制的频率要求 10 Hz那么每 100 ms 就要完成一次完整推理这 100 ms 里还要留给规划和控制。我的做法是把模型拆开不同部分用不同的频率跑。视觉主干这类重计算的部分可以跑到 5 Hz 甚至更低用插值补到控制频率轻量的轨迹预测头跑到 20 Hz。这样平均算力需求能降下来三分之一以上。量化上INT8 是标配但要注意敏感层。我一般先做全模型 INT8 感知量化然后看精度掉多少如果掉得厉害就把第一层和最后一层保留 fp16。这两层对量化误差最敏感保留它们通常能挽回大部分精度损失。算子融合和内存复用也要做。我做过一次对比同样的模型经过算子融合和内存池优化之后端到端延迟从 68 ms 降到 41 ms几乎没有精度损失纯粹是工程优化。这部分工作费力但收益确定建议早点做。6. 几条踩过坑之后才明白的经验模型结构的创新带来的收益往往不如数据配比的调整。我做过一次很直接的对比实验同一个骨干网络一组用原始数据分布一组做了场景重采样后者的闭环路线完成率高了 11 个百分点而换一个更复杂的骨干网络只带来 3 个百分点。这个结论让我在后来的项目里把数据工程的优先级排到了模型设计之前。评测集一定要和训练集在时间上隔开最好是不同城市、不同季节。我吃过一次亏训练和测试的数据来自同一个车队同一个月模型在测试集上表现优异换了一个城市的数据直接掉了一半。后来我立了规矩测试集必须包含至少两个地理上完全不同的区域。不要迷信参数量。在车端算力受限的前提下一个蒸馏得好的三亿参数模型往往比一个没优化的十亿参数模型表现更好而且延迟低得多。我现在做技术选型第一件事是问端上的算力预算是多少反推能接受的模型规模而不是先训一个大模型再看怎么塞进去。世界模型和仿真环境之间的界限会越来越模糊但短期内仿真还是不可替代的因为你需要可控、可重复、能构造极端场景的测试环境。我一般用世界模型来扩充仿真场景的多样性用传统仿真引擎来保证物理正确性两者互补。这个组合在目前阶段是最务实的。最后说一个容易被忽略的点模型的失败模式比它的平均表现更重要。一个平均误差 0.8 米、但在特定场景下会突然发散到 10 米的模型是不能上路的而一个平均误差 1.2 米、但分布很稳定的模型反而更有价值。我在做模型验收的时候会专门统计误差分布的尾部看 99 分位数和最大值这两个数比均值更能说明问题。