wsagi commited on
Commit
9a61bff
·
verified ·
1 Parent(s): 6ba1694

4ep ckpt configs + new eval screenshot + README (3-4ep optimal)

Browse files
Files changed (4) hide show
  1. README.md +8 -5
  2. config.json +3 -11
  3. dp-pick-orange.jpg +2 -2
  4. 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),**已 hot-swap 到 DDIM 32-step inference**(不重训,直接改 ckpt `config.json`)。
21
- _A LeRobot Diffusion Policy (267M, UNet 1D + ResNet18 vision encoder) **trained from scratch** on the [LeIsaac SO-101 PickOrange](https://github.com/LightwheelAI/leisaac) task. **DDIM 32-step inference hot-swapped into the ckpt config** without retraining._
22
 
23
  ![DP eval — SO-101 PickOrange](dp-pick-orange.jpg)
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**:100k step,~1.07 GB model.safetensors,DDPM 100-step 训练。
 
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**:Isaac Sim 5.1 + LeIsaac,**多轮 eval 见到 0/3 ~ 3/3 全谱概率分布,部分轮能完整放完 3 颗**。Diffusion 采样自带 stochasticity,需多轮平均才有意义。
40
- _Probabilistic outcomes across runs — full distribution from 0/3 to 3/3 observed, with **some rounds completing all 3 oranges**. Diffusion sampling is inherently stochastic; multi-round averaging required for meaningful comparison._
 
 
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
  ![DP eval — SO-101 PickOrange](dp-pick-orange.jpg)
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-leisaac-pick-orange-v2/checkpoints/060000/pretrained_model",
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": "DDIM",
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": 32,
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

  • SHA256: 9f90e8a5fa14814a461073de2b028d51b7589205e31265ef184ab037f2135eb4
  • Pointer size: 131 Bytes
  • Size of remote file: 155 kB

Git LFS Details

  • SHA256: 5ecbee92177013daf1718e7f441f6ea7b8436f2747c92e62b179d3c2c917372e
  • Pointer size: 131 Bytes
  • Size of remote file: 111 kB
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-leisaac-pick-orange-v2/checkpoints/060000/pretrained_model",
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-leisaac-pick-orange-v2",
180
  "job_name": "diffusion",
181
  "resume": true,
182
  "seed": 1000,
183
- "cudnn_deterministic": false,
184
- "num_workers": 2,
185
- "batch_size": 32,
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": 20000,
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": 22,
214
- "use_async_envs": true
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
- "peft": null,
227
- "use_rabc": false,
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
  }