FrozenVLA-2B β Lightweight Vision-Language-Action for Robot Manipulation
A 50M-parameter trainable head on top of frozen Qwen3-VL-2B-Instruct, trained on BridgeData v2 (2,617 episodes) for general-purpose robotic manipulation.
π§ Architecture
ββββββββββββββββββββββββββββββββββββββββββββ
β Qwen3-VL-2B-Instruct (FROZEN) β
β βββββββββββββββ βββββββββββββββββββ β
β β Vision Enc. β -> β LLM (28L) β β
β βββββββββββββββ β hidden=2048 β β
β ββββββββββ¬βββββββββ β
β β β
β last_token_hidden β
β (2048-dim) β
ββββββββββββββββββββββββββββββββΌββββββββββββ
β
ββββββββββββΌβββββββββββ
β MLP Projector β β Trainable (1.3M)
β 2048 β 512 β 512 β
β GELU + Dropout β
ββββββββββββ¬βββββββββββ
β
ββββββββββββΌβββββββββββ
β Action Head β β Trainable
β 512 β 7 β
ββββββββββββ¬βββββββββββ
β
EEF delta: [dx, dy, dz, ax, ay, az, gripper]
| Component |
Params |
Status |
| Qwen3-VL-2B (Vision + LLM) |
2,127,532,032 |
βοΈ Frozen |
| MLP Projector |
1,314,824 |
π₯ Trained |
| Action Head |
513 |
π₯ Trained |
| Total |
2,128,847,369 |
1.3M trainable |
π Training
| Item |
Detail |
| Dataset |
BridgeData v2 (LeRobot format) |
| Episodes |
2,617 |
| Action format |
EEF delta 7D: [dx, dy, dz, ax, ay, az, gripper] |
| Action normalization |
Z-score (mean/std per dimension) |
| Hardware |
Alibaba Cloud PAI Β· NVIDIA A10 24GB |
| Framework |
PyTorch 2.6.0 Β· Transformers 4.51+ Β· CUDA 12.6 |
| Epochs |
4 (of 5 planned) |
| Effective batch size |
64 (32 Γ gradient_accumulation=2) |
| Optimizer |
AdamW (lr=1e-4, wd=1e-2) |
| Schedule |
Cosine annealing Β· 500 warmup steps |
| Precision |
bfloat16 Β· gradient clip=1.0 |
| Image size |
448Γ448 (Qwen3-VL default) |
| Frames |
All frames per episode (frame_sampling=all) |
Training Loss (per epoch)
| Epoch |
Approx MSE Loss |
Checkpoint |
| 1 |
β |
epoch_1.pt (15MB) |
| 2 |
β |
epoch_2.pt (15MB) |
| 3 |
β |
epoch_3.pt (15MB) |
| 4 |
β |
epoch_4.pt (15MB) |
Inference Requirements
| Platform |
VRAM |
Notes |
| RTX 4060 Laptop 8GB |
~4 GB |
β
Verified Β· sdpa Β· bf16 |
| A10 24GB |
~4 GB |
β
Training env |
| T4 16GB |
~4 GB |
β
Should work |
π Quick Start
1. Clone & Install
pip install torch>=2.5.0 transformers>=4.51.0 accelerate sentencepiece protobuf Pillow
git clone https://huggingface.co/YOUR_USERNAME/frozenvla
cd frozenvla
2. Download Base Model
huggingface-cli download Qwen/Qwen3-VL-2B-Instruct --local-dir ./Qwen3-VL-2B-Instruct
3. Load & Infer
import torch
from PIL import Image
from model import FrozenVLA
model = FrozenVLA(
llm_name="./Qwen3-VL-2B-Instruct",
mlp_hidden_dim=512,
mlp_depth=2,
action_dim=7,
attn_implementation="sdpa",
)
model.load_trainable("epoch_4.pt")
model = model.to("cuda").eval()
model.mlp_projector = model.mlp_projector.to(dtype=torch.bfloat16)
model.action_head = model.action_head.to(dtype=torch.bfloat16)
image = Image.open("robot_view.jpg").convert("RGB")
instruction = "pick up the red block"
with torch.no_grad():
action = model([image], [instruction])
print(action.float().cpu().numpy())
4. Deploy Script (One-Click)
python deploy.py --checkpoint epoch_4.pt --test-image robot_view.jpg
π Files
| File |
Description |
epoch_4.pt |
Best trained head (MLP + ActionHead, 15MB) |
epoch_1~3.pt |
Intermediate checkpoints |
model.py |
Full model architecture (FrozenVLA class) |
config.yaml |
Training configuration |
deploy.py |
One-click deployment + inference script |
β οΈ Limitations
- Action space: BridgeData EEF delta only β NOT directly compatible with joint-space robots without IK conversion.
- Domain: Trained on BridgeData scenes (tabletop manipulation). Zero-shot generalization to novel environments is limited.
- Single image input: Uses the current frame only; no temporal context from video history.
- Language: English instructions only.
π Citation
@misc{frozenvla-2026,
title = {FrozenVLA-2B: Lightweight VLA from Frozen Qwen3-VL on BridgeData},
author = {},
year = {2026},
url = {https://huggingface.co/YOUR_USERNAME/frozenvla}
}
π License
Apache 2.0