UniAD Planning-oriented Autonomous Driving

Task: End-to-End Autonomous Driving (Detection, Tracking, Mapping, Motion, Occupancy, Planning)
Method: Unified Query-based Multi-task Framework, Planning-oriented Design
Venue: CVPR 2023 Best Paper
Year: 2022
Paper: https://arxiv.org/abs/2212.10156
Code: https://github.com/OpenDriveLab/UniAD

摘要

现代自动驾驶系统采用模块化设计,按顺序执行感知、预测和规划任务。现有方案要么部署独立模型(信息损失+误差累积),要么简单多任务学习(负迁移)。本文提出 UniAD(Unified Autonomous Driving),首个涵盖检测、跟踪、建图、运动预测、占用预测与规划的全栈端到端框架。核心设计是以 query 作为统一接口连接所有模块——TrackFormer 用 track query 编码智能体、MapFormer 用 map query 编码道路元素、MotionFormer 用 motion query 联合预测多智能体轨迹、OccFormer 用 BEV 特征与智能体特征交互预测未来占用、Planner 利用 ego query 在 BEV 上做注意力后预测规划轨迹并用占用图做碰撞优化。在 nuScenes 上,UniAD 在所有任务上显著超越前人方法,规划 L2 误差降低 51.2%、碰撞率降低 56.3%(相比 ST-P3)。

核心论点:端到端自动驾驶的关键不是简单堆叠任务,而是以规划为导向、通过 query 接口协调各模块的信息流——每个前置任务都应为最终规划服务。

问题与动机

自动驾驶系统需要同时完成检测、跟踪、建图、运动预测、占用预测和规划。现有方案存在明显局限:

方案设计 代表作 核心问题
独立模型 Mobileye, NVIDIA DRIVE 模块间信息损失、误差累积、特征不对齐
多任务学习 BEVerse, NMP 共享 backbone + 独立 head,任务间负迁移
端到端(直接规划) 行为克隆方法 无中间表示,缺乏安全保障和可解释性
端到端(部分组件) PnPNet, ST-P3, MP3 缺少部分关键任务(如跟踪或建图),任务协调不充分

核心痛点:如何设计一个端到端框架,让感知和预测的所有任务都为规划服务,同时避免独立模型的误差累积和多任务学习的负迁移?关键挑战在于模块间的信息传递——如何让检测 → 跟踪 → 运动预测 → 占用预测 → 规划形成协调一致的信息流。

核心洞察

洞察 1:Query 作为统一接口——连接全栈任务的信息管道

传统做法:独立模型间通过 bounding box 等结构化输出传递信息,信息压缩严重(box 无法编码丰富的上下文特征);多任务学习共享 backbone 但 head 独立,任务间无交互。

UniAD 做法:所有模块统一使用 Transformer decoder 结构,以 query 作为连接接口:

  • Track query $Q_A$:编码智能体信息,从 TrackFormer → MotionFormer → OccFormer
  • Map query $Q_M$:编码道路语义,从 MapFormer → MotionFormer
  • Ego query:特殊的 track query,从 TrackFormer → MotionFormer → Planner
  • 匹配结果在 TrackFormer 中确定后,被下游 MotionFormer 和 OccFormer 共享复用

为什么更好:query 拥有全局感受野,能编码比 bounding box 更丰富的特征信息。当某个模块预测不准时(如检测漏了目标),下游模块仍可通过 BEV 特征和注意力机制部分恢复。消融实验(Table 2)显示,完整 UniAD(Exp.12)相比朴素多任务学习(Exp.0)在运动预测上提升 15.2% minADE,规划碰撞率降低 0.51 个百分点。

洞察 2:双类型预测互补——运动预测 + 占用预测联合提升规划安全

传统做法:运动预测(稀疏、智能体级)和占用预测(稠密、场景级)分别独立使用,前者保留身份但非可微,后者可微但缺身份。

