VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam
VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
  1. Trang chủ
  2. Blog
  3. Tự chạy một VLA lái xe: OpenDriveVLA trên nuScenes
adasadasautonomous-drivingself-drivingend-to-end-drivingnuscenesopen-loop-planningqwen

Tự chạy một VLA lái xe: OpenDriveVLA trên nuScenes

Hướng dẫn hands-on kiến trúc, cài đặt và chạy inference OpenDriveVLA — mô hình VLA lái xe AAAI 2026 của TU Munich — trên bộ dữ liệu nuScenes.

Nguyễn Anh Tuấn7 tháng 8, 202611 phút đọcCập nhật: 23 thg 8, 2026
Tự chạy một VLA lái xe: OpenDriveVLA trên nuScenes

Bài trước (Từ UniAD tới VLA: bản đồ end-to-end driving 2026) đã giới thiệu khung 4 trục để đánh giá mọi hệ thống lái xe end-to-end: biểu diễn đầu vào, đầu ra planning, tín hiệu huấn luyện, và giao thức đánh giá. Bài này bắt đầu "dùng tay": ta sẽ đào sâu vào OpenDriveVLA — một mô hình được chấp nhận tại AAAI 2026 và là lựa chọn phù hợp nhất để bắt đầu tự thực nghiệm.

Tại sao chọn OpenDriveVLA thay vì những cái tên lớn hơn? Ba lý do thực tế:

  1. LLM backbone mở: Qwen2.5-0.5B, không bị khoá sau API hay giấy phép thương mại
  2. Chỉ cần nuScenes: bộ dữ liệu chuẩn của cộng đồng, không cần phần cứng cảm biến riêng
  3. Có tài liệu: repo github.com/DriveVLA/OpenDriveVLA có hướng dẫn cài đặt, chuẩn bị dữ liệu, và eval script — những thứ nhiều paper học thuật bỏ qua

Minh bạch ngay từ đầu: các lệnh trong bài này đến từ tài liệu chính thức của repo. Tôi chưa tự chạy toàn bộ pipeline trên máy riêng, nên mọi con số kết quả đều được lấy từ paper gốc (arXiv:2503.23463v2) và sẽ được ghi chú rõ nguồn.


OpenDriveVLA là gì?

OpenDriveVLA: Towards End-to-end Autonomous Driving with Large Vision Language Action Model — Xingcheng Zhou, Xuyuan Han, Feng Yang, Yunpu Ma, Volker Tresp, Alois Knoll (TU Munich), AAAI 2026. Paper nộp lên arXiv tháng 3/2025, sửa đổi tháng 11/2025; repo ghi nhận được chấp nhận ngày 08/11/2025.

Bài toán cốt lõi mà nhóm TU Munich nhắm tới là khoảng cách ngữ nghĩa giữa thị giác lái xe và ngôn ngữ (modality gap). Một camera nhìn thấy làn đường, xe trước, đèn giao thông — nhưng những token thị giác này và token ngôn ngữ từ hướng dẫn điều hướng ("rẽ phải sau 200m") sống trong hai không gian embedding hoàn toàn khác nhau. Nếu không có cầu nối tốt, mô hình hoặc bỏ qua thị giác, hoặc bỏ qua ngôn ngữ.

Giải pháp của họ: hierarchical vision-language alignment — không phải căn chỉnh một chiều mà căn chỉnh theo hai cấp: 2D (góc nhìn camera phẳng) và 3D (không gian thực quanh xe).


Kiến trúc: Hai tầng căn chỉnh thị giác-ngôn ngữ

Hệ thống có ba thành phần chính:

1. Visual Encoder — hiểu cảnh quan

OpenDriveVLA kế thừa từ LLaVA-NeXT để xử lý ảnh đa camera từ nuScenes. Mỗi khung hình từ 6 camera (front, front-left, front-right, back, back-left, back-right) được chiếu thành chuỗi 2D visual tokens — giống như cắt ảnh thành các mảnh nhỏ rồi embed mỗi mảnh thành vector.

Đồng thời, một nhánh 3D vision (dựa trên kiến trúc mmdet3d, kế thừa từ UniAD) tổng hợp thông tin từ nhiều góc nhìn và tạo ra 3D visual tokens — biểu diễn không gian thực: vị trí tương đối của xe cộ, người đi bộ, chướng ngại vật trong hệ toạ độ ego.

