File size: 13,345 Bytes
4c9e0f0
 
 
 
 
 
 
 
a123db3
4c9e0f0
 
 
 
9e9c3f5
 
 
 
 
 
 
 
 
 
 
f95e9ef
81ffb26
9e9c3f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bd2d156
 
 
 
 
 
 
 
 
 
 
 
 
6023a48
bd2d156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2542a51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8f42f19
2542a51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45a2943
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4c9e0f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3cb490
 
 
 
 
a123db3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4c9e0f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
---
license: apache-2.0
tags:
  - robotics
  - behavior-1k
base_model: IliaLarchenko/behavior_50t_checkpoint
---

# b1k single-task checkpoints

Params-only checkpoints for offline evaluation. `train_state` is **not** included, so these
cannot be resumed from β€” inference/eval only.

<!-- task1-begin -->
## `task1/` β€” picking_up_trash, human demos + recovery data

Single-task fine-tune of the 2025 winner's **`checkpoint_2`** (the official checkpoint covering
task 1) on **task 1 = `picking_up_trash`**, using the 200 human demos plus 788 scripted recovery
episodes from `fastwalker1118/B1k_Recovery` (`task1/Demo+Recovery`). Planned 5 epochs; these are
the checkpoints nearest the epoch boundaries (one epoch = 15,089 steps).

| checkpoint | step | epochs | `action_loss` at that step (train set) |
|---|---|---|---|
| [`task1/task1_demo_recovery_epoch1_15000`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task1/task1_demo_recovery_epoch1_15000) | 15,000 | 0.99 | 0.0635 |
| [`task1/task1_demo_recovery_epoch2_30000`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task1/task1_demo_recovery_epoch2_30000) | 30,000 | 1.99 | 0.0461 |
| [`task1/task1_demo_recovery_epoch3_45000`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task1/task1_demo_recovery_epoch3_45000) | 45,000 | 2.98 | 0.0368 |

| | |
|---|---|
| init | `IliaLarchenko/behavior_submission` `checkpoint_2` (params) |
| config | `pi_behavior_b1k_fast` (FSDP 4, EMA, FAST aux loss), `B1K_TASK_SPACE=100` |
| data | 988 episodes (200 demos + 788 recoveries), 1,931,447 samples per epoch; source videos (head 720Β², wrists 480Β²) re-encoded to 224Γ—224 with lanczos + the upstream x265 option string (crf 28, keyint 8), frame alignment verified |
| batch | 128 on 4Γ— H200 |
| LR | 2.5e-7 β†’ 2.5e-6 at step 500 β†’ cosine to 2.5e-7 at step 75,445 (5 epochs) |
| norm stats | 2025 stats + robot-frame `base_qvel` fix (state dims 0–2) **+ `trunk_3` un-frozen**: action dim 6 / state trunk_3 mean 0, std 0.1315, measured on the recoveries (the 2025 stats have std β‰ˆ 0 because the demos never rotate the waist; the recoveries do) |
| targets | normalized flow-matching action targets clipped to Β±10Οƒ (scripted-planner recoveries have rare far-out chunk starts) |

> **Eval: load the norm stats shipped in each checkpoint's `assets/`**, not the 2025
> `checkpoint_2` stats. With the 2025 stats the waist (`trunk_3`) input and output are mis-scaled.

`action_loss` is training-set loss only (no validation split, no rollouts yet).
<!-- task1-end -->

<!-- task2-begin -->
## `task2/` β€” putting_away_Halloween_decorations, human demos + recovery data (round 0)

Single-task fine-tune of the 2025 winner's **`checkpoint_1`** (the official checkpoint covering task 2) on
**task 2 = `putting_away_Halloween_decorations`**, using the 200 human demos plus 543 scripted recovery episodes
from `fastwalker1118/B1k_Recovery` (`task2/Demo+Recovery_video_r0a`). The recoveries start from failure frames
that a video-only inspection found in `checkpoint_1` rollouts, and from edited variants of those frames
(no public-test instances). 2 epochs; one epoch =
31,262 steps.

