--- license: mit tags: - vla - robotics - libero - qwen2.5 - lora - vision-language-action library_name: transformers pipeline_tag: robotics --- # Anchor-Align: Generalizable VLA Finetuning via Representation Anchoring and Language-Action Alignment [**🌐 Project Page**](https://anchoralignvla.github.io/)  •  [**📄 Paper (arXiv)**](https://arxiv.org/abs/2607.13429)  •  [**💻 Code (GitHub)**](https://github.com/dwipddalal/Anchor-Align)  •  [**🎬 Videos**](https://anchoralignvla.github.io/#demo)

Anchor-Align method overview

**TL;DR** — Standard behavior-cloning finetuning of a vision-language model on robot demos silently erases the pretrained VLM's semantics and decouples its language output from its actions. **Anchor-Align** adds two lightweight losses on top of action prediction that (i) *anchor* the trainable VLA to a frozen copy of the pretrained VLM (preserving vision-language reasoning) and (ii) *align* the pre-action hidden state with a discrete motion-direction label derived from the executed motion. The result: **22.6%** on LIBERO-PRO position swap (vs 2.3% for standard BC), **90.3%** LIBERO-Plus average (vs 85.1%), and near-doubled real-world success (**28.3% → 54.2%**) on a UFactory xArm7 setup. ## 📦 Companion GitHub Repository **This repo hosts the weights. The inference and evaluation code lives at [github.com/dwipddalal/Anchor-Align](https://github.com/dwipddalal/Anchor-Align).** | | HuggingFace (`Dwipz/Anchor-Align`) | GitHub (`dwipddalal/Anchor-Align`) | |---|---|---| | Weights + tokenizer + configs | ✅ | — | | LIBERO / LIBERO-PRO / LIBERO-Plus eval scripts | — | ✅ | | Eval SLURM templates + 3-seed campaign runners | — | ✅ | | Paper results tables + figures | ✅ | ✅ | | Per-checkpoint `MODEL_CARD.md` | ✅ | — | | Reproduction recipe (`REPRODUCE.md` + verifier) | — | ✅ | > **Note:** the training code is not part of the initial release; we plan to release it in a follow-up update. Each checkpoint's full training configuration is documented in its `MODEL_CARD.md`. ## Available Checkpoints | Folder | Suite | KL weight | Steps | |---|---|---:|---:| | [`libero-spatial/`](./libero-spatial) | LIBERO Spatial | 0.10 | 10k | | [`libero-object/`](./libero-object) | LIBERO Object | 0.15 | 2.5k | | [`libero-goal/`](./libero-goal) | LIBERO Goal | 0.10 | 25k | | [`libero-long/`](./libero-long) | LIBERO-10 (Long) | 0.15 | 45k | All four finetune **Prismatic Qwen2.5-0.5B** (DINOv2 + SigLIP, 24 layers) with LoRA rank 64 and an L1-regression MLPResNet action head. Per-checkpoint metrics live in each subfolder's `MODEL_CARD.md`; reproduction targets and tolerances are in the GitHub repo's [`REPRODUCE.md`](https://github.com/dwipddalal/Anchor-Align/blob/main/REPRODUCE.md). ## Results Tables below are reproduced from the paper. Reproduction targets and tolerances for the released checkpoints are in [`REPRODUCE.md`](https://github.com/dwipddalal/Anchor-Align/blob/main/REPRODUCE.md). ### Standard LIBERO suites Success rates on the four standard (unperturbed) LIBERO suites. Anchor-Align achieves the highest success rate on every suite, surpassing methods with substantially larger backbones and large-scale robot-action pretraining. | Method | Spatial | Object | Goal | Long | |---|---:|---:|---:|---:| | Diffusion Policy | 78.3 | 92.5 | 68.3 | 50.5 | | π₀-FAST | 87.0 | 63.0 | 89.0 | 48.0 | | SmolVLA-0.24B | 87.0 | 93.0 | 88.0 | 63.0 | | SmolVLA-2.25B | 93.0 | 94.0 | 91.0 | 77.0 | | OpenVLA-OFT | 94.3 | 95.2 | 91.7 | 86.5 | | MolmoAct | 87.0 | 95.4 | 87.6 | 77.2 | | π₀.₅-KI | 96.6 | 97.2 | 94.6 | 85.8 | | VLA-0 | 93.6 | 96.0 | 95.6 | 87.6 | | VLA-Adapter [Frozen] | 89.4 | 89.6 | 88.0 | 84.5 | | VLA-Adapter (standard BC) | 96.0 | 99.8 | 96.0 | 89.0 | | **Anchor-Align VLA (ours)** | **98.4** | **100.0** | **97.2** | **90.8** | ### Robustness and generalization — LIBERO-PRO and LIBERO-Plus Success rates under perturbation on the LIBERO-Spatial suite (paper Table 1). **Bold** = best, underline = second best.
MethodLIBERO-PROLIBERO-Plus
Lang. Reph.Object SwapPos. SwapMeanLang. Instr.Bg. Text.Robot InitCam. ViewObj. LayoutLight Cond.Sensor NoiseMean
Co-training + KI*54.077.40.043.848.082.625.764.665.773.349.057.1
MolmoAct77.882.40.053.479.584.147.410.176.577.453.460.8
OpenVLA-OFT74.495.20.056.581.595.740.394.788.695.528.274.1
VLA-Adapter [Frozen]56.073.40.043.141.570.935.194.462.384.936.259.9
VLA-Adapter (standard BC)91.189.62.361.085.190.752.692.693.293.289.585.1
Anchor-Align VLA (ours)97.096.222.671.987.299.659.196.397.499.096.990.3
\*Our implementation of knowledge insulation adapted to VLA-Adapter. Position swap is the hardest axis: MolmoAct and OpenVLA-OFT score 0%, standard BC reaches 2.3%, while Anchor-Align reaches 22.6%. ### Qualitative — generalization to semantic perturbations

