直觉上感觉扩散模型确实挺适合的,生成图片和生成这种场景都是从有噪声的初始场景出发去噪声

理论基础——动力学

正向模拟

将智能体的动作转换为下一个状态

输入(动作): 加速度 v˙\dot{v}、航向角变化率 ψ˙\dot{\psi},时间步长 Δt\Delta t

当前状态: 全局坐标 (x,y)(x, y)、航向角 ψ\psi、速度分量 vx,vyv_x, v_y

输出: 下一个时间步的状态 (x(t+1),y(t+1),ψ(t+1),v(t+1),vx(t+1),vy(t+1))(x(t+1), y(t+1), \psi(t+1), v(t+1), v_x(t+1), v_y(t+1))

image-20251124191022584

反向推演

根据状态的变化计算出相应的动作

输入(状态): t+1t+1 时刻和 tt 时刻的智能体状态(主要是速度和航向角)。

输出(动作): tt 时刻的加速度 v˙(t)\dot{v}(t) 和航向角变化率 ψ˙(t)\dot{\psi}(t)

image-20251124191147559

模型整体结构

image-20251124191405282

由三个核心组件组成

**组件 ** 功能 输入 输出
场景编码器 (Eϕ\mathcal{E}_{\phi}) 提取并编码场景上下文信息,生成简洁且富有信息的潜在表征 1. 智能体的历史轨迹信息。 2. 地图折线的几何信息。 潜在表征 c^\hat{c} ,作为后续模块的条件
行为预测器 基于场景条件和预设目标,预测每个智能体多模式MM 种)未来轨迹分布。 1. 潜在表征 c^\hat{c} (来自场景编码器)。 2. 静态终点锚点(无限的轨迹目的地变为有限的锚点) 。 每个智能体独立的预测轨迹集合。
去噪器 (Dθ\mathcal{D}_{\theta}) 通过去噪过程,从带噪声的输入中生成所有智能体之间相互协调的联合规划 1. 潜在表征 c^\hat{c} (来自场景编码器)。 2. 带噪声的轨迹 u~,x~\tilde{u}, \tilde{x}。 3. 噪声水平的位置编码。 所有智能体协调一致的未来集体轨迹。

场景编码器

果然到现在都是各种魔改transformer了,不会是原版那种简单的自注意力了

输入

**输入张量 ** 尺寸 初始编码方法 特征内容 编码输出
智能体历史 [A,Th,Da][A, T_h, D_a] 共享 GRU 网络 + 智能体类型嵌入 x,yx, y 坐标、航向角 (ψ\psi)、速度 (vx,vyv_x, v_y)、边界框尺寸。 [A,D][A, D]
地图折线 [Ml,Mp,Dp][Ml, M_p, D_p] MLP + Max-Pooling (沿 MpM_p 轴) x,yx, y 坐标、方向角、车道类型、停止点坐标。 MLP → [Ml,Mp,D][Ml, M_p, D],再池化聚合为[Ml,D][Ml, D]
交通灯 [Mt,Dt][Mt, D_t] MLP x,yx, y 坐标、灯光状态 MLP [Mt,D][Mt, D]

AA:智能体数量 (如 A=64A=64)

ThT_h:历史时间步长

MlMl:地图折线数量

MpM_p:折线上的航点数量

MtMt:交通灯数量

DD:特征大小

初始场景编码张量尺寸: 三种张量经过处理后,被拼接 形成初始张量,尺寸为 [A+M,D][A + M, D],其中 M=Ml+MtM = Ml + Mt 是地图元素的总数。

地图折线这个池化聚合觉得很激进,一条线聚成了一个点了,大概就是最突出的、最极端的特征,比如急转弯的那个点

GRU学了一下,这一篇(36 封私信 / 80 条消息) 人人都能看懂的GRU - 知乎讲的不错,简单说就是个高效的处理时间序列的RNN,T_h的时间序列的轨迹间肯定是有关系的,所以用RNN聚合压缩,2014年的。