| checkpoint | step | epochs | `action_loss` near that step (train set) |
|---|---|---|---|
| [`task2/task2_demo_recovery_video_r0a_epoch1_30000`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task2/task2_demo_recovery_video_r0a_epoch1_30000) | 30,000 | 0.96 | 0.0476 |
| [`task2/task2_demo_recovery_video_r0a_epoch2_62523`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task2/task2_demo_recovery_video_r0a_epoch2_62523) | 62,523 | 2.00 | 0.0372 |

| | |
|---|---|
| init | `IliaLarchenko/behavior_submission` `checkpoint_1` (params) |
| config | `pi_behavior_b1k_fast` (FSDP 4, EMA, FAST aux loss), `B1K_TASK_SPACE=100` |
| data | 743 episodes (200 demos + 543 recoveries), 4,001,658 samples per epoch; all videos re-encoded to 224Γ—224 with lanczos + the full upstream x265 option string (crf 28, keyint 8) |
| batch | 128 on 4Γ— H200 |
| LR | 2.5e-7 β†’ 2.5e-6 at step 500 β†’ cosine to 2.5e-7 at step 62,524 (2 epochs) |
| norm stats | 2025 `checkpoint_1` stats + robot-frame `base_qvel` fix (state dims 0–2); `trunk_3` stays frozen (the task-2 recoveries never rotate the waist) |
| targets | normalized flow-matching action targets clipped to Β±10Οƒ |

> **Eval: robot-frame base velocity in the state, and the norm stats shipped in each checkpoint's `assets/`.**

`action_loss` is training-set loss only (no validation split).
<!-- task2-end -->

<!-- task2-srcmeta-begin -->
## `task2/…_srcmeta_…` β€” same round-0 fine-tune, with data-source metadata (pi0.7-style)

