pi0.5 v6d FOCUS editor — round 1 (step 600)

A small learned action editor trained with offline RL on top of a frozen pi0.5 policy, for a bimanual pipette task on a Unitree G1 with Inspire hands. This repo holds the round-1 checkpoint (600 learner updates) and the exact replay snapshot it was trained on.

On the real robot this round gave the best results in the insertion phase (P3). In 23 episodes that reached P3, the median P3 duration was 26 s, against 48 s for the frozen policy alone, with fewer operator takeovers per episode (3.5 vs 4.5).

Files

File Size Content
step-00000600.pt 258 MB Learner checkpoint (PyTorch, weights_only=True loadable): editor actor, twin critic, target networks, optimizers, RNG states, learner_options
data/p1-1792359710730660766.npz 1.1 GB Replay snapshot used for this round: 15 episodes, 8,203 decision windows
data/p1-1792359710730660766.json 2.5 KB Snapshot metadata (contract hash, episode ids, start phases)
config/pi05_fulltask_v6d_focusvel_continuous_30hz.yaml — The RL recipe the checkpoint was trained with

SHA-256: checkpoint 39b39e337aca9230…, snapshot 8bb1586e80bad3f8… (matches replay_sha256 in the checkpoint), metadata 2a6eba1469816567….

Method

  • Base policy (frozen): pi0.5 v6d FOCUS checkpoint jren313/starvla-pipette-5task-v6d-pi05-egofocusvel (revision b0b5f369…), ego RGB plus a FOCUS crop, wrist velocity as model state. Its 30×32 action chunk is the reference.
  • Editor (actor): an MLP over pooled pi0.5 prefix features (2 views × 2×2 regions × 2048 = 16,384 dims), the 65-d normalized state, the full reference chunk and a phase one-hot. It outputs a bounded residual 0.2·tanh(·) on the 18 active action dims of the 30-row chunk. It is zero-initialized, so at step 0 it reproduces the frozen policy exactly. Held channels per phase and the 14 IK joint seeds are left unchanged.
  • Learner: TD3-style with a twin critic (which also encodes the async scheduler context). Actor loss = 1.0·human-BC MSE + 1.0·reference MSE − 0.1·Q. Batch 128, actor lr 1e-4, critic lr 3e-4, τ 0.005, actor updated every 2 steps, 600 updates, seed 42.
  • Execution: asynchronous ACT blending (5 Hz inference, 30 Hz chunk playback, decay 0.01).
  • Reward: sparse. +1 per phase milestone (P1–P4) and +11 on full-task success, discounted by elapsed time.

Data

The snapshot contains 15 full-task successful episodes (P1→P5) collected with the zero editor, i.e. the frozen pi0.5, with operator PICO/joystick takeovers. Each window has:

  • token, next_token: 16,384-d frozen visual features
  • state, next_state: 65-d normalized state
  • reference, next_reference: the frozen pi0.5 chunk
  • action (30×18): the executed proposal, or the human label on takeover rows
  • masks: valid, human, bc_eligible, td_eligible
  • phase, next_phase, timestamps, scheduler_context
  • outcome and episode outcome

Human labels cover the rows the recorder saw in each window (about rows 1–5 of 30). Raw camera images are not included. The features are what the learner trains on, so the snapshot alone reproduces this round. Re-exporting or retraining the pi0.5 action head itself would need the raw observations, which are not published.

Reproducing

The training code is the gr00t_rlt learner of VLA-Precision (scripts/gr00t_rlt.py::fit_heads). This round predates three later learner options. To train with the round-1 recipe on newer code, turn them off:

  • the static-human filter: keep_static_human=True;
  • the human batch quota: human_batch_fraction=0;
  • the full-chunk relabel at export: not needed, because this snapshot already holds the recorder labels.

Bit-exact reproduction of the checkpoint has not been verified.

Downloads last month

-

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