RNN:我不明白,为什么大家都在谈论Transformer,仿佛这语言处理对我们注定了凶多吉少。。。。那种勃勃生机、万物竞发的境界,犹在眼前。短短三年之后,这里竟至于一变而成为我们的葬身之地了么?

image-20251124195519814

智能体类型嵌入我觉得和刚看Transformer的词嵌入差不多,都是转为能反映语义关系的向量。

针对设计

局部坐标系

在编码之前,所有元素的位置属性都被转换到它们的局部坐标系中。

智能体参考点是它们的最后记录状态。地图元素参考点是它们的第一个航点。

这样做可以使模型对场景的绝对位置不敏感,专注于相对关系局部环境,提高模型的泛化能力

边属性 eije^{ij}

对于每对场景元素 (i,j)(i, j),它们之间的相对位置被计算出来,并使用 MLP 编码成边属性 eije^{ij}

基于查询的注意力

image-20251124201548252

修改的地方就是将边属性 eij\mathbf{e}^{ij} 同时加到 Key 和 Value 中,然后使用的是交叉注意力,q来自自身i,K,V来自邻域j。

这样模型可以显式地将两个元素之间的几何和空间关系融入到注意力权重计算和特征聚合中,允许模型对称地处理不同类型的元素之间的相互作用,例如车辆对交通灯的关注,或行人对车辆的避让,都通过 eij\mathbf{e}^{ij} 的加持得到更精确的建模。

整体结构

层数: 6 个 Post-norm 基于查询的 Transformer 层。

激活函数: GELU 激活函数。

注意力头: 每层 8 个注意力头。

维度 : 隐藏维度 D=256D=256

最终输出尺寸: 场景编码张量保持初始形状 [A+M,D][A+M, D],作为下游模块的潜在表征 c^\hat{c}

去噪器

image-20251124204327199

输入

带噪声的动作 u~\tilde{\mathbf{u}} 尺寸为 [A,Tf,2][A, T_f, 2],其中 2 代表动作向量 [v˙,ψ˙]T[\dot{v}, \dot{\psi}]^T。它是从地面真值中提取并加入噪声的。

噪声水平: 通过一个嵌入层编码为 [1,1,D][1, 1, D] 的张量。

场景编码张量 : 尺寸为 [A+M,D][A+M, D]

处理流程

使用前向动力学模型 ffu~\tilde{\mathbf{u}} 转换为带噪声的状态 x~\tilde{\mathbf{x}}

使用 MLPx~\tilde{\mathbf{x}} 编码成尺寸为 [A,Tf,D][A, T_f, D] 的张量。

将这个 [A,Tf,D][A, T_f, D] 维度的张量与噪声水平嵌入和时间位置嵌入结合,形成送入解码器的初始轨迹嵌入。

自注意力

输入来自来自上一层智能体轨迹特征[ATf,D][A \cdot T_f, D]

跟上面三维有点对不上,应该是reshape了一下

使用因果关系掩码,确保当前时间步 tt 只能看到过去信息,防作弊。负责处理智能体之间的相互作用和时序因果关系。

输出还是[ATf,D][A \cdot T_f, D]

交叉注意力

角色 输入 尺寸
查询 (Q\mathbf{Q}) 来自自注意力层的输出(建模了联合关系的轨迹特征)。 [ATf,D][A \cdot T_f, D]
键 (K\mathbf{K}) 场景编码张量 c^\hat{\mathbf{c}} (来自 Eϕ\mathcal{E}_{\phi})。 [A+M,D][A+M, D]
值 (V\mathbf{V}) 同 Key。 [A+M,D][A+M, D]

K,V来自场景编码,Q来自自注意力输出,通过交叉注意力处理外在约束(场景和地图对轨迹的限制)

输出

Transformer 解码阶段后,得到的轨迹嵌入 被送入一个 MLP 进行最终解码。

最终输出: 清理后的动作张量 u^\hat{\mathbf{u}},尺寸为 [A,Tf,2][A, T_f, 2]

