DiffusionDriveV2: Truncated Diffusion Model for End-to-End Autonomous Driving


一、这篇论文在讲什么?

核心问题

自动驾驶规划面临一个经典的两难困境:多样性 vs 质量

  • 太保守:只会"死记硬背"人类司机的走法,遇到新情况就傻眼
  • 太发散:想象力太丰富,画出各种会撞车的方案

DiffusionDriveV2 的答案

扩散模型生成多条候选路径(多样性),再用强化学习像严厉的教练一样筛选(质量)

形象的比喻:射箭比赛

  • 以前的模型:只盯着靶心射一箭,射偏了就没招了
  • DiffusionDriveV2:一次性朝靶心周围射出一把箭(多样性),然后剪掉那些射到观众席的箭(质量约束),最后选出最准的一支

二、核心方法:三招绝学

第一招:尺度自适应乘法噪声 —— 让"脑洞"更顺滑

以前的做法(加法噪声):在路径上乱加干扰,结果路径变得像毛刺一样,车开起来会剧烈抖动

V2 的创新: $$\tau’ = (1 + \epsilon_{mul})\tau$$

生动理解

  • 近处(车头):抖动小,因为车头方向需要精确控制
  • 远处(目标点):抖动大,因为远处的路径本身就有不确定性

这符合开车时"微调方向、远方模糊"的真实物理规律。

第二招:Intra-Anchor GRPO —— 窝里斗,选优胜者

核心逻辑:不比绝对高低,只比相对好坏

流程

  1. 针对同一个意图模板(比如"左转"),生成 8 条略有不同的路径
  2. 裁判给这 8 条路径打分(是否撞车、是否开出马路、乘客稳不稳)
  3. 计算"相对优势":$A = \frac{\text{你的分数} - \text{平均分}}{\text{差异度}}$
  4. 表现比平均好的,优势值为正;比平均差的,为负

为什么要"组内"比?

“左转"和"直行"的分数没有可比性。左转天生就比直行难。如果放在一起比,模型可能会为了拿高分而只学直行(模式崩溃)。

临摹字帖的比喻

想象你在练书法,桌上有 64 张不同的字帖(Anchors):一张是"一"字,一张是"之"字,一张是"永"字……

  • 生成过程:你拿一张"永"字的字帖,临摹了 8 遍。虽然每遍写得都有点细微差别(加了随机噪声),但因为你都是照着"永"字写的,这 8 张纸就被归为 “永字组”
  • 组内 GRPO:老师(Reward)过来看这 8 张"永"字,选出写得最漂亮的一张,给你奖励
  • 拒绝跨组比较:老师不会拿你写的"永"字去和隔壁桌写的"一"字比谁更漂亮,因为它们根本不是一个字,没法比

第三招:Inter-Anchor Truncated GRPO —— 守底线,撞车必罚

虽然"窝里斗"能选出最好的左转方案,但如果所有的左转方案都会撞上护栏怎么办?

这一招建立了全局底线:不管你是哪种意图,只要撞车,通通判死刑(给极低的负分)。


三、Mode Selector:最后拍板的那个人

Intra-Anchor GRPO 确保了每个意图都能产生高质量的路径,但车只能选一条路走。谁来拍板?

Mode Selector 就是那个"主裁判”,它的工作是:

1. 怎么选?—— 综合多维度打分

结合三类关键信息进行"面试":

  • 路径本身:弯曲程度如何?是否平滑?
  • 环境背景(BEV Features):通过交叉注意力,看看路附近有没有障碍物、马路牙子或红绿灯
  • 任务目标:导航让你左转,那左转组的路径天生得到更高的"意图分"

2. 技术实现

  • MLP 打分:经过特征融合后,通过 MLP 给每条路径打分
  • 粗选+精选(Coarse-to-fine):先快看一眼,淘汰明显不行的;剩下的再仔细对比

3. 训练标准

  • BCE Loss(对错分):告诉它哪条路最接近人类司机的真值
  • Margin-Rank Loss(排序分):不要求算出绝对好坏分,而是要求能排对顺序

