📄 论文信息

  • 标题DiffusionDrive: Real-Time End-to-End Multimodal Trajectory Planning for Autonomous Driving(实时端到端多模态轨迹规划)
  • 团队:华中科技大学 × 理想汽车(Li Auto)
  • 关键词:扩散模型、条件去噪、多模态轨迹、端到端规划、轨迹初始化
  • 一句话总结:把轨迹规划重新定义成一个条件去噪过程,从噪声出发逐步"雕刻"出多条合理轨迹,用轨迹初始化先验少步采样让扩散真正跑在车端,是生成式端到端驾驶的代表作。

🤔 要解决什么问题?为什么轨迹规划需要多模态?

绝大多数端到端规划器都采用确定性回归:网络直接输出一条未来轨迹(一串 waypoints)。这条路线简洁高效,却有一个被长期忽视的软肋——轨迹分布本质上是多模态的

考虑这样一个场景:前方有静止障碍物,左车道空、右车道也空。 此时合理选择至少有两种——向左变道、向右变道,甚至减速跟停也是合法选项。如果用 L2 回归去拟合人类轨迹,网络会把所有训练样本"平均"起来,结果往往是输出一条压着障碍物正中间走的轨迹。这就是经典的 mode averaging(模态平均) 问题——平均化的轨迹比任何一个合理选择都更危险。

确定性规划的三类典型困境:

困境表现后果
mode averaging多条合理轨迹被回归平均输出落在"无人区",甚至压障碍物
单点估计只给一条轨迹,无备选遇到执行偏差没有回旋余地
难以表达意图不敢变道还是准备变道?行为预测、交互建模无从展开

工业界传统方案(如 EM Planner)其实早就意识到这点——它们显式生成多条候选,再用代价函数挑最优。但端到端回归头丢了这种能力。多候选打分路线(先输出 $K$ 条锚定轨迹再打分)虽然恢复了多选,可候选集是固定锚点,覆盖范围有限,难以生成场景相关的多样化轨迹。

DiffusionDrive 的核心判断:与其用回归硬挤出一个"平均答案",不如直接建模轨迹的整个分布,让模型学会"在这种情况下,有哪些合理走法"。这正是生成式模型(扩散、Flow Matching)的强项。


💡 核心思想:把轨迹规划变成"条件去噪"

扩散模型做轨迹生成的直觉

扩散模型在图像生成里大放异彩,它的本质是两个过程:

  • 前向过程:把一条干净轨迹 $x_0$ 逐步加高斯噪声,直到变成纯噪声 $x_T \sim \mathcal{N}(0, I)$
  • 反向过程:训练一个网络 $\epsilon_\theta$,学会从噪声一步步去噪,还原出合理轨迹

把这个范式搬到轨迹规划上,直觉非常优雅:从一团随机噪声出发,像雕刻一样一点点把噪声去掉,最后"显形"出一条平滑合理的驾驶轨迹。 关键在于,由于去噪是一个随机过程,采样多次会得到不同的合理轨迹——多模态因此天然成立。

前向加噪可以写成闭式:

$$q(x_t \mid x_0) = \mathcal{N}\left(x_t;\ \sqrt{\bar{\alpha}_t}, x_0,\ (1-\bar{\alpha}_t) I\right)$$

反向去噪则训练网络预测每一步加入的噪声:

$$\mathcal{L}{\text{diff}} = \mathbb{E}{x_0,, t,, \epsilon}\left[\big|, \epsilon - \epsilon_\theta(x_t, t, \mathbf{c}),\big|^2\right]$$

条件扩散:以场景上下文为"指挥棒"

裸扩散只能生成"看起来像轨迹"的东西,但规划要的是在当前场景下合理的轨迹。因此 DiffusionDrive 采用条件扩散:在去噪网络里注入场景条件 $\mathbf{c}$。

条件 $\mathbf{c}$ 通常包含:

  • 自车状态:位姿、速度、加速度、历史轨迹
  • 周围智能体:从他车检测/跟踪得到的动态目标特征
  • 在线地图:车道线、可行驶区域、道路边界等矢量要素
  • 导航意图:全局路由给的"该往哪走"的提示

