Bạn đã từng thấy robot thao tác hoàn hảo trong lần đầu tiên, rồi đến lần thứ hai — khi vật thể bị che khuất một chút, hoặc thứ tự bước thay đổi — robot lại đứng im không biết làm gì? Đây chính là bài toán memory trong VLA (Vision-Language-Action): model thông minh đến đâu, nếu không nhớ được mình vừa làm gì và vật thể đang ở đâu, thì vẫn thất bại ở những tình huống phức tạp hơn.
BridgeVLA++ (arXiv 2608.05042) từ Chinese Academy of Sciences và ByteDance Seed giải quyết đúng vấn đề này. Paper submit lên IEEE TPAMI tháng 8/2026, kế thừa BridgeVLA gốc (NeurIPS 2025) và bổ sung một module spatio-temporal memory thống nhất — phân chia rõ ràng: temporal memory giải quyết "tiếp theo làm gì", còn spatial memory giải quyết "làm chính xác ở đâu". Kết quả: 93.7% trên RLBench, 96.0% trên RMBench (benchmark dual-arm memory-dependent), đạt SOTA trên 5 benchmark simulation và được kiểm chứng trên 2 nền tảng robot thực tế.
BridgeVLA gốc là gì? Nền tảng cần hiểu trước
Để hiểu BridgeVLA++, bạn cần biết BridgeVLA (NeurIPS 2025) đã làm gì. Đây là một VLA với ý tưởng cốt lõi khá thông minh: thay vì cố gắng xử lý point cloud 3D trực tiếp trong không gian 3D (vốn rất khó để VLM pretrained hiểu), BridgeVLA chiếu point cloud 3D thành 3 ảnh orthographic 2D (top view, front view, side view), rồi dùng VLM (PaliGemma 3B) để dự đoán 2D heatmap — mỗi pixel của heatmap là xác suất "đây là điểm action tiếp theo". Từ heatmap đó, robot biết cần di chuyển đến đâu trong không gian 3D.
Cách tiếp cận này giữ được input-output alignment với quá trình pretrain của VLM (vốn hiểu ảnh 2D rất tốt), trong khi vẫn khai thác được thông tin 3D. Chỉ cần 100 demo để fine-tune cho simulation, 10 demo cho real-world.
Điểm yếu của BridgeVLA gốc: Không có memory. Mỗi step, model chỉ thấy observation hiện tại. Nếu task cần nhớ lịch sử (vật thể đã được đặt vào hộp nào? bước trước vừa làm gì? vật thể bị tay robot che khuất không thấy nữa?), thì BridgeVLA fail. Trên RMBench — benchmark 9 task dual-arm cần memory — BridgeVLA đạt… 18.9%.
BridgeVLA++: Spatio-Temporal Memory được Thiết Kế Như Thế Nào?
BridgeVLA++ không thay đổi kiến trúc core của BridgeVLA. Thay vào đó, nó inject hai module memory vào không gian patch-token của VLM, tại hai giai đoạn khác nhau trong pipeline coarse-to-fine.

Temporal Memory (𝒯ₜ) — "Tiếp Theo Làm Gì?"
Temporal memory hoạt động ở giai đoạn coarse — giai đoạn model quyết định vùng hành động ở mức độ tổng thể. Memory này lưu 3 loại thông tin:
-
Initial anchor views (𝐀₀): Ảnh chụp từ bước đầu tiên của episode. Đây là "ground truth" về trạng thái ban đầu — trước khi robot đụng vào bất cứ thứ gì.
-
Neighboring keyframes (ℋₜⁿᵇʳ): N = 2 keyframe gần nhất vừa thực hiện. Giúp model hiểu "vừa rồi tôi đã làm bước nào".
-
Sub-goal keyframes (ℋₜˢᵘᵇ): Keyframe được chọn adaptively bởi một module học được, đánh dấu các milestone quan trọng trong task. Ví dụ: "đã mở nắp hộp", "đã đặt vật vào trong". Module này được train với binary cross-entropy loss — học cách nhận biết frame nào đáng nhớ.
Tất cả được inject vào VLM qua cross-attention: token hiện tại query memory tokens để "hỏi" lịch sử trước khi quyết định action tiếp theo.
Spatial Memory (𝒮ₜ) — "Làm Chính Xác Ở Đâu?"
Spatial memory hoạt động ở giai đoạn fine — giai đoạn model cần xác định vị trí chính xác để thực hiện action. Vấn đề ở đây là: khi tay robot đang cầm vật thể, chính tay robot có thể che khuất vật thể đó. Observation hiện tại không đủ để biết vật ở đâu.
Giải pháp: lưu colored point cloud từ observation đầu tiên (trước khi robot làm gì cả). Khi cần thực hiện fine-stage action, model re-render point cloud này với cùng zoom và viewpoint như observation hiện tại, tạo ra ảnh tham chiếu hình học. Tay robot không xuất hiện trong ảnh tham chiếu này — vật thể hiện ra rõ ràng.

