LeRobot documentation

VLABench

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 は、言語条件付きのロボティック操作と長期推論のための大規模ベンチマークです。アップストリームのスイートは、2,000 個以上のオブジェクトにわたる 100 のタスクカテゴリをカバーし、ロボットの知性の 6 つの側面を評価します。具体的には、メッシュとテクスチャの理解、空間推論、世界知識の転移、セマンティックな指示の理解、物理法則の理解、そして長期計画です。MuJoCo / dm_control をベースに構築され、Franka Panda 7-DOF アームを使用しています。LeRobot は、--env.task を通じてこれらのタスクのうち 43 個を公開しています(21 個のプリミティブ + 22 個の複合タスク、詳細は下記の 利用可能なタスク を参照)。

VLABench benchmark overview

利用可能なタスク

VLABenchには、LeRobotの--env.taskインターフェースで43のタスクカテゴリをカバーする2つのタスクスイートが同梱されています:

スイートCLI名タスク説明
プリミティブprimitive21単一/少数のスキル組み合わせ(選択、挿入、物理QA)
複合composite22マルチステップ推論と長期ホライズンの計画(料理、配置変更)

基本タスク: 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、および物理推論タスク(density_qa、friction_qa、magnetism_qa、reflection_qa、simple_cuestick_usage、simple_seesaw_usage、sound_speed_qa、thermal_expansion_qa、weight_qa)。

複合タスク: 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 は3つの形式を受け入れます:

  • 単一のタスク名(select_fruit)
  • カンマ区切りのリスト (select_fruit,heat_food)
  • スイートのショートカット(primitive、composite、またはprimitive,composite)

インストール

VLABenchはPyPIには公開されていません。配布方法はOpenMOSS/VLABenchのGitHubリポジトリのみです。そのため、LeRobotはvlabenchのextraを提供していません。VLABenchに必要なMuJoCo / dm_controlのバージョン固定と合わせて、editableなクローンとして手動でインストールし、その後メッシュアセットを取得してください。

# 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.py
VLABench 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)

評価

以下のすべての評価スニペットは、CIが実行するコマンドを反映しています(.github/workflows/benchmark_tests.ymlを参照)。--rename_map引数は、VLABenchのimage / second_image / wrist_imageカメラキーを、公開されているsmolvla_vlabenchポリシーが学習に使用した3カメラ(camera1 / camera2 / camera3)の入力レイアウトにマッピングします。

単一タスク評価(クイックな反復に推奨)

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"}'

マルチタスク評価

カンマ区切りのタスクのリストを渡します:

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"}'

スイート全体の評価

スイート全体(21個のすべてのプリミティブまたは22個のすべてのコンポジット)を実行します:

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"}'

または、両方のスイート:

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"}'

推奨される評価エピソード

再現可能なベンチマークのために、タスクごとに10エピソード(プリミティブスイートの全体では210、コンポジットでは220)を使用します。これはVLABench論文のプロトコルと一致しています。

ポリシーの入力と出力

観察結果:

  • observation.state — 7次元のエンドエフェクタ状態(位置 xyz + オイラー角 xyz + グリッパ)
  • observation.images.image — フロントカメラ、480×480 HWC uint8
  • observation.images.second_image — 2番目のカメラ、480×480 HWC uint8
  • observation.images.wrist_image — 手首カメラ、480×480 HWC uint8

アクション:

  • Box(-1, 1, shape=(7,)) における連続制御 — 3D位置 + 3Dオイラー姿勢 + 1Dグリップ。

トレーニング

データセット

Hub上のLeRobot形式の事前収集済みVLABenchデータセット:

トレーニングコマンの例

primitive suiteでSmolVLAベースをファインチューニングします:

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=10000

公開された結果の再現

公開されたチェックポイント lerobot/smolvla_vlabench は、上記の primitive-suite データセットで学習されており、Single-task / Suite-wide コマンドで評価されます。CI では、ベンチマークに変更を加えるすべての PR に対して、10 プリミティブタスクのスモーク評価(各タスク 1 エピソード)が実行されます。

Update on GitHub