How to use from the
Use from the
LeRobot library
# See https://github.com/huggingface/lerobot?tab=readme-ov-file#installation for more details
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e .[smolvla]
# Launch finetuning on your dataset
python lerobot/scripts/train.py \
--policy.path=arrow-hf/smolvla-robotwin-place-bread-skillet-50ep \
--dataset.repo_id=lerobot/svla_so101_pickplace \
--batch_size=64 \
--steps=20000 \
--output_dir=outputs/train/my_smolvla \
--job_name=my_smolvla_training \
--policy.device=cuda \
--wandb.enable=true
# Run the policy using the record function
python -m lerobot.record \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \ # <- Use your port
  --robot.id=my_blue_follower_arm \ # <- Use your robot id
  --robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- Use your cameras
  --dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording
  --dataset.repo_id=HF_USER/dataset_name \  # <- This will be the dataset name on HF Hub
  --dataset.episode_time_s=50 \
  --dataset.num_episodes=10 \
  --policy.path=arrow-hf/smolvla-robotwin-place-bread-skillet-50ep

SmolVLA RoboTwin place_bread_skillet (50 ep, single instruction)

SmolVLA policy fine-tuned on 50 demonstration episodes of the place_bread_skillet task from RoboTwin 2.0 (demo_clean config), starting from the lerobot/smolvla_robotwin base checkpoint.

Task

Dual-arm pick-and-place: pick up the bread and place it inside the skillet.

  • Robot: Agilex dual-arm, end-effector control (16D state, 16D action)
  • Cameras: 3 RGB streams — dual_cam_global, cam_wrist_65, cam_wrist_75
  • Control rate: 10 Hz
  • Single fixed instruction: "place the bread in the skillet" (Strategy A, not random per-episode)

Training

Config Value
Base checkpoint lerobot/smolvla_robotwin
Training data 50 RoboTwin demonstrations (subset of place_bread_skillet_300ep), strategy A single instruction
Frames 8,298 (~165 frames/ep)
Batch size 32
Steps 6000 (~23 epochs)
Optimizer AdamW, lr=1e-4
Scheduler Cosine, warmup=300, decay=6000
Chunk size 50
Final train loss 0.008
Walltime ~2h 15min (A100)

Evaluation

Evaluated in RoboTwin 2.0 simulator (demo_clean config), 10 episodes, max_steps=400, action_chunk_exec=50.

Model Data Base Success
SmolVLA (smolvla_base) 300 ep smolvla_base 0/10 (0%)
SmolVLA (this model) 50 ep smolvla_robotwin 6/10 (60%)
X-VLA (xvla-base) 300 ep xvla-base 8/10 (80%)

Training with the smolvla_robotwin base checkpoint enables strong data efficiency: with 6× less data and 3× fewer training steps, this model jumps from 0% to 60% success rate on this task.

Successful episodes complete in 132–201 environment steps (13–20s); failed episodes time out at 400 steps.

Usage

from lerobot.policies.smolvla import SmolVLAPolicy

policy = SmolVLAPolicy.from_pretrained("arrow-hf/smolvla-robotwin-place-bread-skillet-50ep")

See LeRobot documentation for inference setup.

Citation

Built on SmolVLA and SmolVLA-RoboTwin, fine-tuned on data collected from RoboTwin 2.0.

Downloads last month
7
Safetensors
Model size
0.5B params
Tensor type
F32
·
BF16
·
Video Preview
loading

Model tree for arrow-hf/smolvla-robotwin-place-bread-skillet-50ep

Finetuned
(17)
this model