蛙跳扩散模型轨迹预测

在这里插入图片描述

扩散模型轨迹预测

参考论文《Leapfrog Diffusion Model for Stochastic Trajectory Prediction》
CVPR2024

1. 问题定义

目的是得到model g θ ( ⋅ ) g_{\theta}(\cdot) gθ(),参数 θ \theta θ来生成分布 P θ = g θ ( X , X N ) \mathcal{P}_{\theta}=g_{\theta}(\mathbf{X},\mathbb{X}_{\mathcal{N}}) Pθ=gθ(X,XN),基于分布 P θ \mathcal{P}_\theta Pθ来画 K K K个样本, Y ^ = { Y 1 ^ , Y 2 ^ , . . . , Y K ^ } \hat{\mathcal{\mathbf{Y}}}=\{\hat{\mathbf{Y_1}},\hat{\mathbf{Y_2}},...,\hat{\mathbf{Y_K}}\} Y^={ Y1^,Y2^,...,YK^},这样至少有一个样本是接近真实的未来轨迹。总体问题定义:
θ ∗ = min ⁡ θ min ⁡ Y ^ i ∈ Y ^ D ( Y ^ i , Y ) ,  s.t.  Y ^ ∼ P θ \theta^{*}=\min _{\theta} \min _{\widehat{\mathbf{Y}}_{i} \in \widehat{\mathcal{Y}}} D\left(\widehat{\mathbf{Y}}_{i}, \mathbf{Y}\right), \quad \text { s.t. } \widehat{\mathcal{Y}} \sim \mathcal{P}_{\theta} θ=minθminY iY D(Y i,Y), s.t. Y Pθ
X \mathbf{X} X X N \mathbb{X}_{\mathcal{N}} XN分别表示ego车辆的过去轨迹和neighboring车辆, Y \mathbf{Y} Y是ego车辆的未来轨迹。
通过一系列去噪步骤来学习轨迹分布,先执行前向diffusion的加噪到 未来轨迹的ground-truth上,然后,用条件去噪过程从过去轨迹的噪声中来恢复未来轨迹。
Diffusion 过程:

2. 方法论

在这里插入图片描述

2.1 前向扩散

Y 0 = Y \mathbf{Y}^{0}=\mathbf{Y} Y0=Y
初始化扩散轨迹,
Y γ = f diffuse  ( Y γ − 1 ) , γ = 1 , ⋯   , Γ \mathbf{Y}^{\gamma}=f_{\text {diffuse }}\left(\mathbf{Y}^{\gamma-1}\right), \gamma=1, \cdots, \Gamma Yγ=fdiffuse (Yγ1),γ=1,,Γ
使用前向 f d i f f u s e ( ⋅ ) f_{diffuse}(\cdot) fdiffuse() Y γ − 1 \mathbf{Y}^{\gamma-1} Yγ1添加连续噪声来获取扩散后的 Y γ \mathbf{Y}^{\gamma} Yγ,其中 Y γ \mathbf{Y}^{\gamma} Yγ是第 γ \gamma γ次diffusion步骤

2.2 逆过程