状态推导: 使用前向动力学模型 ff 将这些预测的动作 u^\hat{\mathbf{u}} 转化为清理后的状态轨迹 [A,T,3][A, T, 3](包括 x,y,ψx, y, \psi)。

行为预测器

输入

Q

智能体的静态锚点,形状为 [A,Mo,2][A, Mo, 2]锚点包含 Mo=64Mo = 64典型的 x,yx, y 坐标,它们是在 T=80T = 80 时刻从数据中通过 KK-means (这个倒玩过,聚类算法)算法提取的。

智能体特征,形状为[A,1,256][A, 1, 256],二者结合形成维度为 [A,Mo,256][A, M_o, 256] 的查询张量

MoM_o 个目标模式的特征与 AA 个智能体的基础特征结合起来。

K,V

由编码后的场景输入提供。

推理

四层交叉注意力Transformer层

添加一个 MLP 解码头来解码所有智能体可能采取的行动序列,产生张量 [A, Mo, Tf , 2],再使用前向动力学模型 转化为[A,Mo,Tf,4][A, Mo, Tf , 4](x, y, ψ, v)。

另一个 MLP 层解码 Transformer 层之后的嵌入,以得出这些预测轨迹的边缘分数(概率),形状[A, Mo]。

突然感觉去噪器和行为预测器好像,他们二者的关系是相协同的

预测器提供一组目标MoM_o 个边际模式)。

去噪器生成一个联合规划

通过一个成本函数 J\mathcal{J},去噪器的输出(联合规划)被鼓励靠近预测器给出的高概率目标模式。

image-20251125081915661

训练

总损失函数

image-20251125083438091

去噪损失 LDθ\mathcal{L}_{\mathcal{D}_{\theta}} 和预测器损失 LPψ\mathcal{L}_{\mathcal{P}_{\psi}}

去噪器训练

image-20251125083520085

获取真值动作: 从地面真值状态 xx 中,使用逆动力学函数 f1f^{-1} 提取动作轨迹 uu

添加噪声: 根据扩散调度,将噪声 ϵ\epsilon 添加到真值动作 uu 中,得到带噪声动作 u~k\tilde{u}_k

去噪预测: 去噪器 Dθ\mathcal{D}_{\theta} 预测去噪后的动作 u^\hat{u}

状态滚展: 使用前向动力学函数 ffu^\hat{u} 转换为预测状态 x^\hat{x}

计算损失并更新: 计算 LDθ=SL1(x^x)\mathcal{L}_{\mathcal{D}_{\theta}}=\mathcal{SL}_{1}(\hat{x}-x) 并更新去噪器参数。

image-20251125083622648

行为预测器

image-20251125083812668

轨迹匹配损失

SL1(x^(u^a,m)xa)\mathcal{SL}_{1}(\hat{x}(\hat{u}^{a,m^{*}})-x^{a})

惩罚预测轨迹与真实轨迹之间的距离误差

xax^a 是智能体 aa 在未来时间步的地面真值状态轨迹(即真实发生的轨迹)。

x^(u^a,m)\hat{x}(\hat{u}^{a,m}) 是模型预测的 MoM_o 条轨迹中与真实轨迹最接近的那一条(称为 mm^* 模式)所对应的状态轨迹。

分类概率损失

βCE(m,ω^a)\beta CE(m^{*},\hat{\omega}^{a})

确保模型为“最佳模式” mm^* 分配最高的概率。

m*的选择

image-20251125083903039

如果终点有效 选择最接近地面真值终点 xTx_T静态锚点 aciac^i 对应的模式。

如果终点无效 ** 选择平均位移误差**最小的预测轨迹模式。

实现细节

1 Hz 的频率进行重新规划

模型控制场景中自动驾驶汽车附近的64个智能体,而其余智能体则遵循恒定速度策略。

仿真时域为8秒,需要8个重新规划步骤来生成一个场景。

从相同的初始状态生成总共32个场景。

image-20251125082948241