Anchor-Align: Generalizable VLA Finetuning via Representation Anchoring and Language-Action Alignment

🌐 Project Page  β€’  πŸ“„ Paper (arXiv)  β€’  πŸ’» Code (GitHub)  β€’  🎬 Videos

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.

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
v7_kl01_spatial_10k/ LIBERO Spatial 0.10 10k
v7_kl015_object_2.5k/ LIBERO Object 0.15 2.5k
v7_kl01_goal_25k/ LIBERO Goal 0.10 25k
v7_kl015_l10_45k/ 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.

Results

Tables below are reproduced from the paper. Reproduction targets and tolerances for the released checkpoints are in 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:

<benchmark>_<steps>/
  MODEL_CARD.md
  model.safetensors                        # merged base VLM weights (~2.5 GB)
  lora_adapter/adapter_model.safetensors   # separate LoRA weights (~208 MB)
  action_head--<step>_checkpoint.pt        # L1 regression head (~436 MB)
  align_dir_proj--<step>_checkpoint.pt     # alignment direction projector
  proprio_projector--<step>_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):

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:

from huggingface_hub import snapshot_download

local_dir = snapshot_download(
    repo_id="Dwipz/Anchor-Align",
    allow_patterns="v7_kl01_spatial_10k/*",   # or v7_kl015_object_2.5k/*, v7_kl01_goal_25k/*, v7_kl015_l10_45k/*
    local_dir="./checkpoints",
)

3. Run inference using the eval scripts in the GitHub repo:

# LIBERO Standard
CUDA_VISIBLE_DEVICES=0 python experiments/robot/libero/run_libero_eval.py \
  --pretrained_checkpoint ./checkpoints/v7_kl01_spatial_10k \
  --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/v7_kl01_spatial_10k \
  --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.

Citation

@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}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading

Paper for Dwipz/Anchor-Align