LeRobot documentation

LIBERO-plus

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LIBERO-plus

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/libero_plus.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)).

LIBERO-plus é um benchmark de robustez para modelos Vision-Language-Action (VLA) construído sobre o LIBERO. Ele testa sistematicamente as políticas aplicando sete dimensões de perturbação independentes ao conjunto de tarefas original do LIBERO, expondo modos de falha que os benchmarks padrão não detectam.

An overview of the LIBERO-plus benchmark perturbation dimensions

Dimensões de perturbação

LIBERO-plus cria ~10 000 variantes de tarefa perturbando cada tarefa original do LIBERO ao longo dos seguintes eixos:

DimensãoO que muda
Layout dos objetosPosição do alvo, presença de objetos de confusão
Pontos de vista da câmeraPosição, orientação e campo de visão da câmera
Estados iniciais do robôPose inicial do manipulador
Instruções de idiomaDescrição da tarefa reescrita por LLM (paráfrase / sinônimo)
Condições de luzIntensidade, direção, cor, sombra
Texturas de fundoSuperfície da cena e aparência dos objetos
Ruído do sensorDistorções fotométricas e degradação de imagem

Suítes de tarefas disponíveis

LIBERO-plus perturba as 40 tarefas originais das suítes Spatial, Object, Goal e Long. Cada tarefa registrada nessas quatro suítes é uma variante perturbada, em vez de uma das tarefas originais. O fork também mantém as 90 tarefas não perturbadas em LIBERO-90.

SuiteNome da CLITarefas originaisTarefas registradasPassos máximosDescrição
LIBERO-Spatiallibero_spatial102,402280Tarefas que exigem raciocínio sobre relações espaciais
LIBERO-Objectlibero_object102,518280Tarefas centradas na manipulação de diferentes objetos
LIBERO-Goallibero_goal102,591300Tarefas condicionadas a objetivos com alvos em mudança
LIBERO-90libero_909090400Tarefas de curto horizonte do LIBERO não perturbadas
LIBERO-Longlibero_10102,519520Tarefas de longo horizonte da coleção LIBERO-100

Essas contagens vêm do registro de tarefas upstream. Os quatro conjuntos perturbados contêm, no total, 10.030 variantes de tarefas; o LIBERO-90 não está incluído nesse total. As contagens e os índices das tarefas dependem da revisão do fork instalado.

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]"`.

Instalação

Dependências do sistema (somente Linux)

sudo apt install libexpat1 libfontconfig1-dev libmagickwand-dev

Pacote 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 é instalado a partir de seu fork no GitHub, em vez de um extra do pyproject — o fork é distribuído como um pacote de namespace que o pip não consegue processar, portanto, ele deve ser clonado e adicionado ao PYTHONPATH. Consulte o estágio libero_plus_native do docker/Dockerfile.sim para a instalação canônica. MuJoCo é obrigatório, portanto, apenas o Linux é suportado.

Set the MuJoCo rendering backend before running evaluation:
export MUJOCO_GL=egl   # headless / HPC / cloud

Baixar os ativos do LIBERO-plus

O LIBERO-plus distribui seu pacote de ativos estendido separadamente. Baixe o assets.zip do conjunto de dados do Hugging Face e extraia-o no diretório do pacote 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/

Avaliação

Avaliação local padrão

Avalie todas as variantes registradas nas quatro suítes perturbadas, usando um episódio por variante, conforme recomendado pelo guia de avaliação upstream:

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

Isso executa 10.030 episódios para o registro acima. Com --eval.n_episodes=10, o mesmo comando executa 100.300 episódios, não 400.

Teste de fumaça

Antes de iniciar uma avaliação completa, verifique sua configuração com uma variante registrada e um episódio:

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

Esta é uma verificação de configuração, não uma avaliação representativa de robustez.

Avaliação em um único conjunto