2. Hierarchical Alignment — cầu nối hai không gian

Đây là đóng góp kỹ thuật trọng tâm. Cả 2D và 3D visual tokens đều được chiếu vào một không gian ngữ nghĩa chung với token ngôn ngữ thông qua hai projection head riêng biệt, sau đó được căn chỉnh theo tầng bậc:

Camera images  →  2D visual tokens  ─┐
                                      ├→  Unified semantic space  →  LLM
BEV 3D repr.   →  3D visual tokens  ─┘

Ego state      →  state tokens       ─→  (concatenated with above)

Cách tiếp cận này cho phép mô hình đặt câu hỏi ngầm: "Vật thể mà tôi thấy ở góc trái camera front (2D) — nó nằm ở đâu trong không gian thực và đang di chuyển ra sao (3D)?" — thay vì chỉ dựa vào một loại biểu diễn.

3. Autoregressive Trajectory Decoder — lên kế hoạch di chuyển

Language backbone: Qwen2.5 (Alibaba, open-weight) với ba kích cỡ: 0.5B, 3B, 7B tham số.

Trajectory được sinh ra tự hồi quy (autoregressive): mô hình dự đoán từng waypoint kế tiếp (tọa độ x, y) dựa trên tất cả waypoints đã sinh và context về môi trường. Trong quá trình decode, structured agent-environment ego interaction được nhúng vào — tức là tại mỗi bước decode, mô hình nhận thêm thông tin về trạng thái ego vehicle (tốc độ, góc lái) và các agent xung quanh, giúp trajectory cuối cùng phản ánh động lực học thực tế thay vì chỉ là suy luận thuần ngôn ngữ.


Cài đặt môi trường

Yêu cầu GPU: Paper huấn luyện trên 4× NVIDIA H100 80GB, batch size 1/GPU, trong khoảng 2 ngày (phiên bản 0.5B). Với inference, checkpoint 0.5B chỉ chiếm ~1.4GB VRAM cho trọng số (0.7B tham số × 2 byte ở FP16), nhưng pipeline 3D với mmdet3d và xử lý đa camera có thể đẩy tổng VRAM lên 16–24GB khi chạy đầy đủ. Một GPU như RTX 3090/4090 (24GB) hoặc A100 40GB đủ để thử inference. Tôi chưa xác nhận ngưỡng tối thiểu chính xác — nếu bạn thử nghiệm, hãy bắt đầu với card 24GB.

Bước 1: Tạo môi trường Conda

conda create -n drivevla python=3.10 -y
conda activate drivevla
pip install --upgrade pip

Bước 2: Cài PyTorch

pip install torch==2.1.2 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

Đảm bảo gcc >= 5 và CUDA home được đặt đúng:

export CUDA_HOME=/usr/local/cuda   # hoặc path CUDA của bạn
export PATH=$CUDA_HOME/bin:$PATH

Bước 3: Cài mmcv custom (quan trọng — không dùng pip install mmcv thông thường)

Repo cung cấp bản mmcv đã được sửa đổi trong third_party/:

git clone https://github.com/DriveVLA/OpenDriveVLA.git
cd OpenDriveVLA

# Cài mmcv custom
cd third_party/mmcv_1_7_2
MMCV_WITH_OPS=1 pip install .
cd ../..

# Cài mmdet ecosystem
pip install mmdet==2.26.0 mmsegmentation==0.29.1 mmengine==0.9.0 motmetrics==1.4.0 casadi==3.6.0

# Cài mmdet3d custom
cd third_party/mmdetection3d_1_0_0rc6
pip install .
cd ../..

# Các dependency còn lại
pip install scipy==1.10.1 scikit-image==0.19.3 fsspec deepspeed

Lỗi thường gặp khi cài:

# Thiếu libGL (thường trên server headless)
apt-get update && apt-get install -y libgl1

# Thiếu libgfortran
sudo apt-get install libgfortran5

Chuẩn bị dữ liệu nuScenes

OpenDriveVLA dùng nuScenes V1.0 full dataset — bộ dữ liệu 700GB gồm 1000 scene, 6 camera, 1 LiDAR. Đây là dataset chuẩn trong cộng đồng autonomous driving.

Tải dữ liệu chính

Đăng ký tài khoản tại nuscenes.org và tải:

  • nuScenes V1.0 full dataset (train/val splits)
  • CAN bus extension (dữ liệu tốc độ, góc lái của xe)
  • Map v1.3