UniAD 做法:同时引入运动预测和占用预测两种互补的预测任务。运动预测提供智能体个体的多模态未来轨迹(6 个模式 × 12 步),占用预测提供场景级的稠密未来占用图(5 步)。规划模块利用 ego query 的运动信息做初始轨迹预测,再用占用图做碰撞优化。

为什么更好:消融实验(Table 2, Exp.10-12)显示,单独使用运动预测或占用预测做规划均不如二者联合:完整模型(Exp.12)的碰撞率为 0.430%,仅用 Planner(Exp.10)为 0.773%,仅用运动+感知(Exp.9)为无法评估。两类预测分别提供了智能体级动态(谁会怎么动)和场景级约束(哪里会被占据),共同保障规划安全。

洞察 3:感知为预测服务——跟踪和建图对运动预测的关键作用

传统做法:检测、跟踪和建图作为独立感知任务,其输出直接提供给下游使用,不关注对后续任务的贡献。

UniAD 做法:将跟踪和建图嵌入端到端管线,其输出 query 直接供 MotionFormer 使用——Track query 提供历史轨迹和身份信息(agent-agent 交互),Map query 提供道路结构(agent-map 交互),两者合力使运动预测精度大幅提升。

为什么更好:Table 2 Exp.4-6 显示,纯 MotionFormer 的 minADE 为 0.815,加入 TrackFormer 后降至 0.751(-7.9%),再加入 MapFormer 后降至 0.736(-9.7%),建图和跟踪共同为运动预测带来了 -12.9% minFDE 的提升。且感知模块在共同训练中 不出现显著性能下降

要记住的 3 个数字

  • 1.03m avg L2:UniAD-B 的规划平均 L2 误差,比 ST-P3(2.11m)降低 51.2%
  • 0.31% avg Col:UniAD-B 的规划平均碰撞率,比 ST-P3(0.71%)降低 56.3%
  • 0.71 minADE:UniAD 的运动预测精度,比 PnPNet-vision(1.15)降低 38.3%

方法设计

整体架构

UniAD 的全栈管线:

$$\text{多视图图像} \xrightarrow{\text{BEVFormer}} \text{BEV 特征}\ B \xrightarrow{\text{TrackFormer}} Q_A \xrightarrow{\text{MapFormer}} Q_M \xrightarrow[\text{OccFormer}]{\text{MotionFormer}} \xrightarrow{\text{Planner}} \tau^*$$
UniAD 架构图
多视图 6 cam
      │
      ▼
┌─────────────────┐
│ BEVFormer       │  ResNet-101 + FPN + 时空注意力
│ (BEV Encoder)   │  输出:B ∈ R^{200×200×256}
└─────┬───────────┘
      │
      ├──────────────────────┐
      ▼                      ▼
┌─────────────┐       ┌─────────────┐
│ TrackFormer │       │ MapFormer   │
│ 6 layers    │       │ 6+4 layers  │
│ Det+Track Q │       │ 300 Thing   │
│ → Q_A, ego Q│       │ → Q_M       │
└──┬──────────┘       └──┬──────────┘
   │                     │
   ├─► agent-agent ◄─────┘
   ├─► agent-map   ◄─────┘
   ▼
┌─────────────────────────┐
│ MotionFormer (3 layers) │  agent-agent + agent-map + agent-goal
│ 输入:Q_A, Q_M, B        │  输出:K=6 模态 × T=12 步轨迹
│ + ego query 特殊处理     │  + ego-vehicle query 更新
└──┬─────────────┬────────┘
   │             │
   ▼             ▼
┌──────────┐  ┌──────────────────┐
│OccFormer │  │ Planner(3 layers)│
│ 5 blocks │  │ ego Q + cmd emb  │
│ pixel-   │  │ → BEV 注意力      │
│ agent    │  │ → 轨迹 τ^         │
│ interact │  │ + 占用碰撞优化     │
└──┬───────┘  └──┬───────────────┘
   │             │
   └──► 占用图 O^ ──► 碰撞优化 → τ*

