Hãy tưởng tượng bạn giao một robot nhiệm vụ "xây cầu bằng 74 khối gỗ". Robot chạy xong 400 bước, báo cáo "hoàn thành 85%", nhưng nhìn lại — cầu chỉ được nửa vời, một số khối đặt sai vị trí. Đó chính là stage hallucination: VLA model học cách "trông giống hoàn thành" mà không thực sự hoàn thành từng giai đoạn.
EvoVLA — được chấp nhận tại ECCV 2026 — là framework đầu tiên định danh và hệ thống hóa vấn đề này, đồng thời đưa ra 3 cơ chế độc lập để triệt tiêu nó. Kết quả: 69.2% success rate trên Discoverse-L (benchmark thao tác dài hạn), vượt baseline mạnh nhất 10.2 điểm phần trăm và giảm hallucination rate từ 38.5% xuống 14.8%.
Bài này sẽ giải thích chi tiết từng module, cách cài đặt, cách training và cách reproduce kết quả.
- Paper: EvoVLA: Self-Evolving Vision-Language-Action Model — Zeting Liu, Zida Yang et al., ECCV 2026
- GitHub: AIGeeksGroup/EvoVLA
- Project page: aigeeksgroup.github.io/EvoVLA
Stage Hallucination là gì? Tại sao nguy hiểm?
Trong bài toán manipulation dài hạn (long-horizon), robot phải thực hiện nhiều giai đoạn tuần tự. Ví dụ task "Jujube-Cup" gồm 19 giai đoạn: nhặt quả táo → đặt vào cốc → di chuyển cốc → v.v.
VLA model được train với reward thưa (sparse reward) — nghĩa là chỉ nhận reward khi hoàn thành toàn bộ task. Để tối ưu reward đó, model dễ học ra shortcut: bắt chước hành vi trông như hoàn thành stage (pose tương tự, trajectory gần đúng) nhưng thực tế không trigger điều kiện hoàn thành thật sự.
Ví dụ cụ thể: Trong task "Stack blocks", model học đặt block ở độ cao xấp xỉ đúng, CLIP-score (hình ảnh vs mô tả "block đã chồng lên nhau") vẫn cao — nhưng block thực tế không tiếp xúc ổn định và đổ ngay sau khi robot rút tay.
Đây là hallucination: VLM score cao nhưng task completion thấp.
Kiến trúc EvoVLA: Ba lớp phòng thủ

EvoVLA xây dựng trên backbone OpenVLA-OFT (Llama-2-7B language model + frozen SigLIP và DINOv2 vision encoder) và bổ sung 3 module chuyên biệt:
Module 1 — Stage-Aligned Reward (SAR)
Đây là trái tim của EvoVLA. SAR giải quyết hallucination bằng cách thay thế CLIP-score đơn thuần bằng triplet contrastive learning với ba loại mô tả:
- Positive (anchor): Mô tả trạng thái hoàn thành đúng. Ví dụ: "Block đỏ nằm chắc chắn trên block xanh, tiếp xúc phẳng, không nghiêng."
- Negative (mutual exclusive): Mô tả trạng thái thất bại rõ ràng. Ví dụ: "Block đỏ vẫn còn trên sàn, chưa được nhấc lên."
- Hard Negative (counterfactual): Near-miss scenarios — trường hợp gần hoàn thành nhưng thiếu một điều kiện quan trọng. Ví dụ: "Gripper đang giữ block đỏ gần vị trí mục tiêu nhưng chưa đặt xuống và chưa có tiếp xúc."
SAR sử dụng Gemini 2.5 Pro để sinh tự động triplet predicates từ video demonstration, đặc biệt là phần hard negatives. Gemini được prompt để tạo ra mô tả nhấn mạnh điều kiện spatial và contact ("gripper near target but no contact") thay vì đặc trưng appearance như màu sắc. Sau đó một bước validation tự động lọc bỏ các mô tả không mutual exclusive hoặc dùng ngôn ngữ appearance-only.
Temporal smoothing được áp dụng để ổn định reward: running average với hệ số α=0.05. Stage transition chỉ xảy ra khi sliding window 8 bước liên tiếp đều vượt threshold θ=0.7. Điều này ngăn model "nhảy" stage sớm do noise một bước đơn lẻ.
Module 2 — Pose-Based Object Exploration (POE)
POE giải quyết vấn đề khám phá (exploration) trong môi trường thưa reward. Thay vì dùng curiosity dựa trên pixel (dễ bị đánh lừa bởi thay đổi ánh sáng, nền), POE ground curiosity vào 6D relative pose giữa gripper và object mục tiêu:
pose_rel = [Δx, Δy, Δz, Δroll, Δpitch, Δyaw]
Hai world model nhỏ (MLP 2 lớp × 256 units mỗi lớp) được train song song:
- Forward model: dự đoán pose tiếp theo từ pose hiện tại + action
- Inverse model: dự đoán action cần thiết từ pose hiện tại và pose đích
Intrinsic reward = prediction error của forward model. Khi gripper chưa học cách tiếp cận object, prediction error cao → curiosity reward cao → khuyến khích khám phá. Khi đã thành thạo contact dynamics, prediction error giảm → tự nhiên chuyển focus sang task-level reward.
Ưu điểm so với pixel-based curiosity: không bị distract bởi thay đổi ánh sáng, object nền, hay chuyển động ngẫu nhiên không liên quan.
Module 3 — Long-Horizon Memory
Task 74 giai đoạn như "Block Bridge" kéo dài 400+ bước. Nếu dùng standard context window, các bước đầu sẽ bị "đẩy ra" và model mất thông tin giai đoạn đã hoàn thành.
Long-Horizon Memory dùng attention-based selective retention để giữ lại history tokens quan trọng nhất, kết hợp với gated fusion (sigmoid gate) để merge retrieved context với representation hiện tại:
h_fused = gate * h_history + (1 - gate) * h_current
gate = sigmoid(W * [h_history; h_current])
Window length = 16 tokens được chọn qua ablation. Memory module còn modulate progress reward: khi phát hiện unstable manipulation pattern (gripper lắc, object rung), nó suppress intrinsic reward tạm thời để tránh penalize robot đang thực hiện contact tinh tế.
Discoverse-L: Benchmark Thao Tác Dài Hạn

