自动驾驶仿真扩散模型-VBD
直觉上感觉扩散模型确实挺适合的,生成图片和生成这种场景都是从有噪声的初始场景出发去噪声
理论基础——动力学
正向模拟
将智能体的动作转换为下一个状态
输入(动作): 加速度 、航向角变化率 ,时间步长 。
当前状态: 全局坐标 、航向角 、速度分量 。
输出: 下一个时间步的状态

反向推演
根据状态的变化计算出相应的动作。
输入(状态): 时刻和 时刻的智能体状态(主要是速度和航向角)。
输出(动作): 时刻的加速度 和航向角变化率 。

模型整体结构

由三个核心组件组成
| **组件 ** | 功能 | 输入 | 输出 |
|---|---|---|---|
| 场景编码器 () | 提取并编码场景上下文信息,生成简洁且富有信息的潜在表征。 | 1. 智能体的历史轨迹信息。 2. 地图折线的几何信息。 | 潜在表征 ,作为后续模块的条件 |
| 行为预测器 | 基于场景条件和预设目标,预测每个智能体的多模式( 种)未来轨迹分布。 | 1. 潜在表征 (来自场景编码器)。 2. 静态终点锚点(无限的轨迹目的地变为有限的锚点) 。 | 每个智能体独立的预测轨迹集合。 |
| 去噪器 () | 通过去噪过程,从带噪声的输入中生成所有智能体之间相互协调的联合规划。 | 1. 潜在表征 (来自场景编码器)。 2. 带噪声的轨迹 。 3. 噪声水平的位置编码。 | 所有智能体协调一致的未来集体轨迹。 |
场景编码器
果然到现在都是各种魔改transformer了,不会是原版那种简单的自注意力了
输入
| **输入张量 ** | 尺寸 | 初始编码方法 | 特征内容 | 编码输出 |
|---|---|---|---|---|
| 智能体历史 | 共享 GRU 网络 + 智能体类型嵌入 | 坐标、航向角 ()、速度 ()、边界框尺寸。 | ||
| 地图折线 | MLP + Max-Pooling (沿 轴) | 坐标、方向角、车道类型、停止点坐标。 | MLP → ,再池化聚合为 | |
| 交通灯 | MLP | 坐标、灯光状态 | MLP |
:智能体数量 (如 )
:历史时间步长
:地图折线数量
:折线上的航点数量
:交通灯数量
:特征大小
初始场景编码张量尺寸: 三种张量经过处理后,被拼接 形成初始张量,尺寸为 ,其中 是地图元素的总数。
地图折线这个池化聚合觉得很激进,一条线聚成了一个点了,大概就是最突出的、最极端的特征,比如急转弯的那个点
GRU学了一下,这一篇(36 封私信 / 80 条消息) 人人都能看懂的GRU - 知乎讲的不错,简单说就是个高效的处理时间序列的RNN,T_h的时间序列的轨迹间肯定是有关系的,所以用RNN聚合压缩,2014年的。
RNN:我不明白,为什么大家都在谈论Transformer,仿佛这语言处理对我们注定了凶多吉少。。。。那种勃勃生机、万物竞发的境界,犹在眼前。短短三年之后,这里竟至于一变而成为我们的葬身之地了么?
![]()
智能体类型嵌入我觉得和刚看Transformer的词嵌入差不多,都是转为能反映语义关系的向量。
针对设计
局部坐标系
在编码之前,所有元素的位置属性都被转换到它们的局部坐标系中。
智能体参考点是它们的最后记录状态。地图元素参考点是它们的第一个航点。
这样做可以使模型对场景的绝对位置不敏感,专注于相对关系和局部环境,提高模型的泛化能力。
边属性
对于每对场景元素 ,它们之间的相对位置被计算出来,并使用 MLP 编码成边属性 。
基于查询的注意力

修改的地方就是将边属性 同时加到 Key 和 Value 中,然后使用的是交叉注意力,q来自自身i,K,V来自邻域j。
这样模型可以显式地将两个元素之间的几何和空间关系融入到注意力权重计算和特征聚合中,允许模型对称地处理不同类型的元素之间的相互作用,例如车辆对交通灯的关注,或行人对车辆的避让,都通过 的加持得到更精确的建模。
整体结构
层数: 6 个 Post-norm 基于查询的 Transformer 层。
激活函数: GELU 激活函数。
注意力头: 每层 8 个注意力头。
维度 : 隐藏维度 。
最终输出尺寸: 场景编码张量保持初始形状 ,作为下游模块的潜在表征 。
去噪器