如果没有这个 Mode Selector,光有 GRPO,车子可能会在"左转"和"直行"之间反复横跳,不知道该听谁的。


四、GRPO vs DPO:两种"教导方式"的对比

特性 DPO (直接偏好优化) GRPO (组相对策略优化)
数据形式 成对数据(A > B) 组数据(A, B, C, D…)
学习方式 离线学习 在线探索
核心逻辑 隐式奖励 显式奖励
比喻 看录像带学习 队内选拔赛

为什么论文选 GRPO 而不是 DPO?

  1. 解决模式崩溃:GRPO 通过组内归一化,强制保留每个意图的独特性
  2. 不需要 Critic 网络:GRPO 利用"组平均分"代替了评论员,更简单、更省内存
  3. 动态进化:在扩散模型复杂的生成空间里,GRPO 能让模型不断发现"原来这样走比刚才那样走更好"

五、Reward 函数:交规考试式的打分

GRPO 的 Reward 是人工定义的规则计算的,不需要神经网络:

具体规则

指标 含义 判定方式
NC (No Collision) 碰撞惩罚 如果撞到车/行人/护栏,给巨大负分
DAC (Drivable Area Compliance) 合规性 车轮是否压到马路牙子、是否逆行
EP (Ego Progress) 进度得分 鼓励往前走,走得越远且符合限速,得分越高
C (Comfort) 舒适度 路径平滑度、加速度和急转弯程度
TTC (Time To Collision) 时间到碰撞 离前车的距离和相对速度是否安全

为什么不用神经网络打分?

  • 客观标准明确:自动驾驶"撞没撞车"是物理事实,用规则算比用模型猜更准确、可靠
  • 计算速度快:规则计算只是几行物理公式,不需要运行庞大的神经网络
  • 避开"幻觉":AI 模型可能产生幻觉觉得撞车也挺好,但物理规则是铁律

六、技术演进:三代扩散模型的对比

特性 DiffusionPlanner DiffusionDrive V1 DiffusionDriveV2
起始状态 纯随机噪声(从 0 到 1 创造) 预定义锚点(从半成品加工) 锚点 + 尺度自适应噪声
去噪步数 多步(通常 10+ 步,慢) 极少步(1-2 步,快) 极少步(1-2 步,快)
多样性保证 扩散模型天然属性(不稳定) 64 个锚点强制分区(稳定) 锚点分区 + GRPO 保护意图
学习范式 模仿学习 (IL) 模仿学习 (IL) 模仿学习 + 强化学习 (RL)
存在痛点 算得慢、容易模式崩溃 容易产生会撞车的低质轨迹 系统复杂度高(训练难)

生动理解三代的区别

A. 关于"噪声"的艺术

  • DiffusionPlanner:在沙堆里找金子,范围太大,容易迷失
  • DiffusionDrive:给沙堆围了 64 个小栅栏,让你在栅栏里找,效率高了,但栅栏里可能混进了石头
  • DiffusionDriveV2:不仅有栅栏,还发明了"乘法噪声",近处抖动小,远处抖动大,符合开车物理规律

B. 关于"教导方式"的变革

  • 前两代:看人画画,只知道老师没往墙上撞,不知道为什么不撞
  • V2 时代:引入"警察罚款",如果你画到墙上,GRPO 教练会狠狠扣分

七、架构拓扑:从模糊到精确

DiffusionPlanner:模糊的一段式(Monolithic)

传感器数据 → 特征提取 → 扩散解码器

像一个"黑盒",缺乏中间变量,人类很难理解它为什么要这么开。

DiffusionDrive V1:清晰的二段式(Perception-then-Plan)

传感器 → BEV 特征图 + 目标检测 → 锚点扩散

有了明确的分工。先通过感知算法把世界变成"鸟瞰图",规划器再在这张图上"画画"。

DiffusionDriveV2:精密的"多级反馈"二段式

传感器 → 高精度 BEV → 组内并行扩散(GRPO) → 模式选择

在 V1 基础上增加了"选优级",形成了"感知 → 粗规划 → 精规划"的三级跳。


八、传感器融合:如何构建 BEV?

