The End-to-End Autonomous Driving Paradigm, Part 1
模块化自动驾驶可以写成一串函数的复合:
其中 是原始传感器数据, 到 依次是感知、预测、规划、控制, 是最终执行的动作。每一级都把上一级的输出当作真值来处理:预测模块不知道手里的三维框偏了 0.3 米,它在错误的框上叠加行为假设;规划模块在错觉上求最优解;控制模块忠实执行。误差只能顺着复合方向往下传,没有任何机制让它回流。
关键在于接口不可微。感知输出的是离散的结构化对象(三维框、车道线折线),不是张量;预测模块拿到的框里没有携带任何梯度信息。即使某一级内部用神经网络训练,其损失也只在模块内部反传——感知网络的梯度到不了”最终驾驶表现”,驾驶表现的信号也到不了感知网络的权重。整条链路不存在一条从 回到 参数的梯度通路。
这与端到端形成结构性对照:端到端里驾驶损失 对所有参数的梯度 存在且被显式优化,感知层学到什么特征,直接由”对开车有没有用”来决定。
每一级都在上一级误差的基础上再叠加自己的假设,且没有纠偏机会。一个 0.3 米的感知偏差,经过”行为假设 → 最优求解 → 忠实执行”三级放大,最终可以变现为一次急刹或绕行。模块越多、接口越多,漏斗口就越多——这是流水线架构的结构性风险,不是把某个模块调得更准就能根除的。
感知模块的输入是一幅数百万像素的图像,输出传给下游的是每个目标十几个数字:一个三维框通常只有 ——中心位置、尺寸、朝向、类别、置信度。图像里”骑手回头看了一眼后车""雪糕筒歪着摆”这类信息,在接口 schema 里根本没有字段可放。压缩比超过十万比一,而且是人工预先选定保留什么。
信息论里的数据处理不等式(data processing inequality)说:对任意马尔可夫链 ,
其中 是互信息,衡量一个变量携带关于另一个变量的信息量。映射到流水线: 是世界真实状态, 是感知接口输出, 是下游任何处理结果。下游无论多强,能从接口里榨出的信息都不可能超过接口本身保留的。在接口处丢掉的语境信息,预测和规划永远无法找回。
定义接口等于回答”哪些信息值得传”。在封闭问题上可以枚举(目标位置、速度、车道),但驾驶是开放世界:交警手势、对向车闪灯、行人的犹豫姿态……长尾场景的信息需求无法预先穷举,schema 永远写不全。这正是规则栈在长尾场景失分的结构性原因。
端到端绕开了这个问题:中间表示是高维隐特征,由训练目标自动决定保留什么,而不是由人预先划定字段。代价是这些隐特征不可读——可解释性与信息完整性在这里是一对 trade-off。
流水线里每个模块有各自的损失函数,各自独立训练到最优:
形式化地说,系统做的是
而驾驶真正要的是
二者不等价:每个模块在各自目标上最优,组合起来的系统在”安全高效舒适地到达”这个终极指标上未必最优。感知多检出两个无关紧要的远处目标会拉低自己的指标,但对驾驶毫无影响;反过来,一个对驾驶至关重要的语境线索可能不在任何模块的损失里。
现实量产系统很少是纯端到端,主流是端到端骨干 + 规则兜底:神经网络负责感知到轨迹的主体决策,安全相关的硬规则(紧急制动、红灯约束)作为不可绕过的后处理。按”规则占比”可以排出一档一档的架构光谱。
本项目的两个模型(SimLingo、AutoMoT)都处在”端到端骨干 + PID 执行器”这一档:网络输出未来轨迹与期望速度,底层由一个不可训练的比例-积分-微分控制器(PID)把轨迹转换成油门/刹车/方向盘量。PID 只做执行、不做决策,不构成新的”模块”,因此不破坏端到端的性质。
端到端(end-to-end)的判据不是”只有一个网络”这个表象,而是梯度通路:驾驶损失 的梯度能一路反传到靠近输入侧的权重,感知、预测、规划在同一个优化目标下联合完成。形式上模型是一个可微函数:
其中 是相机图像, 是当前车速, 是导航目标点(target_point,全局路线投影到自车坐标系下的下一个路点),输出 是未来轨迹点序列、 是期望速度。感知与预测没有被删除,而是隐式地发生在网络内部表示里。
以本项目主模型 SimLingo 为例:输入为单目前视图像、车速、导航目标点(外加语言指令),中间是一个视觉语言模型骨干,输出未来若干秒的轨迹点与速度。输出端接的 PID 执行器不可训练,但它是通行做法,不算破坏端到端——理由有二:PID 不含需要从数据学习的知识,是确定性的执行换算;它不处在任何”信息决策”的位置上,决策完全由网络做出。判断一个组件是否破坏端到端,看的是它是否截断了决策所需的信息流或梯度流,而不是它可不可训。
模块化把”看见什么值得传”固化在人工接口里;端到端把这个选择交给优化——中间层保留什么特征,完全由 通过梯度塑形。这既是它上限更高的原因,也是它对输入分布(比如渲染风格变化)极其敏感的原因:网络学到的一切特征都是针对训练时见过的像素分布塑形的。
端到端驾驶的思想可追溯到 1989 年的 ALVINN 和 2016 年 NVIDIA 的端到端转向实验,但直到近几年才真正跑通。三块拼图缺一不可。
Transformer 把一切输入变成 token 序列:图像切块编码成视觉 token,文字分词成文本 token,轨迹点也可以离散化成 token。视觉和语言第一次能混排进同一个序列,由同一套自注意力机制联合处理。这让”读得懂语言指令的驾驶模型”成为可能,也是视觉语言模型(VLM)进入驾驶的技术前提。
模仿学习需要海量”传感器输入 → 专家动作”配对。真实车队采数据昂贵且长尾稀缺;仿真器里让一个规则专家(privileged expert,可利用真值信息的教师)自动开车,每帧落盘一对样本,数据规模只受算力限制。SimLingo 的训练数据就由 PDM-Lite 规则专家在 CARLA 里量产。
LoRA(低秩适配,Low-Rank Adaptation)冻结预训练权重 ,只训练一个低秩增量:
其中 是原权重矩阵维度, 是人为选取的秩。可训练参数量从 降到 ,通常只剩原模型的 1–3%。本项目的实测口径:SimLingo 官方配置下 LoRA 可训练参数 17,596,416 个,恰为全模型的 2.72%;batch size 6 训练峰值显存 19.6 GiB,RTX 5090 32GB 单卡即可全量微调。没有这块拼图,VLM 驾驶只是大公司的游戏。
模仿学习(imitation learning)在驾驶里的标准形态是行为克隆(behavior cloning)。让专家策略 (通常是能访问仿真器真值的规则专家)在仿真器里开车,每帧记录配对 : 是观测(图像、车速、目标点), 是专家动作(轨迹、速度)。训练就是回归:
SimLingo 的专家 PDM-Lite 本身在基准上接近满分——学生的天花板由老师决定,老师够强是这套范式成立的前提;反过来,专家的上限就是学生的上限,专家不会做的场景,学生也无从学起。
训练时的状态分布来自专家:。部署时车的状态由学生自己决定:。一旦学生开偏了一点,就进入专家从未示范过的状态,在分布外区域学生行为无保证,可能偏得更远——误差随时间步累积。DAgger 的经典分析给出:在专家数据分布训练、在自己诱导的分布执行, 步任务的总损失可以从理想情况下的 恶化到 ( 为单步误差上界)。
这就是”开环误差小、闭环表现崩”的根源,也是为什么闭环评测不可替代。缓解办法的经典路线是 DAgger:部署中学生跑、专家标注纠偏数据、回流训练——但在仿真闭环外实施成本高,多数学术工作直接靠更大量的专家数据硬顶。
开环(open-loop)评测在录制好的数据上跑:给定真实历史帧,比较模型预测轨迹与专家轨迹的 L2 距离。问题在于每一帧的输入都是真实数据,模型上一帧预测错了也不影响这一帧的输入——误差不会累积。开环 L2 漂亮而闭环撞车的模型比比皆是,因为模型在训练分布内插值很容易,难的是在自己造成的分布外状态里恢复。
闭环(closed-loop)让模型亲自开车:每一步输出都真实地改变车辆状态,进而改变下一帧的观测。错误会滚雪球,分布漂移会被完整暴露。研究”渲染差异对模型的影响”尤其必须闭环:渲染差异改变的是每一帧的输入分布,其效果只有随时间累积才能放大成可观测的行为差异。
CARLA leaderboard 体系(Bench2Drive 沿用)的核心指标是驾驶分 DS(Driving Score):
乘法结构意味着违规是指数级扣分的:撞两个行人分数就只剩 1/4。另一个指标 SR(Success Rate,成功率)统计无严重违规而完整跑完的路线占比。此外”长时间堵死不动”会触发 blocked 判定提前终止路线。
本项目在对齐子集上重跑同一模型,SimLingo 的 DS 噪声(标准差 12.91)主要由 2/10 条路线”卡死↔完成”的二元翻转主导,其余路线偏差都在 ±11 以内——闭环评测的噪声是行为混沌,不服从均值置信区间的常规假设。比较两个系统时必须逐路线配对看翻转,只比均值会被噪声骗过。
选型时被刷掉的方案,死因几乎都落在工程约束上而非算法好坏。逐条拆开看,是一套现成的”可复现性审查”清单。
2023 年以前的主流驾驶仓库(TransFuser、TCP、InterFuser、LMDrive 等)锁定 torch 1.x。RTX 5090 的计算能力是 sm_120(Blackwell 架构),CUDA 内核需要为每个目标架构编译;老版本 PyTorch 的预编译二进制里根本没有 sm_120 的内核,运行即报 no kernel image for device。5090 的硬性要求是 PyTorch ≥ 2.7 + CUDA ≥ 12.8(本项目实测口径为 torch 2.7.1 + cu128)。锁老 torch 的仓库在新卡上不是慢,是直接不可运行,移植成本远超预期收益。
DiffusionDrive、Senna、AutoVLA 等论文方法分数亮眼,但没有官方 CARLA 闭环 agent——只有开环指标或别的基准。自己移植一个闭环评测 agent 意味着重建传感器接入、路线解析、坐标变换整条链,任何一处语义错配都会污染结论,风险不可控。
LMDrive 的训练按 8×A100 设计。单卡 5090 不是”慢一点”,而是显存和吞吐都不达标,等于这条路对单机研究者不存在。评估一个方案时,训练预算要和推理预算分开算。
Bench2Drive 全家桶是 CC-BY-NC-ND——禁止商用且禁止衍生。学术研究可用,但任何有产业化预期的项目都不能把基建押在上面。许可证要在写第一行代码前看,不是在发布前看。
权重、数据、训练代码、评测代码四样全开,才值得投入数月。能复现比分数高更重要——分数是别人的,可复现性是自己的。
Bench2Drive 是 NeurIPS’24 数据集与基准轨道(D&B Track)的工作,锚定 CARLA 0.9.15:
训练数据由 Think2Drive 强化学习专家采集,挂在 HuggingFace 上按需取用:
| 档位 | 体积 | 用途 |
|---|---|---|
| Mini | 4 GB | 冒烟验证管线 |
| Base | 400 GB | 正式训练 |
| Full | 4 TB | 全量复现 |
本项目的磁盘预算是 582 GB(WSL vhdx 所在盘实测余量),Full 物理上放不下,策略是 Mini 冒烟 + 按需下载子集。数据集按需拉取是磁盘受限下的标准纪律,一次 huggingface-cli download 全量会把整个项目卡死。
Bench2DriveZoo 提供的官方权重成绩(DS / SR),是判断任何新模型的坐标系:
| 方案 | DS | SR |
|---|---|---|
| UniAD(2023) | 45.8 | 16.4 |
| VAD(2023) | 42.4 | 15.0 |
| TCP-traj | 59.9 | 30.0 |
| ThinkTwice | 62.4 | 31.2 |
| DriveAdapter | 64.2 | 33.1 |
| SimLingo(2025) | 85.9 | 66.8 |
从 60 分档跳到 85.9 的断点,正是视觉语言模型进入驾驶的位置。
85.9/66.8 是 README 与榜单转述口径;SimLingo 论文 Table 2 的正式口径是 DS 85.07 ± 0.95(3 个种子)。本项目对比实验一律以论文口径为准。引用任何榜单数字时,先确认它出自论文、README 还是第三方转述——三个来源经常不一致。
许可证提醒:Bench2Drive 为 CC-BY-NC-ND(禁商用、禁衍生),学术对照可用,不能作为商用产品的基建。