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개의 작업 변형을 생성합니다:

차원변경 사항
Objects 레이아웃대상 위치, 혼동 유발 객체의 존재
카메라 시점카메라 위치, 방향, 시야각
로봇 초기 상태조작기 시작 자세
언어 지침LLM이 다시 작성한 작업 설명(패러프레이즈/동의어)
조명 조건강도, 방향, 색상, 그림자
배경 텍스처장면 표면 및 객체 외관
센서 노이즈광도 왜곡 및 이미지 열화

사용 가능한 작업 스위트

LIBERO-plus는 Spatial, Object, Goal, Long 스위트의 40개 원본 작업을 변형합니다. 이 네 스위트에 등록된 각 작업은 원본 작업이 아닌 변형된 변형체입니다. 포크는 또한 LIBERO-90의 90개 미변형 작업을 유지합니다.

SuiteCLI 이름원래 작업등록된 작업최대 스텝설명
LIBERO-Spatiallibero_spatial102,402280공간적 관계에 대한 추론이 필요한 작업
LIBERO-Objectlibero_object102,518280Tasks centered on manipulating different objects
LIBERO-Goallibero_goal102,591300목표가 변경되는 목표 조건부 작업
LIBERO-90libero_909090400교란되지 않은 단기 LIBERO 작업
LIBERO-Longlibero_10102,519520LIBERO-100 컬렉션의 장기 지평 작업

이 카운트는 업스트림 task registry에서 가져온 것입니다. 4개의 변형 스위트에는 총 10,030개의 task variants가 포함되어 있으며, LIBERO-90은 해당 총계에 포함되지 않습니다. 카운트와 task indices는 설치된 fork revision에 따라 달라집니다.

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 fork에서 설치됩니다. 해당 fork는 pip가 처리할 수 없는 namespace package로 제공되므로, 클론한 후 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/

평가

기본 평가 (권장)

upstream evaluation guide의 권장 사항에 따라 변형당 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을 사용하면 동일한 명령이 400개가 아닌 100,300개의 에피소드를 실행합니다.

스모크 테스트

전체 평가를 시작하기 전에, 등록된 변형(variant) 하나와 에피소드 하나를 사용하여 설정을 확인하세요:

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 스위트에서 평가:

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] 등)로 범위를 제한합니다. 모든 등록된 작업을 실행하려면 생략하십시오. 여러 스위트를 평가할 경우, 동일한 인덱스 목록이 각 스위트에 독립적으로 적용됩니다.
  • --eval.batch_size는 병렬로 실행되는 환경의 수를 제어합니다.
  • --eval.n_episodes는 등록된 각 태스크당 실행할 에피소드 수를 설정합니다. 이 값을 늘리면 선택된 변형에 대한 평가가 반복되지만, 추가적인 개별 변형을 선택하는 것은 아닙니다.

멀티 스위트 평가

쉼표로 구분된 목록을 전달하여 여러 suite에 대해 정책을 한 번에 벤치마크할 수 있습니다:

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는 두 가지 제어 모드를 지원합니다 — relative(기본값)와 absolute. 서로 다른 VLA 체크포인트는 서로 다른 액션 파라미터화로 학습되므로, 해당 모드와 정책이 일치하는지 확인하세요:

--env.control_mode=relative   # or "absolute"

성능 재설정

기본적으로 LeRobot은 LIBERO의 하드 리셋 동작을 유지합니다. 고정된 초기 상태가 활성화된 경우, 에피소드마다 시뮬레이터 모델과 렌더러를 다시 구축하는 것을 건너뛰기 위해 소프트 리셋을 선택할 수 있습니다:

--env.init_states=true --env.hard_reset=false

Soft reset는 더 빠르지만, 환경의 settling 단계 이후에는 hard reset과 bit-identical하지 않으므로 카메라 관측값과 정책 결과가 약간 다를 수 있습니다. 벤치마크 결과를 재현할 때는 hard reset을 사용하세요.

정책 입력 및 출력

관찰 사항:

  • observation.state — 8차원 고유감각 특징(eef 위치, 축-각도 방향, 그리퍼 qpos)
  • observation.images.image — 메인 카메라 뷰 (agentview_image), HWC uint8
  • observation.images.image2 — 손목 카메라 뷰 (robot0_eye_in_hand_image), HWC uint8

작업:

  • Box(-1, 1, shape=(7,))에서의 연속 제어 — 6D 엔드 이펙터 델타 + 1D 그리퍼

평가 워크로드 및 재현 가능성

평가 에피소드의 총 개수는 모든 스위트에 걸쳐 선택된 등록된 작업의 수 × --eval.n_episodes입니다. 예를 들어, 각 에피소드가 하나인 모든 Spatial 변형을 선택하면 2,402개의 에피소드가 생성되며, Spatial과 Object에서 --env.task_ids='[0,1,2]'를 선택하고 각 에피소드를 하나씩 설정하면 6개의 에피소드가 생성됩니다.

400에피소드 계산(40개 원본 태스크 × 10에피소드)은 vanilla LIBERO에 적용되며, 전체 LIBERO-plus 평가에는 해당하지 않습니다. LIBERO-plus의 경우, 등록된 각 변형(variant)당 1에피소드로 시작하는 것이 좋습니다. 특정 변형의 반복 에피소드는 원본 태스크의 서로 다른 변형을 샘플링하는 것과 동등하지 않습니다.

커스텀 서브셋의 경우, 포크의 task classification을 사용하여 교란 카테고리 및 난이도 수준을 식별하세요. 모든 원본 태스크가 모든 교란 카테고리에서 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)
  • 동일한 카메라 이름 및 관찰/동작 형식
  • 동일한 작업 스위트 이름
  • 다른 GitHub 저장소이지만 동일한 libero Python 패키지 이름으로 설치됩니다

원본 LIBERO 벤치마크를 사용하려면 LIBERO를 참고하고 --env.type=libero를 사용하세요.

Update on GitHub