注入方式一般是通过 cross-attention(交叉注意力)MLP 拼接,让去噪网络在"雕刻"轨迹的每一步都能"看到"当前场景——这就把一个无条件的"画轨迹"任务,变成了一个听从场景指挥的条件生成任务。


🏗️ 模型架构:稀疏感知 + 条件扩散规划头

DiffusionDrive 的整体数据流可以概括为"稀疏感知理解场景,扩散头生成轨迹":

多相机图像稀疏感知编码器(检测智能体 + 在线建图)➜ 场景条件特征 $\mathbf{c}$条件扩散规划头(含噪声轨迹 $x_t$ + 时间步 $t$)➜ 多模态轨迹分布

稀疏感知骨干

它沿用了一条全稀疏的感知路线:不构造密集 BEV 栅格,而是用一组 query 直接检出周围智能体和矢量地图元素。这种设计算力开销小、特征紧凑,非常适合作为扩散头的条件源——把动辄上百万像素的密集特征压缩成几百维的结构化表示。

关键创新:轨迹初始化(Trajectory Initialization)

这是 DiffusionDrive 最精彩的一笔,也是它能实时运行的命门。

问题:标准扩散从纯高斯噪声 $\mathcal{N}(0, I)$ 起步。但真实驾驶轨迹是平滑、有界、强结构化的(几十米范围内、曲率受限、速度连续),和高斯噪声的分布差距极大。弥合这个差距需要很多步去噪(几十到上百步),对车端 10Hz+ 的实时性是灾难。

DiffusionDrive 的解法:不要从纯噪声起步,而是从一个结构化的轨迹先验起步。具体做法是:

  1. 在训练集上把人类轨迹聚类成一组锚定原型轨迹(anchor trajectories / 基底轨迹)
  2. 推理时先从锚定集合里采样一个"粗略合理的起点"
  3. 再用少量去噪步在这个起点上做残差式精修

这本质上是把扩散从"噪声 ➜ 数据"压缩成了"粗轨迹 ➜ 精轨迹",起点已经落在数据流形附近,自然只需极少步数就能收敛。形象地说:标准扩散是从一团泥巴捏车,而 DiffusionDrive 是从一个"半成品的车型"开始精修——后者当然快得多。

设计起点分布所需步数多样性来源
标准扩散纯高斯噪声几十~上百步噪声随机性
DiffusionDrive锚定轨迹先验2~少数步锚点选择 + 噪声

多步多迭代采样

为了让输出既多样又安全,DiffusionDrive 采用多步、多迭代的采样策略:并行采样多条候选轨迹,再结合下游的代价评估(碰撞、舒适、合规)挑选最优的一条下发控制。这其实和传统规划"生成候选 ➜ 打分 ➜ 选优"的范式在精神上是一致的,只是候选生成方式从规则采样换成了学习到的扩散分布


🆚 Flow Matching vs DDPM:轨迹生成用哪个?

扩散(DDPM)并非连续分布生成的唯一选择,Flow Matching 近两年正快速崛起(详见本博客《Flow Matching 入门详解》)。两者都能建模多模态轨迹分布,但哲学不同。

维度DDPM(扩散)Flow Matching(流匹配)
前向路径弯曲(非线性噪声调度)直线(线性插值 $x_t=(1-t)x_0+t x_1$)
底层方程SDE(含随机项)ODE(确定性)
采样步数较多(需技巧加速)几步即可
训练目标预测噪声 $\epsilon$预测速度场 $v$(目标 $x_1-x_0$)
训练稳定性对噪声调度敏感通常更平滑
理论关系Flow Matching 的一个特例更一般的框架

Flow Matching 的训练目标是让网络学会一个"恒定速度"$u = x_1 - x_0$:

$$\mathcal{L}{\text{FM}} = \mathbb{E}\left[\big|, v\theta(x_t, t, \mathbf{c}) - (x_1 - x_0),\big|^2\right]$$

由于路径接近直线,推理时用少量欧拉步积分就能从噪声"流"到数据,天生适合实时

DiffusionDrive 为什么选 DDPM 而不是 Flow Matching? 一个合理推测是:扩散生态更成熟、可调技巧多(如一致性蒸馏、DDIM),且论文的轨迹初始化先把"起点拉到数据附近",恰恰抵消了扩散"路径弯、步数多"的主要劣势——一旦起点不再远,扩散和 Flow Matching 的速度差距就被抹平了。这也是我认为后续工作完全可能用 Flow Matching 替换 DDPM 头的原因:轨迹初始化这一招对两者都成立


