| # LIBERO |
|
|
| Benchmark for studying knowledge transfer in lifelong robot learning. Includes multiple suites: **Spatial** (spatial reasoning), **Object** (object generalization), **Goal** (goal-conditioned learning), and **10 Long** (long-horizon multi-step tasks). Provides RGB images, proprioception data, and language task specifications. |
|
|
| For more information, see the [official website](https://libero-project.github.io/main.html). |
|
|
| --- |
|
|
| # LIBERO evaluation benchmark result |
|
|
| > **Note:** The full task list is attached at the end of this document. |
|
|
| All four suites were finetuned with the same hyper-parameters, including |
| `--state-dropout-prob 0.2` (the finetune CLI default from |
| `gr00t/configs/finetune_config.py`). |
|
|
| | Task | Success rate | max_steps | grad_accum_steps | batch_size | |
| |-----------|--------------------|-----------|------------------|------------| |
| | Spatial | 195/200 (97.65%) | 20K | 1 | 640 | |
| | Goal | 195/200 (97.5%) | 20K | 1 | 640 | |
| | Object | 197/200 (98.45%) | 20K | 1 | 640 | |
| | 10 (Long) | 189/200 (94.35%) | 20K | 1 | 640 | |
|
|
| # Fine-tune LIBERO 10 (long) |
|
|
| To reproduce our finetune results, use the following commands to setup dataset and launch finetune experiments. Please remember to set `WANDB_API_KEY` since `--use-wandb` is turned on by default. If you don't have a WANDB account, please remove this argument: |
|
|
| ```bash |
| uv run hf download \ |
| --repo-type dataset IPEC-COMMUNITY/libero_10_no_noops_1.0.0_lerobot \ |
| --local-dir examples/LIBERO/libero_10_no_noops_1.0.0_lerobot/ |
| |
| # Copy the patches and run the finetune script |
| cp -r examples/LIBERO/modality.json examples/LIBERO/libero_10_no_noops_1.0.0_lerobot/meta/ |
| ``` |
|
|
| Run the shared finetune launcher: |
| ```bash |
| NUM_GPUS=8 MAX_STEPS=20000 GLOBAL_BATCH_SIZE=640 SAVE_STEPS=1000 uv run bash examples/finetune.sh \ |
| --base-model-path nvidia/GR00T-N1.7-3B \ |
| --dataset-path examples/LIBERO/libero_10_no_noops_1.0.0_lerobot/ \ |
| --embodiment-tag LIBERO_PANDA \ |
| --output-dir /tmp/libero_10 \ |
| --state-dropout-prob 0.2 |
| ``` |
|
|
| # Fine-tune LIBERO goal |
|
|
| ```bash |
| uv run hf download \ |
| --repo-type dataset IPEC-COMMUNITY/libero_goal_no_noops_1.0.0_lerobot \ |
| --local-dir examples/LIBERO/libero_goal_no_noops_1.0.0_lerobot/ |
| |
| # Copy the patches and run the finetune script |
| cp -r examples/LIBERO/modality.json examples/LIBERO/libero_goal_no_noops_1.0.0_lerobot/meta/ |
| ## This is a patch for one of the episode where the image seems to be corrupted. |
| cp examples/LIBERO/patches/episode_000082.mp4 examples/LIBERO/libero_goal_no_noops_1.0.0_lerobot/videos/chunk-000/observation.images.wrist_image/ |
| ``` |
|
|
| Run the shared finetune launcher: |
| ```bash |
| NUM_GPUS=8 MAX_STEPS=20000 GLOBAL_BATCH_SIZE=640 SAVE_STEPS=1000 uv run bash examples/finetune.sh \ |
| --base-model-path nvidia/GR00T-N1.7-3B \ |
| --dataset-path examples/LIBERO/libero_goal_no_noops_1.0.0_lerobot/ \ |
| --embodiment-tag LIBERO_PANDA \ |
| --output-dir /tmp/libero_goal |
| ``` |
|
|
| # Fine-tune LIBERO object |
|
|
| ```bash |
| uv run hf download \ |
| --repo-type dataset IPEC-COMMUNITY/libero_object_no_noops_1.0.0_lerobot \ |
| --local-dir examples/LIBERO/libero_object_no_noops_1.0.0_lerobot/ |
| |
| # Copy the patches and run the finetune script |
| cp -r examples/LIBERO/modality.json examples/LIBERO/libero_object_no_noops_1.0.0_lerobot/meta/ |
| ``` |
|
|
| Run the shared finetune launcher: |
| ```bash |
| NUM_GPUS=8 MAX_STEPS=20000 GLOBAL_BATCH_SIZE=640 SAVE_STEPS=1000 uv run bash examples/finetune.sh \ |
| --base-model-path nvidia/GR00T-N1.7-3B \ |
| --dataset-path examples/LIBERO/libero_object_no_noops_1.0.0_lerobot/ \ |
| --embodiment-tag LIBERO_PANDA \ |
| --output-dir /tmp/libero_object |
| ``` |
|
|
| # Fine-tune LIBERO spatial |
|
|
| ```bash |
| uv run hf download \ |
| --repo-type dataset IPEC-COMMUNITY/libero_spatial_no_noops_1.0.0_lerobot \ |
| --local-dir examples/LIBERO/libero_spatial_no_noops_1.0.0_lerobot/ |
| |
| # Copy the patches and run the finetune script |
| cp -r examples/LIBERO/modality.json examples/LIBERO/libero_spatial_no_noops_1.0.0_lerobot/meta/ |
| ``` |
|
|
| Run the shared finetune launcher: |
| ```bash |
| NUM_GPUS=8 MAX_STEPS=20000 GLOBAL_BATCH_SIZE=640 SAVE_STEPS=1000 uv run bash examples/finetune.sh \ |
| --base-model-path nvidia/GR00T-N1.7-3B \ |
| --dataset-path examples/LIBERO/libero_spatial_no_noops_1.0.0_lerobot/ \ |
| --embodiment-tag LIBERO_PANDA \ |
| --output-dir /tmp/libero_spatial |
| ``` |
|
|
| # Evaluate checkpoint |
|
|
| First, setup the evaluation simulation environment. This only needs to run once for each simulation benchmark. After it's done, we only need to launch server and client. |
|
|
| ```bash |
| sudo apt update |
| sudo apt install libegl1-mesa-dev libglu1-mesa |
| bash gr00t/eval/sim/LIBERO/setup_libero.sh |
| ``` |
|
|
| Then, download the finetuned model to a local directory (HuggingFace does not support nested repo paths directly): |
| ```bash |
| uv run hf download nvidia/GR00T-N1.7-LIBERO --include "libero_10/config.json" "libero_10/embodiment_id.json" "libero_10/model-*.safetensors" "libero_10/model.safetensors.index.json" "libero_10/processor_config.json" "libero_10/statistics.json" --local-dir checkpoints/GR00T-N1.7-LIBERO |
| ``` |
|
|
| Run client server evaluation under the project root directory in separate terminals: |
|
|
| **Terminal 1 - Server:** |
| ```bash |
| uv run python gr00t/eval/run_gr00t_server.py \ |
| --model-path checkpoints/GR00T-N1.7-LIBERO/libero_10 \ |
| --embodiment-tag LIBERO_PANDA \ |
| --use-sim-policy-wrapper |
| ``` |
|
|
| > **Note:** Replace `checkpoints/GR00T-N1.7-LIBERO/libero_10` with your own checkpoint path (e.g., `/tmp/libero_10/checkpoint-20000/`) if evaluating a locally finetuned model. |
|
|
| **Terminal 2 - Client:** |
| ```bash |
| gr00t/eval/sim/LIBERO/libero_uv/.venv/bin/python gr00t/eval/rollout_policy.py \ |
| --n-episodes 10 \ |
| --policy-client-host 127.0.0.1 \ |
| --policy-client-port 5555 \ |
| --max-episode-steps 720 \ |
| --env-name libero_sim/KITCHEN_SCENE3_turn_on_the_stove_and_put_the_moka_pot_on_it \ |
| --n-action-steps 8 \ |
| --n-envs 5 |
| ``` |
|
|
| # Full task list |
|
|
| ## Libero 10 (Long) |
| - `libero_sim/LIVING_ROOM_SCENE2_put_both_the_alphabet_soup_and_the_tomato_sauce_in_the_basket` |
| - `libero_sim/LIVING_ROOM_SCENE2_put_both_the_cream_cheese_box_and_the_butter_in_the_basket` |
| - `libero_sim/KITCHEN_SCENE3_turn_on_the_stove_and_put_the_moka_pot_on_it` |
| - `libero_sim/KITCHEN_SCENE4_put_the_black_bowl_in_the_bottom_drawer_of_the_cabinet_and_close_it` |
| - `libero_sim/LIVING_ROOM_SCENE5_put_the_white_mug_on_the_left_plate_and_put_the_yellow_and_white_mug_on_the_right_plate` |
| - `libero_sim/STUDY_SCENE1_pick_up_the_book_and_place_it_in_the_back_compartment_of_the_caddy` |
| - `libero_sim/LIVING_ROOM_SCENE6_put_the_white_mug_on_the_plate_and_put_the_chocolate_pudding_to_the_right_of_the_plate` |
| - `libero_sim/LIVING_ROOM_SCENE1_put_both_the_alphabet_soup_and_the_cream_cheese_box_in_the_basket` |
| - `libero_sim/KITCHEN_SCENE8_put_both_moka_pots_on_the_stove` |
| - `libero_sim/KITCHEN_SCENE6_put_the_yellow_and_white_mug_in_the_microwave_and_close_it` |
|
|
| ## Libero Goal |
| - `libero_sim/open_the_middle_drawer_of_the_cabinet` |
| - `libero_sim/put_the_bowl_on_the_stove` |
| - `libero_sim/put_the_wine_bottle_on_top_of_the_cabinet` |
| - `libero_sim/open_the_top_drawer_and_put_the_bowl_inside` |
| - `libero_sim/put_the_bowl_on_top_of_the_cabinet` |
| - `libero_sim/push_the_plate_to_the_front_of_the_stove` |
| - `libero_sim/put_the_cream_cheese_in_the_bowl` |
| - `libero_sim/turn_on_the_stove` |
| - `libero_sim/put_the_bowl_on_the_plate` |
| - `libero_sim/put_the_wine_bottle_on_the_rack` |
|
|
| ## Libero Object |
| - `libero_sim/pick_up_the_alphabet_soup_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_cream_cheese_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_salad_dressing_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_bbq_sauce_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_ketchup_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_tomato_sauce_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_butter_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_milk_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_chocolate_pudding_and_place_it_in_the_basket` |
| - `libero_sim/pick_up_the_orange_juice_and_place_it_in_the_basket` |
|
|
| ## Libero Spatial |
| - `libero_sim/pick_up_the_black_bowl_between_the_plate_and_the_ramekin_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_next_to_the_ramekin_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_from_table_center_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_on_the_cookie_box_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_in_the_top_drawer_of_the_wooden_cabinet_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_on_the_ramekin_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_next_to_the_cookie_box_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_on_the_stove_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_next_to_the_plate_and_place_it_on_the_plate` |
| - `libero_sim/pick_up_the_black_bowl_on_the_wooden_cabinet_and_place_it_on_the_plate` |