关键组件

模块 输入 输出 层数 核心设计
BEVFormer 多视图图像 BEV 特征 $B$ BEVFormer 编码器(空间/时序注意力)
TrackFormer $B$ $Q_A$(智能体 query) 6 检测 query + track query 时序传播
MapFormer $B$ $Q_M$(地图 query) 6+4 Panoptic SegFormer,thing + stuff query
MotionFormer $Q_A, Q_M, B$ $K \times T$ 轨迹 3 agent-agent / agent-map / agent-goal 交互
OccFormer $B, Q_A$, motion query 实例级占用图 5 pixel-agent 交互 + 注意力掩码
Planner ego query, $B$, 命令嵌入 规划轨迹 $\tau^*$ 3 BEV 注意力 + 占用碰撞优化

MotionFormer 三类交互

$$Q_a = \text{MHCA}(\text{MHSA}(Q), Q_A), \quad Q_m = \text{MHCA}(\text{MHSA}(Q), Q_M)$$ $$Q_g = \text{DeformAttn}(Q, \hat{\mathbf{x}}_T^{l-1}, B)$$

三路输出拼接后通过 MLP 融合。其中 agent-goal 交互使用可变形注意力在预测终点附近采样 BEV 特征,实现逐层 coarse-to-fine 的轨迹精化。

Motion Query 的位置编码(四重先验)

$$Q_{\text{pos}} = \text{MLP}(\text{PE}(I_s)) + \text{MLP}(\text{PE}(I_a)) + \text{MLP}(\text{PE}(\hat{\mathbf{x}}_0)) + \text{MLP}(\text{PE}(\hat{\mathbf{x}}_T^{l-1}))$$

其中 $I_s$ 为场景级 anchor、$I_a$ 为智能体级 anchor(均由 k-means 聚类得到)、$\hat{\mathbf{x}}_0$ 为当前位置、$\hat{\mathbf{x}}_T^{l-1}$ 为上一层预测的终点。

OccFormer 的 pixel-agent 交互

$$D_{\text{ds}}^t = \text{MHCA}(\text{MHSA}(F_{\text{ds}}^t), G^t, \text{attn\_mask} = O_m^t)$$

使用占用引导的注意力掩码约束每个像素仅关注占据它的智能体,保持稀疏且高效。实例级占用直接通过矩阵乘 $\hat{O}_A^t = U^t \cdot F_{\text{dec}}^t$ 得到。

Planner 碰撞优化

$$\tau^* = \arg\min_{\tau} \lambda_{\text{coord}} \|\tau, \hat{\tau}\|_2 + \lambda_{\text{obs}} \sum_t \mathcal{D}(\tau_t, \hat{O}^t)$$

其中 $\mathcal{D}$ 为高斯距离场,将轨迹推离已占用区域。仅在推理时使用 Newton 法优化。

损失函数

训练分两阶段:

$$\mathcal{L}_1 = \mathcal{L}_{\text{track}} + \mathcal{L}_{\text{map}} \quad \text{(Stage 1, 6 epochs)}$$ $$\mathcal{L}_2 = \mathcal{L}_{\text{track}} + \mathcal{L}_{\text{map}} + \mathcal{L}_{\text{motion}} + \mathcal{L}_{\text{occ}} + \mathcal{L}_{\text{plan}} \quad \text{(Stage 2, 20 epochs)}$$
  • $\mathcal{L}_{\text{track}}$: Focal Loss + L1 Loss(匈牙利匹配)
  • $\mathcal{L}_{\text{map}}$: Focal + L1 + GIoU + Dice(Panoptic 分割)
  • $\mathcal{L}_{\text{motion}}$: 分类损失 + NLL 损失(GMM 多模态轨迹)
  • $\mathcal{L}_{\text{occ}}$: BCE + Dice(实例级二值占用)
  • $\mathcal{L}_{\text{plan}}$: 模仿 L2 + 碰撞 IoU 损失

