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개의 작업 변형을 생성합니다:
| 차원 | 변경 사항 |
|---|---|
| Objects 레이아웃 | 대상 위치, 혼동 유발 객체의 존재 |
| 카메라 시점 | 카메라 위치, 방향, 시야각 |
| 로봇 초기 상태 | 조작기 시작 자세 |
| 언어 지침 | LLM이 다시 작성한 작업 설명(패러프레이즈/동의어) |
| 조명 조건 | 강도, 방향, 색상, 그림자 |
| 배경 텍스처 | 장면 표면 및 객체 외관 |
| 센서 노이즈 | 광도 왜곡 및 이미지 열화 |
사용 가능한 작업 스위트
LIBERO-plus는 Spatial, Object, Goal, Long 스위트의 40개 원본 작업을 변형합니다. 이 네 스위트에 등록된 각 작업은 원본 작업이 아닌 변형된 변형체입니다. 포크는 또한 LIBERO-90의 90개 미변형 작업을 유지합니다.
| Suite | CLI 이름 | 원래 작업 | 등록된 작업 | 최대 스텝 | 설명 |
|---|---|---|---|---|---|
| LIBERO-Spatial | libero_spatial | 10 | 2,402 | 280 | 공간적 관계에 대한 추론이 필요한 작업 |
| LIBERO-Object | libero_object | 10 | 2,518 | 280 | Tasks centered on manipulating different objects |
| LIBERO-Goal | libero_goal | 10 | 2,591 | 300 | 목표가 변경되는 목표 조건부 작업 |
| LIBERO-90 | libero_90 | 90 | 90 | 400 | 교란되지 않은 단기 LIBERO 작업 |
| LIBERO-Long | libero_10 | 10 | 2,519 | 520 | LIBERO-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-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 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=falseSoft reset는 더 빠르지만, 환경의 settling 단계 이후에는 hard reset과 bit-identical하지 않으므로 카메라 관측값과 정책 결과가 약간 다를 수 있습니다. 벤치마크 결과를 재현할 때는 hard reset을 사용하세요.
정책 입력 및 출력
관찰 사항:
observation.state— 8차원 고유감각 특징(eef 위치, 축-각도 방향, 그리퍼 qpos)observation.images.image— 메인 카메라 뷰 (agentview_image), HWC uint8observation.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=1000LIBERO와의 관계
LIBERO-plus는 LIBERO의 드롭인 확장입니다:
- 동일한 Python gym 인터페이스 (
LiberoEnv,LiberoProcessorStep) - 동일한 카메라 이름 및 관찰/동작 형식
- 동일한 작업 스위트 이름
- 다른 GitHub 저장소이지만 동일한
liberoPython 패키지 이름으로 설치됩니다
원본 LIBERO 벤치마크를 사용하려면 LIBERO를 참고하고 --env.type=libero를 사용하세요.