LeRobot documentation
LIBERO-plus
LIBERO-plus
LIBERO-plusは、LIBEROを基盤として構築された、Vision-Language-Action (VLA) モデル向けの頑健性ベンチマークです。元のLIBEROタスクセットに対して7つの独立した摂動次元を適用することで、ポリシーを体系的にストレステストし、標準的なベンチマークでは見逃されがちな失敗モードを明らかにします。
- 論文: ビジョン・言語・アクションモデルの包括的な頑健性分析
- GitHub: sylvestf/LIBERO-plus
- データセット: lerobot/libero_plus

摂動次元
LIBERO-plus は、これらの軸に沿って元の各 LIBERO タスクを乱数化することで、約 10,000 のタスクバリアントを作成します:
| 次元 | 変更点 |
|---|---|
| オブジェクトのレイアウト | ターゲットの位置、混同オブジェクトの有無 |
| カメラの視点 | カメラの位置、方向、視野 |
| ロボットの初期状態 | マニピュレーターの初期姿勢 |
| 言語の指示 | LLMによる書き換えタスクの説明(言い換え/同義語) |
| 照明条件 | 強度、方向、色、影 |
| 背景テクスチャ | シーンの表面とオブジェクトの外観 |
| センサーノイズ | 光度学的歪みと画像劣化 |
利用可能なタスクスイート
LIBERO-plus は、Spatial、Object、Goal、Long スイートの 40 元のタスクに摂動を適用します。これら 4 つのスイートに登録されている各タスクは、元のタスクのいずれかではなく、摂動が適用されたバリアントです。このフォークは、LIBERO-90 の 90 の摂動なしタスクも保持しています。
| スイート | CLI名 | 元のタスク | 登録されたタスク | 最大ステップ数 | 説明 |
|---|---|---|---|---|---|
| LIBERO-Spatial | libero_spatial | 10 | 2,402 | 280 | 空間的な関係について推論を必要とするタスク |
| LIBERO-Object | libero_object | 10 | 2,518 | 280 | 異なるオブジェクトを操作するタスク |
| LIBERO-Goal | libero_goal | 10 | 2,591 | 300 | ターゲットが変化するゴール条件付きタスク |
| LIBERO-90 | libero_90 | 90 | 90 | 400 | Unperturbed short-horizon LIBERO tasks |
| LIBERO-Long | libero_10 | 10 | 2,519 | 520 | LIBERO-100コレクションからの長期ホライズンタスク |
これらのカウントは、アップストリームのタスクレジストリから取得されます。4つのパーターブされたスイートには合計で10,030のタスクバリアントが含まれており、LIBERO-90はその合計には含まれません。カウントとタスクのインデックスは、インストールされているフォークのリビジョンに依存します。
Installing LIBERO-plus **replaces** vanilla LIBERO — it uninstalls `hf-libero` so that `import libero` resolves to the LIBERO-plus fork. You cannot have both installed at the same time. To switch back to vanilla LIBERO, uninstall the fork and reinstall with `pip install -e ".[libero]"`.
インストール
システム依存関係(Linux のみ)
sudo apt install libexpat1 libfontconfig1-dev libmagickwand-devPythonパッケージ
pip install -e ".[libero]" "robosuite==1.4.1" bddl easydict mujoco wand scikit-image gym
git clone https://github.com/sylvestf/LIBERO-plus.git
cd LIBERO-plus && pip install --no-deps -e .
pip uninstall -y hf-libero # so `import libero` resolves to the forkLIBERO-plus は pyproject の extra ではなく、その GitHub フォークからインストールされます。フォークは pip が処理できない名前空間パッケージとして提供されるため、クローンして PYTHONPATH に追加する必要があります。正規のインストール手順は docker/Dockerfile.benchmark.libero_plus を参照してください。MuJoCo が必須であるため、サポートされるのは Linux のみです。
Set the MuJoCo rendering backend before running evaluation:export MUJOCO_GL=egl # headless / HPC / cloud
LIBERO-plusの資産をダウンロード
LIBERO-plusは拡張アセットパックを別々に配布しています。Hugging Face データセットからassets.zipをダウンロードし、LIBERO-plusのパッケージディレクトリに展開してください:
# After installing the package, find where it was installed:
python -c "import libero; print(libero.__file__)"
# Then extract assets.zip into <package_root>/libero/assets/評価
デフォルトの評価(推奨)
アップストリームの評価ガイドの推奨に従い、各バリアントにつき1エピソードとして、4つのパーターブされたスイート全体で登録済みのすべてのバリアントを評価します。
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial,libero_object,libero_goal,libero_10 \
--eval.batch_size=1 \
--eval.n_episodes=1 \
--env.max_parallel_tasks=1これにより、上記のレジストリに対して10,030エピソードが実行されます。--eval.n_episodes=10を指定すると、同じコマンドで100,300エピソードが実行され、400エピソードにはなりません。
スモークテスト
フル評価を開始する前に、登録済みバリアント1つとエピソード1つでセットアップを確認してください。
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial \
--env.task_ids='[0]' \
--eval.batch_size=1 \
--eval.n_episodes=1これはセットアップの確認であり、代表的なロバストネス評価ではありません。
単一スイートの評価
LIBERO-plusスイートの1つで評価する:
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial \
--eval.batch_size=1 \
--eval.n_episodes=1--env.taskはスイート(libero_spatial、libero_objectなど)を選択します。--env.task_idsは、登録されたタスクのインデックス([0]、[1,2,3]など)に制限します。これらのインデックスは、4 つのパーターブドスイートのバリアントを識別します。省略すると、登録されたすべてのタスクが実行されます。複数のスイートを評価する場合、同じインデックスリストが各スイートに独立して適用されます。--eval.batch_sizeは、並列で実行される環境の数を制御します。--eval.n_episodesは、登録された各タスクごとに実行するエピソード数を設定します。この値を大きくすると、選択されたバリアントの評価が繰り返し行われますが、追加の異なるバリアントが選択されるわけではありません。
マルチスイート評価
カンマ区切りのリストを渡すことで、複数のスイートにまたがってポリシーをベンチマークできます:
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial,libero_object \
--eval.batch_size=1 \
--eval.n_episodes=1制御モード
LIBERO-plusは2つの制御モードをサポートしています。relative(デフォルト)とabsoluteです。異なるVLAチェックポイントは異なるアクションのパラメータ化で学習されているため、ポリシーにモードが一致していることを確認してください。
--env.control_mode=relative # or "absolute"パフォーマンスのリセット
デフォルトでは、LeRobotはLIBEROのハードリセット動作を維持します。固定初期状態を有効にすると、エピソードごとにシミュレータモデルとレンダラーを再構築することをスキップするために、ソフトリセットを選択できます。
--env.init_states=true --env.hard_reset=falseソフトリセットは高速ですが、環境の安定化ステップ以降はハードリセットとビット単位で同一にはなりません。そのため、カメラの観測値やポリシーの結果がわずかに異なる場合があります。ベンチマークの結果を再現する場合は、ハードリセットを使用してください。
ポリシーの入力と出力
観察結果:
observation.state— 8次元のプロプライオセプティブ特徴量(eef位置、軸角方向、グリップa qpos)observation.images.image— メインカメラの映像(agentview_image)、HWC uint8observation.images.image2— 手首カメラの映像(robot0_eye_in_hand_image)、HWC uint8
アクション:
Box(-1, 1, shape=(7,))における連続制御 — 6次元のエンドエフェクターのデルタ + 1次元のグリップ
評価ワークロードと再現性
評価エピソードの総数は、すべてのスイートにわたって選択された登録タスクの数 × --eval.n_episodesです。例えば、Spatialのすべてのバリアントを1エピソードずつ実行すると2,402エピソードになります。一方、SpatialとObjectで--env.task_ids='[0,1,2]'を選択し、それぞれ1エピソードずつ実行すると6エピソードになります。
400エピソードの計算(元のタスク40個 × 10エピソード)は、vanilla LIBEROに適用されるものであり、LIBERO-plusの完全な評価には適用されません。LIBERO-plusの評価では、登録された各バリアントにつき1エピソードから開始してください。あるバリアントのエピソードを繰り返し実行することは、元のタスクの異なるバリアントをサンプリングすることと同等ではありません。
カスタムサブセットを使用する場合は、フォークのタスク分類を用いて、摂動カテゴリと難易度を特定してください。すべての元のタスクが、すべての摂動カテゴリにおいて10種類の異なるバリアントを持つと仮定しないでください。結果を報告する際は、フォークのリビジョン、選択したスイートの名前とタスクのインデックス、バリアントごとのエピソード数、シード、リセット設定を記録してください。公開されている結果と比較する場合は、任意のサブセットを同等とみなすのではなく、ベンチマークのサンプリングおよび集約プロトコルに従ってください。
トレーニング
データセット
LIBERO-plus用のLeRobot形式の学習データセットは、以下の場所で利用できます:
トレーニングコマンの例
lerobot-train \
--policy.type=smolvla \
--policy.repo_id=${HF_USER}/smolvla_libero_plus \
--policy.load_vlm_weights=true \
--dataset.repo_id=lerobot/libero_plus \
--env.type=libero_plus \
--env.task=libero_spatial \
--output_dir=./outputs/ \
--steps=100000 \
--batch_size=4 \
--eval.batch_size=1 \
--eval.n_episodes=1 \
--env_eval_freq=1000LIBEROとの関係
LIBERO-plusはLIBEROのドロップイン拡張機能です:
- 同じ Python gym インターフェース(
LiberoEnv、LiberoProcessorStep) - 同じカメラ名と観測/アクション形式
- 同じタスクスイートの名前
- 同じ
liberoというPythonパッケージ名でインストールされます(GitHubリポジトリは異なります)
元のLIBEROベンチマークを使用するには、LIBEROを参照し、--env.type=liberoを使用してください。