The official implementation of Grounded Semantic Re-Binding & ParaVLA
Python
21
10 commits
updated Aug 4, 2026
Zhaokai Yin1,2 · Zhipeng Zhang1,†
1AutoLab, School of Artificial Intelligence, Shanghai Jiao Tong University
2Research Lab, Anyverse Dynamics
†Corresponding author
Architecture-aware semantic grounding for reliable language-to-action binding.
If this repository is useful for your research, please consider giving it a ⭐.
All released checkpoints are available in the AutoLab-SJTU/GSR collection.
| Checkpoint | Architecture | Training recipe |
|---|---|---|
| ParaVLA | DINOv2-Large + T5-Large + action expert | train_paravla.sh |
| VLA-Adapter GSR | Qwen VLM + T5-Large + fresh MLP head | train_vla_adapter_gsr.sh |
| SmolVLA GSR | SmolVLM + T5-Large + fresh flow expert | train_smolvla_gsr.sh |
| π₀.₅ GSR | PaliGemma + T5-Large + fresh flow expert | train_pi05_gsr.sh |
| Resource | Hugging Face | Used by | Configuration |
|---|---|---|---|
| T5-Large | google-t5/t5-large | All stable-language routes | T5_MODEL; use a local copy for VLA_ADAPTER_T5_MODEL |
| DINOv2-Large | facebook/dinov2-large | ParaVLA visual backbone | Selected by the ParaVLA recipe |
| SmolVLA LIBERO | HuggingFaceVLA/smolvla_libero | SmolVLA initialization | SMOLVLA_BASE |
| π₀.₅ LIBERO | lerobot/pi05_libero_finetuned_v044 | π₀.₅ initialization | Download locally and set PI05_BASE |
| VLA-Adapter Goal-Pro | VLA-Adapter/LIBERO-Goal-Pro | VLA-Adapter initialization | Download locally and set VLA_ADAPTER_BASE |
| PaliGemma tokenizer assets | google/paligemma-3b-pt-224 | π₀.₅ tokenization | PALIGEMMA_TOKENIZER; access approval may be required |
| Resource | Location | Purpose | Configuration |
|---|---|---|---|
| LIBERO in LeRobot format | HuggingFaceVLA/libero | ParaVLA, SmolVLA, and π₀.₅ training | LEROBOT_LIBERO_ROOT |
| Modified LIBERO RLDS | openvla/modified_libero_rlds | VLA-Adapter training | VLA_ADAPTER_RLDS_ROOT |
| LIBERO-Para | HAI-Lab/LIBERO-Para | Full 4,092-episode OOD evaluation | LIBERO_PARA_ROOT and its BDDL/init directories |
The simulator and benchmark implementations are maintained in Lifelong-Robot-Learning/LIBERO and cau-hai-lab/LIBERO-Para.
Install the Hugging Face CLI and authenticate before downloading gated assets:
python -m pip install -U huggingface_hub
hf auth login
export MODEL_ROOT=/path/to/models
export DATA_ROOT=/path/to/data
mkdir -p "${MODEL_ROOT}" "${DATA_ROOT}"
Download the pretrained models:
hf download google-t5/t5-large \
--local-dir "${MODEL_ROOT}/t5-large"
hf download facebook/dinov2-large \
--local-dir "${MODEL_ROOT}/dinov2-large"
hf download HuggingFaceVLA/smolvla_libero \
--local-dir "${MODEL_ROOT}/smolvla_libero"
hf download lerobot/pi05_libero_finetuned_v044 \
--local-dir "${MODEL_ROOT}/pi05_libero_finetuned_v044"
hf download VLA-Adapter/LIBERO-Goal-Pro \
--local-dir "${MODEL_ROOT}/VLA-Adapter-LIBERO-Goal-Pro"
hf download google/paligemma-3b-pt-224 \
--local-dir "${MODEL_ROOT}/paligemma-3b-pt-224"
Download the training datasets:
hf download HuggingFaceVLA/libero \
--repo-type dataset \
--local-dir "${DATA_ROOT}/libero"
hf download openvla/modified_libero_rlds \
--repo-type dataset \
--local-dir "${DATA_ROOT}/modified_libero_rlds"
Clone LIBERO-Para for the full benchmark implementation and its 4,092 BDDL tasks:
git clone https://github.com/cau-hai-lab/LIBERO-Para.git \
"${DATA_ROOT}/LIBERO-Para"
git clone https://github.com/AutoLab-SAI-SJTU/GSR-ParaVLA.git
cd GSR-ParaVLA
bash scripts/create_envs.sh
cp configs/paths.env.example configs/paths.env
After configuring local model, dataset, and output paths in configs/paths.env, run the smoke checks:
conda activate gsr-lerobot
python scripts/smoke_imports.py
make smoke
make audit
Separate environments are used because the LeRobot and VLA-Adapter stacks have different dependency constraints.
bash scripts/create_envs.sh
cp configs/paths.env.example configs/paths.env
| Environment | Components |
|---|---|
gsr-lerobot | ParaVLA, SmolVLA, π₀.₅, and LeRobot LIBERO evaluation |
gsr-vla-adapter | VLA-Adapter training and evaluation |
Install the cloned benchmark in the LeRobot environment:
conda run -n gsr-lerobot python -m pip install \
-e "${DATA_ROOT}/LIBERO-Para"
conda activate gsr-lerobot
python scripts/smoke_imports.py
Copy configs/paths.env.example to configs/paths.env and replace every /path/to/... value. All recipes load this file automatically.
The LIBERO-Para paths should resolve to:
LIBERO_PARA_ROOT=/path/to/LIBERO-Para
LIBERO_PARA_BDDL_DIR=/path/to/LIBERO-Para/libero/libero/bddl_files/libero_para
LIBERO_PARA_INIT_DIR=/path/to/LIBERO-Para/libero/libero/init_files/libero_para
LIBERO_GOAL_BDDL_DIR=/path/to/LIBERO-Para/libero/libero/bddl_files/libero_goal
Configuration notes:
T5_MODEL.VLA_ADAPTER_T5_MODEL to that local directory.PI05_BASE and VLA_ADAPTER_BASE to the corresponding downloaded checkpoint directories.configs/paths.env.Every long-run recipe supports a short smoke stage. Run each recipe from its matching environment.
The default full-run settings reproduce the architecture-specific schedules used for the released checkpoints:
| Model | GPUs | Batch/GPU | Grad. accum. | Steps | Peak LR |
|---|---|---|---|---|---|
| ParaVLA | 8 | 64 | 1 | 50,000 | 1e-4 |
| VLA-Adapter GSR | 8 | 8 | 1 | 50,000 | 5e-4 |
| SmolVLA GSR | 8 | 16 | 1 | 25,000 | 2e-4 |
| π₀.₅ GSR | 8 | 32 | 2 | 12,500 | 1e-4 |
BATCH_SIZE, GRAD_ACCUMULATION_STEPS, STEPS, and SAVE_FREQ remain explicit overrides. Larger batches or longer schedules can help within the tested range, but changing them is a new training configuration rather than an exact checkpoint reproduction.
ParaVLA trains on all four LIBERO suites using DINOv2-Large, frozen T5-Large, two visual cameras, and a decoupled text-to-action pathway.
conda activate gsr-lerobot
STAGE=smoke bash recipes/train_paravla.sh
bash recipes/train_paravla.sh
The gsr variant gives Qwen the fixed instruction perform the task, routes the real instruction through frozen T5, and trains a fresh MLP action head. The native_control variant is the matched fresh-head Qwen control.
conda activate gsr-vla-adapter
STEPS=10 VARIANT=gsr bash recipes/train_vla_adapter_gsr.sh
VARIANT=gsr bash recipes/train_vla_adapter_gsr.sh
VARIANT=native_control bash recipes/train_vla_adapter_gsr.sh
The default arm neutralizes the native task prompt while retaining SmolVLM's visual scene computation. Set PRESERVE_NATIVE_LANGUAGE=true for the matched dual-language arm.
conda activate gsr-lerobot
STAGE=smoke bash recipes/train_smolvla_gsr.sh
bash recipes/train_smolvla_gsr.sh
PRESERVE_NATIVE_LANGUAGE=true bash recipes/train_smolvla_gsr.sh
The default π₀.₅ recipe preserves the real PaliGemma instruction, grounds frozen T5 features into native task slots, and trains a fresh flow expert on canonical LIBERO-Goal demonstrations.
conda activate gsr-lerobot
STAGE=smoke bash recipes/train_pi05_gsr.sh
bash recipes/train_pi05_gsr.sh
conda activate gsr-lerobot
POLICY_PATH=/path/to/pretrained_model \
MODEL_TAG=my_policy \
EVAL_GPUS=0 \
bash recipes/eval_lerobot_libero_goal.sh
Set GOAL_MODE=manual to evaluate the manual paraphrase split.
conda activate gsr-vla-adapter
GSR_ACTION_HEAD_CHECKPOINT=/path/to/action_head_checkpoint \
MODEL_TAG=vla_adapter_gsr \
EVAL_GPUS=0,1,2,3,4,5,6,7 \
bash recipes/eval_vla_adapter_libero_goal.sh
The evaluation launchers shard the ten official partitions over the selected GPUs, retain per-episode outputs, verify exactly 4,092 unique episodes, and merge overall and per-type metrics.
conda activate gsr-lerobot
POLICY_PATH=/path/to/pretrained_model \
MODEL_TAG=my_policy \
EVAL_GPUS=0,1,2,3,4,5,6,7 \
bash recipes/eval_lerobot_libero_para.sh
conda activate gsr-vla-adapter
GSR_ACTION_HEAD_CHECKPOINT=/path/to/checkpoint-050000 \
MODEL_TAG=vla_adapter_gsr \
EVAL_GPUS=0,1,2,3,4,5,6,7 \
bash recipes/eval_vla_adapter_libero_para.sh
Evaluation produces per-shard logs and per-episode records, followed by a merged summary under GSR_OUTPUT_ROOT.
GSR-ParaVLA/
├── lerobot_backend/ # ParaVLA, SmolVLA, π₀.₅, and LeRobot runtime
├── vla_adapter_backend/ # VLA-Adapter model and GSR trainer
├── recipes/ # Portable training and evaluation launchers
├── configs/ # Machine-local path templates
├── environments/ # Conda environment definitions
├── scripts/ # Setup, smoke, coverage, and release checks
├── assets/ # Public manual-paraphrase evaluation assets
└── licenses/ # Upstream license copies
@misc{gsr,
title={Grounded Semantic Re-Binding for Robust Instruction Generalization in Vision-Language-Action Models},
author={Zhaokai Yin and Zhipeng Zhang},
year={2026},
eprint={2608.02497},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2608.02497},
}
This release builds on LeRobot, LIBERO, LIBERO-Para, VLA-Adapter, DINOv2, and the T5 model family. We thank their authors and maintainers for releasing code, models, datasets, and evaluation infrastructure.
Original GSR integration code is released under the MIT License. The vendored LeRobot subtree remains Apache-2.0, and the VLA-Adapter subtree remains MIT. See THIRD_PARTY_NOTICES and licenses/ for details.
Released checkpoints and all upstream models, datasets, and benchmark assets remain subject to their applicable licenses and terms.
The official implementation of Grounded Semantic Re-Binding & ParaVLA
Python
21
10 commits
updated Aug 4, 2026
Zhaokai Yin1,2 · Zhipeng Zhang1,†
1AutoLab, School of Artificial Intelligence, Shanghai Jiao Tong University
2Research Lab, Anyverse Dynamics
†Corresponding author
Architecture-aware semantic grounding for reliable language-to-action binding.
If this repository is useful for your research, please consider giving it a ⭐.
All released checkpoints are available in the AutoLab-SJTU/GSR collection.
| Checkpoint | Architecture | Training recipe |
|---|---|---|
| ParaVLA | DINOv2-Large + T5-Large + action expert | train_paravla.sh |
| VLA-Adapter GSR | Qwen VLM + T5-Large + fresh MLP head | train_vla_adapter_gsr.sh |
| SmolVLA GSR | SmolVLM + T5-Large + fresh flow expert | train_smolvla_gsr.sh |
| π₀.₅ GSR | PaliGemma + T5-Large + fresh flow expert | train_pi05_gsr.sh |
| Resource | Hugging Face | Used by | Configuration |
|---|---|---|---|
| T5-Large | google-t5/t5-large | All stable-language routes | T5_MODEL; use a local copy for VLA_ADAPTER_T5_MODEL |
| DINOv2-Large | facebook/dinov2-large | ParaVLA visual backbone | Selected by the ParaVLA recipe |
| SmolVLA LIBERO | HuggingFaceVLA/smolvla_libero | SmolVLA initialization | SMOLVLA_BASE |
| π₀.₅ LIBERO | lerobot/pi05_libero_finetuned_v044 | π₀.₅ initialization | Download locally and set PI05_BASE |
| VLA-Adapter Goal-Pro | VLA-Adapter/LIBERO-Goal-Pro | VLA-Adapter initialization | Download locally and set VLA_ADAPTER_BASE |
| PaliGemma tokenizer assets | google/paligemma-3b-pt-224 | π₀.₅ tokenization | PALIGEMMA_TOKENIZER; access approval may be required |
| Resource | Location | Purpose | Configuration |
|---|---|---|---|
| LIBERO in LeRobot format | HuggingFaceVLA/libero | ParaVLA, SmolVLA, and π₀.₅ training | LEROBOT_LIBERO_ROOT |
| Modified LIBERO RLDS | openvla/modified_libero_rlds | VLA-Adapter training | VLA_ADAPTER_RLDS_ROOT |
| LIBERO-Para | HAI-Lab/LIBERO-Para | Full 4,092-episode OOD evaluation | LIBERO_PARA_ROOT and its BDDL/init directories |
The simulator and benchmark implementations are maintained in Lifelong-Robot-Learning/LIBERO and cau-hai-lab/LIBERO-Para.
Install the Hugging Face CLI and authenticate before downloading gated assets:
python -m pip install -U huggingface_hub
hf auth login
export MODEL_ROOT=/path/to/models
export DATA_ROOT=/path/to/data
mkdir -p "${MODEL_ROOT}" "${DATA_ROOT}"
Download the pretrained models:
hf download google-t5/t5-large \
--local-dir "${MODEL_ROOT}/t5-large"
hf download facebook/dinov2-large \
--local-dir "${MODEL_ROOT}/dinov2-large"
hf download HuggingFaceVLA/smolvla_libero \
--local-dir "${MODEL_ROOT}/smolvla_libero"
hf download lerobot/pi05_libero_finetuned_v044 \
--local-dir "${MODEL_ROOT}/pi05_libero_finetuned_v044"
hf download VLA-Adapter/LIBERO-Goal-Pro \
--local-dir "${MODEL_ROOT}/VLA-Adapter-LIBERO-Goal-Pro"
hf download google/paligemma-3b-pt-224 \
--local-dir "${MODEL_ROOT}/paligemma-3b-pt-224"
Download the training datasets:
hf download HuggingFaceVLA/libero \
--repo-type dataset \
--local-dir "${DATA_ROOT}/libero"
hf download openvla/modified_libero_rlds \
--repo-type dataset \
--local-dir "${DATA_ROOT}/modified_libero_rlds"
Clone LIBERO-Para for the full benchmark implementation and its 4,092 BDDL tasks:
git clone https://github.com/cau-hai-lab/LIBERO-Para.git \
"${DATA_ROOT}/LIBERO-Para"
git clone https://github.com/AutoLab-SAI-SJTU/GSR-ParaVLA.git
cd GSR-ParaVLA
bash scripts/create_envs.sh
cp configs/paths.env.example configs/paths.env
After configuring local model, dataset, and output paths in configs/paths.env, run the smoke checks:
conda activate gsr-lerobot
python scripts/smoke_imports.py
make smoke
make audit
Separate environments are used because the LeRobot and VLA-Adapter stacks have different dependency constraints.
bash scripts/create_envs.sh
cp configs/paths.env.example configs/paths.env
| Environment | Components |
|---|---|
gsr-lerobot | ParaVLA, SmolVLA, π₀.₅, and LeRobot LIBERO evaluation |
gsr-vla-adapter | VLA-Adapter training and evaluation |
Install the cloned benchmark in the LeRobot environment:
conda run -n gsr-lerobot python -m pip install \
-e "${DATA_ROOT}/LIBERO-Para"
conda activate gsr-lerobot
python scripts/smoke_imports.py
Copy configs/paths.env.example to configs/paths.env and replace every /path/to/... value. All recipes load this file automatically.
The LIBERO-Para paths should resolve to:
LIBERO_PARA_ROOT=/path/to/LIBERO-Para
LIBERO_PARA_BDDL_DIR=/path/to/LIBERO-Para/libero/libero/bddl_files/libero_para
LIBERO_PARA_INIT_DIR=/path/to/LIBERO-Para/libero/libero/init_files/libero_para
LIBERO_GOAL_BDDL_DIR=/path/to/LIBERO-Para/libero/libero/bddl_files/libero_goal
Configuration notes:
T5_MODEL.VLA_ADAPTER_T5_MODEL to that local directory.PI05_BASE and VLA_ADAPTER_BASE to the corresponding downloaded checkpoint directories.configs/paths.env.Every long-run recipe supports a short smoke stage. Run each recipe from its matching environment.
The default full-run settings reproduce the architecture-specific schedules used for the released checkpoints:
| Model | GPUs | Batch/GPU | Grad. accum. | Steps | Peak LR |
|---|---|---|---|---|---|
| ParaVLA | 8 | 64 | 1 | 50,000 | 1e-4 |
| VLA-Adapter GSR | 8 | 8 | 1 | 50,000 | 5e-4 |
| SmolVLA GSR | 8 | 16 | 1 | 25,000 | 2e-4 |
| π₀.₅ GSR | 8 | 32 | 2 | 12,500 | 1e-4 |
BATCH_SIZE, GRAD_ACCUMULATION_STEPS, STEPS, and SAVE_FREQ remain explicit overrides. Larger batches or longer schedules can help within the tested range, but changing them is a new training configuration rather than an exact checkpoint reproduction.
ParaVLA trains on all four LIBERO suites using DINOv2-Large, frozen T5-Large, two visual cameras, and a decoupled text-to-action pathway.
conda activate gsr-lerobot
STAGE=smoke bash recipes/train_paravla.sh
bash recipes/train_paravla.sh
The gsr variant gives Qwen the fixed instruction perform the task, routes the real instruction through frozen T5, and trains a fresh MLP action head. The native_control variant is the matched fresh-head Qwen control.
conda activate gsr-vla-adapter
STEPS=10 VARIANT=gsr bash recipes/train_vla_adapter_gsr.sh
VARIANT=gsr bash recipes/train_vla_adapter_gsr.sh
VARIANT=native_control bash recipes/train_vla_adapter_gsr.sh
The default arm neutralizes the native task prompt while retaining SmolVLM's visual scene computation. Set PRESERVE_NATIVE_LANGUAGE=true for the matched dual-language arm.
conda activate gsr-lerobot
STAGE=smoke bash recipes/train_smolvla_gsr.sh
bash recipes/train_smolvla_gsr.sh
PRESERVE_NATIVE_LANGUAGE=true bash recipes/train_smolvla_gsr.sh
The default π₀.₅ recipe preserves the real PaliGemma instruction, grounds frozen T5 features into native task slots, and trains a fresh flow expert on canonical LIBERO-Goal demonstrations.
conda activate gsr-lerobot
STAGE=smoke bash recipes/train_pi05_gsr.sh
bash recipes/train_pi05_gsr.sh
conda activate gsr-lerobot
POLICY_PATH=/path/to/pretrained_model \
MODEL_TAG=my_policy \
EVAL_GPUS=0 \
bash recipes/eval_lerobot_libero_goal.sh
Set GOAL_MODE=manual to evaluate the manual paraphrase split.
conda activate gsr-vla-adapter
GSR_ACTION_HEAD_CHECKPOINT=/path/to/action_head_checkpoint \
MODEL_TAG=vla_adapter_gsr \
EVAL_GPUS=0,1,2,3,4,5,6,7 \
bash recipes/eval_vla_adapter_libero_goal.sh
The evaluation launchers shard the ten official partitions over the selected GPUs, retain per-episode outputs, verify exactly 4,092 unique episodes, and merge overall and per-type metrics.
conda activate gsr-lerobot
POLICY_PATH=/path/to/pretrained_model \
MODEL_TAG=my_policy \
EVAL_GPUS=0,1,2,3,4,5,6,7 \
bash recipes/eval_lerobot_libero_para.sh
conda activate gsr-vla-adapter
GSR_ACTION_HEAD_CHECKPOINT=/path/to/checkpoint-050000 \
MODEL_TAG=vla_adapter_gsr \
EVAL_GPUS=0,1,2,3,4,5,6,7 \
bash recipes/eval_vla_adapter_libero_para.sh
Evaluation produces per-shard logs and per-episode records, followed by a merged summary under GSR_OUTPUT_ROOT.
GSR-ParaVLA/
├── lerobot_backend/ # ParaVLA, SmolVLA, π₀.₅, and LeRobot runtime
├── vla_adapter_backend/ # VLA-Adapter model and GSR trainer
├── recipes/ # Portable training and evaluation launchers
├── configs/ # Machine-local path templates
├── environments/ # Conda environment definitions
├── scripts/ # Setup, smoke, coverage, and release checks
├── assets/ # Public manual-paraphrase evaluation assets
└── licenses/ # Upstream license copies
@misc{gsr,
title={Grounded Semantic Re-Binding for Robust Instruction Generalization in Vision-Language-Action Models},
author={Zhaokai Yin and Zhipeng Zhang},
year={2026},
eprint={2608.02497},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2608.02497},
}
This release builds on LeRobot, LIBERO, LIBERO-Para, VLA-Adapter, DINOv2, and the T5 model family. We thank their authors and maintainers for releasing code, models, datasets, and evaluation infrastructure.
Original GSR integration code is released under the MIT License. The vendored LeRobot subtree remains Apache-2.0, and the VLA-Adapter subtree remains MIT. See THIRD_PARTY_NOTICES and licenses/ for details.
Released checkpoints and all upstream models, datasets, and benchmark assets remain subject to their applicable licenses and terms.