LeRobot documentation
LIBERO-plus
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.
- Artigo: Análise aprofundada da robustez de modelos de visão-linguagem-ação
- GitHub: sylvestf/LIBERO-plus
- Conjunto de dados: lerobot/libero_plus

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ão | O que muda |
|---|---|
| Layout dos objetos | Posição do alvo, presença de objetos de confusão |
| Pontos de vista da câmera | Posição, orientação e campo de visão da câmera |
| Estados iniciais do robô | Pose inicial do manipulador |
| Instruções de idioma | Descrição da tarefa reescrita por LLM (paráfrase / sinônimo) |
| Condições de luz | Intensidade, direção, cor, sombra |
| Texturas de fundo | Superfície da cena e aparência dos objetos |
| Ruído do sensor | Distorçõ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.
| Suite | Nome da CLI | Tarefas originais | Tarefas registradas | Passos máximos | Descrição |
|---|---|---|---|---|---|
| LIBERO-Spatial | libero_spatial | 10 | 2,402 | 280 | Tarefas que exigem raciocínio sobre relações espaciais |
| LIBERO-Object | libero_object | 10 | 2,518 | 280 | Tarefas centradas na manipulação de diferentes objetos |
| LIBERO-Goal | libero_goal | 10 | 2,591 | 300 | Tarefas condicionadas a objetivos com alvos em mudança |
| LIBERO-90 | libero_90 | 90 | 90 | 400 | Tarefas de curto horizonte do LIBERO não perturbadas |
| LIBERO-Long | libero_10 | 10 | 2,519 | 520 | Tarefas 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-devPacote 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 forkLIBERO-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=1Isso 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=1Esta é 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.taskseleciona a suíte (libero_spatial,libero_object, etc.).--env.task_idsrestringe 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_sizecontrola quantos ambientes são executados em paralelo.--eval.n_episodesdefine 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=1Modo 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=falseSoft 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 uint8observation.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=1000Relaçã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.