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`.
|