Discoverse-L là benchmark gồm 3 task manipulation dài hạn được build trên DISCOVERSE simulator:
| Task | Số stages | Mô tả |
|---|---|---|
| Block Bridge | 74 | Đặt thanh gỗ tạo khung cầu, điền block vào vị trí |
| Stack | 18 | Xếp chồng block màu theo thứ tự quy định |
| Jujube-Cup | 19 | Nhặt quả táo tàu, đặt vào cốc, di chuyển cốc về vị trí đích |
Mỗi task được đánh giá bằng 50 rollout độc lập với điều kiện khởi tạo ngẫu nhiên (vị trí object xáo trộn trong range ±5cm). Success rate được tính với ngưỡng: hoàn thành toàn bộ task trong 400 bước. Hallucination Rate (HR) đo tỉ lệ episodes mà VLM báo "completed" nhưng thực tế task chưa xong.
Cài đặt môi trường
# Clone repo
git clone https://github.com/AIGeeksGroup/EvoVLA.git
cd EvoVLA
# Tạo conda environment
conda create -n evovla python=3.10
conda activate evovla
# Cài dependencies
pip install -r requirements.txt
# Cài DISCOVERSE simulator
pip install discoverse
# Tải pretrained OpenVLA-OFT checkpoint (base model)
python scripts/download_checkpoint.py --model openvla-oft-7b
Yêu cầu phần cứng: EvoVLA training cần ít nhất 4× GPU 80GB (paper dùng H20 96GB). Nếu không có hardware đó, có thể dùng checkpoint pretrained từ HuggingFace để chạy inference.
Training Pipeline

Bước 1: Chuẩn bị Stage Annotations
EvoVLA cần stage labels cho mỗi demonstration. Script tự động phân đoạn stage từ video demo dựa trên optical flow + object state change detection:
python scripts/discover_stages.py \
--demo_dir data/demos/stack \
--output_dir data/stages/stack \
--task stack
Bước 2: Sinh Gemini Hard Negatives
python scripts/generate_hard_negatives.py \
--stage_dir data/stages/stack \
--model gemini-2.5-pro \
--output data/triplets/stack_triplets.json \
--validate_mutual_exclusive True
Script này gọi Gemini API để sinh mô tả triplet (positive, negative, hard negative) cho từng stage. Flag --validate_mutual_exclusive bật bộ lọc tự động loại mô tả trùng lặp hoặc không rõ ràng.
Lưu ý: Cần Gemini API key. Đặt GEMINI_API_KEY trong environment:
export GEMINI_API_KEY="your-key-here"
Bước 3: Training PPO với EvoVLA
python train_evovla.py \
--task stack \
--backbone openvla-oft-7b \
--num_envs 8 \
--total_timesteps 2000000 \
--intrinsic_weight 0.6 \
--clip_threshold 0.7 \
--smoothing_alpha 0.05 \
--memory_window 16 \
--ppo_lr 3e-4 \
--seeds 0 1 2 \
--output_dir checkpoints/evovla_stack
Hyperparameter key:
--intrinsic_weight 0.6(ρ): cân bằng giữa intrinsic (POE) và extrinsic (SAR) reward--clip_threshold 0.7(θ): ngưỡng CLIP-score để confirm stage completion--smoothing_alpha 0.05(α): hệ số temporal smoothing — nhỏ = ổn định hơn nhưng lag hơn--memory_window 16: số history tokens giữ lại trong Long-Horizon Memory
Training một task mất khoảng 24 giờ trên 4×H20 cho 1 seed. Paper chạy 3 seeds để lấy mean ± std.
Bước 4: Evaluation
python eval_evovla.py \
--task stack \
--checkpoint checkpoints/evovla_stack/best.pt \
--num_rollouts 50 \
--randomize_init True \
--report_hallucination True
Script này tự động tính Success Rate, Hallucination Rate và Sample Efficiency, xuất kết quả ra results/evovla_stack_eval.json.
Kết Quả Chi Tiết