🧪 训练策略与 loss 设计

数据来源

DiffusionDrive 的训练数据主要来自大规模人类驾驶数据集

  • nuPlan / OpenScene:当前最主流的闭环/开环规划 benchmark,提供海量带轨迹标注的真实驾驶片段
  • 训练时以人类驾驶轨迹作为 $x_0$(扩散的"干净样本"),场景上下文作为条件 $\mathbf{c}$

loss 组合

训练目标是多 loss 联合,既有生成式损失,也有安全约束:

loss作用说明
扩散去噪 loss $\mathcal{L}_{\text{diff}}$主目标让网络学会在场景条件下逐步去噪
碰撞 loss安全兜底惩罚与占用/障碍物重叠的轨迹
边界 loss合规约束轨迹不越出可行驶区域
舒适 loss平顺限制过大的加速度/急动度(jerk)

一个重要的工程经验是:不能只靠扩散 loss。纯生成目标只关心"分布像不像人类轨迹",但驾驶是安全攸关任务,必须把碰撞、合规等硬约束作为辅助 loss 显式注入,才能避免模型偶尔采样出"分布内但不安全"的轨迹。这和 UniAD 把碰撞 loss 写进规划头是同一个道理——越是生成式、概率性的系统,越需要确定性安全网兜着


⚡ 推理加速:让扩散真正跑上车

扩散模型上车最大的拦路虎是延迟。DiffusionDrive 用了几个组合拳把它压到实时:

  1. 轨迹初始化(见上文):把起点从纯噪声拉到数据附近,采样步数从几十步骤降到 2 步量级,这是最关键的提速。
  2. 缓存矩阵(Cached Matrix):去噪过程中,场景条件 $\mathbf{c}$ 是不变的,只有噪声轨迹 $x_t$ 和时间步 $t$ 在变。因此可以把"场景与轨迹交互"的部分预先算好并缓存,避免每个去噪步都重算注意力,大幅省算力。
  3. 少步采样:配合 DDIM 等加速采样器,进一步压缩去噪步数。

一致性模型:潜在的进一步加速

除了上述工程技巧,学术界还有一类一致性模型(Consistency Model)思路:把多步去噪蒸馏成一步映射,即"噪声 ➜ 轨迹"一跃而成。这类方法在图像生成里已验证可行,迁移到轨迹规划上,有望把扩散头压到接近单次回归的延迟。DiffusionDrive 的轨迹初始化其实已经隐含了一步生成的影子——当起点足够好时,一两步去噪等价于一个"残差精修",和一致性蒸馏的精神相通。这指明了后续工作的一个清晰方向。


⚔️ 与传统优化规划(EM Planner)的对比

传统工业界规划(如百度 Apollo 的 EM Planner)走的是优化路线:在 Frenet 坐标下生成大量候选,用代价函数(碰撞、舒适、合规、效率)打分,再用动态规划 + 二次规划求解最优。DiffusionDrive 走的是学习式生成路线。两者本质不同:

维度EM Planner(优化)DiffusionDrive(生成)
候选来源规则采样(固定模板)学习到的轨迹分布
多样性受模板覆盖限制天然多模态、场景自适应
代价函数人工设计、显式可调隐式编码在训练数据里
可解释/可调(每项代价可审计)弱(黑盒分布)
数据依赖低(靠规则)(靠人类驾驶数据)
长尾泛化受规则覆盖度限制受数据覆盖度限制
实时性强(QP 求解快)需加速技巧才能达标

一个值得玩味的观察:DiffusionDrive 的"采样多条 ➜ 打分选优“其实和 EM Planner 的”生成候选 ➜ 代价函数选优“在流程上惊人地相似——差别只在于候选是用规则生成还是用学习到的分布生成。这暗示两条路线并非对立,而是可以融合:用扩散头生成更聪明的候选,再用可解释的代价函数做最终裁决,既拿到生成式的多样性,又保留优化的可审计性。


📊 在 NAVSIM / nuPlan 上的性能

