Diffusion Policy 模型微调
概述
Diffusion Policy 是一种基于扩散模型的视觉运动策略学习方法,将扩散模型的生成能力应用于机器人控制领域。该方法通过学习动作分布的扩散过程,能够生成多样化且高质量的机器人动作序列,在复杂的机器人操作任务中表现出色。
核心特点
- 扩散生成:使用扩散模型生成连续的动作序列
 - 多模态动作:能够处理具有多种解决方案的任务
 - 高质量输 出:生成平滑、自然的机器人动作
 - 鲁棒性强:对噪声和扰动具有良好的鲁棒性
 - 表达能力强:能够学习复杂的动作分布
 
先决条件
系统要求
- 操作系统:Linux(推荐 Ubuntu 20.04+)或 macOS
 - Python 版本:3.8+
 - GPU:NVIDIA GPU(推荐 RTX 3080 或更高),至少 10GB 显存
 - 内存:至少 32GB RAM
 - 存储空间:至少 50GB 可用空间
 
环境准备
1. 安装 LeRobot
# 克隆 LeRobot 仓库
git clone https://github.com/huggingface/lerobot.git
cd lerobot
# 创建虚拟环境
conda create -n lerobot python=3.10
conda activate lerobot
# 安装依赖
pip install -e .
2. 安装 Diffusion Policy 特定依赖
# 安装扩散模型相关依赖
pip install diffusers
pip install accelerate
pip install transformers
pip install einops
pip install wandb
# 安装数值计算库
pip install scipy
pip install scikit-learn
# 登录 Weights & Biases(可选)
wandb login
Diffusion Policy 架构
核心组件
- 视觉编码器:提取图像特征
 - 状态编码器:处理机器人状态信息
 - 条件编码器:融合视觉和状态信息
 - 扩散网络:学习动作分布的扩散过程
 - 噪声调度器:控制扩散过程的噪声水平
 
扩散过程
- 前向过程:逐步向动作序列添加噪声
 - 反向过程:从噪声中逐步恢复动作序列
 - 条件生成:基于观察条件生成动作
 - 采样策略:使用 DDPM 或 DDIM 采样
 
数据准备
LeRobot 格式数据
Diffusion Policy 需要使用 LeRobot 格式的数据集:
your_dataset/
├── data/
│   ├── chunk-001/
│   │   ├── observation.images.cam_high.png
│   │   ├── observation.images.cam_low.png
│   │   ├── observation.state.npy
│   │   ├── action.npy
│   │   └── ...
│   └── chunk-002/
│       └── ...
├── meta.json
├── stats.safetensors
└── videos/
    ├── episode_000000.mp4
    └── ...
数据质量要求
- 最少 100 个 episode 用于基本训练
 - 推荐 500+ episode 以获得最佳效果
 - 动作序列应该平滑连续
 - 包含多样化的任务场景
 - 高质量的视觉观察数据
 
微调训练
基本训练命令
# 设置环境变量
export HF_USER="your-huggingface-username"
export CUDA_VISIBLE_DEVICES=0
# 启动 Diffusion Policy 训练
lerobot-train \
  --policy.type diffusion \
  --policy.pretrained_path lerobot/diffusion_policy \
  --dataset.repo_id ${HF_USER}/your_dataset \
  --batch_size 64 \
  --steps 100000 \
  --output_dir outputs/train/diffusion_policy_finetuned \
  --job_name diffusion_policy_finetuning \
  --policy.device cuda \
  --policy.horizon 16 \
  --policy.n_action_steps 8 \
  --policy.n_obs_steps 2 \
  --policy.num_inference_steps 100 \
  --policy.optimizer_lr 1e-4 \
  --policy.optimizer_weight_decay 1e-6 \
  --policy.push_to_hub false \
  --save_checkpoint true \
  --save_freq 10000 \
  --wandb.enable true
高级训练配置
多步预测配置
# 针对长序列预测的配置
lerobot-train \
  --policy.type diffusion \
  --policy.pretrained_path lerobot/diffusion_policy \
  --dataset.repo_id ${HF_USER}/your_dataset \
  --batch_size 32 \
  --steps 150000 \
  --output_dir outputs/train/diffusion_policy_long_horizon \
  --job_name diffusion_policy_long_horizon \
  --policy.device cuda \
  --policy.horizon 32 \
  --policy.n_action_steps 16 \
  --policy.n_obs_steps 4 \
  --policy.num_inference_steps 100 \
  --policy.beta_schedule squaredcos_cap_v2 \
  --policy.clip_sample true \
  --policy.prediction_type epsilon \
  --policy.optimizer_lr 1e-4 \
  --policy.scheduler_name cosine \
  --policy.scheduler_warmup_steps 5000 \
  --policy.push_to_hub false \
  --save_checkpoint true \
  --wandb.enable true
内存优化配置
# 针对显存较小的 GPU
lerobot-train \
  --policy.type diffusion \
  --policy.pretrained_path lerobot/diffusion_policy \
  --dataset.repo_id ${HF_USER}/your_dataset \
  --batch_size 16 \
  --steps 200000 \
  --output_dir outputs/train/diffusion_policy_memory_opt \
  --job_name diffusion_policy_memory_optimized \
  --policy.device cuda \
  --policy.horizon 16 \
  --policy.n_action_steps 8 \
  --policy.num_inference_steps 50 \
  --policy.optimizer_lr 5e-5 \
  --policy.use_amp true \
  --num_workers 2 \
  --policy.push_to_hub false \
  --save_checkpoint true \
  --wandb.enable true