📄 论文信息
- 标题:Planning-oriented Autonomous Driving(面向规划的自动驾驶)
- 出处:上海人工智能实验室 × 武汉大学 × 复旦大学(CVPR 2023 最佳论文奖,是该会议历史上首篇自动驾驶领域的最佳论文)
- 一句话总结:首次把感知、预测、规划全部统一进一个可端到端联合训练的网络里,并以规划为最终目标反向驱动所有任务,开创了显式端到端的新范式。
🤔 要解决什么问题?
在 UniAD 之前,自动驾驶工业界几乎清一色采用分模块拼接的方案:检测 ➜ 跟踪 ➜ 在线建图 ➜ 运动预测 ➜ 占用预测 ➜ 规划与控制。每个模块单独训练、各自调优,最后用规则串联起来。这种 pipeline 成熟可靠,但有几个根本性顽疾:
| 痛点 | 表现 | 后果 |
|---|---|---|
| 误差累积 | 上游漏检一个目标,下游预测/规划全错 | 错误"滚雪球" |
| 信息丢失 | 模块间只传结构化结果(框/轨迹),丢掉了特征级信息 | 后段无法补救前段 |
| 目标错位 | 每个模块都在自己任务上刷分,跟"开得好不好"脱节 | 感知 SOTA ≠ 规划好 |
| 几何失配 | 不同任务用不同表示(栅格/矢量/网格),难以融合 | 系统复杂、难优化 |
而另一条隐式端到端路线(直接"图像进、控制出",典型如早期的行为克隆)虽然能联合优化,却完全黑盒、不可解释、不可调试,且难以吸收多年积累的感知预测知识。
UniAD 的灵魂拷问:既然所有任务最终都是为"把车开好"服务的,那为什么不以规划为导向,把感知预测都装进一个可训练的网络里?既享受端到端的梯度贯通,又保留显式的中间表示(轨迹、地图、占用)以维持可解释性——这就是论文标题 “Planning-oriented” 的含义。
💡 核心思想:以规划为最终目标统一所有任务
UniAD 给出了一条折中路线,介于"纯分模块"与"纯黑盒端到端"之间:
多任务统一 + 显式中间表示 + 以规划为锚点的端到端联合优化
它的关键判断有三条:
- 规划是唯一终极目标:感知、预测的存在意义就是服务规划,所以训练时应当让规划的梯度一路回传到感知,而不是各模块各刷各的分。
- 中间表示不能丢:把检测框、轨迹、地图、占用栅格这些显式表示保留下来,既可解释、又可单独监督、还能复用已有知识。
- 用 query 把所有模块串起来:用同一套 Transformer query 机制贯穿全流程,让信息在特征级流动,避免"框/栅格"这种有损的硬传递。
这套思想直接催生了下面的整体架构。
🏗️ 整体架构:五段式 query 通路
UniAD 的整体流程是一条以 query 为载体的信息高速公路,环视多相机图像先经过图像骨干 + BEV 编码,然后五个模块接力处理:
多相机图像 ➜ Track 查询(跟踪) ➜ Map 查询(在线建图) ➜ Motion 预测(轨迹) ➜ Occupancy 预测(栅格) ➜ Planner(规划)
关键在于:每一段的输入输出都是 query,而不是传统的框或栅格。这样梯度就能从最后的规划 loss 一路贯通回最前面的感知,真正做到"为规划而训练"。下面逐段拆解。
第 1 段:Track 查询(TrackFormer)
负责多目标跟踪(MOT)。它从图像里提取目标,并维护一组跨帧连续的 Track 查询,每个 query 对应一个被持续跟踪的智能体(车、人、骑行者)。
- 输入:环视图像 BEV 特征 + 上一帧的 Track 查询
- 输出:当前帧的检测结果 + 更新后的 Track 查询(带 ID 连续性)
- 作用:把"看到什么车"这件事结构化成一组可被下游消费的 query,而不是一堆框
第 2 段:Map 查询(MapFormer)
负责在线矢量建图——实时检测车道线、可行驶区域、道路边界等静态/半静态元素。
- 输入:BEV 特征 + 一组 Map 查询
- 输出:矢量化的地图元素(车道线、分隔带、人行横道等)
- 作用:给预测和规划提供结构化的道路先验,告诉模型"车该往哪儿开"
Map 查询与 Track 查询一起,构成了对场景的双视角描述:动态目标 + 静态路网。
第 3 段:Motion 预测(MotionFormer)
基于 Track 查询和 Map 查询,预测每个智能体未来若干秒的运动轨迹。
- 输入:Track 查询 + Map 查询 + 自车 query
- 输出:每个目标的多模态未来轨迹(多条候选 + 概率)
- 关键设计:建模三类交互——智能体 ↔ 智能体、智能体 ↔ 地图、智能体 ↔ 终点(goal)
MotionFormer 把感知得到的 query 与地图 query 进行交叉注意力,让模型在特征层面理解"前车会怎么动、它受哪条车道约束"。
第 4 段:Occupancy 预测
这一段是 UniAD 的神来之笔。运动预测只对被检测到的、可跟踪的目标做轨迹预测,但真实世界里还有大量未观测到、不规则、难以归类的障碍物(散落物、异形车、施工围挡)。占用预测用一个 BEV 栅格去预测"未来某个时刻,每个格子会不会被占据",补上了运动预测的盲区。
- 输入:Motion 模块的隐特征 + Track 查询
- 输出:未来多帧的占用栅格
- 作用:作为规划的安全兜底——即使预测漏了某个目标,占用栅格也能提示"前方有东西",避免规划出冲撞轨迹
Motion + Occupancy 互补是这篇论文设计哲学的精华:一个看"已知目标怎么动",一个看"还有什么会挡路",两者合力为规划提供完整的未来视野。
第 5 段:Planner
规划模块拿到上述所有信息后,输出自车未来轨迹。
- 输入:自车 query + Track 查询 + Map 查询 + Motion 预测结果
- 机制:自车 query 对其他所有 query 做注意力,综合"周围车要怎么动、车道在哪、占用情况"来生成轨迹
- 输出:未来若干个 waypoints(航点)
为了把"安全"硬编码进优化目标,Planner 还引入了一个碰撞损失——把规划轨迹投影回 BEV,与占用栅格做约束,惩罚可能与障碍物重叠的轨迹。这让规划不只是拟合人类轨迹,而是显式地避免碰撞。
五段总结
| 模块 | 输入 | 输出 | 服务于规划的角色 |
|---|---|---|---|
| TrackFormer | BEV 特征 + 历史 query | Track 查询 | “周围有谁” |
| MapFormer | BEV 特征 + Map 查询 | Map 查询 | “路怎么走” |
| MotionFormer | Track + Map 查询 | 多模态轨迹 | “别人会怎么动” |
| Occupancy | Motion 特征 + Track 查询 | 占用栅格 | “还有什么挡路” |
| Planner | 全部 query + 自车 query | 自车 waypoints | “我该怎么开” |
🔗 query:端到端梯度贯通的关键
UniAD 最具方法论价值的创新,是用 query 作为贯穿全流程的统一接口。这带来三个本质好处:
- 特征级信息流动:模块之间不再传递"框/轨迹"这种离散有损信息,而是传递连续的特征向量,规划模块能看到感知的全部细节。
- 梯度可回传:因为整条链路都是可微的,规划 loss 可以一路反传到感知,真正实现"为规划而感知"。
- 统一调度:所有模块都遵循 query + 注意力的范式,便于在一个框架里联合训练、联合推理。
这正是它区别于传统 pipeline(不可微)和黑盒端到端(无中间表示)的根本所在——用 query 同时拿到了"端到端的可微性"和"显式表示的可解释性"。
📉 多任务联合 loss 设计
UniAD 是个典型的多任务学习系统,每个模块都有自己的监督信号:
| 任务 | 主要 loss |
|---|---|
| 跟踪(Track) | 分类 loss + 框回归 loss + 关联匹配 loss |
| 建图(Map) | 矢量元素分类 + 回归 loss |
| 运动预测(Motion) | 轨迹回归(minADE / minFDE)+ 模态分类 loss |
| 占用预测(Occ) | 二值交叉熵 / IoU loss |
| 规划(Planner) | 轨迹 L2 回归 + 碰撞 loss |
训练上有一个重要工程经验:直接从头端到端联合训练会崩——各任务梯度尺度不一、相互打架,很难收敛。UniAD 采用两阶段策略:
- 阶段一:分别预训练各感知/预测模块,让每个子任务先到一个合理的初始化。
- 阶段二:端到端联合微调,把所有模块接起来,以规划为主导做联合优化。
这种"先分后合"的做法,是后来几乎所有端到端工作(VAD、SparseDrive 等)默认采用的训练范式,可谓"立规矩"的贡献。
📊 在 nuScenes 上的表现
UniAD 在 nuScenes 上做了全面评测,结果可以用"全面碾压"形容:
- 规划:在 L2 误差和碰撞率两个核心指标上,相比当时的强基线 ST-P3 等大幅领先;碰撞率尤其显著下降,说明安全性提升明显。
- 跟踪(MOT):AMOTA 指标 SOTA。
- 运动预测:minADE / minFDE 表现优秀。
- 在线建图:车道线 IoU 等指标领先。
更值得关注的是消融实验揭示的规律:
| 设计选择 | 对规划的影响 |
|---|---|
| 去掉 Occupancy 模块 | 碰撞率明显上升 → 占用预测是安全兜底 |
| 去掉端到端联合训练 | 规划精度下降 → 梯度贯通确实有用 |
| 只用感知结果做规划 | 显著变差 → 中间任务确有贡献 |
这些消融一锤定音地证明了:UniAD 的每个模块、每条设计都不是凑数的,都切实地服务了最终的规划目标。它也因此斩获了 nuScenes 自动驾驶预测与规划挑战赛的冠军。
🌍 开创"显式端到端"范式
UniAD 的历史地位,远不止于"一个跑得好的系统",而在于它确立了一条新路线:
| 路线 | 代表 | 特点 | 局限 |
|---|---|---|---|
| 分模块拼接 | 工业界传统 | 成熟、可解释 | 误差累积、不可微 |
| 隐式端到端 | 行为克隆类 | 联合优化 | 黑盒、不可调试 |
| 显式端到端 | UniAD ⭐ | 可微 + 显式表示 | 训练复杂、算力高 |
显式端到端这个范式几乎成了 2023 年之后学术界的"默认选项",后续一大批工作都沿着 UniAD 铺好的路往前走。
🔗 与后续工作的关系
UniAD 之后的端到端工作,基本都在"简化表示、提效、提质“三个方向上迭代。
UniAD → VAD
VAD(Vectorized Auto-regressive Driving) 直接继承了 UniAD 的"显式端到端 + 向量化表示"思想,但做了两件关键瘦身:
- 用矢量化场景表示替代 UniAD 中较重的密集 BEV 栅格,大幅降低算力、提升推理速度
- 进一步精简模块,强调效率与泛化
可理解为 “UniAD 的轻量化、向量化改良版”,证明了 UniAD 路线可以被工程化加速。
UniAD → SparseDrive
SparseDrive 把"稀疏"做到极致——用稀疏 query 表示目标和地图,避免密集 BEV 计算,在保持甚至提升精度的同时把推理开销进一步压低。它延续了 UniAD “query 贯通 + 显式表示” 的内核,只是把表示做得更稀疏、更高效。
三者一脉相承
| 工作 | 核心传承 | 主要进化 |
|---|---|---|
| UniAD | 范式奠基者 | 首次显式端到端,规划导向 |
| VAD | 向量化 + 显式端到端 | 轻量化、提速 |
| SparseDrive | query 通路 + 显式表示 | 全稀疏,进一步提效 |
可以说,UniAD 定义了赛道,VAD/SparseDrive 在这条赛道上把车跑得更快。
📝 个人思考
读 UniAD 最打动我的,是它对"目标"的清醒定位。在它之前,自动驾驶学术界和工业界都容易陷入一种"局部最优陷阱”——每个团队埋头把自己的模块(检测、预测、规划)刷到 SOTA,却很少反思这些模块拼起来是否真的让车开得更好。UniAD 用一句话点醒了这个迷思:所有任务的终极目标只有一个,就是规划。这种"以终为始"的系统观,比任何具体的网络结构都更值得铭记,因为它适用于一切复杂系统的设计——先想清楚最终要什么,再倒推每个组件该怎么搭。
第二点启发在**“折中"的智慧**。UniAD 没有走极端:既不全盘黑盒(保留了显式的轨迹/地图/占用表示),也不固守分模块(让梯度贯通到感知)。这种"鱼与熊掌兼得"的设计哲学,在工程实践中往往比纯学术的激进更值钱。我倾向于认为,真正能大规模落地的自动驾驶系统,一定是某种形式的"显式端到端”——因为它同时满足了"可优化"和"可解释、可兜底"这两个落地刚需。纯黑盒端到端再炫酷,在安全审计和事故定责面前都站不住脚。
最后一点是对占用预测这个模块的体会。它在 UniAD 里看似不起眼,却是最具工程价值的创新之一。真实世界充满"不规则、未归类、未观测"的障碍物,传统的检测/预测范式天然漏掉它们,而占用栅格是一种**“不管是什么,先告诉我有没有”**的兜底表示。这种"从语义回到几何"的设计思路,对今天的端到端乃至世界模型研究都有启示——越是高层语义容易出错的地方,越需要底层几何的安全网兜着。这或许也是为什么占用网络(OccNet)后来单独发展成了一条热门分支。
UniAD 的价值,在于它不只是"一个跑得好的模型",而是给整个领域立了一根旗杆:从此大家讨论端到端自动驾驶,都会以它为坐标系的原点。
📖 这是论文精读系列的第 3 篇。下一篇你想看 VAD、SparseDrive 还是别的论文解读?欢迎留言。