Anchor-Align generalizes to semantic perturbations

Same task, different phrasing / different object identity / shuffled positions. Anchor-Align retains the VLM's semantic understanding of what the instruction refers to, while the baseline latches onto memorized appearance shortcuts. ### Per-suite robustness — Object, Goal, and Long The same gains carry over to the remaining three LIBERO suites. Each radar plot compares Anchor-Align (orange) against the standard BC VLA-Adapter baseline (gray) across nine evaluation axes: two from LIBERO-PRO (Language Rephrase, Object Swap) and seven from LIBERO-Plus.

LIBERO Object suite radar plot LIBERO Goal suite radar plot LIBERO Long suite radar plot

Largest gains: Robot Init State +18.6 on Object; Language Instruction +11.9 on Goal; Lighting Condition +20.8, Object Layout +18.6, and Camera Viewpoint +17.7 on Long. ### Long-horizon generalization — CALVIN ABC→D Each rollout chains five language instructions; k/5 is the fraction of rollouts completing the first k, and Len is the average number of consecutively completed tasks. | Method | 1/5 | 2/5 | 3/5 | 4/5 | 5/5 | Len | |---|---:|---:|---:|---:|---:|---:| | UniVLA | 95.5 | 85.8 | 75.4 | 66.9 | 56.5 | 3.8 | | OpenVLA-OFT | 96.3 | 89.1 | 82.4 | 75.8 | 66.5 | 4.1 | | OpenHelix | 97.1 | 91.4 | 82.8 | 72.6 | 64.1 | 4.1 | | VLA-Adapter (standard BC) | 98.3 | 94.0 | 87.5 | 80.0 | 73.1 | 4.3 | | **Anchor-Align VLA (ours)** | **99.1** | **95.8** | **90.6** | **84.7** | **77.9** | **4.5** | ### Multi-seed significance Mean ± standard deviation over 5 training seeds on LIBERO-Spatial; the method gaps are far larger than seed-to-seed variability. | Method | Spatial (Std) | Lang. Reph. | Object Swap | Pos. Swap | Plus | |---|---:|---:|---:|---:|---:| | VLA-Adapter (standard BC) | 93.3 ± 0.3 | 91.1 ± 0.4 | 90.1 ± 0.5 | 2.6 ± 0.7 | 85.3 ± 0.3 | | **Anchor-Align VLA (ours)** | **97.9 ± 0.3** | **97.1 ± 0.5** | **96.1 ± 0.4** | **23.5 ± 0.2** | **90.5 ± 0.6** | --- ## Per-folder layout Each subfolder is a self-contained inference bundle: ``` _/ MODEL_CARD.md model.safetensors # merged base VLM weights (~2.5 GB) lora_adapter/adapter_model.safetensors # separate LoRA weights (~208 MB) action_head--_checkpoint.pt # L1 regression head (~436 MB) align_dir_proj--_checkpoint.pt # alignment direction projector proprio_projector--_checkpoint.pt # proprioception projector config.json, tokenizer.*, processor_config.json, dataset_statistics.json ``` ## Quickstart — download + run inference **1. Clone the code repo** (contains all inference and eval scripts): ```bash git clone https://github.com/dwipddalal/Anchor-Align.git cd Anchor-Align pip install -e . # + follow the installation section in the GitHub README ``` **2. Download a checkpoint from this repo:** ```python from huggingface_hub import snapshot_download local_dir = snapshot_download( repo_id="Dwipz/Anchor-Align", allow_patterns="libero-spatial/*", # or libero-object/*, libero-goal/*, libero-long/* local_dir="./checkpoints", ) ``` **3. Run inference** using the eval scripts in the GitHub repo: ```bash # LIBERO Standard CUDA_VISIBLE_DEVICES=0 python experiments/robot/libero/run_libero_eval.py \ --pretrained_checkpoint ./checkpoints/libero-spatial \ --task_suite_name libero_spatial \ --use_proprio True --num_images_in_input 2 --use_pro_version True # LIBERO-PRO (paraphrased-language perturbation) CUDA_VISIBLE_DEVICES=0 python experiments/robot/libero_pro/run_libero_pro_eval.py \ --pretrained_checkpoint ./checkpoints/libero-spatial \ --base_suite_name libero_spatial --perturbation_type lan \ --use_proprio True --num_images_in_input 2 --use_pro_version True ``` Inference flags (`--use_proprio True --num_images_in_input 2 --use_pro_version True --use_l1_regression True --center_crop True --num_open_loop_steps 8`) match the paper. See the GitHub README's "Evaluation" section for LIBERO-Plus and batched variants. ## License MIT. See the [GitHub repository LICENSE](https://github.com/dwipddalal/Anchor-Align/blob/main/LICENSE). ## Citation ```bibtex @article{dalal2026anchoralign, title = {Generalizable VLA Finetuning via Representation Anchoring and Language-Action Alignment}, author = {Dalal, Dwip and Patel, Shivansh and Jain, Chahit and Kim, Jeonghwan and Mishra, Utkarsh and Baratian, Alex and Ha, Hyeonjeong and Ji, Heng and Lazebnik, Svetlana and Jain, Unnat}, journal = {arXiv preprint arXiv:2607.13429}, year = {2026} } ```