pythonsong/smolvla-armnetbench-8task
SmolVLA fine-tuned on ArmnetBench v0.1 (8 single-arm SO-101 tasks)
Fine-tuned from `lerobot/smolvla_base` on the human-teleoperated reference demonstrations of `armnet/armnetbench_v01_lerobot_so101` (revision v1.0).
Data
Only the 400 policy_type == "teleoperated" episodes were used (50 per task × 8 tasks, 120,735 frames, 20 fps) — the other ~2,099 episodes in that dataset are policy rollouts (ACT/Diffusion/SmolVLA/π0/π0.5/GR00T-N1.7/MolmoAct2), including failures and suboptimal trajectories, and were excluded to avoid training on incorrect/noisy actions.
Tasks: block_stack, cable_clip, cable_unclip, eye_drops_to_basket, eye_drops_to_shelf, ring_insert, tool_insert, tool_removal.
Cameras: front (576×1024), top (576×1024), wrist (720×1280), renamed to observation.images.camera{1,2,3} respectively to match the smolvla_base checkpoint's expected input keys — pass the same --rename_map at inference/eval time.
Training
- 4× NVIDIA H200,
accelerateDDP (--multi_gpu --num_processes=4, bf16) - Full fine-tune:
freeze_vision_encoder=false,train_expert_only=false batch_size=64per GPU × 4 = 256 effectivesteps=20000(cosine decay,scheduler_warmup_steps=1000,scheduler_decay_steps=20000)- ~42 epochs over the 400-episode set
- Final train loss: 0.65 → 0.013, grad norm stabilized ~0.2
- Wall-clock: ~4h07m
Usage
from lerobot.policies.smolvla.modeling_smolvla import SmolVLAPolicy
policy = SmolVLAPolicy.from_pretrained("<repo_id>")Trained with LeRobot.
