OccDriver: Future Occupancy Guided Dual-branch Trajectory Planner in Autonomous Driving¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=abJCjkIwi5
代码: 待确认
领域: 自动驾驶 / 轨迹规划
关键词: 轨迹规划, 占据预测, 世界模型, 双分支, 应急规划(contingency planning)
一句话总结¶
OccDriver 用一个「向量化分支出粗轨迹 → 栅格化分支以占据流(occupancy flow)预测每条粗轨迹引发的未来场景演化 → 向量化分支据此精修轨迹」的双分支 coarse-to-fine 框架,把占据空间当成 2D 世界模型来引导规划,并配上一套跨分支损失与应急规划策略,在 nuPlan 闭环 benchmark 上取得 SOTA。
研究背景与动机¶
领域现状:模仿学习的轨迹规划主要分两种表征范式。栅格化(rasterized)方法把场景投到 BEV 网格上、预测时空占据,天然抗遮挡、能给出联合未来状态的概率视角;向量化(vectorized)方法用向量+DETR 风格 query 解码多模态轨迹,个体语义精细、轨迹精度高。
现有痛点:栅格化离散化会丢失个体细节和几何精度;向量化则倾向于把未来交互过度简化,需要大量手工特征工程去逼近不确定性。更关键的是,绝大多数规划方法是「forward-only」——一口气把轨迹解码出来,没有在 rollout 变差时纠错的能力,因此往往要外挂一个很强的轨迹打分模块来兜底。
核心矛盾:场景级联合建模(概率、抗遮挡)与个体级精细建模(高精度轨迹)之间存在表征 trade-off,单一范式只能拿一头;同时,规划缺乏对「我这么开会让未来场景怎么变」的显式预判。
本文目标:(1) 同时保留栅格联合建模的概率优势和向量表征的个体保真度;(2) 让规划显式利用「未来场景演化」作为引导,而不是盲目 forward。
切入角度:世界模型的思路——先预测自车行为带来的后果,再据此做更明智的决策。作者把这个思路落到占据空间:让栅格分支扮演一个「2D 占据世界模型」,对每条候选粗轨迹预测它会诱发的未来占据/流,再把这份交互先验蒸馏回向量分支去精修轨迹。
核心 idea:栅格-向量双分支 + coarse-to-fine——向量分支先出粗轨迹,栅格分支条件于粗轨迹预测未来占据演化,再用这份未来场景信息精修出 scene-consistent 的轨迹。
方法详解¶
整体框架¶
OccDriver 的输入 \(X\) 包含自车 \(E\)、动态体 \(A\) 的历史状态、静态物 \(S\) 和高精地图 \(M\);同时把当前帧投影成占据网格 \(\{O_e^0, O_a^0, O_m\}\) 与后向流 \(FL^0\) 作为栅格分支输入 \(X_{occ}\)。输出是 \(M\) 模态的自车未来轨迹 \(Y=\{(y_i,\pi_i)\}\) 以及对应的多模态未来占据/流 \(Y_{occ}\),整体写成 \(Y, Y_{occ}=f(X,X_{occ}\,|\,\theta)\)。
整条 pipeline 分三大块:Context Encoding 把异构输入分别编码成向量个体特征 \(F_{vec}\) 和栅格联合场景特征 \(F_{occ}\);双分支迭代解码结构用三个串行解码器把粗轨迹、未来占据、精轨迹依次解出来,构成 coarse-to-fine;边缘占据分布预测额外预测单个交互体的短期边缘占据,给应急规划打基础。三者通过一组专用损失把占据分支的空间信息显式注入轨迹分支。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
A["输入<br/>自车/动态体/静态物/地图<br/>+ 当前占据网格 + 后向流"] --> B["Context Encoding<br/>向量特征 Fvec / 栅格场景特征 Focc"]
subgraph S1["1. 双分支迭代解码 (coarse-to-fine)"]
direction TB
C["粗轨迹解码 Dc → Qc<br/>多模态粗轨迹"] --> D["未来场景解码 Ds → Qs<br/>占据世界模型:条件于粗轨迹预测占据演化"]
D --> E["精轨迹解码 Df → Qf<br/>用未来场景精修轨迹"]
end
B --> C
E --> F["2. 跨分支专用损失<br/>占据干涉 + 占据引导(对齐/碰撞)"]
G["3. 边缘占据预测 + 应急规划<br/>短期边缘 / 长期联合"] --> F
B -.训练期.-> G
F --> H["输出<br/>精修多模态轨迹 + 未来占据/流"]
关键设计¶
1. 双分支迭代解码:粗轨迹→占据世界模型→精轨迹的 coarse-to-fine 闭环
这是为了解决「forward-only 规划无纠错能力 + 单一表征拿不全概率与精度」的痛点。框架保留向量特征 \(F_{vec}\) 和占据特征 \(F_{occ}\) 两路,用三个串行解码器迭代解码:
粗轨迹解码器 \(D_c\) 先在每个模态内做自注意力抽取多体社交交互,再交叉注意力融入静态障碍/地图 \(\{F_S,F_M\}\),最后 query \(F_{occ}\) 建立空间场景理解,得到多模态粗轨迹 query \(Q_c\)。未来场景解码器 \(D_s\) 是关键——它扮演 BEV 视角下的世界模型,以 \(F_{occ}\) 为 query、\(Q_c\) 为 key/value,把「条件于自车粗轨迹会发生什么场景演化」解码进 \(Q_s\)。精轨迹解码器 \(D_f\) 和 \(D_c\) 结构相同,只是第三次交叉注意力的 key/value 换成携带未来场景演化先验的 \(Q_s\),从而把 \(Q_c\) 精修成 future-informed 的 \(Q_f\)。这样规划不再是一口气盲解,而是「先预判后果、再据后果纠正」,是这套方法的骨架。自车和周边体的未来轨迹联合解码,以保证场景演化的一致性;预测头还把未来占据解耦成自车 \(O_e\) 和周边体 \(O_a\),方便后续损失分别监督。
2. 跨分支专用损失:把占据空间的交互/安全先验显式注入轨迹
光靠特征交叉注意力,占据与轨迹两个分支的预测未必一致,信息传递不充分。作者设计两类损失桥接。其一是占据干涉损失(occupancy interference loss):自车与他车的占据区域天然互斥,于是用预测占据落在对手 GT 占据区域内的平均值衡量空间干涉程度,\(L_{oe}=\mathrm{sum}(O_e^*\cdot O_a^{gt})/\mathrm{sum}(O_a^{gt})\)、\(L_{oa}\) 对称,\(L_{oi}=L_{oe}+L_{oa}\),训练时配 teacher-forcing 保稳定,本质是「让自车在占据空间里做规划」,提升交互感知。其二是占据引导损失(occupancy guidance loss),把自车按形状离散成 \(N_v\) 个圆心来近似车身,再在占据网格上做坐标投影+双线性插值:对齐项 \(L_{align}=\frac{1}{T_f}\sum_t\sum_i \max(0,\varepsilon-O_i^t)\) 罚那些落在自车低占据区的轨迹点,让轨迹待在自己的高占据区内;碰撞项 \(L_{collision}=\frac{1}{T_f}\sum_t\sum_i \max(0,\eta-d_i^t)\) 在轨迹点到他车高占据区的最小距离 \(d_i^t\) 小于安全裕度 \(\eta\) 时施罚,把轨迹推离他车高概率占据区。最终 \(L_{og}=w_1 L_{align}+w_2 L_{collision}\)。相比把占据当辅助任务,这套损失直接把 BEV 空间先验「翻译」成对轨迹的显式约束,保证两分支信息有效互传。
3. 边缘占据预测 + 应急规划:用占据概率建模行为不确定性,安全不牺牲效率
只建模联合占据无法刻画单个 agent 短期突发行为的不确定性。作者额外加一个边缘占据编码器:场景特征图 \(F_s\) 只对单个 agent 的向量特征做注意力(而非整张 \(F_{vec}\)),得到该 agent 的边缘行为特征 \(F_{m,i}\),不做模态分解直接预测其 \(T_s\)(\(T_s<T_f\))短期边缘占据 \(O_{m,i}\)。为省算力,用规则法剪枝(future bbox 与自车未来路径相交的才保留),且该模块仅训练期使用。在此之上做应急规划:传统 contingency planning 把轨迹拆成短期安全段+分叉长期段、要构建并剪枝场景树、组合复杂度爆炸还把意图退化成确定性近似;OccDriver 改在稠密概率占据空间里做——计算 \(L_{collision}\) 前,先对短期 \(t\le T_s\) 用逐元素 max 把边缘占据并入他车联合占据:
于是短期上自车会对 agent 行为不确定性引发的突发风险更敏感(取联合与边缘的较大值,偏保守避险),长期上仍按模态一致的联合占据规划、保持 scene-compliance 不过度保守。这样把场景树式应急规划重写成占据空间里的概率运算,既避开组合爆炸,又保住了轨迹级多模态。
损失函数 / 训练策略¶
总损失为 \(L = L_{traj} + L_{occ} + L_{oi} + L_{og}\),分别是轨迹规划损失、占据/流预测损失、占据干涉损失、占据引导损失,全部可微、端到端训练。除粗轨迹外,模型还从 \(Q_c\) 解一条粗轨迹 \(Y_c\) 提供合理 raw behavior 监督。
实验关键数据¶
主实验¶
nuPlan,1M 帧训练(2s 历史 / 8s 预测),闭环评测非反应式(NR-S)与反应式(R-S)分数,无后处理。
| benchmark | 指标 | OccDriver | 之前最好 | 说明 |
|---|---|---|---|---|
| Val14 | NR-S | 0.896 | 0.899 (DiffusionPlanner) / 0.890 (PLUTO) | 学习类 SOTA 级,反应式更优 |
| Val14 | R-S | 0.838 | 0.837 (BeTopNet) | 反应式闭环 SOTA |
| Val14 | Collisions | 0.971 | 0.966 (BeTopNet) | 安全性最佳 |
| Val14 | TTC | 0.938 | 0.933 (PLUTO) | 安全性最佳 |
| Test14-Hard | NR-S | 0.794 | 0.787 (PLUTO) | 困难场景 SOTA |
| Test14-Hard | R-S | 0.759 | 0.753 (PLUTO) | 比 BeTopNet +10.3% |
在 Test14-Hard 上,OccDriver 推理 23.03 ms,比 BeTopNet(70 ms)、DiffusionPlanner(40 ms) 都快,安全与 Progress 的权衡也更好——显式空间占据比隐式拓扑结构(BeTopNet)给出更细粒度、更直观的交互关系,避免过度保守。
消融实验¶
Val14 上逐组件累加(MP=边缘预测, CP=应急规划):
| 配置 | Collisions | NR-S | R-S | 说明 |
|---|---|---|---|---|
| 基础双分支 | 0.933 | 0.859 | 0.787 | 无 MP,已近 SOTA |
| + MP | 0.938 | 0.863 | 0.800 | 边缘占据建模个体行为/短期不确定性 |
| + \(L_{oi}\) | 0.943 | 0.864 | 0.807 | 占据干涉,提升碰撞与 Comfort |
| + \(L_{collision}\) | 0.960 | 0.879 | 0.825 | 碰撞惩罚,安全大涨 |
| + \(L_{align}\) | 0.960 | 0.885 | 0.830 | 对齐项提升 Progress |
| + CP(完整) | 0.971 | 0.896 | 0.838 | 应急规划,安全分数登顶 |
关键发现¶
- \(L_{collision}\) 贡献最大:加入后 Collisions 0.943→0.960、TTC 0.914→0.931,显式碰撞/接近惩罚是安全性的主力。
- 占据引导 horizon \(T\) 有甜区:\(L_{og}\) 中联合占据预测 horizon 从 2s 增到 6s 持续涨分(NR-S 在 6s 达 0.845),8s 反而退化——长期占据能捕捉场景动态,但 horizon 过长时未来占据不确定性增大反噬。
- 高占据阈值 \(\zeta\) 在 0.7 最佳:\(L_{collision}\) 里 \(\zeta=0.7\) 时 NR-S/R-S 最高(0.845/0.801)。
- 应急规划以微小 Progress 代价换安全:CP 让模型对相关 agent 潜在边缘行为偏谨慎,安全与驾驶分数登顶、Progress 略降。
亮点与洞察¶
- 把世界模型落到占据空间、且做成「条件于候选轨迹」的解码:未来场景解码器 \(D_s\) 不是泛泛预测未来,而是对每条粗轨迹预测它引发的占据演化,再蒸馏回轨迹精修——这是「先想后果再纠正」的 coarse-to-fine,比 forward-only 规划多了纠错回路,思路可迁移到任何「候选-评估-精修」式决策。
- 应急规划改写成占据空间的逐元素 max:传统 contingency 要建场景树、组合爆炸;这里用短期边缘占据与联合占据取 max 一步搞定,既保住多模态又避开剪枝复杂度,是很巧的工程化重写。
- 占据/轨迹双向一致性靠显式损失而非纯特征融合:对齐项把轨迹拉进自车高占据区、碰撞项推离他车高占据区,把 BEV 概率先验直接翻译成轨迹约束,可复用到其他「稠密预测引导稀疏决策」的任务。
局限与展望¶
- 边缘占据预测仅在训练期使用、依赖规则法剪枝(future bbox 与自车路径相交),剪枝的归纳偏置可能漏掉非相交但高风险的 agent。
- 占据引导 horizon 超过 6s 即退化,说明长程占据不确定性仍是瓶颈,方法对预测 horizon 较敏感。
- 评测集中在 nuPlan 闭环 benchmark,未见真实车端部署或更多样数据集的泛化验证;占据分支额外的栅格计算相比纯向量方法仍有开销(虽快于扩散/拓扑类)。
相关工作与启发¶
- vs 栅格化方法(RasterModel 等):它们只在时空网格上建联合动态、丢个体细节;OccDriver 保留栅格的概率联合建模,又用向量分支补回个体保真度。
- vs 向量化方法(PLUTO):纯向量方法 forward-only、过度简化未来交互;OccDriver 加占据分支显式预测未来场景作引导,Test14-Hard 上安全与 Progress 双双超越。
- vs 拓扑引导(BeTopNet):BeTopNet 用拓扑连接隐式建模交互、Progress 退化严重;OccDriver 用显式空间占据给出更细粒度交互关系,R-S +10.3% 且不过度保守。
- vs 扩散类(DiffusionPlanner):去噪范式推理慢(40 ms),OccDriver 23 ms 更适合实车部署,驾驶分数也更高。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把占据世界模型条件于候选轨迹、并在占据空间重写应急规划,组合新颖
- 实验充分度: ⭐⭐⭐⭐ nuPlan Val14 + Test14-Hard 双 benchmark + 逐组件消融 + horizon/阈值分析,较扎实
- 写作质量: ⭐⭐⭐⭐ 框架与损失叙述清晰,公式完整
- 价值: ⭐⭐⭐⭐ 闭环 SOTA 且推理快于扩散/拓扑类,对实车规划有参考价值