Views
No views yet
config.json 即可,且因 DDPM 太慢常撞 wall_cap,DDIM 提速后橙子率可能更高)。
A LeRobot Diffusion Policy (267M) trained from scratch on LeIsaac SO-101 PickOrange. This ckpt = step-18000 ≈ 4 epoch (best), DDPM 100-step (as evaluated); optional DDIM-32 hot-swap for realtime (below — no retrain; DDPM is slow and often hits wall_cap, so DDIM may raise the orange rate).
Pick up the orange and place it on the plate — SO-101 单臂依次夹起 3 颗橙子放盘子。
Single-arm SO-101 picks 3 oranges sequentially and places each on a plate.LightwheelAI/leisaac-pick-orange — 60 episode 遥操示范。config.json 改 noise_scheduler_type: DDPM → DDIM + num_inference_steps: null → 32,不重训。inference latency 393 ms → 147 ms / chunk,slowdown 2.96x → 1.1x 实时跑得动。
Edit config.json: noise_scheduler_type: DDPM → DDIM + num_inference_steps: null → 32 — no retraining. Inference latency drops 393 → 147 ms/chunk, slowdown 2.96x → 1.1x, real-time on RTX 4090.[0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1]。本 ckpt(4 ep)能零星放第 1 颗、放不全;>15 ep 过拟合 ckpt = 0/60。
Strict 20-round (leaderboard protocol): E(🍊)/ep = 8.3% (5/60), P(1)=25%, P(3)=0%, avg 182s. This 4-epoch ckpt occasionally places the 1st orange; the >15-epoch overfit ckpt scored 0/60.n_obs_steps=2 → lerobot async server 的 predict_action_chunk 必须 populate_queues(否则 stack 空 deque、server 报 'observation.images'、臂不动假 0)。修复在我们的 lerobot-v040 fork 一行 patch;用官方 pip install lerobot(v0.5.x 未打)serve 本 ckpt 会臂不动。
DP n_obs_steps=2 needs the populate_queues patch in predict_action_chunk (else empty-deque stack → server 'observation.images' error → frozen arm / fake 0). Patched in our lerobot fork; the stock pip lerobot will NOT serve this ckpt correctly.| 项 / Item | 值 / Value |
|---|---|
| Dataset | LightwheelAI/leisaac-pick-orange (60 ep, dual-cam 480×640 RGB + 6 DOF state, 30 Hz) |
| Policy | diffusion (LeRobot 实现 / LeRobot impl.) |
| Vision encoder | ResNet18(from scratch / no ImageNet pretrain) |
| Action head | UNet 1D denoiser |
n_action_steps (输出 / output chunk) | 8 |
| Noise scheduler (训练 / training) | DDPM, 100 steps |
| Noise scheduler (推理 / inference) | DDIM, 32 steps(hot-swapped post-training) |
| Steps | 100,000 |
| Optimizer | AdamW |
| Hardware | RTX 4090 (24 GB) |
| Recipe credit | LeRobot diffusion baseline,Diffusion Policy paper (Chi et al. 2023) |
scripts/training/diffusion_policy/train.sh。
Training entrypoint in our fork: scripts/training/diffusion_policy/train.sh.LeIsaac-SO101-PickOrange-v0,episode_length_s=120,step_hz=60(DP 训练时 sim rate),dual-cam 观测,policy_action_horizon=16。
Test setup: Isaac Sim 5.1, dual-cam observation, step_hz=60 matching training, policy_action_horizon=16.| 配置 / Config | 推理延迟 | 观察到的结果分布 | 备注 |
|---|---|---|---|
| DDPM 100-step (无 swap) | 393 ms/chunk, 2.96x slowdown | ⚠️ 多次 timeout | 实时性吃力,运动严重滞后 |
| DDIM 32-step (本 ckpt 默认) | 147 ms/chunk, 1.1x slowdown | 0/3 / 1/3 / 2/3 / 3/3 全谱出现 | 部分轮能完整放完 3 颗 ✅ |
eval_rounds=10 及以上多 round 平均才能定量。单 sample 误差大,不要用单 round 推论。
Rigorous comparison requires eval_rounds=10+. Single-round inferences are misleading.config.json 中的关键字段(本 repo 已设置):
Key fields in config.json (already configured in this repo):1{
2 "noise_scheduler_type": "DDIM",
3 "num_inference_steps": 32
4}config.json.bak 保留原始 DDPM 设定,可对比。
config.json.bak keeps the original DDPM settings for reference.inference_ms ≈ 36 + n_steps × 3.3
# overhead 36ms = ResNet18 encode + ZMQ RTT
# per_step 3.3ms = UNet single denoising on 4090
target_inference_ms = effective_chunk × (1000 / step_hz) × safety
= 8 × 16.67 × 0.85 = 113 ms (60Hz, safety 0.85)
max_steps = (target - overhead) / per_step ≈ 23 (安全档 / safe)
= (133 - 36) / 3.3 ≈ 29 (临界档 / critical)n_action_steps=8(固定),所以客户端 policy_action_horizon ≥ 8 时 server 自动截到 8。设 16 / 32 / 50 等效。
DP outputs n_action_steps=8 (fixed); the server auto-caps client policy_action_horizon to 8 when ≥ 8, so 16 / 32 / 50 are equivalent at the client side.1--policy_action_horizon=16 # 任意 ≥ 8 都行 / any value ≥ 8 works
2--step_hz=60 # DP 训练 sim rate / DP training sim rate
3--episode_length_s=1201pip install lerobot
2python -m lerobot.async_inference.policy_server --host 0.0.0.0 --port 80801cd LeIsaac
2bash scripts/evaluation/run_eval.sh -- \
3 --task=LeIsaac-SO101-PickOrange-v0 \
4 --eval_rounds=10 \
5 --episode_length_s=120 \
6 --step_hz=60 \
7 --policy_type=lerobot-diffusion \
8 --policy_host=127.0.0.1 --policy_port=8080 \
9 --policy_checkpoint_path=wsagi/DiffusionPolicy-PickOrange \
10 --policy_action_horizon=16 \
11 --policy_language_instruction='Pick up the orange and place it on the plate' \
12 --device=cuda --enable_cameraseval_rounds=10 求 success rate 平均(DP 是 stochastic,单 sample 容易误判)。
Use eval_rounds=10 to average success rate (DP is stochastic; single samples mislead).wsagi/ACT-PickOrange — 自训 ACT (~80M),1/1 deterministic success @ horizon=32shadowHokage/act_policy — 社区 ACT,1/1 (deterministic)LightwheelAI/leisaac-pick-orange-v0 — GR00T N1.5 SOTA (~3B),~30s 完成 3 颗docs/training/dp_inference_speedup_and_dynamic_timeout.html — DDIM swap + dynamic timeout 完整 postmortem(含 SVG 拟合曲线)diffusers library1@inproceedings{chi2023diffusion,
2 title={Diffusion Policy: Visuomotor Policy Learning via Action Diffusion},
3 author={Chi, Cheng and Feng, Siyuan and Du, Yilun and Xu, Zhenjia and Cousineau, Eric and Burchfiel, Benjamin and Song, Shuran},
4 booktitle={Robotics: Science and Systems},
5 year={2023}
6}
7
8@inproceedings{song2021denoising,
9 title={Denoising Diffusion Implicit Models},
10 author={Song, Jiaming and Meng, Chenlin and Ermon, Stefano},
11 booktitle={International Conference on Learning Representations},
12 year={2021}
13}