【机器人+模仿学习】Diffusion Policy: 通过行动扩散的视觉运动策略学习Visuomotor Policy Learning via Action Diffusion

Diffusion Policy 项目主页 https://diffusion-policy.cs.columbia.edu/

集成框架  集成矿建https://github.com/huggingface/lerobot

【LeRobot】中文字幕|Diffusion Policy: LeRobot Research Presentation 2 by Cheng Chi

一、 简介——扩散策略

策略的输出是一系列使用扩散模型生成的动作.
 关键词模仿学习(lmitation)、视觉运动策略(visuomotor policy)、操作(visuomotor)

本文介绍了扩散策略,这是一种通过将机器人的视觉运动策略表示为条件去噪扩散过程来生成机器人行为(generating robot behavior)的新方法。我们对来自 4 个不同机器人作基准的 12 个不同任务的 Diffusion Policy 进行了基准测试,发现它始终优于现有的最先进的机器人学习方法,平均提高了 46.9%。Diffusion Policy 学习动作分布评分函数的梯度,并在推理过程中通过一系列随机 Langevin 动力学步骤针对该梯度场进行迭代优化。我们发现,当用于机器人策略时,扩散公式产生了强大的优势,包括优雅地处理多模态动作分布,适用于高维动作空间,并表现出令人印象深刻的训练稳定性。为了充分释放扩散模型在物理机器人上视觉运动策略学习的潜力,本文提出了一系列关键的技术贡献,包括

  1. 合并后退水平控制、 (incorporation of receding horizon control)
  2. 视觉调节 (visual conditioning)
  3. 时间序列扩散转换器。 (time-series diffusion transformer)

 训练完成后的去噪过程,还可以从失败中恢复以及对扰动和遮挡的鲁棒性

二、方法概述

扩散策略概述 a) 一般公式。在时间步 t,该策略将观测数据 Ot 的最新 To 步作为输入并输出动作 At 的 Ta 步。b) 在基于 CNN 的扩散策略中,FiLM(特征线性调制) 对观察特征 Ot 的条件应用于每个卷积层,通道。从高斯噪声中提取的AK t开始,减去噪声预测网络εθ的输出,重复K次得到A0t,去噪动作序列。c) 在基于 Transformer 扩散策略,观察 Ot 的嵌入被传递到每个变压器解码器块的多头交叉注意力层。每个动作嵌入都被限制为仅使用说明的注意力掩码关注自身和先前的动作嵌入(因果注意力)。

### 如何复现论文 'Diffusion Policy: Visuomotor Policy Learning via Action Diffusion' #### 方法概述 该方法的核心在于通过动作扩散模型(Action Diffusion Model)学习视觉运动策略。具体来说,它结合了显式策略(Explicit Policy)和隐式策略(Implicit Policy),并通过扩散过程优化动作序列的学习效果[^1]。 #### 数据准备 为了复现此方法,需准备好高质量的动作数据集以及对应的环境模拟器。这些数据通常来源于专家演示或真实世界的机器人交互记录。Wang等人提到的数据预处理步骤对于提升模型性能至关重要[^3]。 #### 模型架构设计 模型主要由两部分组成:一是基于扩散机制的动作生成模块;二是用于评估生成动作质量的价值网络或者奖励函数。其中,动作生成模块可以采用条件变分自编码器或其他适合的时间序列建模技术实现[^2]。 以下是简化版的Python伪代码示例: ```python import torch from diffusers import UNet2DModel class DiffusionPolicy(torch.nn.Module): def __init__(self, input_dim, output_dim, hidden_size=128): super(DiffusionPolicy, self).__init__() # 定义UNet结构作为核心组件 self.unet = UNet2DModel( sample_size=input_dim, in_channels=hidden_size, out_channels=output_dim, layers_per_block=2, block_out_channels=(hidden_size, hidden_size*2), down_block_types=("DownBlock2D", "AttnDownBlock2D"), up_block_types=("AttnUpBlock2D", "UpBlock2D") ) def forward(self, x, timesteps=None): return self.unet(x, timesteps).sample def train_model(model, dataloader, optimizer, loss_fn, epochs=10): model.train() for epoch in range(epochs): total_loss = 0 for batch_data in dataloader: inputs, targets = batch_data noise = torch.randn_like(inputs) noisy_inputs = add_noise_to_signal(inputs, noise, timestep_schedule()) predicted_noise = model(noisy_inputs, timesteps=timestep_schedule()) loss = loss_fn(predicted_noise, noise) optimizer.zero_grad() loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(dataloader) print(f"Epoch {epoch+1}/{epochs}, Loss: {avg_loss:.4f}") ``` 上述代码片段展示了如何构建一个简单的扩散政策框架,并提供了训练循环的基础逻辑。 #### 实验设置与超参数调整 实验过程中需要注意的关键点包括但不限于时间步数的选择、噪声水平控制以及批量大小等因素的影响分析。此外,在实际应用中可能还需要针对特定任务微调一些高级配置选项。 #### 结果验证与改进方向探索 完成初步复现之后,可以通过对比不同条件下得到的结果来进一步完善算法表现。例如尝试引入更多的先验知识指导扩散过程,或是研究更高效的采样方案降低计算成本等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

曾小蛙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值