Đặt vào data/nuscenes/ theo cấu trúc:

data/
├── nuscenes/
│   ├── can_bus/
│   ├── maps/
│   ├── samples/
│   ├── sweeps/
│   └── v1.0-trainval/
└── infos/
    ├── nuscenes_infos_temporal_train.pkl
    └── nuscenes_infos_temporal_val.pkl

Tải info files từ UniAD

OpenDriveVLA tái sử dụng pickle files từ dự án UniAD (OpenDriveLab):

mkdir -p data/infos && cd data/infos

wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/nuscenes_infos_temporal_train.pkl
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/nuscenes_infos_temporal_val.pkl

cd ../..

Tải cached info

pip install gdown
cd data/nuscenes
gdown 16X0_-v-iXP9hVLNaDMmIiGhZKj24YOnb  # cached_nuscenes_info.pkl
cd ../..

Các file ground truth cho eval (gt_traj.pkl, gt_traj_mask.pkl) cũng được cung cấp qua Google Drive — xem chi tiết trong docs/2_DATA_PREP.md.


Tải checkpoint và chạy inference

Bước 1: Tải checkpoint 0.5B

Checkpoint được phát hành trên Hugging Face (tháng 11/2025):

mkdir -p checkpoints
# Clone với git-lfs hoặc dùng huggingface_hub
pip install huggingface_hub
python -c "
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id='OpenDriveVLA/OpenDriveVLA-0.5B',
    local_dir='checkpoints/DriveVLA-Qwen2.5-0.5B-Instruct'
)
"

Lưu ý: Model card yêu cầu đồng ý điều khoản chia sẻ thông tin liên lạc — bạn cần login Hugging Face trước khi tải.

Bước 2: Chạy evaluation

conda activate drivevla

# Chạy với 1 GPU
bash scripts/eval_drivevla.sh checkpoints/DriveVLA-Qwen2.5-0.5B-Instruct 1

# Hoặc với nhiều GPU (nếu có)
bash scripts/eval_drivevla.sh checkpoints/DriveVLA-Qwen2.5-0.5B-Instruct 4

Script này chạy open-loop evaluation trên nuScenes val set: với mỗi scene, mô hình nhận input đa camera + lệnh điều hướng + ego state rồi dự đoán trajectory tương lai, so sánh với ground truth.


Đọc kết quả: những con số có nghĩa gì?

L2 Displacement Error

Metric chính cho open-loop planning: khoảng cách Euclidean (mét) giữa waypoints dự đoán và ground truth, trung bình tại các horizon thời gian (thường 1s, 2s, 3s). Càng thấp càng tốt.

Con số từ paper (arXiv:2503.23463v2):

Mô hình L2 Error trung bình (m) Collision Rate trung bình (%)
GPT-Driver 0.44 —
DriveVLM 0.40 —
OpenDriveVLA-0.5B 0.35 ~0.09
OpenDriveVLA-3B 0.33 ~0.09
OpenDriveVLA-7B 0.33 ~0.09

Nguồn: Paper AAAI 2026, arXiv:2503.23463v2. Tôi không tự đo các con số này.

Điều đáng chú ý: phiên bản 0.5B đạt kết quả gần sát với 3B và 7B — gợi ý rằng cấu trúc hierarchical alignment quan trọng hơn kích thước mô hình thuần tuý, ít nhất với bài toán này.

Collision Rate

Tỷ lệ trajectory dự đoán va chạm với vật thể khác trong scene (theo mô phỏng). Càng thấp càng tốt. 0.09% là mức rất thấp — nhưng nhớ rằng đây là open-loop metric: mô hình dự đoán trajectory trong điều kiện hoàn hảo, không phải điều khiển xe thật.

Driving QA — BLEU-4

Một phần của eval đo khả năng mô tả và giải thích quyết định lái xe bằng ngôn ngữ tự nhiên. OpenDriveVLA-7B đạt BLEU-4 = 27.6 trên bộ test nuCaption, vượt qua LiDAR-LLM và các VLM tổng quát — cho thấy việc căn chỉnh thị giác-ngôn ngữ cũng giúp mô hình giải thích được, không chỉ lái xe.


Giới hạn cần biết trước khi thử

1. Training code chưa được phát hành (tính đến tháng 8/2026). Nếu bạn muốn fine-tune hoặc thử nghiệm với dữ liệu riêng, chưa có đường đi trực tiếp.