Identical to the `task2/` round-0 fine-tune above (same data, init, recipe, seed, norm stats) except that every
training example carries its **data source as prompt metadata**, following Ο€0.7 (arXiv 2604.15483, Sec. V-C/V-E):
`Data source: human teleoperation.` for the 200 human demos, `Data source: scripted motion planner.` for the 543
recovery episodes. The label is 7 Gemma text tokens embedded with the VLM's own token-embedding table and appended
to the prefix after the state tokens as a causal block (the image/task/stage/state tokens do not attend to it; the
action expert and FAST tokens do); no parameters are added. As in Ο€0.7 the metadata is dropped entirely 15% of the
time and per component 5% of the time. **At inference set the label** (we evaluate `human`; `planner` for comparison)
β€” the patch is [`task2/source_meta.py`](https://huggingface.co/fastwalker1118/b1kcheckpoints/blob/main/task2/source_meta.py); unpatched code runs these weights with no label block at all.
Recoveries come from `fastwalker1118/B1k_Recovery` (`task2/Demo+Recovery_video_r0a`). The recoveries start from failure frames
that a video-only inspection found in `checkpoint_1` rollouts, and from edited variants of those frames
(no public-test instances). 2 epochs; one epoch =
31,262 steps.

| checkpoint | step | epochs | `action_loss` near that step (train set) |
|---|---|---|---|
| [`task2/task2_demo_recovery_video_r0a_srcmeta_epoch1_30000`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task2/task2_demo_recovery_video_r0a_srcmeta_epoch1_30000) | 30,000 | 0.96 | 0.0476 |
| [`task2/task2_demo_recovery_video_r0a_srcmeta_epoch2_62523`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task2/task2_demo_recovery_video_r0a_srcmeta_epoch2_62523) | 62,523 | 2.00 | 0.0358 |

| | |
|---|---|
| init | `IliaLarchenko/behavior_submission` `checkpoint_1` (params) |
| config | `pi_behavior_b1k_fast` (FSDP 4, EMA, FAST aux loss), `B1K_TASK_SPACE=100` |
| data | 743 episodes (200 demos + 543 recoveries), 4,001,658 samples per epoch; all videos re-encoded to 224Γ—224 with lanczos + the full upstream x265 option string (crf 28, keyint 8) |
| batch | 128 on 4Γ— H200 |
| LR | 2.5e-7 β†’ 2.5e-6 at step 500 β†’ cosine to 2.5e-7 at step 62,524 (2 epochs) |
| norm stats | 2025 `checkpoint_1` stats + robot-frame `base_qvel` fix (state dims 0–2); `trunk_3` stays frozen (the task-2 recoveries never rotate the waist) |
| targets | normalized flow-matching action targets clipped to Β±10Οƒ |

> **Eval: robot-frame base velocity in the state, and the norm stats shipped in each checkpoint's `assets/`.**

`action_loss` is training-set loss only (no validation split).
<!-- task2-srcmeta-end -->

<!-- task2-human-begin -->
## `task2/task2_demo_only_…` β€” human-demos-only baseline (no recoveries)

Control for the `task2/` round-0 recovery fine-tunes above: the same init, recipe, seed and norm stats, trained for
**one epoch on the 200 task-2 human demos only** (the demo half of `task2/Demo+Recovery_video_r0a`, read from the
same 224Γ—224 files). It measures how much of the round-0 gain comes from the recoveries rather than from
fine-tuning `checkpoint_1` on the 2026 demos.

| checkpoint | step | epochs | `action_loss` near that step (train set) |
|---|---|---|---|
| [`task2/task2_demo_only_ckpt1_1epoch_21495`](https://huggingface.co/fastwalker1118/b1kcheckpoints/tree/main/task2/task2_demo_only_ckpt1_1epoch_21495) | 21,495 | 1.00 | 0.0555 |

| | |
|---|---|
| init | `IliaLarchenko/behavior_submission` `checkpoint_1` (params) |
| config | `pi_behavior_b1k_fast` (FSDP 4, EMA, FAST aux loss), `B1K_TASK_SPACE=100` |
| data | 200 human demos, 2,751,612 samples per epoch |
| batch | 128 on 4Γ— H200 |
| LR | 2.5e-7 β†’ 2.5e-6 at step 500 β†’ cosine to 2.5e-7 at step 21,496 (1 epoch) |
| norm stats | 2025 `checkpoint_1` stats + robot-frame `base_qvel` fix (state dims 0–2) |

> **Eval: robot-frame base velocity in the state, and the norm stats shipped in each checkpoint's `assets/`.**

`action_loss` is training-set loss only (no validation split).
<!-- task2-human-end -->

## `task5_human_only_21k`

Single-task fine-tune of the 50-task meta checkpoint on **task 5 = `setting_mousetraps`**,
using the **200 human demonstrations** from the 2026 BEHAVIOR-1K challenge set and nothing else.

| | |
|---|---|
| init | `IliaLarchenko/behavior_50t_checkpoint` (params) |
| data | `2026-challenge-demos-224`, activity `setting_mousetraps`, 200 episodes / 2,039,222 frames |
| step | 21,000 of a planned 30,000 (run stopped early; resumable copy retained locally) |
| batch | 224 (32/GPU Γ— 7Γ— H200), FSDP over 7 devices |
| LR | 8.75e-7 β†’ 8.75e-5 β†’ 1.75e-6, 2,000-step warmup (linear rule off BS-128 / 5e-5) |
| norm stats | `norm-stats-fixed` (sha256 `2b42bdfb…`), i.e. 2025 stats with the robot-frame `base_qvel` correction on state dims 0–2 |
| task space | `B1K_TASK_SPACE=100`; `setting_mousetraps` is index 5 in both the 2025 and 2026 tables, so its task/stage embeddings are **pretrained**, not randomly initialised |
| final logged | `action_loss = 0.0209` at step 21,775 |

## `task10_taskfinetune`

> **Rollout evaluation:** see [`task10_taskfinetune/EVAL_RESULTS.md`](task10_taskfinetune/EVAL_RESULTS.md) β€”
> 0.0 % success / avg q 0.1917 over 20 `public_test` instances, vs 5.0 % / 0.1750 for the
> official `checkpoint_1`. The difference is not statistically significant (sign test p = 1.000).

Single-task fine-tune of the 50-task meta checkpoint on **task 10 =
`set_up_a_coffee_station_in_your_kitchen`**, using the **200 human demonstrations** from the
2026 BEHAVIOR-1K challenge set and nothing else. Run completed in full.

| | |
|---|---|
| init | `IliaLarchenko/behavior_50t_checkpoint` (params) |
| data | `2026-challenge-demos-224`, activity `set_up_a_coffee_station_in_your_kitchen`, 200 episodes / 1,253,243 frames |
| step | 29,999 of 30,000 (**completed**, 16 h 54 m on 8Γ— H200) |
| batch | 256 (32/GPU Γ— 8Γ— H200), FSDP over 8 devices |
| LR | **flat 5e-6** β€” `init = peak = decay = 5e-6`, so no warmup ramp and no cosine decay |
| norm stats | 2025 stats with the robot-frame `base_qvel` correction on state dims 0–2 (same `qvelfix` stats as the task-5 runs) |
| task space | `B1K_TASK_SPACE=100`; `set_up_a_coffee_station_in_your_kitchen` is index 10 in both the 2025 and 2026 tables, so its task/stage embeddings are **pretrained**, not randomly initialised |
| final logged | `action_loss = 0.0294`, `total_loss = 0.0565`, `fast_accuracy = 0.8208` at step 29,975 |

Because the LR is flat with no annealing, the final step is **not** necessarily the best
checkpoint β€” there is no decay phase to settle into a minimum. Steps 4000/8000/.../28000 were
retained locally and can be uploaded if you want to sweep across them.

### Video encoding caveat for this checkpoint

Trained on the `2026-challenge-demos-224` build, whose bitstream reports **x264 `crf=20.0`,
`keyint=250`**. Measured against `b1k-224x224-gop8-fixed` (x265 `crf=28.0`, `keyint=8`) on
identical frames, this build is slightly softer: **0.886Γ— Laplacian variance, 0.933Γ— HF
spectral energy**. The downscaling filter is not recorded in the bitstream and is unverified.
No task-success delta has been measured for this difference β€” it is an input-statistics
observation only.

One video file in the source data (`right_realsense .../chunk-010/file-002.mp4`, backing 46 of
the 200 episodes) had no moov atom and was unreadable; it was re-encoded from the intact
480Γ—480 HEVC original at x264 CRF 23 / GOP 250 to match its neighbours, verified at 43–50 dB
PSNR against the source.

### Reading the loss

`action_loss` here is **training-set** loss. There is no validation split and no rollout
evaluation has been run, so it says nothing about task success or generalisation. It is also
not comparable across tasks β€” episode length varies ~6Γ— between activities.

### Reproducing the input pipeline

The model consumes a 23-dim state extracted from the 61-dim `observation.state`
(`base_qvel` 0:3, `arm_left` 3:10, `gripper_left` 24:26, `arm_right` 28:35,
`gripper_right` 49:51, `trunk` 53:57), and predicts 23-dim actions with the trunk and both
arms as **deltas relative to the current state** (`use_delta_joint_actions=True`); base
velocity and both grippers stay absolute. Action normalisation is **per-timestamp**
(`use_per_timestamp_norm=True`) over a 30-step horizon β€” the scalar `mean`/`std` in
`norm_stats.json` are not what the pipeline divides by for actions.

Cameras are 224Γ—224 h264: `zed_link_camera_0` (head), `left_realsense_link_camera_0`,
`right_realsense_link_camera_0`.