LeRobot documentation
VLABench
VLABench
The commands below run the simulator locally. To keep its dependencies away from your policy's, serve it instead with `lerobot-env-server --config_path=docker/sim/configs/vlabench.yaml --sim.task=--docker=true`, where ` ` is the command's `--env.task`, and add `--env.server.endpoint=tcp/127.0.0.1:7448` to the command. A server runs the task it was started with (see [Simulation: local or served](./simulation)).
VLABench é um benchmark em larga escala para manipulação robótica condicionada por linguagem com raciocínio de longo horizonte. A suíte upstream cobre 100 categorias de tarefas entre mais de 2.000 objetos e avalia seis dimensões da inteligência robótica: compreensão de malha & textura, raciocínio espacial, transferência de conhecimento do mundo, compreensão de instruções semânticas, compreensão de leis físicas e planejamento de longo horizonte. Construído sobre MuJoCo / dm_control com um braço Franka Panda de 7-DOF. O LeRobot expõe 43 dessas tarefas através de --env.task (21 primitivas + 22 compostas, veja Tarefas disponíveis abaixo).
- Artigo: VLABench: A Large-Scale Benchmark for Language-Conditioned Robotics Manipulation with Long-Horizon Reasoning
- GitHub: OpenMOSS/VLABench
- Site do projeto: vlabench.github.io
- Política pré-treinada:
lerobot/smolvla_vlabench
Tarefas disponíveis
VLABench inclui dois conjuntos de tarefas que abrangem 43 categorias de tarefas na superfície --env.task do LeRobot:
| Suite | Nome da CLI | Tarefas | Descrição |
|---|---|---|---|
| Primitiva | primitive | 21 | Combinações de uma / poucas habilidades (seleção, inserção, QA de física) |
| Composto | composite | 22 | Raciocínio em múltiplas etapas e planejamento de longo prazo (cozinhar, reorganizar) |
Tarefas primitivas: select_fruit, select_toy, select_chemistry_tube, add_condiment, select_book, select_painting, select_drink, insert_flower, select_billiards, select_ingredient, select_mahjong, select_poker, e tarefas de raciocínio físico (density_qa, friction_qa, magnetism_qa, reflection_qa, simple_cuestick_usage, simple_seesaw_usage, sound_speed_qa, thermal_expansion_qa, weight_qa).
Tarefas compostas: cluster_billiards, cluster_book, cluster_drink, cluster_toy, cook_dishes, cool_drink, find_unseen_object, get_coffee, hammer_nail, heat_food, make_juice, play_mahjong, play_math_game, play_poker, play_snooker, rearrange_book, rearrange_chemistry_tube, set_dining_table, set_study_table, store_food, take_chemistry_experiment, use_seesaw_complex.
--env.task aceita três formas:
- um único nome de tarefa (
select_fruit) - uma lista separada por vírgulas (
select_fruit,heat_food) - um atalho de suíte (
primitive,compositeouprimitive,composite)
Instalação
VLABench é não está no PyPI — sua única distribuição é o repositório GitHub OpenMOSS/VLABench — portanto, o LeRobot não expõe um extra vlabench. Instale-o manualmente como um clone editável, junto com as versões fixas de MuJoCo / dm_control que o VLABench precisa, e em seguida obtenha os assets de malha:
# After following the standard LeRobot installation instructions.
git clone https://github.com/OpenMOSS/VLABench.git ~/VLABench
git clone https://github.com/motion-planning/rrt-algorithms.git ~/rrt-algorithms
pip install -e ~/VLABench -e ~/rrt-algorithms
pip install "mujoco==3.2.2" "dm-control==1.0.22" \
open3d colorlog scikit-learn openai gdown
python ~/VLABench/scripts/download_assets.pyVLABench requires Linux (`sys_platform == 'linux'`) and Python 3.10+. Set the MuJoCo rendering backend before running:export MUJOCO_GL=egl # for headless servers (HPC, cloud)
Avaliação
Todos os trechos de avaliação abaixo espelham o comando executado pelo CI (veja .github/workflows/benchmark_tests.yml). O argumento --rename_map mapeia as chaves de câmera image / second_image / wrist_image do VLABench para o layout de entrada de três câmeras (camera1 / camera2 / camera3) no qual a política smolvla_vlabench liberada foi treinada.
Avaliação de tarefa única (recomendada para iteração rápida)
lerobot-eval \
--policy.path=lerobot/smolvla_vlabench \
--env.type=vlabench \
--env.task=select_fruit \
--eval.batch_size=1 \
--eval.n_episodes=10 \
--eval.use_async_envs=false \
--policy.device=cuda \
'--rename_map={"observation.images.image": "observation.images.camera1", "observation.images.second_image": "observation.images.camera2", "observation.images.wrist_image": "observation.images.camera3"}'Avaliação multi-tarefa
Passe uma lista de tarefas separadas por vírgulas:
lerobot-eval \
--policy.path=lerobot/smolvla_vlabench \
--env.type=vlabench \
--env.task=select_fruit,select_toy,add_condiment,heat_food \
--eval.batch_size=1 \
--eval.n_episodes=10 \
--eval.use_async_envs=false \
--policy.device=cuda \
'--rename_map={"observation.images.image": "observation.images.camera1", "observation.images.second_image": "observation.images.camera2", "observation.images.wrist_image": "observation.images.camera3"}'Avaliação em toda a suíte
Execute uma suíte inteira (todos os 21 primitivos ou todos os 22 compostos):
lerobot-eval \
--policy.path=lerobot/smolvla_vlabench \
--env.type=vlabench \
--env.task=primitive \
--eval.batch_size=1 \
--eval.n_episodes=10 \
--eval.use_async_envs=false \
--policy.device=cuda \
--env.max_parallel_tasks=1 \
'--rename_map={"observation.images.image": "observation.images.camera1", "observation.images.second_image": "observation.images.camera2", "observation.images.wrist_image": "observation.images.camera3"}'Ou ambos os conjuntos:
lerobot-eval \
--policy.path=lerobot/smolvla_vlabench \
--env.type=vlabench \
--env.task=primitive,composite \
--eval.batch_size=1 \
--eval.n_episodes=10 \
--eval.use_async_envs=false \
--policy.device=cuda \
--env.max_parallel_tasks=1 \
'--rename_map={"observation.images.image": "observation.images.camera1", "observation.images.second_image": "observation.images.camera2", "observation.images.wrist_image": "observation.images.camera3"}'Episódios de avaliação recomendados
10 episódios por tarefa para benchmarking reproduzível (210 no total para a suíte completa de primitivas, 220 para as compostas). Corresponde ao protocolo do paper VLABench.
Entradas e saídas da política
Observações:
observation.state— estado de 7 dimensões do efetuador final (posição xyz + Euler xyz + garra)observation.images.image— câmera frontal, 480×480 HWC uint8observation.images.second_image— segunda câmera, 480×480 HWC uint8observation.images.wrist_image— câmera do pulso, 480×480 HWC uint8
Ações:
- Controle contínuo em
Box(-1, 1, shape=(7,))— posição 3D + orientação Euler 3D + garra 1D.
Treinamento
Conjuntos de dados
Conjuntos de dados VLABench pré-coletados no formato LeRobot no Hub:
VLABench/vlabench_primitive_ft_lerobot_video— 5.000 episódios, 128 tarefas, imagens de 480×480.VLABench/vlabench_composite_ft_lerobot_video— 5.977 episódios, 167 tarefas, imagens de 224×224.
Exemplo de comando de treinamento
Ajuste fino de um SmolVLA base no conjunto de primitivas:
lerobot-train \
--policy.type=smolvla \
--policy.repo_id=${HF_USER}/smolvla_vlabench_primitive \
--policy.load_vlm_weights=true \
--policy.push_to_hub=true \
--dataset.repo_id=VLABench/vlabench_primitive_ft_lerobot_video \
--env.type=vlabench \
--env.task=select_fruit \
--output_dir=./outputs/smolvla_vlabench_primitive \
--steps=100000 \
--batch_size=4 \
--env_eval_freq=5000 \
--eval.batch_size=1 \
--eval.n_episodes=1 \
--save_freq=10000Reproduzindo resultados publicados
O checkpoint liberado lerobot/smolvla_vlabench foi treinado no conjunto de dados primitive-suite acima e é avaliado com os comandos Single-task / Suite-wide. O CI executa uma avaliação de fumaça com 10 tarefas de primitivas (um episódio cada) em cada PR que altera o benchmark.