Success Rate (%)
| Model | Block Bridge | Jujube-Cup | Stack | Trung bình |
|---|---|---|---|---|
| BC (baseline) | 31.2 | 40.5 | 35.8 | 35.8 |
| OpenVLA | 46.3 | 55.2 | 48.1 | 49.9 |
| OpenVLA-OFT | 54.1 | 63.5 | 59.4 | 59.0 |
| EvoVLA | 65.3 | 72.6 | 69.7 | 69.2 |
Hallucination Rate (%) — thấp hơn là tốt hơn
| Model | Block Bridge | Jujube-Cup | Stack | Trung bình |
|---|---|---|---|---|
| OpenVLA-OFT | 41.2 | 35.1 | 39.2 | 38.5 |
| EvoVLA | 16.3 | 13.2 | 14.9 | 14.8 |
EvoVLA giảm Hallucination Rate 23.7 điểm (từ 38.5% xuống 14.8%) — đây là số liệu quan trọng nhất, chứng minh robot thực sự hoàn thành stage thay vì chỉ trông như hoàn thành.
Sample Efficiency
EvoVLA đạt 50% success threshold sau khoảng 1M timesteps, bằng 1/1.5 so với OpenVLA-OFT cần ~1.5M timesteps để đạt cùng mốc. Đây là nhờ POE cung cấp curiosity reward dense ngay từ đầu training, giúp exploration hiệu quả hơn trong 500K bước đầu.
Ablation: Module Nào Đóng Góp Nhiều Nhất?
Paper chạy ablation loại từng module:
| Variant | Avg Success Rate |
|---|---|
| EvoVLA đầy đủ | 69.2% |
| Không có SAR | 61.4% (−7.8%) |
| Không có POE | 64.7% (−4.5%) |
| Không có Memory | 63.9% (−5.3%) |
| Không có Hard Negatives | 64.1% (−5.1%) |
Kết luận quan trọng: SAR là module đóng góp nhiều nhất (−7.8% nếu bỏ). Tuy nhiên 3 module phụ thuộc lẫn nhau — POE cung cấp exploration đa dạng hơn để SAR có nhiều data học reward chính xác, còn Memory ổn định reward trong suốt episode dài.
Triển Khai Thực Tế (Sim2Real)
EvoVLA được test trên robot thực tế trong 2 cấu hình camera:
- Eye-in-hand: camera gắn ở cổ tay robot
- Eye-to-hand: camera cố định nhìn xuống workspace
Kết quả real-world không định lượng như simulation nhưng video demo trên project page cho thấy robot thực hiện ổn định các task như xếp block và di chuyển cốc. Điểm đáng chú ý là EvoVLA không cần fine-tuning thêm từ sim sang real — Sim2Real transfer hoạt động trực tiếp nhờ 6D pose representation của POE ít nhạy cảm với domain gap về texture/lighting hơn pixel-based curiosity.
So Sánh Với Các Approaches Khác
EvoVLA không phải approach duy nhất để cải thiện VLA trên long-horizon task. So sánh nhanh:
| Approach | Ưu điểm | Nhược điểm |
|---|---|---|
| EvoVLA (SAR + POE + Memory) | Hallucination tường minh, geometry-grounded | Cần Gemini API, training nặng |
| VLAC | Critic network thêm VLA feedback | Không xử lý explicit hallucination |
| SARM | Reward model từ rollout | Không có hard negative mechanism |
| ProCVLM Dense Reward | Dense reward dense từ VLM | Susceptible to shortcutting nếu không có SAR |
Kết Luận: Khi Nào Dùng EvoVLA?
EvoVLA phù hợp khi bạn gặp phải một trong hai triệu chứng:
- Success Rate thấp không tương xứng với VLM score cao — đây là dấu hiệu hallucination rõ nhất.
- Task dài hơn 10 stages — Memory module mang lại lợi ích rõ rệt từ 10+ stages, và POE giúp exploration trong không gian state rộng.
Nếu task của bạn chỉ 3-5 stages, OpenVLA-OFT thuần + sparse reward có thể đủ và tiết kiệm chi phí training hơn nhiều.
Điểm đặc biệt của EvoVLA là cách dùng Gemini như một "teacher ngoài" để generate hard negatives — pattern này có thể tái sử dụng cho bất kỳ VLA task nào chỉ cần điều chỉnh prompt, không phụ thuộc vào reward engineering thủ công.