Y ^ k Γ ∼ i . i . d P ( Y ^ Γ ) = N ( Y ^ Γ ; 0 , I ) , sample  K  times  \widehat{\mathbf{Y}}_{k}^{\Gamma} \stackrel{i . i . d}{\sim} \mathcal{P}\left(\widehat{\mathbf{Y}}^{\Gamma}\right)=\mathcal{N}\left(\widehat{\mathbf{Y}}^{\Gamma} ; \mathbf{0}, \mathbf{I}\right) \text {, sample } K \text { times } Y kΓi.i.dP(Y Γ)=N(Y Γ;0,I), sample K times 
从正态分布中抽取 K K K个独立同分布的样本初始化去噪轨迹 Y k Γ ^ \hat{\mathbf{Y}^\Gamma_k} YkΓ^
Y ^ k γ = f denoise  ( Y ^ k γ + 1 , X , X N ) , γ = Γ − 1 , ⋯   , 0 \widehat{\mathbf{Y}}_{k}^{\gamma}=f_{\text {denoise }}\left(\widehat{\mathbf{Y}}_{k}^{\gamma+1}, \mathbf{X}, \mathbb{X}_{\mathcal{N}}\right), \gamma=\Gamma-1, \cdots, 0 Y kγ=fdenoise (Y kγ+1,X,XN),γ=Γ1,,0
迭代应用去噪操作 f d e n o i s e ( ⋅ ) f_{denoise}(\cdot) fdenoise()以过去轨迹 X , X N \mathbf{X},\mathbb{X}_\mathcal{N} X,XN为条件获取去噪轨迹。
Y k γ ^ \hat{\mathbf{Y}_k^\gamma} Ykγ^是第 γ \gamma γ次去噪轨迹第 k k k次采样,最终 K K K个预测轨迹 Y = { Y ^ 1 0 , Y ^ 2 0 , … , Y ^ K 0 } ^ \hat{\mathcal{Y}=\left\{\hat{\mathbf{Y}}_{1}^{0}, \widehat{\mathbf{Y}}_{2}^{0}, \ldots, \widehat{\mathbf{Y}}_{K}^{0}\right\}} Y={ Y^10,Y 20,,Y K0}^
Note:
前向扩散处理不会用于推理步骤,在训练期间, Y γ \mathbf{Y}^\gamma Yγ是第 γ \gamma γ Y k γ ^ \hat{\mathbf{Y}^\gamma_k}

### 使用扩散模型实现离线轨迹规划的方法 #### 方法概述 离线轨迹规划是指在一个预先收集的数据集上训练策略或价值函数,在测试阶段仅利用这些预训练好的组件来进行决策。对于基于扩散模型的离线轨迹规划,核心在于构建能够捕捉状态空间分布特性的生成模型。 Diffuser作为一种专门为学习轨迹优化而设计的扩散模型,通过引入噪声逐步破坏给定的状态序列直到其变得随机化,再反过来从纯噪音中重建原始数据的过程来完成这一目标[^1]。这种机制允许模型学会不同时间步之间的复杂关系,并有效地模拟可能的动作路径。 为了适应特定的任务需求,可以采用分类引导采样的方式调整生成过程中的条件约束,从而使得产生的轨迹更贴近期望的行为模式。例如,在机器人操作环境中,可以通过指定末端执行器的目标位置作为额外输入指导整个动作链的设计。 #### 应用案例分析 当面对高维连续控制问题时,如机械臂运动或是自动驾驶汽车导航,传统的基于模型的方法往往难以取得理想效果。相比之下,TAP(Trajectory Autoencoding Planner),它以VQ-VAE为基础框架并融合了变分自编码的思想,则展示了显著的优势。该方案不仅实现了高效的样本获取能力,而且能够在复杂的多模态环境下保持良好的泛化性能[^2]。 此外,随着研究进展,“探索未来智能的边界:基于扩散模型的强化学习综述”一文中提到的相关工作也进一步推动了此类技术的发展。通过对现有资源和技术路线图进行全面梳理,有助于识别当前领域内最具潜力的研究方向以及潜在的应用场景[^3]。 ```python import torch from diffusers import UNet2DModel class DiffusionPlanner: def __init__(self, model_path): self.model = UNet2DModel.from_pretrained(model_path) def plan_trajectory(self, start_state, end_goal, num_steps=100): trajectory = [] current_state = start_state for step in range(num_steps): noise_level = (num_steps - step) / num_steps with torch.no_grad(): predicted_noise = self.model(current_state.unsqueeze(0), timestep=noise_level).sample denoised_state = current_state - predicted_noise.squeeze() if step % 10 == 0 or step == num_steps - 1: trajectory.append(denoised_state.clone()) current_state = denoised_state + ((end_goal - denoised_state) * min(step / num_steps, 0.1)) return trajectory ``` 此代码片段展示了一个简单的基于UNet架构的扩散模型用于离线轨迹规划的例子。这里假设已经有一个经过良好训练的权重文件可供加载。`plan_trajectory` 函数接收起始状态 `start_state` 和结束目标 `end_goal` 参数,返回一系列中间过渡状态组成的列表表示完整的行动路线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moresweet猫甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值