Robotics
behavior-1k
pi0.5
vla

Pi0.5 policy for BEHAVIOR-1K task 38 spraying_for_bugs

"Pick up the pesticide atomizer in the garden and spray insectifuge to fully cover both potted plants in the garden."

This is a single-task vision-language-action policy for task 38 spraying_for_bugs of the BEHAVIOR-1K benchmark. It is Pi0.5-based, has 3.4B parameters, and controls the R1Pro robot from three 224Γ—224 RGB cameras plus proprioception. It predicts 30-step action chunks.

It was fine-tuned for 25,000 steps on task 38 demonstrations only. The starting point was checkpoint_3 of the 1st-place 2025 BEHAVIOR Challenge solution (Larchenko, Zarin, Karnatak; paper). checkpoint_3 had been trained on 13 tasks (4, 27, 31–33, 35–39, 41, 46, 49), task 38 among them.

Status: training only. This model has not been evaluated in the BEHAVIOR simulator yet. Lower training loss does not guarantee a higher task success rate.

loss curve

Files

Path What it is
params/ Model weights (orbax, ~12.6 GB), from the final training step (24,999)
assets/IliaLarchenko/behavior_224_rgb/ Norm stats + FAST tokenizer, copied unchanged from checkpoint_3
changes.patch, behavior1k_decode.patch Code changes used for training (see below)
metrics.json Logged training metrics every 100 steps

Optimizer state is not included. Intermediate checkpoints (every 2,500 steps) are kept separately in jermo1120/b1k-task38-spraying-for-bugs.

Results (training metrics only)

start (steps 0–500 avg) end (last 1k steps avg)
action_loss 0.051 0.045

The action loss rose to ~0.077 during the first ~3k steps, plateaued, then fell steadily as the learning rate decayed (2.5k-step averages: 0.067, 0.076, 0.075, 0.071, 0.073, 0.061, 0.057, 0.052, 0.049, 0.046). Two single batches (around steps 2,400 and 11,200) were outliers.

Final logged step (24,900): total loss 0.078, action loss 0.045, subtask accuracy 0.996, FAST token accuracy 0.793, grad norm 1.20. These are single batches of 16 with no held-out validation split.

Training setup

Init IliaLarchenko/behavior_submission/checkpoint_3/params (all weights, incl. task embeddings)
Data Task 38 only: 200 episodes, ~1.30M frames (avg demo 3.6 min), from IliaLarchenko/behavior_224_rgb (224Γ—224 RGB, 3 cameras)
Steps / batch 25,000 steps Γ— batch 16 (~31% of one epoch). Batch 32 runs out of memory on one 80 GB A100.
LR cosine: warmup 200 β†’ peak 5e-6 β†’ 5e-7 at 25k
Model config Same as the winners' pi_behavior_b1k_fast (FAST aux loss, correlated noise, 15 flow samples, frozen vision backbone)
Norm stats / tokenizer Reused from checkpoint_3 (not recomputed on task 38)
Hardware / time 1Γ— A100-SXM4-80GB, 3.0 s/step, ~21 h of training steps
Code behavior-1k-solution ca556f7 + changes.patch; BEHAVIOR-1K 684a83050 + behavior1k_decode.patch

Deviations from the original data pipeline (read before comparing)

  • Videos re-encoded. Task 38's HEVC videos were re-encoded to H.264, CRF 18, -g 4, with frame counts verified identical, because random-frame decoding was the bottleneck. The re-encode is lossy but visually near-identical at 224px.
  • Decoder seek backoff reduced from 5 s to 0.5 s (behavior1k_decode.patch). This is safe only with the short-GOP videos above.
  • Added a tasks filter to DataConfig. A weight-loader fix was needed for orbax 0.11.13 (changes.patch).

Environment notes

  • A fresh uv sync today needed chex==0.1.89 (no longer pulled in by optax) and pyarrow==20.0.0 (newer versions require NumPy 2). Run training with uv run --no-sync so uv keeps them.
  • On a container with a 125 GB RAM limit, saving the ~43 GB train state got the job killed for running out of memory. Setting TORCHINDUCTOR_COMPILE_THREADS=1 (stops each data worker from spawning a compile pool) and num_workers=12 fixed it in most cases. The run was resumed from checkpoints 3 times after such crashes (from steps 2,500, 22,500 and 22,500); resuming restores the weights, optimizer state and step count, so the LR schedule continued as planned. Steps 22,500–25,000 were therefore trained on three times, and only the final attempt was kept.

Usage

Use with the winners' repo and config pi_behavior_b1k_fast (same architecture):

huggingface-cli download jermo1120/pi05-b1k-task38-spraying-for-bugs --local-dir ./ckpt
uv run scripts/serve_b1k.py policy:checkpoint --policy.config pi_behavior_b1k_fast --policy.dir ./ckpt

Then run the BEHAVIOR eval with task.name=spraying_for_bugs. The model's task embedding uses the 2025 numbering (task id 38). For the 2026 evaluator, override the incoming task id with 38.

Receding horizon control is done at inference time by the serving wrapper (B1KPolicyWrapper); training is unchanged. Defaults: execute 26 of the 30 predicted actions (--actions_to_execute 26), keep the next 4 to inpaint the start of the next chunk (actions_to_keep=4), and play the 26 actions back in 20 control steps (execute_in_n_steps=20).

Credits

Base model and training code: Ilia Larchenko, Gleb Zarin, Akash Karnatak (repo, checkpoints), built on Physical Intelligence's Pi0.5 / openpi. Benchmark: BEHAVIOR-1K, Stanford Vision and Learning Lab.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading

Model tree for jermo1120/pi05-b1k-task38-spraying-for-bugs

Finetuned
(3)
this model

Datasets used to train jermo1120/pi05-b1k-task38-spraying-for-bugs

Paper for jermo1120/pi05-b1k-task38-spraying-for-bugs