特性 DiffusionPlanner DiffusionDrive V1 DiffusionDriveV2
输入源 单视角或视角特征拼接 多相机环视(6 颗摄像头) 相机 + LiDAR(多模态对齐)
特征空间 图像空间 BEV 空间(LSS 方案) 时序对齐 BEV(ResNet-34)
融合方式 简单的特征拼接 空间投影 时空注意力融合

V2 的技术细节

  • 骨干网络:对齐的 ResNet-34,通过 LSS(Lift-Splat-Shoot)把 6 颗摄像头的图像"拍扁"到地面
  • 时序对齐:把过去 2 秒的 BEV 特征根据自车运动进行"空间平移",让不同时间点的特征在同一个坐标系下重叠

九、规划逻辑的信息流

三重交互机制

  1. DCA(全景扫描):轨迹看 BEV 特征图,快速定位周围是大街还是小巷
  2. Agent-Wise Attention:轨迹与 50 个障碍物 Query 进行 1 对 1 谈话,进行厘米级碰撞检测
  3. Map-Wise Attention:轨迹与车道线向量对齐,确保遵守交通规则

生动比喻

  • BEV 交互是让你"别撞墙"
  • Map 交互是让你"守交规"

十、前后帧一致性:如何拒绝"精神分裂"?

1. 时序特征融合

输入包含过去几帧(比如过去 2 秒)的图像或点云,通过 Temporal Attention 把过去的特征"存"在当前特征向量里。

比喻:你开车时,脑子里其实存着前 2 秒路口的样子,你看的是一部"连贯的电影"。

2. Anchors 作为"定海神针"

64 个锚点(直行、左转等模板)是固定不变的。每一帧都从相同的锚点出发,起步点不乱跳。

3. 截断扩散的功劳

推理时只走 2 步(甚至 1 步),步数越少,生成过程就越接近确定性逻辑。

4. GRPO 带来的"决断力"

通过组内对比,极大拉开了"好路径"和"坏路径"的分数差距,让决策变得非常"笃定"。


十一、实验结果

在自动驾驶界最有名的考场 NAVSIM 进行考试:

  • PDMS 分数:91.2,刷新世界纪录
  • 骨干网络:即使使用较小的 ResNet-34,表现也超过了拥有巨大骨干网络的模型

十二、关键技术实现:Multi-Head Attention

为什么要用多头?

单头注意力:像一把手电筒,盯着行人看,可能就没注意到红绿灯

多头注意力:像一个专家顾问团

  • 1号头(安全专家):盯着障碍物和距离
  • 2号头(导航专家):盯着车道线和路标
  • 3号头(舒适专家):盯着路面平整度和坡度

核心代码逻辑

# 多头拆分:把 [batch, seq_len, d_model] 变成 [batch, num_heads, seq_len, head_dim]
Q = Q.view(batch_size, -1, num_heads, head_dim).transpose(1, 2)

# 计算注意力分数
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)

# 为什么除以 sqrt(d_k)?
# 防止分数值过大,导致 Softmax 进入饱和区(梯度消失)
# 就像"音量调节旋钮",让模型保持"理智"

十三、个人思考与疑问

值得学习的亮点

  1. 锚点机制:把扩散模型的"混沌"约束在 64 个意图分区里,既保证多样性又控制计算量
  2. GRPO 的巧妙应用:借用 DeepSeek-R1 的技术,解决了模仿学习"不识好歹"的问题
  3. 乘法噪声:一个看似微小的数学改变,却让轨迹在物理平滑度上直接降维打击前代

待探索的问题

  1. GRPO 的组大小如何选择?8 条还是 16 条?对性能和效率的影响如何?
  2. Mode Selector 是否可以引入时序记忆,进一步稳定决策?
  3. 如何处理极端场景(如突然出现的障碍物)?

参考链接

  • 论文原文:DiffusionDriveV2
  • 相关工作:DiffusionPlanner, DiffusionDriveV1, DeepSeek-R1 (GRPO)

本笔记基于 AI 辅助的论文讨论整理而成,保留了讨论中的生动比喻和技术细节。