自动驾驶轨迹规划:用扩散模型实现安全自适应决策
一句话总结
IRL-DAL 通过扩散模型作为安全监督者 + 逆强化学习对齐专家目标,实现了在复杂驾驶场景下 96% 成功率、每千步仅 0.05 次碰撞的安全轨迹规划。
为什么这个问题重要?
自动驾驶的核心难题
传统自动驾驶面临”安全性 vs 泛化性”的根本矛盾:
- 规则驱动(FSM):为每种场景手写规则
- 优点:可解释、初期稳定
- 致命缺陷:无法应对长尾场景(”左转让直行,但前方是闯红灯的救护车,该怎么办?”)
- 端到端学习:神经网络直接输出控制指令
- 优点:强泛化能力
- 致命缺陷:安全性无保障(”为什么在空旷路段突然急刹?”)
IRL-DAL 的核心创新:将扩散模型从生成任务(图像/文本)迁移到决策任务,通过三个关键设计打破这一矛盾:
- 逆强化学习(IRL):从专家驾驶数据中隐式学习”什么是好的驾驶行为”,而非依赖手工设计的奖励函数
- 扩散模型:通过迭代去噪生成多条候选轨迹,天然保证轨迹的平滑性和物理可行性
- 能量引导:在采样时注入安全约束(碰撞检测、车道边界),硬性过滤危险轨迹
应用场景
- 城市十字路口:多车交汇、行人突然横穿、非机动车乱窜
- 高速公路:高速避障(前车爆胎散落物)、紧急变道
- 窄路会车:精确控制车辆轨迹,毫米级避让
背景知识
为什么选扩散模型做轨迹规划?
传统规划方法(如 RRT、A*)生成单一轨迹,而现实驾驶场景存在多种可行方案(左避让 vs 右避让)。扩散模型的优势在于:
- 多模态生成:一次采样产生多条候选轨迹
- 平滑性保证:去噪过程天然过滤高频噪声(急转弯、突变)
- 条件控制:可注入当前车速、目标车道等条件
数学本质:扩散模型通过以下过程生成轨迹 $\tau = (s_0, s_1, \ldots, s_T)$:
前向过程(训练时):逐步添加高斯噪声 \(q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t I)\)
反向过程(推理时):从纯噪声 $x_T \sim \mathcal{N}(0, I)$ 逐步去噪 \(p_\theta(x_{t-1} | x_t, c) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t, c), \Sigma_\theta(x_t, t))\)
其中 $c$ 是条件信息(当前车速、周围车辆位置等)。
物理直觉:类似画家作画——先打草稿(粗糙轨迹),再逐步细化(去除不可行部分)。每一步去噪都在优化轨迹的局部一致性。
逆强化学习(IRL)的必要性
标准强化学习(RL)需要手工设计奖励函数 $R(s, a)$:
\[R_{\text{manual}} = w_1 \cdot \text{speed} + w_2 \cdot \text{lane\_keeping} - w_3 \cdot \text{jerk} - w_4 \cdot \text{collision}\]问题:权重 $(w_1, w_2, w_3, w_4)$ 极难调优。例如:
- $w_4$ 过小 → 频繁碰撞
- $w_4$ 过大 → 车辆过于保守,停在路中间不动
IRL 的思路:从专家驾驶数据 $\mathcal{D}_{\text{expert}} = \{(s, a)\}$ 中反推奖励函数 $R^$,使得专家策略 $\pi_{\text{expert}}$ 在 $R^$ 下最优。
论文采用 GAIL(Generative Adversarial Imitation Learning) 框架:
- 训练判别器 $D_\phi$,区分专家轨迹和策略轨迹
- 用判别器输出作为奖励信号: \(r_{\text{IRL}}(s, a) = \log D_\phi(s, a) - \log(1 - D_\phi(s, a))\)
优势:绕过手工设计,直接对齐人类驾驶偏好(如”宁可减速也不急转弯”)。
核心方法
Pipeline 概览
[专家FSM] → [BC初始化] → [GAIL判别器训练] → [PPO+IRL微调] → [扩散模型+能量引导] → 安全轨迹
↓ ↓ ↓ ↓ ↓
状态机规则 模仿学习 隐式奖励学习 策略优化 多模态安全采样
第一阶段:行为克隆(BC)冷启动
直接最小化策略输出与专家动作的差异:
\[\mathcal{L}_{\text{BC}} = \mathbb{E}_{(s, a) \sim \mathcal{D}_{\text{expert}}} \left[ \| \pi_\theta(s) - a \|^2 \right]\]作用:为后续 RL 提供安全基线,避免随机探索阶段的频繁碰撞。
第二阶段:GAIL 判别器与 PPO 协同训练
核心思想:判别器充当”动态奖励函数”,策略网络通过 PPO 最大化 IRL 奖励。
判别器架构(简化版):
class IRLDiscriminator(nn.Module):
def __init__(self, obs_dim=128, act_dim=2):
super().__init__()
self.net = nn.Sequential(
nn.Linear(obs_dim + act_dim, 256),
nn.ReLU(),
nn.Linear(256, 1),
nn.Sigmoid() # 输出 [0,1],1 表示"像专家"
)
def forward(self, obs, action):
return self.net(torch.cat([obs, action], dim=-1))
训练流程:
- 策略 $\pi_\theta$ 与环境交互,收集轨迹 $\mathcal{D}_\pi$
- 更新判别器:最大化 $\log D(s_e, a_e) + \log(1 - D(s_\pi, a_\pi))$
- 计算混合奖励:$r_{\text{total}} = \alpha \cdot r_{\text{env}} + (1-\alpha) \cdot r_{\text{IRL}}$
- 用 PPO 更新策略,最大化 $\mathbb{E}[r_{\text{total}}]$
关键技术细节:论文使用 Gradient Penalty 防止判别器过拟合,确保奖励信号始终有效。
第三阶段:条件扩散模型生成安全轨迹
网络结构:基于 Temporal U-Net,在时间维度上编码轨迹序列。
训练目标:学习噪声预测函数 $\epsilon_\theta(x_t, t, c)$,其中:
- $x_t$:加噪轨迹
- $t$:时间步(0 到 50)
- $c$:条件(当前状态 + BEV 特征)
能量引导采样(论文核心创新):在每步去噪时注入安全约束
\[x_{t-1} = \mu_\theta(x_t, t, c) - \nabla_{x_t} E(x_t) \cdot \sigma^2\]其中能量函数 $E(x)$ 定义为:
\[E(x) = \lambda_1 \sum_{i} \mathbb{1}[\text{collide}(x, o_i)] + \lambda_2 \sum_{t} \mathbb{1}[\text{out\_of\_lane}(x_t)]\]物理意义:在去噪过程中,轨迹会被”推开”障碍物和车道边界,类似物理中的斥力场。
第四阶段:自适应视觉注意力(LAM)
传统方法对所有区域均等处理,IRL-DAL 根据驾驶状态动态调整:
\[\alpha_{ij} = \text{softmax}\left( \frac{h_i^\top W h_j}{\sqrt{d}} \cdot w(\text{speed}, \text{hazard}) \right)\]调制函数 $w(\cdot)$ 的设计:
- 高速场景($v > 20$ m/s):增大远距离区域权重(提前刹车)
- 危险场景(前车距离 < 10m):聚焦危险源周围
实验验证:消融实验显示,LAM 使碰撞率从 0.12 降至 0.05。
实验
数据集:Webots 仿真环境
- 场景数量:12 种(城市路口、高速公路、T 型路口等)
- 专家数据:10,000 条轨迹(来自调优的 FSM 控制器)
- 评估指标:
- 成功率(到达目标且无碰撞)
- 碰撞率(每千步碰撞次数)
- 平均速度(效率指标)
定量对比
| 方法 | 成功率 | 碰撞率 (每千步) | 速度 (m/s) | 推理时间 (ms) |
|---|---|---|---|---|
| IRL-DAL | 96% | 0.05 | 12.5 | 45 |
| Pure PPO | 78% | 0.32 | 13.1 | 20 |
| BC (仅模仿学习) | 82% | 0.25 | 10.8 | 18 |
| FSM | 85% | 0.18 | 10.2 | 5 |
| Diffusion only (无 IRL) | 92% | 0.09 | 11.8 | 60 |
关键发现:
- IRL 的价值:对比 BC(82%)和 IRL-DAL(96%),IRL 使成功率提升 14%,验证了隐式奖励学习的有效性
- 扩散模型的安全性:对比 PPO(碰撞率 0.32)和 IRL-DAL(0.05),扩散模型 + 能量引导使碰撞率降低 84%
- 效率权衡:相比 FSM(5ms),扩散模型推理慢 9 倍,但仍满足实时性要求(22 FPS)
消融实验:每个模块的贡献
| 配置 | 成功率 | 碰撞率 | 说明 |
|---|---|---|---|
| 完整 IRL-DAL | 96% | 0.05 | 基准 |
| 去掉 IRL(仅 BC + 扩散) | 92% | 0.09 | 缺乏专家目标对齐 |
| 去掉扩散(仅 IRL + PPO) | 88% | 0.18 | 缺乏多模态安全采样 |
| 去掉 LAM(固定注意力) | 93% | 0.12 | 无法适应动态场景 |
| 去掉能量引导 | 94% | 0.15 | 安全约束不足 |
洞见:IRL 和扩散模型是互补的——IRL 提升”做正确的事”的能力(成功率),扩散模型保证”安全地做事”(低碰撞率)。
失败案例分析
案例 1:罕见分布外场景
- 场景:逆行车辆突然出现
- 表现:IRL-DAL 生成的所有候选轨迹都被能量函数拒绝,车辆停在原地
- 根因:训练数据中无逆行样本,扩散模型无法泛化
- 改进方向:引入对抗样本生成,主动学习罕见场景
案例 2:计算资源受限
- 场景:树莓派 4B(4GB 内存)部署
- 表现:推理时间从 45ms 激增至 300ms,无法实时运行
- 根因:扩散模型需要 50 步去噪,内存占用 >2GB
- 改进方向:知识蒸馏到轻量模型(见工程实践部分)
案例 3:多车博弈场景
- 场景:窄路会车,双方都需要避让
- 表现:两车同时向同一侧避让,仍发生碰撞
- 根因:当前方法不建模其他车辆的意图
- 改进方向:引入多智能体博弈(如 Nash Q-Learning)
工程实践
实时性优化:DDIM 加速采样
问题:标准扩散模型需要 50 步去噪(~60ms),超过实时要求(<50ms)。
解决方案:DDIM(Denoising Diffusion Implicit Models)通过确定性采样,将步数压缩至 10 步:
class DDIMSampler:
def __init__(self, num_steps=10):
self.steps = num_steps
# 选择时间步子集:[0, 5, 10, ..., 50]
self.timesteps = torch.linspace(0, 49, num_steps).long()
@torch.no_grad()
def sample(self, condition):
x = torch.randn(1, 4, 20) # 初始化纯噪声
for i in reversed(range(self.steps)):
t = self.timesteps[i]
# 预测 x_0(完全去噪后的轨迹)
noise = self.model(x, t, condition)
x_0 = (x - noise * sqrt(1 - alpha_t)) / sqrt(alpha_t)
if i > 0:
t_prev = self.timesteps[i - 1]
# 跳步公式(省略推导)
x = sqrt(alpha_prev) * x_0 + sqrt(1 - alpha_prev) * noise
return x
效果:推理时间从 60ms 降至 15ms,成功率仅下降 1%(96% → 95%)。
内存优化:知识蒸馏
目标:将 50M 参数的扩散模型压缩至 10M,适配边缘设备。
方法:训练轻量学生模型 $f_S$ 模仿教师模型 $f_T$ 的输出:
\[\mathcal{L}_{\text{distill}} = \mathbb{E}_c \left[ \| f_S(c) - f_T(c) \|^2 \right]\]实验结果:
- 内存占用:2.1GB → 450MB
- 推理时间:45ms → 12ms
- 成功率:96% → 91%
适用场景:自动泊车(低速、高容错)等非安全关键任务。
数据采集的坑
坑 1:专家数据质量不一致
- 现象:FSM 专家在罕见场景(如前方突然出现静止障碍物)表现糟糕
- 后果:模型学习到”碰撞也是可接受的”
- 解决:过滤低质量片段(碰撞、急刹、偏离车道 >1m)
坑 2:训练/测试分布偏移
- 现象:训练场景为白天晴天,测试时遇到夜间大雨
- 后果:视觉编码器提取的 BEV 特征失效,成功率暴跌至 62%
- 解决:数据增强(随机天气/光照变换)+ 领域自适应
什么时候用/不用?
| 适用场景 | 不适用场景 |
|---|---|
| ✅ 结构化道路(有地图、车道线) | ❌ 完全越野(无先验地图) |
| ✅ 有专家驾驶数据(人类或FSM) | ❌ 零样本新任务(如火星探测) |
| ✅ 可接受 50ms 延迟(常规驾驶) | ❌ 需要 <10ms 反应(赛车) |
| ✅ 需要可解释性(审计/认证) | ❌ 纯黑盒即可 |
| ✅ 多模态决策(左避让 vs 右避让) | ❌ 单一最优解(如最短路径) |
与其他方法对比
| 方法 | 核心思想 | 优势 | 劣势 |
|---|---|---|---|
| MPC | 在线求解优化问题 | 理论最优 | 需要准确动力学模型,计算贵 |
| 端到端(E2E) | 像素直接到控制 | 无需手工特征 | 黑盒,难以保证安全 |
| 分层规划 | 路径规划 + 轨迹跟踪 | 模块化,易调试 | 子模块不一致会累积误差 |
| IRL-DAL | 扩散模型 + IRL | 多模态 + 安全 | 训练复杂,推理慢 |
启示:当安全性和泛化性同等重要时,IRL-DAL 是合理选择;若追求极致性能,应考虑 MPC 或混合方法。
我的观点
核心贡献的理论意义
IRL-DAL 的最大价值在于将扩散模型的归纳偏置引入决策问题:
- 平滑性先验:去噪过程强制轨迹在时间上连续,天然满足动力学约束(不会出现瞬移)
- 多模态探索:避免传统 RL 的模式坍缩(只学会一种避障策略)
- 安全性可注入:能量引导提供了显式的安全接口,无需修改奖励函数
这为后续研究打开了方向:是否可以用扩散模型统一规划与控制?
尚未解决的关键问题
1. 分布外泛化
- 现状:当遇到训练集未覆盖的场景(如道路施工、动物穿越),扩散模型会生成不合理轨迹
- 可能方案:引入因果推理,显式建模”车辆-环境”交互的因果图
2. 多智能体博弈
- 现状:其他车辆被视为静态障碍物,无法预测其意图
- 挑战:需要建模他人的策略(二阶优化),计算复杂度爆炸
- 可能方案:Level-K 推理 + 博弈论均衡
3. 长时规划 vs 短时反应
- 现状:扩散模型擅长生成 2 秒内的轨迹,更长时域(如 1 分钟)会导致误差累积
- 可能方案:分层扩散模型(宏观路径 + 微观轨迹)
离实际应用还有多远?
技术成熟度:65%
主要瓶颈:
- 极端天气:暴雨导致视觉编码器失效(成功率从 96% 降至 70%)
- 硬件成本:需要 GPU(NVIDIA Orin,$1000+),难以量产
- 法规认证:扩散模型的随机性如何通过 ISO 26262 功能安全认证?
预计时间线:
- 2026:封闭园区(矿山、港口)小规模部署
- 2028:城市特定区域(如代客泊车)商业化
- 2030+:开放道路 L4 级应用
值得关注的后续研究
- Diffusion Transformer:用 Transformer 替换 U-Net,建模更长时域依赖
- Online IRL:从部署后的真实数据中持续更新奖励函数
- 可解释扩散:提取中间去噪步骤的语义(”第 10 步在避让左侧车辆”)
论文链接:https://arxiv.org/abs/2601.23266v1
代码仓库:https://github.com/irl-dal/irl-dal(官方实现)
延伸阅读:
- Diffusion Policy: Visuomotor Policy Learning via Action Diffusion (RSS 2023)
- Guided Diffusion for Inverse Problems (ICLR 2022)
- Maximum Entropy IRL (AAAI 2008) - IRL 经典论文
Comments