输入
带噪声的动作 : 尺寸为 ,其中 2 代表动作向量 。它是从地面真值中提取并加入噪声的。
噪声水平: 通过一个嵌入层编码为 的张量。
场景编码张量 : 尺寸为 。
处理流程
使用前向动力学模型 将 转换为带噪声的状态 。
使用 MLP 将 编码成尺寸为 的张量。
将这个 维度的张量与噪声水平嵌入和时间位置嵌入结合,形成送入解码器的初始轨迹嵌入。
自注意力
输入来自来自上一层的智能体轨迹特征。
跟上面三维有点对不上,应该是reshape了一下
使用因果关系掩码,确保当前时间步 只能看到过去信息,防作弊。负责处理智能体之间的相互作用和时序因果关系。
输出还是
交叉注意力
| 角色 | 输入 | 尺寸 |
|---|---|---|
| 查询 () | 来自自注意力层的输出(建模了联合关系的轨迹特征)。 | |
| 键 () | 场景编码张量 (来自 )。 | |
| 值 () | 同 Key。 |
K,V来自场景编码,Q来自自注意力输出,通过交叉注意力处理外在约束(场景和地图对轨迹的限制)
输出
Transformer 解码阶段后,得到的轨迹嵌入 被送入一个 MLP 进行最终解码。
最终输出: 清理后的动作张量 ,尺寸为 。
状态推导: 使用前向动力学模型 将这些预测的动作 转化为清理后的状态轨迹 (包括 )。
行为预测器
输入
Q
智能体的静态锚点,形状为 ,锚点包含 个典型的 坐标,它们是在 时刻从数据中通过 -means (这个倒玩过,聚类算法)算法提取的。
智能体特征,形状为,二者结合形成维度为 的查询张量
将 个目标模式的特征与 个智能体的基础特征结合起来。
K,V
由编码后的场景输入提供。
推理
四层交叉注意力Transformer层
添加一个 MLP 解码头来解码所有智能体可能采取的行动序列,产生张量 [A, Mo, Tf , 2],再使用前向动力学模型 转化为(x, y, ψ, v)。
另一个 MLP 层解码 Transformer 层之后的嵌入,以得出这些预测轨迹的边缘分数(概率),形状[A, Mo]。
突然感觉去噪器和行为预测器好像,他们二者的关系是相协同的
预测器提供一组目标( 个边际模式)。
去噪器生成一个联合规划。
通过一个成本函数 ,去噪器的输出(联合规划)被鼓励靠近预测器给出的高概率目标模式。
训练
总损失函数

去噪损失 和预测器损失
去噪器训练

获取真值动作: 从地面真值状态 中,使用逆动力学函数 提取动作轨迹 。
添加噪声: 根据扩散调度,将噪声 添加到真值动作 中,得到带噪声动作 。
去噪预测: 去噪器 预测去噪后的动作 。
状态滚展: 使用前向动力学函数 将 转换为预测状态 。
计算损失并更新: 计算 并更新去噪器参数。

行为预测器

轨迹匹配损失
惩罚预测轨迹与真实轨迹之间的距离误差
: 是智能体 在未来时间步的地面真值状态轨迹(即真实发生的轨迹)。
: 是模型预测的 条轨迹中与真实轨迹最接近的那一条(称为 模式)所对应的状态轨迹。
分类概率损失
确保模型为“最佳模式” 分配最高的概率。
m*的选择

如果终点有效 选择最接近地面真值终点 的静态锚点 对应的模式。
如果终点无效 ** 选择平均位移误差**最小的预测轨迹模式。
实现细节
1 Hz 的频率进行重新规划
模型控制场景中自动驾驶汽车附近的64个智能体,而其余智能体则遵循恒定速度策略。
仿真时域为8秒,需要8个重新规划步骤来生成一个场景。
从相同的初始状态生成总共32个场景。