Avalie em um único conjunto do 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 seleciona a suíte (libero_spatial, libero_object, etc.).
  • --env.task_ids restringe aos índices de tarefas registrados ([0], [1,2,3], etc.), que identificam as variantes nos quatro conjuntos perturbados. Omita para executar todas as tarefas registradas. Ao avaliar múltiplos conjuntos, a mesma lista de índices é aplicada independentemente a cada conjunto.
  • --eval.batch_size controla quantos ambientes são executados em paralelo.
  • --eval.n_episodes define quantos episódios serão executados por tarefa registrada. Aumentar esse valor repete a avaliação das variantes selecionadas; ele não seleciona variantes distintas adicionais.

Avaliação multi-suite

Faça o benchmark de uma política em vários conjuntos de uma só vez passando uma lista separada por vírgulas:

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

Modo de controle

O LIBERO-plus suporta dois modos de controle — relative (padrão) e absolute. Diferentes checkpoints de VLA são treinados com diferentes parametrizações de ação, portanto, certifique-se de que o modo corresponda à sua política:

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

Redefinir desempenho

Por padrão, o LeRobot preserva o comportamento de hard-reset do LIBERO. Com os estados iniciais fixos habilitados, você pode optar por soft resets para evitar a reconstrução do modelo do simulador e do renderer a cada episódio:

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

Soft resets são mais rápidos, mas não são idênticos bit a bit aos hard resets após as etapas de estabilização do ambiente, portanto, as observações da câmera e os resultados da política podem diferir ligeiramente. Use hard resets ao reproduzir resultados de benchmarks.

Entradas e saídas da política

Observações:

  • observation.state — recursos proprioceptivos de 8 dimensões (posição do eef, orientação axis-angle, qpos do garra)
  • observation.images.image — visão da câmera principal (agentview_image), HWC uint8
  • observation.images.image2 — visão da câmera do pulso (robot0_eye_in_hand_image), HWC uint8

Ações:

  • Controle contínuo em Box(-1, 1, shape=(7,)) — delta do efector final 6D + garra 1D

Carga de trabalho de avaliação e reprodutibilidade

O número total de episódios de avaliação é o número de tarefas registradas selecionadas em todos os conjuntos × --eval.n_episodes. Por exemplo, todas as variantes de Spatial com um episódio cada resultam em 2.402 episódios; selecionar --env.task_ids='[0,1,2]' em Spatial e Object com um episódio cada resulta em seis episódios.

O cálculo de 400 episódios (40 tarefas originais × 10 episódios) se aplica ao LIBERO vanilla, não a uma avaliação completa do LIBERO-plus. Para o LIBERO-plus, comece com um episódio por variante registrada. Episódios repetidos de uma variante não são equivalentes a amostrar variantes distintas de uma tarefa original.

Para um subconjunto personalizado, use a classificação de tarefas do fork para identificar as categorias de perturbação e os níveis de dificuldade. Não assuma que cada tarefa original possui dez variantes distintas em cada categoria de perturbação. Ao relatar resultados, registre a revisão do fork, os nomes das suítes selecionadas e os índices das tarefas, o número de episódios por variante, a semente e as configurações de reset. Para comparar com resultados publicados, siga o protocolo de amostragem e agregação do benchmark, em vez de tratar um subconjunto arbitrário como equivalente.

Treinamento

Conjunto de dados

Um conjunto de dados de treinamento no formato LeRobot para LIBERO-plus está disponível em:

Exemplo de comando de treinamento

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

Relação com o LIBERO

LIBERO-plus é uma extensão plug-and-play do LIBERO:

  • Mesma interface de Python gym (LiberoEnv) e observações canônicas
  • Mesmos nomes de câmeras e formato de observação/ação
  • Nomes de suítes de tarefas iguais
  • Instala sob o mesmo nome de pacote Python libero (repositório GitHub diferente)

Para usar o benchmark original LIBERO, consulte LIBERO e use --env.type=libero.

Update on GitHub