实验与分析

主要结果

nuScenes val(各任务对比)

跟踪(Table 3):

方法 AMOTA↑ AMOTP↓ Recall↑ IDS↓
ViP3D 0.217 1.625 0.363
MUTR3D 0.294 1.498 0.427 3822
UniAD 0.359 1.320 0.467 906

运动预测(Table 5):

方法 minADE↓ minFDE↓ MR↓ EPA↑
PnPNet 1.15 1.95 0.226 0.222
ViP3D 2.05 2.84 0.246 0.226
UniAD 0.71 1.02 0.151 0.456

规划(Table 7):

方法 L2 1s↓ L2 2s↓ L2 3s↓ avg L2↓ Col 1s↓ Col 2s↓ Col 3s↓ avg Col↓
FF 0.55 1.20 2.54 1.43 0.06 0.17 1.07 0.43
ST-P3 1.33 2.11 2.90 2.11 0.23 0.62 1.27 0.71
UniAD 0.48 0.96 1.65 1.03 0.05 0.17 0.71 0.31

三种模型规模对比(Table 12)

变体 Backbone AMOTA↑ minADE↓ IoU-n↑ avg L2↓ avg Col↓
UniAD-S R50 0.241 0.788 59.4 1.04 0.32
UniAD-B R101 0.359 0.708 63.4 1.03 0.31
UniAD-L V2-99 0.409 0.723 64.1 1.03 0.29

消融实验:验证三个洞察

全栈任务的必要性(Table 2,洞察 1+2+3)

ID Track Map Motion Occ Plan minADE↓ avg L2↓ avg Col↓
0 (MTL) 0.858 1.15 0.93
4 0.815
6 0.736
10 1.131 0.773
12 0.728 1.004 0.430

关键发现

  1. 完整 UniAD(Exp.12)比朴素 MTL(Exp.0)在 minADE 上提升 15.2%、碰撞率降低 0.51 个百分点
  2. Track + Map 使 MotionFormer 的 minADE 从 0.815 降至 0.736(**-9.7%**),minFDE 降低 12.9%
  3. 同时引入 Motion + Occ 做规划(Exp.12)比仅 Planner(Exp.10)碰撞率降低 44%(0.773→0.430)

MotionFormer 设计消融(Table 8)

场景 anchor goal 交互 ego Query NLO minADE↓ MR↓
0.844 0.177
0.768 0.164
0.755 0.168
0.747 0.156
0.710 0.146

计算复杂度(Table 13)

模块组合 参数量 FLOPs FPS (A100)
BEVFormer Only 65.9M 1324G 4.2
+ Track 68.2M 1326G 2.7
+ Map 95.8M 1520G 2.2
+ Motion 108.6M 1535G 2.1
+ Occ 122.5M 1701G 2.0
+ Plan (Full) 125.0M 1709G 1.8

失效场景分析

  • 长尾场景:大型拖挂车、施工区域等训练数据稀少的场景,所有模块精度均下降
  • 暗光环境:夜间场景下,Planner 因碰撞 loss 可能过于保守
  • 远距离目标:BEV 范围 51.2m,超出范围的目标无法感知
  • 遮挡恢复:track query 有生命周期管理(2s 容忍期),但长时间遮挡后 ID 仍可能切换

工程实践

训练配置

