How to use from the
Use from the
LeRobot library

EVO1 · LIBERO (Stage 2, 70k)

This is an EVO1 vision-language-action checkpoint trained on all four LIBERO suites with the two-stage LeRobot recipe: 5k steps of action-head-only training followed by joint VLM and action-head finetuning. This checkpoint was saved at step 70,000 of the 80k Stage-2 schedule and had the best overall result among the evaluated 10k, 40k, 60k, and 70k checkpoints.

Results

LeRobot LIBERO evaluation with seed 1000, 50 episodes per task, 10 tasks per suite, 14-action replanning, 448×448 observations, and 2,000 episodes overall:

Suite Successful episodes Episodes Success rate
LIBERO Spatial 485 500 97.0%
LIBERO Object 496 500 99.2%
LIBERO Goal 483 500 96.6%
LIBERO-10 469 500 93.8%
Overall 1,933 2,000 96.65%

These are single-seed results, not a multi-seed mean or confidence estimate.

Evaluation

Install LeRobot with the EVO1 and LIBERO dependencies:

pip install "lerobot[evo1,libero] @ git+https://github.com/huggingface/lerobot.git@e40b58a8dfa9e7b86918c374791599d070518d11"

The following evaluates task 0 of LIBERO Spatial. Run task IDs 0–9 to reproduce the suite result.

export MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl

lerobot-eval \
  --policy.path=zuoxingdong/evo1_libero \
  --policy.vlm_model_name=OpenGVLab/InternVL3-1B-hf \
  --policy.device=cuda \
  --policy.use_amp=true \
  --policy.vlm_dtype=bfloat16 \
  --policy.use_flash_attn=false \
  --policy.enable_gradient_checkpointing=false \
  --policy.n_action_steps=14 \
  --policy.num_inference_timesteps=32 \
  --policy.postprocess_action_dim=7 \
  --policy.binarize_gripper=true \
  --policy.gripper_threshold=0.0 \
  --policy.gripper_below_threshold_value=-1.0 \
  --policy.gripper_above_threshold_value=1.0 \
  --env.type=libero \
  --env.task=libero_spatial \
  --env.task_ids='[0]' \
  --env.camera_name=agentview_image,robot0_eye_in_hand_image \
  --env.camera_name_mapping='{agentview_image: image, robot0_eye_in_hand_image: image2}' \
  --env.control_mode=relative \
  --env.obs_type=pixels_agent_pos \
  --env.observation_width=448 \
  --env.observation_height=448 \
  --env.init_states=true \
  --env.episode_length=280 \
  --env.render_mode=rgb_array \
  --env.max_parallel_tasks=1 \
  --eval.n_episodes=50 \
  --eval.batch_size=1 \
  --eval.use_async_envs=false \
  --eval.recording=false \
  --seed=1000 \
  --output_dir=eval/evo1_libero/spatial-task-0

Use episode lengths 280 for libero_spatial and libero_object, 300 for libero_goal, and 520 for libero_10.

Training details

  • Dataset: all four suites from lerobot/libero, revision a1aaacb7f6cd6ee5fb43120f673cebb0cfea7dd4, with the standard enabled LeRobot image transforms.
  • Stage 1: randomly initialized action expert only, 5k steps.
  • Stage 2: VLM and action expert finetuning, 80k-step cosine schedule; this release is step 70k.
  • Both stages: global batch 128, learning rate 1e-5, warmup 1,000, weight decay 1e-3, dropout 0.2, gradient clipping 1.0, chunk size 50, image size 448, and padded state/action dimensions 24.
  • Measured topology: two DDP processes with batch 64 per process on two H100 GPUs using bf16 AMP.
  • Base VLM source revision: 014c0583a0d4bedf29fbe2dbff4f865eb998e171.
  • Model weight SHA-256: c6ae0c7350d1810a064d16080137fdbc42d6dac5c6cf2cfb3874907efd959318.

Limitations

  • Evaluation was run with one seed (1000).
  • The reported behavior depends on 14-action replanning and the documented LIBERO gripper postprocessing.
  • Loading the policy also downloads OpenGVLab/InternVL3-1B-hf unless it is already cached.

License

The EVO1 code is MIT-licensed. InternVL3 is released under MIT, while its Qwen language component is covered by the Qwen License. This model is therefore published with license: other and Qwen attribution. The lerobot/libero dataset is Apache-2.0.

Downloads last month
44
Safetensors
Model size
0.8B params
Tensor type
F32
·
Video Preview
loading

Model tree for zuoxingdong/evo1_libero

Dataset used to train zuoxingdong/evo1_libero