LeRobot documentation

LIBERO-plus

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LIBERO-plus

LIBERO-plusは、LIBEROを基盤として構築された、Vision-Language-Action (VLA) モデル向けの頑健性ベンチマークです。元のLIBEROタスクセットに対して7つの独立した摂動次元を適用することで、ポリシーを体系的にストレステストし、標準的なベンチマークでは見逃されがちな失敗モードを明らかにします。

An overview of the LIBERO-plus benchmark perturbation dimensions

摂動次元

LIBERO-plus は、これらの軸に沿って元の各 LIBERO タスクを乱数化することで、約 10,000 のタスクバリアントを作成します:

次元変更点
オブジェクトのレイアウトターゲットの位置、混同オブジェクトの有無
カメラの視点カメラの位置、方向、視野
ロボットの初期状態マニピュレーターの初期姿勢
言語の指示LLMによる書き換えタスクの説明(言い換え/同義語)
照明条件強度、方向、色、影
背景テクスチャシーンの表面とオブジェクトの外観
センサーノイズ光度学的歪みと画像劣化

利用可能なタスクスイート

LIBERO-plus は、Spatial、Object、Goal、Long スイートの 40 元のタスクに摂動を適用します。これら 4 つのスイートに登録されている各タスクは、元のタスクのいずれかではなく、摂動が適用されたバリアントです。このフォークは、LIBERO-90 の 90 の摂動なしタスクも保持しています。

スイートCLI名元のタスク登録されたタスク最大ステップ数説明
LIBERO-Spatiallibero_spatial102,402280空間的な関係について推論を必要とするタスク
LIBERO-Objectlibero_object102,518280異なるオブジェクトを操作するタスク
LIBERO-Goallibero_goal102,591300ターゲットが変化するゴール条件付きタスク
LIBERO-90libero_909090400Unperturbed short-horizon LIBERO tasks
LIBERO-Longlibero_10102,519520LIBERO-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-dev

Pythonパッケージ

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 fork

LIBERO-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 uint8
  • observation.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=1000

LIBEROとの関係

LIBERO-plusはLIBEROのドロップイン拡張機能です:

  • 同じ Python gym インターフェース(LiberoEnv、LiberoProcessorStep)
  • 同じカメラ名と観測/アクション形式
  • 同じタスクスイートの名前
  • 同じliberoというPythonパッケージ名でインストールされます(GitHubリポジトリは異なります)

元のLIBEROベンチマークを使用するには、LIBEROを参照し、--env.type=liberoを使用してください。

Update on GitHub