X-VLA v20 โ€” BEHAVIOR-1K Task 0 (Turn on Radio), Retrain with Correct Skill Weights

Fine-tune of 2toINF/X-VLA-Pt on a single BEHAVIOR-1K task (turning on the radio receiver), using the v20 architecture from markli1hoshipu/behavior1k-xvla @ v20.

What's different vs Hoshipu/xvla-v20-task0-mp-radio

The earlier model used the global 50-task SKILL_CLASS_WEIGHTS (sqrt-inverse-frequency across all 34 BEHAVIOR-1K skills). For this single-task dataset the distribution is very different, and the global weights silently suppressed the pick up from skill prediction at inference: gradients pulled the classifier toward press (global weight 2.26) far harder than toward pick up from (global weight 0.10), even though "pick up from" is 35.9% of frames in radio data.

Fix: recomputed the weights from this dataset's actual 4-skill distribution.

Skill global weight (old) task-0 weight (new) ฮ”
move to 0.086 0.538 6ร—
pick up from 0.102 0.601 6ร—
place on 0.214 1.957 9ร—
press 2.256 0.904 0.4ร—

Recipe: behavior1k_training/compute_skill_weights.py (added in v20) โ€” generates a JSON consumable via continue_train.py --skill_weights_json โ€ฆ.

Training

Setting Value
Base model 2toINF/X-VLA-Pt
Dataset Hoshipu/behavior-1k-mp-collected-turning-on-radio (success, task 0)
Trainable episodes 1354
Total frames 2,845,413
GPUs 4 ร— NVIDIA H200
Per-GPU batch 32
Effective batch 128
Precision bf16
LR (core) 1e-4, cosine decay to 1e-5
LR (VLM, soft prompts) 0.1 ร— LR
Warmup 2000 steps
Freeze schedule VLM + transformer core frozen for first 1000 steps (only soft prompts + action heads train)
Iterations 60,000
Optimizer AdamW, betas=(0.9, 0.95), wd=0.0, grad-clip 1.0
Skill weights recomputed from MP-radio's 4-skill distribution (see above)

Loss trajectory (selected steps)

Step total joints skill_cls progress
0 15.67 15.11 0.545 0.006
1000 0.521 0.509 0.005 0.007
5000 0.126 0.120 0.001 0.006
10000 0.028 0.024 0.000 0.004
20000 0.029 0.026 0.000 0.003
30000 0.032 0.029 0.000 0.003
40000 0.024 0.023 0.000 0.001
50000 0.013 0.012 0.000 0.002
59980 0.014 0.011 0.000 0.003

Architecture (v20)

  • Additive per-task + per-skill soft prompts (task_prompt_hub[task_id] + skill_prompt_hub[skill_id]), 32 tokens ร— 1024 dim each, zero-initialized
  • Skill-conditioned progress head
  • Skill classifier head on pooled VLM features with dataset-specific sqrt-inv-freq weighted CE (ฮป=0.1)
  • Skill-enriched language instructions at training, e.g. "Turn on the radio receiver. Current: move to radio."
  • 23-D action space for R1Pro (3 base + 4 trunk + 7 arm-L + 1 grip-L + 7 arm-R + 1 grip-R), 30-step horizon, 3 RGB cameras (head + L/R wrist)

Usage

from transformers import AutoModel, AutoConfig
REPO = "Hoshipu/xvla-v20-task0-mp-radio-lr1e4-rw"
CKPT = "ckpt-60000"
config = AutoConfig.from_pretrained(REPO, subfolder=CKPT, trust_remote_code=True)
model  = AutoModel.from_pretrained(REPO, subfolder=CKPT, trust_remote_code=True)

Or deploy via the WebSocket server in the repo:

git clone -b v20 https://github.com/markli1hoshipu/behavior1k-xvla.git
cd behavior1k-xvla && bash setup.sh
huggingface-cli download Hoshipu/xvla-v20-task0-mp-radio-lr1e4-rw \
    --include "ckpt-60000/*" --local-dir ./xvla
cd behavior1k_training
python deploy_b1k.py --model_path ../xvla/ckpt-60000 --port 8000

Files (under ckpt-60000/)

  • model.safetensors โ€” final 60k-step weights (3.5 GB, bf16)
  • config.json, preprocessor_config.json, tokenizer*, vocab.json, merges.txt
  • modeling_xvla.py, configuration_xvla.py, transformer.py โ€” patched v20 modules
  • modeling_florence2.py, configuration_florence2.py, action_hub.py, processing_xvla.py โ€” unchanged from base
Downloads last month

-

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

Model tree for Hoshipu/xvla-v20-task0-mp-radio-lr1e4-rw

Finetuned
2toINF/X-VLA-Pt
Finetuned
(7)
this model