Overhead Tính Toán
Toàn bộ memory module chỉ thêm 269.77 triệu parameters vào backbone PaliGemma 3B — tương đương 9.2% overhead. Inference latency tăng từ 0.35s lên 0.57s/step trên RTX 4090. Đây là mức overhead rất hợp lý so với lợi ích mang lại.
Cài Đặt và Chuẩn Bị Môi Trường
Clone repository và cài đặt theo benchmark bạn muốn chạy:
git clone https://github.com/BridgeVLA/BridgeVLA.git
cd BridgeVLA
# main branch = BridgeVLA++
# git checkout bridgevla # để dùng phiên bản gốc NeurIPS 2025
Mỗi benchmark có script cài đặt conda riêng biệt (idempotent — chạy nhiều lần không lỗi):
# RLBench (benchmark phổ biến nhất — 18 tasks)
bash finetune/RLBench/install_rlbench.sh
# COLOSSEUM (test generalization với 14 distribution shifts)
bash finetune/RLBench/install_rlbench.sh # cài RLBench trước
bash finetune/Colosseum/install_colosseum.sh
# GemBench / MemoryBench
bash finetune/GemBench/install_gembench.sh
# RMBench (dual-arm memory tasks)
bash finetune/RMBench/install_rmbench.sh
# Pre-training (nếu muốn train từ đầu)
bash pretrain/install_pretrain.sh
Tải dataset cho các benchmark cần thiết:
# Tải tất cả 5 benchmark datasets
bash scripts/download_datasets.sh rlbench colosseum gembench memorybench rmbench
# Hoặc từng cái, có extract tự động
bash scripts/download_datasets.sh rlbench --extract
bash scripts/download_datasets.sh rmbench --extract
Lưu ý: RLBench yêu cầu pre-built keyframe caches. Script download_datasets.sh đã bao gồm cả phần này.
Pre-training: Dạy Model Nhìn và Hiểu
BridgeVLA++ dùng pre-training 2 giai đoạn. Giai đoạn 1 là grounding pre-training — dạy backbone PaliGemma học dự đoán 2D heatmap từ instruction ngôn ngữ:
# Pre-training trên 120K RoboPoint object-detection data
# Yêu cầu 8×A100, khoảng 2 tiếng
bash pretrain/pretrain.sh
Dataset pre-training là RoboPoint object-detection split (120K samples) — các cặp (ảnh, text instruction, bounding box). Model học: "khi người dùng nói 'pick up the red cup', hãy dự đoán heatmap tập trung vào vị trí của red cup". Đây là bước alignment quan trọng nhất — sau pre-training, model đã "biết" cách chú ý đúng vào vật thể được đề cập.
Nếu bạn không muốn pre-train từ đầu (mất ~2h, 8 GPU), hãy tải pretrained checkpoint:
bash scripts/download_checkpoints.sh pretrained
Fine-tuning: Dạy Robot Thao Tác Cụ Thể
Sau pre-training, fine-tune cho từng benchmark. BridgeVLA++ chỉ cần 100 demo/task cho simulation — con số rất nhỏ so với nhiều VLA khác:
# Fine-tune trên RLBench (18 manipulation tasks)
bash finetune/RLBench/train.sh
# Fine-tune trên COLOSSEUM (generalization test)
bash finetune/Colosseum/train.sh
# Fine-tune trên GemBench
bash finetune/GemBench/train.sh
# Fine-tune trên MemoryBench (single-arm memory tasks)
bash finetune/memoryBench/train.sh
# Fine-tune trên RMBench (dual-arm memory tasks)
bash finetune/RMBench_vla/train.sh
Trong quá trình fine-tuning, model tối ưu dual loss:
L_total = L_est + λ_check × L_check
Trong đó:
L_est: loss dự đoán action (heatmap prediction)L_check: binary cross-entropy loss cho adaptive keyframe selection — dạy module quyết định frame nào đáng lưu vào sub-goal memoryλ_check = 0.1theo mặc định
Data augmentation được áp dụng nhất quán trên observation hiện tại, memory samples, và ground-truth actions — tránh trường hợp augmentation làm lệch giữa memory và observation hiện tại.
Đánh Giá: 5 Benchmark Chứng Minh SOTA