Backbone:        ResNet-50 (S) / ResNet-101 (B) / VoVNetV2-99 (L)
BEV Encoder: BEVFormer (时空注意力), 200×200, [-51.2m, 51.2m]
Training:
Stage 1: 6 epochs, Track + Map 损失, 冻结 backbone
Stage 2: 20 epochs (ablation 8ep), 全任务损失, 冻结 backbone + BEV encoder
Batch Size: 1 per GPU
Optimizer: AdamW, lr=2e-4, weight_decay=0.01, backbone lr ×0.1
Sequence Length: 5 frames (3 for ablation)
GPUs: 8× A100
TrackFormer: 900 det queries + dynamic track queries, 6 layers
MapFormer: 300 thing queries + 1 stuff query, 6+4 layers
MotionFormer: K=6 modes, T=12 steps (6s), 3 layers
OccFormer: T_o=5 blocks (2.5s at 2Hz)
Planner: T_p=6 steps (3s), 3 layers
Feature Dim: 256 throughout

复现要点

  1. 两阶段训练至关重要:直接端到端训练不收敛,需先预训练感知模块(Stage 1),再联合训练全任务(Stage 2)。Stage 2 额外冻结 BEV encoder 以节省显存
  2. Track query 生命周期管理:训练时用 3D IoU > 0.5 过滤配对结果;推理时用分类分数 > 0.4(det)/ > 0.35(track)过滤,2s 容忍期避免短时遮挡中断
  3. 匹配结果共享:TrackFormer 的匈牙利匹配结果被 MotionFormer 和 OccFormer 复用,保证从历史跟踪到未来预测的身份一致性
  4. 非线性优化(NLO):训练时对 GT 轨迹做运动学约束(多重射击法),使其在检测位置不精确时仍物理可行;仅训练阶段使用
  5. 碰撞优化:推理时用 Newton 法在占用图上优化规划轨迹,设定 $\lambda_{\text{coord}}=1.0, \lambda_{\text{obs}}=5.0, d=5, \sigma=1.0$
  6. 显存管理:OccFormer 在 BEV 1/4 分辨率上做交互,再降至 1/8 做 pixel-agent 注意力

性能优化方向

精度提升

  • 更大 backbone(V2-99)可提升感知精度,进而改善预测和规划(UniAD-L 碰撞率降至 0.29%)
  • 更长训练序列(从 3 帧增至 5 帧)有助于时序建模,但显存倍增

速度优化

  • BEVFormer + TrackFormer 占约 70% 计算量,轻量化 BEV encoder 是首选方向
  • MotionFormer + OccFormer + Planner 总参数仅约 56M(不含 backbone),计算量可控

研究启示

可迁移的思想

  • Query 作为跨任务接口:将不同任务的输出编码为 query,通过注意力机制传递信息,适用于任何多阶段管线(如机器人操控的感知→规划、医学图像的检测→分割→诊断)
  • Planning-oriented 任务编排:以最终目标(规划)为导向反向审视前置任务的必要性,而非简单堆叠所有可能的任务
  • 双类型预测互补:稀疏(智能体级)+ 稠密(场景级)的预测组合,前者保留身份做交互建模,后者提供全局约束做碰撞避免
  • 非线性优化适配端到端:在端到端系统中,上游感知不精确会导致不合理的 GT 轨迹,NLO 通过运动学约束修正 GT 使训练更稳定

方法局限

  • 推理速度 1.8 FPS(A100),远未达到实时部署要求
  • 依赖 nuScenes 的开环评估,闭环(如 CARLA、nuPlan)性能未验证
  • 两阶段训练复杂,且需要大量 GPU 显存(因时序序列+多模块)
  • OccFormer 的预测时域(2.5s)远小于 MotionFormer(6s),时域不一致

技术影响

  • UniAD 是首个涵盖全栈驾驶任务的端到端框架,获得 CVPR 2023 最佳论文奖,奠定了”planning-oriented”端到端自动驾驶的范式
  • 后续 VAD、SparseDrive、GenAD 等方法均以 UniAD 为基线或在其基础上简化/改进
  • 证明了端到端训练中各任务的渐进式协调优于独立多任务学习,影响了自动驾驶工业界的系统设计思路
  • 开放代码和模型,成为社区广泛使用的端到端自动驾驶基准