2. Open-loop ≠ Closed-loop: Tất cả số liệu trên là open-loop — mô hình không thực sự điều khiển xe trong simulator. Điều này có nghĩa là kết quả lạc quan hơn so với thực tế. Bài 3 (Benchmark: NavSim và Bench2Drive — đo thật ở đâu?) sẽ đào sâu vào sự khác biệt này và các benchmark closed-loop đáng tin cậy hơn.

3. Dữ liệu 700GB: nuScenes full là cam kết bandwidth và disk không nhỏ. Nếu chỉ muốn kiểm tra pipeline, có thể tải mini-split (~4GB) trước, nhưng checkpoint hiện tại được eval trên full val set.

4. Inference VRAM: Tôi ước tính 16–24GB là vùng an toàn cho pipeline đầy đủ, nhưng số thực tế phụ thuộc batch size và độ phân giải đầu vào. Theo dõi nvidia-smi khi chạy lần đầu.


Tại sao bài này quan trọng trong chuỗi series?

Nhìn lại khung 4 trục từ bài 1:

Trục OpenDriveVLA làm gì
Biểu diễn đầu vào 2D + 3D visual tokens từ đa camera, ego state
Đầu ra planning Waypoints (x, y) tự hồi quy — không phải control trực tiếp
Tín hiệu huấn luyện Behavior cloning trên ground truth trajectory nuScenes
Đánh giá Open-loop L2 error + Collision rate + Driving QA BLEU

OpenDriveVLA hiện thân hoá trường phái vision-language integration — toàn bộ pipeline từ camera đến waypoints đi qua một LLM duy nhất, thay vì tách riêng perception và planning. Đây là đối trọng trực tiếp với phương pháp dual-system (camera + LLM riêng biệt) mà bài 4 sẽ trình bày qua Alpamayo.


Bước tiếp theo

Sau khi bạn đã có tổng quan về cách một VLA lái xe hoạt động từ bên trong, câu hỏi tiếp theo là: làm sao so sánh công bằng giữa các mô hình? Bài 3 sẽ giải thích NavSim và Bench2Drive — hai benchmark được thiết kế để đo closed-loop, trả lời câu hỏi "mô hình này lái xe tốt bao nhiêu trong thực tế?" thay vì chỉ khớp ground truth trên file log.


Bài viết liên quan

  • Từ UniAD tới VLA: bản đồ end-to-end driving 2026 — Khung 4 trục để đọc mọi paper autonomous driving
  • Benchmark: NavSim và Bench2Drive — đo thật ở đâu? — Tại sao open-loop chưa đủ, và closed-loop benchmark làm được gì
  • Alpamayo và suy luận ngôn ngữ trong lái xe — NVIDIA's 10B multi-camera model và bước nhảy vọt về scale
NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Khám phá VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions
adas-e2e-2026 — Phần 2/6
← Từ UniAD tới VLA: bản đồ end-to-end driving 2026Benchmark chính là lập luận: NAVSIM v2, Bench2Drive, WOD-E2E →

Bài viết liên quan

Deep Dive
Benchmark chính là lập luận: NAVSIM v2, Bench2Drive, WOD-E2E
adasautonomous-drivingself-drivingPhần 3
adas

Benchmark chính là lập luận: NAVSIM v2, Bench2Drive, WOD-E2E

Ba loại điểm benchmark KHÔNG thay thế được cho nhau. Hiểu điều này trước khi đọc bất kỳ paper autonomous driving nào năm 2026.

11/8/202612 phút đọc
NT
NEWCase Study
Robotics
adasautonomous-drivingself-drivingPhần 6
adas

Robotaxi công bố gì: đọc số liệu an toàn cho đúng

Bài chốt series: Waymo 220 triệu dặm, IIHS 68% ít va chạm hơn, Apollo Go 22 triệu chuyến — và tại sao cách đọc số liệu quan trọng hơn điểm benchmark.

23/8/202617 phút đọc
NT
NEWNghiên cứu
World model thôi làm video đẹp, chuyển sang đo lường policy
adasautonomous-drivingself-drivingPhần 5
adas

World model thôi làm video đẹp, chuyển sang đo lường policy

World model 2026 không còn đo bằng FVD: tiêu chí mới là môi trường sinh có đo đúng chất lượng policy hay không. GAIA-4, Orbis 2, WorldLens.

19/8/202613 phút đọc
NT
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam