File size: 4,165 Bytes
525df9a | 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 | ---
license: apache-2.0
library_name: openpi
tags:
- robotics
- behavior-1k
- pi05
- vla
- imitation-learning
pipeline_tag: robotics
---
# BEHAVIOR-1K Β· pi0.5 Β· Task 16 (moving_boxes_to_storage)
A single-task fine-tune of the pi0.5 (Οβ.β
) 3B Vision-Language-Action model (the **PiBehavior** variant) on
**task 16 β `moving_boxes_to_storage`** from the BEHAVIOR-1K 2026 Challenge demonstration set.
- **Architecture:** pi0.5 / PiBehavior (β3B params, JAX/Flax, [openpi](https://github.com/Physical-Intelligence/openpi))
- **Conditioning:** **task-only embeddings** β one learned embedding per task (no per-skill/sub-stage table)
- **Base checkpoint:** [`IliaLarchenko/behavior_submission`](https://huggingface.co/IliaLarchenko/behavior_submission) β `checkpoint_2`
- **Checkpoint format:** Orbax (OCDBT) β `params/` holds the model weights
- **Camera input:** RGB only (224Γ224, GOP8); depth channels removed
## Files in this repo
| Path | What it is |
|---|---|
| `params/` | Trained model weights, step 14999 (Orbax OCDBT) |
| `assets/behavior-1k/2026-challenge-demos/norm_stats.json` | Action/state normalization stats (**from the 100-task meta checkpoint**, *not* from checkpoint_2) |
| `assets/behavior-1k/2026-challenge-demos/fast_tokenizer/` | FAST action tokenizer (same 100-task assets) |
> **Important:** the normalization stats and FAST tokenizer are the **100-task ("meta100")** assets, deliberately kept
> instead of the base checkpoint_2's own assets. Use the ones shipped here β mixing in a different `norm_stats.json`
> will produce wrong action scaling.
## How it was trained
| | |
|---|---|
| Task | `moving_boxes_to_storage` (task_index 16), 200 demo episodes, 2,919,245 frames |
| Dataset | `behavior-1k/2026-challenge-demos` (LeRobot v3.0), RGB-only view |
| Base weights | `IliaLarchenko/behavior_submission/checkpoint_2` (2025 arch: `task_embeddings (50,2048)`, `task_stage_embeddings`, `stage_pred_from_vlm`) |
| Weight adaptation | `task_embeddings` expanded **50 β 100** (rows 0β49 copied, 50β99 random-init); `task_stage_embeddings` and `stage_pred_from_vlm` dropped; new `task_only_embeddings` and `skill_pred_from_vlm` random-init |
| Hardware | 8 Γ NVIDIA H200 |
| Sharding | FSDP, `fsdp_devices=8`, pure model-parallel (no data-parallel replica) |
| Global batch | 512 (64 / GPU) |
| Steps | 15,000 (β2.6 epochs), ~19.5 h wall-clock, ~4.2 s/it |
| Optimizer | AdamW, cosine schedule: warmup 1000 β peak LR 1e-4 β 1e-5 over 15,000 steps |
| Framework | openpi (JAX/Flax nnx), `b1k` training stack |
### Final training metrics (step 14999)
| metric | value |
|---|---|
| total loss | β 0.018 |
| FAST token accuracy | β 0.95 |
| subtask accuracy | β 0.9998 |
| grad norm | β 0.045 |
Loss trajectory: 0.71 (step 0) β 0.035 (step 7k) β 0.018 (step 15k).
## How to use
This checkpoint plugs into the `openpi` / `b1k` (behavior-1k-solution) training & inference stack. Weights are stored as
plain Orbax params; load them with openpi's restore utility (which strips sharding so you can re-shard freely):
```python
import numpy as np
import openpi.models.model as _model
# Point at the params/ directory of this repo (downloaded locally)
params = _model.restore_params("path/to/params", restore_type=np.ndarray)
# params["task_only_embeddings"], the pi0.5 backbone, action expert, etc.
```
For rollout/eval, build the **PiBehavior task-only** model config, load these `params`, and supply the
`norm_stats.json` + `fast_tokenizer` from `assets/` in this repo so inputs are normalized and actions are
tokenized exactly as in training. The task prompt for conditioning is task 16's language instruction
(`moving_boxes_to_storage`) from the challenge `meta/tasks.jsonl`.
## Notes & limitations
- Single-task specialist: trained only on task 16. The task-only embedding for other task indices is either random-init
(indices 50β99) or inherited from the base (0β49) and was **not** tuned here.
- RGB-only: expects the 224Γ224 RGB observation layout; depth inputs are not used.
- Trained on the 2026-challenge demo split; no held-out evaluation numbers are included in this card.
|