1. 课程导入

端到端驾驶(End-to-End Autonomous Driving)指的是把传感器输入到车辆控制输出之间的主要计算链路,交给一个可学习的神经网络或一组协同训练的模块来完成,而不是像传统自动驾驶栈那样,把感知、定位、预测、规划、控制拆成彼此独立、接口人工定义的多个子系统。它的核心思想是:让模型从大规模驾驶数据中直接学习“看到什么场景,应该产生什么驾驶行为”,从而减少人工规则和中间表征带来的信息损失。

理解端到端驾驶,需要先区分三个层次。第一层是模块化自动驾驶:感知输出目标框、车道线、地图,预测模块输出轨迹,规划模块生成路径,控制模块输出油门、刹车和转向。第二层是端到端感知到规划:用统一网络直接输出未来轨迹或轨迹热力图,中间仍保留部分可解释表征。第三层是完全端到端:输入图像、点云、车辆状态,输出控制量或轨迹,整个链路联合训练。工程上真正落地的方案,往往介于第二层和第三层之间。

本节核心判断:端到端不是“取消所有模块”,而是把原本靠人工接口连接的模块,改为靠共享表征和联合损失连接。多任务学习负责让一个骨干网络同时服务感知、预测、规划等任务;联合优化负责让这些任务在训练时互相促进,而不是各自为政。

一、发展历程:从规则堆叠到联合学习

端到端驾驶并不是突然出现的新概念。早期研究可以追溯到 20 世纪 80 年代的 ALVINN,它用浅层网络根据摄像头图像预测转向。2016 年前后,NVIDIA 的端到端转向预测工作让“图像进、转向出”的思路重新受到关注。但真正推动工程化的是三件事:一是 BEV(Bird’s Eye View)表征成熟,把多摄像头、激光雷达统一到俯视空间;二是 Transformer 和大规模预训练让长时序、多模态融合成为可能;三是自动驾驶数据闭环和仿真工具链完善,使联合训练可以持续迭代。

当前主流路线大致分为三类:显式模块化端到端,如 UniAD,把检测、跟踪、建图、预测、规划串成可微链路;隐式端到端,如直接由 BEV 特征回归轨迹;大模型端到端,用视觉语言模型或世界模型统一理解与决策。它们共同面对的问题是:如何设计多任务损失、如何平衡梯度冲突、如何保证安全兜底。

端到端驾驶演进与多任务联合优化主线 规则模块化 感知 / 预测 / 规划 人工接口,独立调参 BEV 统一表征 多相机 / 激光雷达 俯视空间融合 多任务学习 检测 / 建图 / 预测 共享骨干,多头输出 联合优化端到端 轨迹 / 控制联合损失 梯度协调与安全约束 共享骨干网络中的多任务头 目标检测头 车道 / 地图头 运动预测头 轨迹规划头 控制头 联合优化的关键矛盾 任务梯度方向冲突 · 损失量级不一致 长尾场景样本稀缺 · 安全约束难可微 实时性与模型容量之间的权衡 工程价值 减少接口信息损失,提升整体一致性 共享计算,降低车端算力与延迟 数据驱动迭代,覆盖更多长尾场景

二、多任务学习:一个骨干,多个目标

多任务学习(Multi-Task Learning, MTL)是端到端驾驶的工程支点。它的基本结构是:共享编码器提取 BEV 或时序特征,多个任务头分别输出检测、地图、预测、规划和控制结果。这样做的直接收益是计算共享和表征复用,间接收益是任务之间形成正则化,例如检测任务帮助规划任务理解障碍物位置,预测任务帮助规划任务评估交互风险。

但多任务学习并不天然优于单任务。常见问题是负迁移:某个任务的梯度会干扰另一个任务。工程上通常采用几种手段:损失加权,如不确定性加权、GradNorm;梯度手术,如 PCGrad,把冲突梯度投影到正交方向;任务分组,把相关性强的任务放在同一组共享更多层;动态停止梯度,避免某一任务主导更新。

# 多任务损失加权示例(伪代码)
loss_det = focal_loss(pred_det, gt_det)
loss_map = dice_loss(pred_map, gt_map)
loss_pred = nll_loss(pred_traj, gt_traj)
loss_plan = l1_loss(pred_plan, gt_plan)

# 不确定性加权:让模型自动学习各任务权重
total_loss = (
    loss_det / (2 * sigma_det**2) + torch.log(sigma_det) +
    loss_map / (2 * sigma_map**2) + torch.log(sigma_map) +
    loss_pred / (2 * sigma_pred**2) + torch.log(sigma_pred) +
    loss_plan / (2 * sigma_plan**2) + torch.log(sigma_plan)
)
total_loss.backward()

三、联合优化:从“各自最优”到“整体最优”

联合优化关注的是:当多个任务共享参数时,如何让整体驾驶性能最优,而不是让每个子任务指标单独最优。它包含三个层面。第一是损失层面,设计总损失并平衡权重;第二是梯度层面,处理任务间的梯度冲突;第三是系统层面,把规划输出与控制执行、安全兜底、仿真回放连成闭环。

一个典型工程场景是城市路口左转。检测头需要识别对向直行车辆,预测头需要估计其未来轨迹,规划头需要生成左转路径,控制头需要输出转向和速度。如果各模块独立训练,检测漏检可能被预测模块的保守策略掩盖,规划模块也可能因为预测误差而过度刹车。联合优化则通过共享 BEV 特征和端到端损失,让检测、预测、规划在训练中相互校准,减少“模块都对、整体却不好”的情况。

对比维度 模块化自动驾驶 多任务端到端驾驶
接口方式 人工定义,模块间传递结构化结果 共享表征,任务头之间可微连接
训练方式 各模块独立训练、独立调参 多任务联合训练,损失统一协调
信息损失 中间表征压缩,易丢失细节 特征复用,保留更多原始信息
算力效率 多模型串行,延迟叠加 共享骨干,计算复用,延迟更低
可解释性 强,每步可单独检查 较弱,需要额外可视化与诊断
安全兜底 规则清晰,易于插入硬约束 需专门设计安全层与回退策略

四、常见误区与复盘要点

  • 误区一:端到端等于完全黑盒。工程上通常保留 BEV 可视化、轨迹热力图、注意力图等诊断手段,端到端不等于不可观测。
  • 误区二:多任务一定比单任务好。任务冲突严重时,负迁移会让整体变差,需要梯度协调和任务分组。
  • 误区三:只关注模型结构,忽略数据闭环。端到端驾驶的迭代速度取决于数据采集、标注、仿真回放和难例挖掘。
  • 误区四:忽略安全兜底。端到端输出必须经过安全校验层,如碰撞时间检查、可行驶区域约束和最小风险策略。

学习路径建议:先建立 BEV 与多任务学习的基本认知,再理解损失加权与梯度协调,随后进入规划与控制联合优化,最后通过仿真和实车数据闭环验证。本课程后续章节会沿着“表征—任务—优化—部署—安全”的主线逐步展开。

工程提醒:端到端驾驶的评估不能只看单一任务指标。检测 mAP 高不代表规划安全,规划轨迹平滑不代表控制可执行。必须建立整体指标,如碰撞率、舒适度、通行效率、接管次数,并在仿真与实车之间做一致性校验。