Aether258 commited on
Commit
9d7a1f4
·
verified ·
1 Parent(s): f8e4ba4

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +117 -0
README.md ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ library_name: lerobot
6
+ pipeline_tag: robotics
7
+ tags:
8
+ - lerobot
9
+ - robotics
10
+ - manipulation
11
+ - pi0
12
+ - tactile
13
+ - bimanual
14
+ ---
15
+
16
+ # pi05_bi — task2 (dish washing), step 8000
17
+
18
+ openpi `pi05_bi` checkpoint for a bimanual dish-and-sponge task with tactile
19
+ inputs. Step 8000 (1.24 epochs), held-out validation loss
20
+ **0.0535** — the lowest of the run through step 10000.
21
+
22
+ ## Task
23
+
24
+ Single unified instruction for every episode:
25
+
26
+ > Use the left hand to pick up the dish, and then use the right hand to pick up
27
+ > the sponge to brush the dish. Finally, put all things back.
28
+
29
+ Only `task2_01` shipped this string; `task2_02` and `task2_03` both carried the
30
+ placeholder `"perform manipulation task"` in their `meta/tasks.jsonl`. Since
31
+ `prompt_from_task=True` feeds that string straight to the model, all three
32
+ sources were forced onto the instruction above at merge time -- otherwise 76% of
33
+ the episodes (723 of 948) would have trained against an uninformative prompt.
34
+ A trailing space in the original string was stripped.
35
+
36
+ ## Data
37
+
38
+ | source | episodes | frames |
39
+ |---|---:|---:|
40
+ | `KaiyueChen/task2_01` | 225 | 222,531 |
41
+ | `KaiyueChen/task2_02` | 298 | 291,661 |
42
+ | `KaiyueChen/task2_03` | 425 | 402,110 |
43
+ | **merged** | **948** | **916,302** |
44
+
45
+ LeRobot v2.1, 30 fps, `robot_type=bimanual`, images embedded in the parquet files
46
+ (`total_videos=0`). Six camera streams: `camera0`, `camera1`, and four tactile
47
+ sensors (`tactile_left_0/1`, `tactile_right_0/1`). Mean episode length ~966
48
+ frames.
49
+
50
+ ### Split
51
+
52
+ Episodes are held out **per source repo** (10%, seed 42) so the held-out set keeps
53
+ the same source mix as train:
54
+
55
+ | split | episodes | held out from |
56
+ |---|---:|---|
57
+ | `train` | 854 | |
58
+ | `val_seen` (subset of train) | 94 | |
59
+ | `val_unseen` (held out) | 94 | 22 / 30 / 42 from sources 01 / 02 / 03 |
60
+
61
+ Normalization statistics (quantile q01/q99) are computed over the `train` split
62
+ only.
63
+
64
+ ## Training
65
+
66
+ | | |
67
+ |---|---|
68
+ | config | `pi05_bi` |
69
+ | hardware | 2 x A100-80GB, FSDP |
70
+ | batch size | 128 |
71
+ | this checkpoint | step 8000 (~1.24 epoch; 1 epoch = 6,444 steps) |
72
+ | planned length | 20,000 steps |
73
+ | lr | peak 2e-4, 1,000 warmup steps, cosine decay over 100,000 |
74
+ | LoRA | rank 16 on the LLM, rank 32 on the action expert |
75
+ | vision tower | **fully fine-tuned** -- the freeze filter matches only `.*llm.*` |
76
+
77
+ ## Validation curve
78
+
79
+ Flow-matching loss, 20 batches per split, evaluated on the same leading batches
80
+ each time so successive points are comparable.
81
+
82
+ | step | train | val_seen | val_unseen | gap |
83
+ |---:|---:|---:|---:|---:|
84
+ | 0 | 0.6399 | 0.6621 | 0.6508 | -0.0113 |
85
+ | 2000 | 0.0535 | 0.0671 | 0.0662 | -0.0009 |
86
+ | 4000 | 0.0470 | 0.0574 | 0.0573 | -0.0001 |
87
+ | 6000 | 0.0448 | 0.0565 | 0.0566 | +0.0001 |
88
+ | **8000** | 0.0430 | 0.0513 | **0.0535** | +0.0022 |
89
+ | 10000 | 0.0420 | 0.0514 | 0.0552 | +0.0038 |
90
+
91
+ `val_unseen` bottomed at step 8000 (0.0535) and rose to 0.0552 at step 10000.
92
+ Notably `val_seen` flattened at the same time (0.0513 -> 0.0514) while the training
93
+ loss kept falling (0.0430 -> 0.0420) -- both validation curves stalling together
94
+ suggests the model has extracted what it can from this data, not merely that
95
+ generalization has saturated.
96
+
97
+ The early-step `gap` is slightly **negative** (-0.0009 at step 2000). That is not
98
+ evidence of good generalization: each validation pass covers only ~2,560 frames,
99
+ which at ~966 frames per episode is about 2-3 episodes per split, so the sign of
100
+ the gap is dominated by which particular episodes landed in each split. Only the
101
+ `val_unseen` absolute trend is reliable, since the same episodes and the same rng
102
+ are used at every evaluation.
103
+
104
+ `val_seen` sits below the training loss from step 8000 onward. This is expected:
105
+ the training loss is measured on augmented images (random crop to 95%, +-5 deg
106
+ rotation, colour jitter, applied to all six streams including the four tactile
107
+ ones) while validation runs with `train=False`, which skips augmentation.
108
+
109
+ ## Contents
110
+
111
+ ```
112
+ checkpoint/
113
+ params/ # inference weights
114
+ train_state/ # optimizer state, for resuming
115
+ assets/task2_all/
116
+ norm_stats.json # computed over the train split only
117
+ ```