一、这篇论文在讲什么?
核心问题
自动驾驶规划面临一个经典的两难困境:多样性 vs 质量
- 太保守:只会"死记硬背"人类司机的走法,遇到新情况就傻眼
- 太发散:想象力太丰富,画出各种会撞车的方案
DiffusionDriveV2 的答案
用扩散模型生成多条候选路径(多样性),再用强化学习像严厉的教练一样筛选(质量)
形象的比喻:射箭比赛
- 以前的模型:只盯着靶心射一箭,射偏了就没招了
- DiffusionDriveV2:一次性朝靶心周围射出一把箭(多样性),然后剪掉那些射到观众席的箭(质量约束),最后选出最准的一支
二、核心方法:三招绝学
第一招:尺度自适应乘法噪声 —— 让"脑洞"更顺滑
以前的做法(加法噪声):在路径上乱加干扰,结果路径变得像毛刺一样,车开起来会剧烈抖动
V2 的创新:
$$\tau' = (1 + \epsilon_{mul})\tau$$生动理解:
- 近处(车头):抖动小,因为车头方向需要精确控制
- 远处(目标点):抖动大,因为远处的路径本身就有不确定性
这符合开车时"微调方向、远方模糊"的真实物理规律。
第二招:Intra-Anchor GRPO —— 窝里斗,选优胜者
核心逻辑:不比绝对高低,只比相对好坏
流程:
- 针对同一个意图模板(比如"左转"),生成 8 条略有不同的路径
- 裁判给这 8 条路径打分(是否撞车、是否开出马路、乘客稳不稳)
- 计算"相对优势":$A = \frac{\text{你的分数} - \text{平均分}}{\text{差异度}}$
- 表现比平均好的,优势值为正;比平均差的,为负
为什么要"组内"比?
“左转"和"直行"的分数没有可比性。左转天生就比直行难。如果放在一起比,模型可能会为了拿高分而只学直行(模式崩溃)。
临摹字帖的比喻:
想象你在练书法,桌上有 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?
- 解决模式崩溃:GRPO 通过组内归一化,强制保留每个意图的独特性
- 不需要 Critic 网络:GRPO 利用"组平均分"代替了评论员,更简单、更省内存
- 动态进化:在扩散模型复杂的生成空间里,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 特征根据自车运动进行"空间平移",让不同时间点的特征在同一个坐标系下重叠
九、规划逻辑的信息流
三重交互机制
- DCA(全景扫描):轨迹看 BEV 特征图,快速定位周围是大街还是小巷
- Agent-Wise Attention:轨迹与 50 个障碍物 Query 进行 1 对 1 谈话,进行厘米级碰撞检测
- 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 进入饱和区(梯度消失)
# 就像"音量调节旋钮",让模型保持"理智"
十三、个人思考与疑问
值得学习的亮点
- 锚点机制:把扩散模型的"混沌"约束在 64 个意图分区里,既保证多样性又控制计算量
- GRPO 的巧妙应用:借用 DeepSeek-R1 的技术,解决了模仿学习"不识好歹"的问题
- 乘法噪声:一个看似微小的数学改变,却让轨迹在物理平滑度上直接降维打击前代
待探索的问题
- GRPO 的组大小如何选择?8 条还是 16 条?对性能和效率的影响如何?
- Mode Selector 是否可以引入时序记忆,进一步稳定决策?
- 如何处理极端场景(如突然出现的障碍物)?
参考链接
- 论文原文:DiffusionDriveV2
- 相关工作:DiffusionPlanner, DiffusionDriveV1, DeepSeek-R1 (GRPO)
本笔记基于 AI 辅助的论文讨论整理而成,保留了讨论中的生动比喻和技术细节。