Chạy Đánh Giá
# Đánh giá trên RLBench
bash finetune/RLBench/eval.sh
# GemBench và MemoryBench cần 2 terminal (server-client setup)
# Terminal 1:
bash finetune/GemBench/start_server.sh
# Terminal 2:
bash finetune/GemBench/eval.sh
Kết Quả Chi Tiết
| Benchmark | BridgeVLA | BridgeVLA++ | Prior SOTA | Ghi chú |
|---|---|---|---|---|
| RLBench (18 tasks) | 90.5% | 93.7% | SAM2Act: 86.8% | General manipulation |
| COLOSSEUM (14 settings) | 64.0% | 65.2% | RVT-2: 56.7% | Out-of-distribution |
| GemBench | 50.0% | 51.1% | ~46% | Compositional |
| RMBench (9 dual-arm) | 18.9% | 96.0% | MemoryWAM: 83.0% | Memory-dependent |
| MemoryBench (3 tasks) | 11.3% | 99.7% | SAM2Act+: thấp hơn | Single-arm memory |
Số liệu đáng chú ý nhất là RMBench: từ 18.9% lên 96.0% — tăng 77 điểm phần trăm. Đây là minh chứng rõ nhất cho tầm quan trọng của memory. Không có memory, dual-arm coordination gần như không thể (robot không nhớ arm kia vừa làm gì, không nhớ object đã được đặt vào đâu). Với BridgeVLA++, model nhớ được toàn bộ lịch sử episode qua temporal memory.
MemoryBench còn ấn tượng hơn: 99.7% ± 0.3% — gần như perfect. Đây là 3 task single-arm cần nhớ đúng sequence và spatial location của các vật thể đã thao tác trước đó.
Real-World: Franka Research 3 và Dobot CR5A
# Deploy trên robot thực (cần cấu hình IP và camera)
bash real_robot/install_train.sh # trên GPU server
bash real_robot/install_deployment.sh # trên robot workstation
bash real_robot/eval_franka.sh # chạy evaluation
Kết quả real-world:
- Franka Research 3 (13 manipulation tasks): 96.9% thành công với 10 demo/task
- Franka với 3 demo/task (few-shot extreme): vẫn đạt 95.4% — cực kỳ data-efficient
- Dobot CR5A (memory-dependent tasks): 93.3% vs 30.0% của SAM2Act+
Camera dùng: ZED 2i stereo camera đặt tĩnh (static mount). Không cần wrist camera vì point cloud đã cung cấp đủ thông tin 3D.
Bimanual: Khi Hai Tay Phải Phối Hợp
Một trong những tính năng ít được nói đến nhưng rất quan trọng của BridgeVLA++ là hỗ trợ bimanual manipulation. Bằng cách share spatial memory giữa 2 arm (cùng reference point cloud, cùng không gian hình học), 2 arm phối hợp được với nhau mà không cần separate coordination module.
Kết quả trên RMBench (9 task dual-arm):
- Không có memory: 18.9% (thất bại toàn tập)
- Với BridgeVLA++: 96.0%
Đây là cross-embodiment scalability thực sự: cùng một framework, cùng một training recipe, hoạt động tốt trên cả single-arm lẫn dual-arm.
So Sánh với Các VLA Khác
| Feature | BridgeVLA++ | RVT-2 | SAM2Act | ACT |
|---|---|---|---|---|
| Memory module | ✅ Spatio-temporal | ❌ | Partial | ❌ |
| 3D input | Point cloud → 2D | Voxel | N/A | ❌ |
| Bimanual | ✅ Native | ❌ | ❌ | Separate model |
| Demo số lượng | 100 (sim), 10 (real) | 100+ | 100+ | 50+ |
| RLBench | 93.7% | 82.2% | 86.8% | N/A |
| Memory tasks | 96.0% | ~40% | 74% | N/A |
BridgeVLA++ nổi bật đặc biệt ở memory-dependent tasks — đây là gap lớn nhất với các phương pháp hiện có.
Khi Nào Nên Dùng BridgeVLA++?
BridgeVLA++ là lựa chọn tốt khi:
- Task cần multi-step planning: nhặt vật → đặt vào hộp → đóng nắp. Memory giúp nhớ đã làm bước nào.
- Bạn có ít data: 10 demo cho real-world là rất ít. Nếu thu thập dữ liệu khó (robot đắt, thời gian teleop hạn chế), đây là VLA phù hợp.
- Task có occlusion: khi vật thể bị che khuất bởi tay robot hoặc vật khác, spatial memory giúp duy trì ước lượng vị trí chính xác.
- Dual-arm coordination: bimanual manipulation với shared memory là điểm mạnh độc đáo.
Cân nhắc khi:
- Task đơn giản, memoryless: nếu chỉ cần "pick and place" không có multi-step dependency, BridgeVLA gốc (branch
bridgevla) đủ dùng và nhanh hơn. - Latency cực kỳ quan trọng: 0.57s/step — nếu bạn cần dưới 0.1s, cần architecture khác.
Kết Luận
BridgeVLA++ chứng minh một nguyên tắc đơn giản nhưng thường bị bỏ qua trong thiết kế VLA: robot cần nhớ. Không phải nhớ mọi thứ — mà nhớ đúng thứ cần nhớ. Temporal memory chọn lọc keyframe quan trọng, spatial memory giữ lại hình học ban đầu để giải quyết occlusion. Hai thành phần này cộng tác để robot vừa biết "tiếp theo làm gì" vừa biết "làm chính xác ở đâu".
Với chỉ 9.2% overhead parameter và kết quả SOTA trên 5 benchmark, BridgeVLA++ là một trong những VLA production-ready nhất hiện nay cho 3D manipulation tasks. Code và checkpoint đã public tại github.com/BridgeVLA/BridgeVLA.