DiffusionDrive 主要在 NAVSIM 上评测。NAVSIM 采用 PDMS(Predictive Driver Model Score) 作为核心指标,它由多个子分(如碰撞率、可驾驶区域合规、舒适度、方向正确性等)加权而成,比单纯的 L2 误差更贴近"开得好不好”。

主要结论(定性,具体数值请参照原论文表格):

  • PDMS 领先:发布时在端到端规划器中处于第一梯队,显著优于确定性回归基线,尤其在需要"做选择"的变道/绕行场景上优势明显
  • 多模态优势:在多候选场景下,扩散头能给出更分散、更贴合场景的候选轨迹,mode averaging 问题得到缓解
  • 实时可达:借助轨迹初始化和缓存矩阵,延迟被压到可上车量级,打破了"扩散太慢不能上车"的刻板印象
  • 消融验证:去掉轨迹初始化后采样步数必须大幅增加才能维持质量,反向证明该设计的有效性

nuPlan 闭环/开环评测上,该方法同样展现出竞争力,验证了生成式范式不只在小数据集上奏效。


⚠️ 局限性与未来方向

DiffusionDrive 并非银弹,它也暴露了生成式规划的几条固有软肋:

  • 延迟仍高于单次回归:哪怕加速到 2 步,扩散头仍比直接回归多几次前向,对极高频控制是负担
  • 硬约束难保证:扩散是概率约束,无法像优化那样 100% 保证不碰撞、不越界,需依赖辅助 loss 和下游安全校验
  • 错误模态风险:多模态采样偶尔会产生"分布内但不合理"的轨迹,需要可靠的打分/筛选机制兜底
  • 数据依赖重:生成质量受人类驾驶数据覆盖度限制,长尾场景泛化能力存疑
  • 可解释性不足:黑盒分布难以审计,在事故定责、安全认证上仍是障碍

未来方向我看好几条:用 Flow Matching 替换 DDPM 头进一步提速;用一致性蒸馏做到一步生成;与**强化学习(如 Flow-GRPO)**结合,把"模仿出来的分布"对齐到安全舒适的奖励信号;以及最务实的——扩散候选 + 优化裁决的混合范式。


📝 个人思考

读完 DiffusionDrive,最打动我的是它对"轨迹规划到底该建模什么“这个问题的重新发问。长久以来,端到端社区默认"输出一条轨迹"是天经地义的,于是所有人都在 L2 误差上卷。但 DiffusionDrive 把一个被忽视的事实摆上台面:驾驶本质是一个多解问题,同一个场景下合理走法不止一条,强行让网络吐一个"平均答案"反而是错的。把规划建模成分布而非点估计,这个视角的转变,比任何具体的去噪技巧都更深刻——它让我们意识到,确定性只是多模态分布退化后的一种近似,而真实驾驶从来不是单选。

第二点启发在工程现实主义。扩散模型上车最大的骂名就是"慢”,而 DiffusionDrive 用轨迹初始化这一招巧妙化解:既然噪声到数据的距离太远,那就别从噪声起步,从一个"粗略合理"的锚点起步做残差精修。这个思路本质上是"用先验换算力"——你对外部世界的先验越强(聚类出的锚点、场景结构),生成所需的开销就越小。我认为这是个可迁移的通用哲学:在实时性攸关的落地场景里,纯生成式未必最优,生成式 + 强先验才是甜点。这也解释了为什么它和 EM Planner 的"生成候选+打分"流程殊途同归——先验和优化的结合,无论用什么实现,都是工程上的稳赢选择。

最后一点是对生成式规划与强化学习结合的期待。DiffusionDrive 走的是模仿学习路线,它的分布上限就是人类司机的水平。但要真正超越人类、做到"比人更安全更舒适",必须引入奖励信号做偏好对齐——而这正是 Flow-GRPO 这类工作的用武之地:用扩散/Flow 头做多模态轨迹采样,用 GRPO 做组内相对优势优化,把"学人类"升级为"学最优策略"。我倾向于认为,生成式规划头 + 强化学习对齐会是端到端驾驶的下一个范式跃迁,而 DiffusionDrive 把生成式这扇门推开,功不可没。


📖 这是论文精读系列的第 8 篇。扩散模型正让端到端规划从"单选"走向"多选",你怎么看生成式规划的未来?欢迎留言。