Instructions to use wsagi/DiffusionPolicy-PickOrange with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use wsagi/DiffusionPolicy-PickOrange with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
4ep ckpt configs + new eval screenshot + README (3-4ep optimal)
Browse files- README.md +8 -5
- config.json +3 -11
- dp-pick-orange.jpg +2 -2
- train_config.json +12 -32
README.md
CHANGED
|
@@ -17,8 +17,8 @@ language:
|
|
| 17 |
---
|
| 18 |
# DiffusionPolicy-PickOrange
|
| 19 |
|
| 20 |
-
针对 [LeIsaac SO-101 PickOrange](https://github.com/LightwheelAI/leisaac) 任务**从头训练**的 LeRobot Diffusion Policy(267M,UNet 1D + ResNet18 vision encoder)
|
| 21 |
-
_A LeRobot Diffusion Policy (267M
|
| 22 |
|
| 23 |

|
| 24 |
|
|
@@ -33,11 +33,14 @@ _A LeRobot Diffusion Policy (267M, UNet 1D + ResNet18 vision encoder) **trained
|
|
| 33 |
_Single-arm SO-101 picks 3 oranges sequentially and places each on a plate._
|
| 34 |
- **数据集 / Dataset**:[`LightwheelAI/leisaac-pick-orange`](https://huggingface.co/datasets/LightwheelAI/leisaac-pick-orange) — 60 episode 遥操示范。
|
| 35 |
- **架构 / Architecture**:Diffusion Policy(UNet 1D denoiser + ResNet18 双相机 vision encoder + 6 DOF state input → 8-step action chunk)。
|
| 36 |
-
- **训练 / Training**:
|
|
|
|
| 37 |
- **推理 hot-swap / Inference hot-swap**:`config.json` 改 `noise_scheduler_type: DDPM → DDIM` + `num_inference_steps: null → 32`,**不重训**。inference latency **393 ms → 147 ms / chunk**,slowdown 2.96x → **1.1x** 实时跑得动。
|
| 38 |
_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._
|
| 39 |
-
- **评测 / Eval**
|
| 40 |
-
|
|
|
|
|
|
|
| 41 |
|
| 42 |
## 模型亮点
|
| 43 |
|
|
|
|
| 17 |
---
|
| 18 |
# DiffusionPolicy-PickOrange
|
| 19 |
|
| 20 |
+
针对 [LeIsaac SO-101 PickOrange](https://github.com/LightwheelAI/leisaac) 任务**从头训练**的 LeRobot Diffusion Policy(267M,UNet 1D + ResNet18 vision encoder)。**本 ckpt = step-18000 ≈ 4 epoch(best)**,DDPM 100-step(如评测口径);可选 **DDIM-32 hot-swap** 提速实时(见下,不重训、改 `config.json` 即可,且因 DDPM 太慢常撞 wall_cap,DDIM 提速后橙子率可能更高)。
|
| 21 |
+
_A LeRobot Diffusion Policy (267M) **trained from scratch** on [LeIsaac SO-101 PickOrange](https://github.com/LightwheelAI/leisaac). **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)._
|
| 22 |
|
| 23 |

|
| 24 |
|
|
|
|
| 33 |
_Single-arm SO-101 picks 3 oranges sequentially and places each on a plate._
|
| 34 |
- **数据集 / Dataset**:[`LightwheelAI/leisaac-pick-orange`](https://huggingface.co/datasets/LightwheelAI/leisaac-pick-orange) — 60 episode 遥操示范。
|
| 35 |
- **架构 / Architecture**:Diffusion Policy(UNet 1D denoiser + ResNet18 双相机 vision encoder + 6 DOF state input → 8-step action chunk)。
|
| 36 |
+
- **训练 / Training**:本 ckpt = **step-18000 ≈ 4 epoch**(best)。⚠️ **DP 在 60-demo 上 3–4 epoch 最优,严重过拟合即死**:早先 100k-step(≈22 ep)ckpt strict 20-round = **0/60**;退回 4 ep(本 ckpt)= **8.3% (5/60)**。~1.07 GB model.safetensors,DDPM 100-step 训练(epoch = step×8/36293)。
|
| 37 |
+
_This ckpt = **step-18000 ≈ 4 epoch** (best). DP on 60 demos peaks at **3–4 epoch**: the earlier ~22-epoch ckpt overfit to **0/60**, while 4 epoch scores **8.3% (5/60)**. Train past the sweet spot and it collapses to do-nothing._
|
| 38 |
- **推理 hot-swap / Inference hot-swap**:`config.json` 改 `noise_scheduler_type: DDPM → DDIM` + `num_inference_steps: null → 32`,**不重训**。inference latency **393 ms → 147 ms / chunk**,slowdown 2.96x → **1.1x** 实时跑得动。
|
| 39 |
_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._
|
| 40 |
+
- **评测 / Eval**(strict 20-round,leaderboard 同口径 120s/180s):**E(🍊)/ep = 8.3% (5/60),P(1)=25%,P(3)=0%,avg 182s**,raw `[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。
|
| 41 |
+
_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._
|
| 42 |
+
- ⚠️ **serving 坑 / serving gotcha**:DP `n_obs_steps=2` → lerobot async server 的 `predict_action_chunk` 必须 `populate_queues`(否则 stack 空 deque、server 报 `'observation.images'`、臂不动假 0)。修复在我们的 [`lerobot-v040` fork](https://github.com/vitorcen/LeIsaac-Training) 一行 patch;用官方 `pip install lerobot`(v0.5.x 未打)serve 本 ckpt 会臂不动。
|
| 43 |
+
_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._
|
| 44 |
|
| 45 |
## 模型亮点
|
| 46 |
|
config.json
CHANGED
|
@@ -35,13 +35,12 @@
|
|
| 35 |
},
|
| 36 |
"device": "cuda",
|
| 37 |
"use_amp": false,
|
| 38 |
-
"use_peft": false,
|
| 39 |
"push_to_hub": false,
|
| 40 |
"repo_id": null,
|
| 41 |
"private": null,
|
| 42 |
"tags": null,
|
| 43 |
"license": null,
|
| 44 |
-
"pretrained_path": "/home/david/work/LeIsaac/outputs/dp-
|
| 45 |
"horizon": 16,
|
| 46 |
"n_action_steps": 8,
|
| 47 |
"normalization_mapping": {
|
|
@@ -51,11 +50,6 @@
|
|
| 51 |
},
|
| 52 |
"drop_n_last_frames": 7,
|
| 53 |
"vision_backbone": "resnet18",
|
| 54 |
-
"resize_shape": [
|
| 55 |
-
240,
|
| 56 |
-
320
|
| 57 |
-
],
|
| 58 |
-
"crop_ratio": 1.0,
|
| 59 |
"crop_shape": null,
|
| 60 |
"crop_is_random": true,
|
| 61 |
"pretrained_backbone_weights": null,
|
|
@@ -71,7 +65,7 @@
|
|
| 71 |
"n_groups": 8,
|
| 72 |
"diffusion_step_embed_dim": 128,
|
| 73 |
"use_film_scale_modulation": true,
|
| 74 |
-
"noise_scheduler_type": "
|
| 75 |
"num_train_timesteps": 100,
|
| 76 |
"beta_schedule": "squaredcos_cap_v2",
|
| 77 |
"beta_start": 0.0001,
|
|
@@ -79,9 +73,7 @@
|
|
| 79 |
"prediction_type": "epsilon",
|
| 80 |
"clip_sample": true,
|
| 81 |
"clip_sample_range": 1.0,
|
| 82 |
-
"num_inference_steps":
|
| 83 |
-
"compile_model": false,
|
| 84 |
-
"compile_mode": "reduce-overhead",
|
| 85 |
"do_mask_loss_for_padding": false,
|
| 86 |
"optimizer_lr": 0.0001,
|
| 87 |
"optimizer_betas": [
|
|
|
|
| 35 |
},
|
| 36 |
"device": "cuda",
|
| 37 |
"use_amp": false,
|
|
|
|
| 38 |
"push_to_hub": false,
|
| 39 |
"repo_id": null,
|
| 40 |
"private": null,
|
| 41 |
"tags": null,
|
| 42 |
"license": null,
|
| 43 |
+
"pretrained_path": "/home/david/work/isaaclab-experience/LeIsaac/outputs/dp-grind/checkpoints/last/pretrained_model",
|
| 44 |
"horizon": 16,
|
| 45 |
"n_action_steps": 8,
|
| 46 |
"normalization_mapping": {
|
|
|
|
| 50 |
},
|
| 51 |
"drop_n_last_frames": 7,
|
| 52 |
"vision_backbone": "resnet18",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
"crop_shape": null,
|
| 54 |
"crop_is_random": true,
|
| 55 |
"pretrained_backbone_weights": null,
|
|
|
|
| 65 |
"n_groups": 8,
|
| 66 |
"diffusion_step_embed_dim": 128,
|
| 67 |
"use_film_scale_modulation": true,
|
| 68 |
+
"noise_scheduler_type": "DDPM",
|
| 69 |
"num_train_timesteps": 100,
|
| 70 |
"beta_schedule": "squaredcos_cap_v2",
|
| 71 |
"beta_start": 0.0001,
|
|
|
|
| 73 |
"prediction_type": "epsilon",
|
| 74 |
"clip_sample": true,
|
| 75 |
"clip_sample_range": 1.0,
|
| 76 |
+
"num_inference_steps": null,
|
|
|
|
|
|
|
| 77 |
"do_mask_loss_for_padding": false,
|
| 78 |
"optimizer_lr": 0.0001,
|
| 79 |
"optimizer_betas": [
|
dp-pick-orange.jpg
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
train_config.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
{
|
| 2 |
"dataset": {
|
| 3 |
"repo_id": "LightwheelAI/leisaac-pick-orange",
|
| 4 |
-
"root": "/home/david/work/LeIsaac/datasets/raw/leisaac-pick-orange",
|
| 5 |
"episodes": null,
|
| 6 |
"image_transforms": {
|
| 7 |
"enable": false,
|
|
@@ -77,7 +77,6 @@
|
|
| 77 |
"revision": null,
|
| 78 |
"use_imagenet_stats": true,
|
| 79 |
"video_backend": "pyav",
|
| 80 |
-
"return_uint8": false,
|
| 81 |
"streaming": false
|
| 82 |
},
|
| 83 |
"env": null,
|
|
@@ -118,13 +117,12 @@
|
|
| 118 |
},
|
| 119 |
"device": "cuda",
|
| 120 |
"use_amp": false,
|
| 121 |
-
"use_peft": false,
|
| 122 |
"push_to_hub": false,
|
| 123 |
"repo_id": null,
|
| 124 |
"private": null,
|
| 125 |
"tags": null,
|
| 126 |
"license": null,
|
| 127 |
-
"pretrained_path": "/home/david/work/LeIsaac/outputs/dp-
|
| 128 |
"horizon": 16,
|
| 129 |
"n_action_steps": 8,
|
| 130 |
"normalization_mapping": {
|
|
@@ -134,11 +132,6 @@
|
|
| 134 |
},
|
| 135 |
"drop_n_last_frames": 7,
|
| 136 |
"vision_backbone": "resnet18",
|
| 137 |
-
"resize_shape": [
|
| 138 |
-
240,
|
| 139 |
-
320
|
| 140 |
-
],
|
| 141 |
-
"crop_ratio": 1.0,
|
| 142 |
"crop_shape": null,
|
| 143 |
"crop_is_random": true,
|
| 144 |
"pretrained_backbone_weights": null,
|
|
@@ -163,8 +156,6 @@
|
|
| 163 |
"clip_sample": true,
|
| 164 |
"clip_sample_range": 1.0,
|
| 165 |
"num_inference_steps": null,
|
| 166 |
-
"compile_model": false,
|
| 167 |
-
"compile_mode": "reduce-overhead",
|
| 168 |
"do_mask_loss_for_padding": false,
|
| 169 |
"optimizer_lr": 0.0001,
|
| 170 |
"optimizer_betas": [
|
|
@@ -176,21 +167,17 @@
|
|
| 176 |
"scheduler_name": "cosine",
|
| 177 |
"scheduler_warmup_steps": 500
|
| 178 |
},
|
| 179 |
-
"output_dir": "/home/david/work/LeIsaac/outputs/dp-
|
| 180 |
"job_name": "diffusion",
|
| 181 |
"resume": true,
|
| 182 |
"seed": 1000,
|
| 183 |
-
"
|
| 184 |
-
"
|
| 185 |
-
"
|
| 186 |
-
"prefetch_factor": 4,
|
| 187 |
-
"persistent_workers": true,
|
| 188 |
-
"steps": 100000,
|
| 189 |
"eval_freq": 20000,
|
| 190 |
"log_freq": 200,
|
| 191 |
-
"tolerance_s": 0.0001,
|
| 192 |
"save_checkpoint": true,
|
| 193 |
-
"save_freq":
|
| 194 |
"use_policy_training_preset": true,
|
| 195 |
"optimizer": {
|
| 196 |
"type": "adam",
|
|
@@ -210,8 +197,8 @@
|
|
| 210 |
},
|
| 211 |
"eval": {
|
| 212 |
"n_episodes": 50,
|
| 213 |
-
"batch_size":
|
| 214 |
-
"use_async_envs":
|
| 215 |
},
|
| 216 |
"wandb": {
|
| 217 |
"enable": false,
|
|
@@ -220,15 +207,8 @@
|
|
| 220 |
"entity": null,
|
| 221 |
"notes": null,
|
| 222 |
"run_id": null,
|
| 223 |
-
"mode": null
|
| 224 |
-
"add_tags": true
|
| 225 |
},
|
| 226 |
-
"
|
| 227 |
-
"
|
| 228 |
-
"rabc_progress_path": null,
|
| 229 |
-
"rabc_kappa": 0.01,
|
| 230 |
-
"rabc_epsilon": 1e-06,
|
| 231 |
-
"rabc_head_mode": "sparse",
|
| 232 |
-
"rename_map": {},
|
| 233 |
-
"checkpoint_path": "/home/david/work/LeIsaac/outputs/dp-leisaac-pick-orange-v2/checkpoints/060000"
|
| 234 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"dataset": {
|
| 3 |
"repo_id": "LightwheelAI/leisaac-pick-orange",
|
| 4 |
+
"root": "/home/david/work/isaaclab-experience/LeIsaac/datasets/raw/leisaac-pick-orange",
|
| 5 |
"episodes": null,
|
| 6 |
"image_transforms": {
|
| 7 |
"enable": false,
|
|
|
|
| 77 |
"revision": null,
|
| 78 |
"use_imagenet_stats": true,
|
| 79 |
"video_backend": "pyav",
|
|
|
|
| 80 |
"streaming": false
|
| 81 |
},
|
| 82 |
"env": null,
|
|
|
|
| 117 |
},
|
| 118 |
"device": "cuda",
|
| 119 |
"use_amp": false,
|
|
|
|
| 120 |
"push_to_hub": false,
|
| 121 |
"repo_id": null,
|
| 122 |
"private": null,
|
| 123 |
"tags": null,
|
| 124 |
"license": null,
|
| 125 |
+
"pretrained_path": "/home/david/work/isaaclab-experience/LeIsaac/outputs/dp-grind/checkpoints/last/pretrained_model",
|
| 126 |
"horizon": 16,
|
| 127 |
"n_action_steps": 8,
|
| 128 |
"normalization_mapping": {
|
|
|
|
| 132 |
},
|
| 133 |
"drop_n_last_frames": 7,
|
| 134 |
"vision_backbone": "resnet18",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
"crop_shape": null,
|
| 136 |
"crop_is_random": true,
|
| 137 |
"pretrained_backbone_weights": null,
|
|
|
|
| 156 |
"clip_sample": true,
|
| 157 |
"clip_sample_range": 1.0,
|
| 158 |
"num_inference_steps": null,
|
|
|
|
|
|
|
| 159 |
"do_mask_loss_for_padding": false,
|
| 160 |
"optimizer_lr": 0.0001,
|
| 161 |
"optimizer_betas": [
|
|
|
|
| 167 |
"scheduler_name": "cosine",
|
| 168 |
"scheduler_warmup_steps": 500
|
| 169 |
},
|
| 170 |
+
"output_dir": "/home/david/work/isaaclab-experience/LeIsaac/outputs/dp-grind",
|
| 171 |
"job_name": "diffusion",
|
| 172 |
"resume": true,
|
| 173 |
"seed": 1000,
|
| 174 |
+
"num_workers": 0,
|
| 175 |
+
"batch_size": 8,
|
| 176 |
+
"steps": 27222,
|
|
|
|
|
|
|
|
|
|
| 177 |
"eval_freq": 20000,
|
| 178 |
"log_freq": 200,
|
|
|
|
| 179 |
"save_checkpoint": true,
|
| 180 |
+
"save_freq": 1000,
|
| 181 |
"use_policy_training_preset": true,
|
| 182 |
"optimizer": {
|
| 183 |
"type": "adam",
|
|
|
|
| 197 |
},
|
| 198 |
"eval": {
|
| 199 |
"n_episodes": 50,
|
| 200 |
+
"batch_size": 50,
|
| 201 |
+
"use_async_envs": false
|
| 202 |
},
|
| 203 |
"wandb": {
|
| 204 |
"enable": false,
|
|
|
|
| 207 |
"entity": null,
|
| 208 |
"notes": null,
|
| 209 |
"run_id": null,
|
| 210 |
+
"mode": null
|
|
|
|
| 211 |
},
|
| 212 |
+
"checkpoint_path": "/home/david/work/isaaclab-experience/LeIsaac/outputs/dp-grind/checkpoints/last",
|
| 213 |
+
"rename_map": {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 214 |
}
|