Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving

PaperProject Page


Chen Shi*, Jinrui Xu*, Shaoshuai Shi, Kehua Sheng, Bo Zhang, Li Jiang†

The Chinese University of Hong Kong, Shenzhen & Voyager Research, Didi Chuxing

*Equal Contribution, †Corresponding Author

DriveWAM is a joint video generation and action prediction model for autonomous driving. It adapts a pretrained video diffusion transformer into an autoregressive video-action policy, organizing video and action streams into a unified temporal token sequence trained under a joint flow-matching objective — preserving video generation priors while extending the model to ego-motion action prediction.

Highlights

NavSim

Comparison on NAVSIM v1. *: results with imitation learning. †: trained with multiple trajectory anchors. MV: multi-view cameras; SV: single-view camera; L: LiDAR.

MethodRefSensorsNC ↑DAC ↑TTC ↑C. ↑EP ↑PDMS ↑
Human100.0100.0100.099.987.594.8
UniADCVPR'23MV97.891.992.9100.078.883.4
TransFuserTPAMI'23MV & L97.792.892.8100.079.284.0
PARA-DriveCVPR'24MV97.992.493.099.879.384.0
LAWICLR'25SV96.495.488.799.981.784.6
DiffusionDriveCVPR'25MV & L98.296.294.7100.082.288.1
WoTEICCV'25MV & L98.596.894.499.981.988.3
VLA-based Methods
ReCogDrive*ICLR'26MV98.194.794.2100.080.986.5
DriveVLA-W0ICLR'26SV98.796.295.5100.082.288.4
AutoVLANeurIPS'25MV98.495.698.099.981.989.1
DriveDreamer-PolicyarXiv'26MV98.497.195.1100.083.589.2
DriveVLA-W0†ICLR'26SV98.799.195.399.383.390.2
WA-based Methods
EponaICCV'25SV97.995.193.899.980.486.2
WorldDrivearXiv'26SV98.495.895.299.883.389.0
DriveWAM (Ours)SV98.398.195.2100.084.390.1

PhysicalAI-AV

Comparison on PhysicalAI-Autonomous-Vehicles.

MethodSourceADE@3s ↓FDE@3s ↓ADE@4s ↓FDE@4s ↓
VaVAMValeo2.314.32--
Alpamayo-1.5NVIDIA0.802.311.444.18
DriveWAM (Ours)0.471.350.832.47

Qualitative Results

Qualitative Results

Data Scaling

DriveWAM's action prediction error improves consistently as training data scales from 4k to 100k clips. Scene-evolving (SE) guidance provides complementary benefit at every scale.

# Clips# ItersSE GuidanceADE@4s ↓FDE@4s ↓
4k50k1.213.65
4k50k1.012.95
20k50k0.952.94
20k50k0.942.65
100k50k0.922.75
100k50k0.832.47

News

  • [Jul 19, 2026] We have fixed the batch-size bug. With 8 NVIDIA H20 GPUs and batch size = 6, DriveWAM reaches 89.9 PDMS after 100k training steps, enabling training with fewer compute resources. ❤️
  • [Jun 7, 2026] We open-source all code and model weights.
  • [May 27, 2026] We release the paper and project page.

Getting Started

Installation

First, clone this repository and set up the environment.

git clone <repo-url>cd DriveWAM
# 1. Create conda environment
conda env create -f environment.yml
conda activate drivewam
# 2. Install PyTorch (CUDA 12.6)
pip install torch==2.9.0 torchvision==0.24.0 --index-url https://download.pytorch.org/whl/cu126
# 3. Install Flash Attention
pip install flash-attn==2.8.3 --no-build-isolation

Two optional extras, installed when you need the corresponding feature:

# NavSim evaluation extras (for the NavSim benchmark)
pip install -r requirements-navsim.txt
# VLM preprocessing extras (to generate navigation guidance)
pip install vllm qwen-vl-utils

Data Preparation

DriveWAM trains and evaluates on two benchmarks. Prepare whichever you need.

NavSim

Follow the NavSim installation guide to download the nuPlan-based dataset and cache metric files, and export the environment variables from that guide (OPENSCENE_DATA_ROOT, NUPLAN_MAPS_ROOT, NUPLAN_MAP_VERSION). Then extract per-scene samples:

# navtrain split (training)
python -m src.navsim.process_data --output-path ./data/navsim/trainval
# navtest split (evaluation)
python -m src.navsim.process_data \
--navsim-log-path $OPENSCENE_DATA_ROOT/navsim_logs/test \
--sensor-blobs-path $OPENSCENE_DATA_ROOT/sensor_blobs/test \
--scene-filter-config navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml \
--output-path ./data/navsim/test

Each scene becomes one pkl file, which is what the training and evaluation scripts read by default:

./data/navsim/trainval/
sample_000000.pkl
sample_000001.pkl
...

PhysicalAI-Autonomous-Vehicles

The raw dataset is hosted on Hugging Face and accessed through the physical_ai_av devkit. The devkit requires Python ≥ 3.11, so install it in a separate environment from drivewam:

pip install physical_ai_av

Accept the dataset license on the Hugging Face page, then download the dataset (or a subset of chunks) to ./data/physicalai. DriveWAM only needs the camera_front_wide_120fov camera plus the egomotion and calibration features. Extract 10 Hz clips from the download:

python -m src.physicalai.process_data \
--dataset_root ./data/physicalai \
--output_dir ./data/physicalai/front \
--num_workers 16

This writes one directory per clip:

./data/physicalai/
├── clip_index.parquet # official train/test split; keep it even if you prune the raw chunks
└── front/
└── <clip_id>/
├── camera_front_wide_120fov.mp4
└── camera_front_wide_120fov_ego.pkl

VLM navigation prompts are used as conditioning during training and inference. We provide pregenerated prompts: training-split prompts are available on Hugging Face; the 1k-sample test-split prompts used for evaluation are included in the repo at src/physicalai/eval_data/prompts_test_sample_1k.json. To regenerate them yourself:

# Step 1 – generate route / BEV / scene-evolving guidance
bash scripts/drivewam_physicalai_vlm_preprocess.sh
# Step 2 – VLM-based clip quality filtering and sub-sampling
SPLIT=train \
bash scripts/drivewam_physicalai_vlm_data_sample.sh

Training

DriveWAM model checkpoints are available on Hugging Face. DriveWAM is trained on top of LingBot-VA Base, a pretrained autoregressive diffusion transformer. Download the base model weights before training.

Key training hyperparameters (see configs for full details):

HyperparameterNavSim / PhysicalAI
Training steps50 000
Learning rate1e-5
OptimizerAdamW (β₁=0.9, β₂=0.95, wd=0.1)
Warmup steps10
Batch size (per GPU)1
Precisionbfloat16
Input resolution256×448
SNR shift (video / action)5.0 / 1.0

All experiments are conducted on 48 × NVIDIA H20 GPUs.

Edit the config (src/configs/navsim_cfg.py or src/configs/physicalai_cfg.py) to set your paths and hyperparameters, then launch with the matching script:

BenchmarkConfigLaunch script
NavSimsrc/configs/navsim_cfg.pyscripts/drivewam_navsim_train.sh
PhysicalAIsrc/configs/physicalai_cfg.pyscripts/drivewam_physicalai_train.sh
# NavSim
bash scripts/drivewam_navsim_train.sh
# PhysicalAI
bash scripts/drivewam_physicalai_train.sh

For PhysicalAI, we provide three CSV files listing clip IDs at different training data scales (4k / 20k / 100k clips), available on Hugging Face. Set the clip_csv field in src/configs/physicalai_cfg.py to the desired scale before training.

Evaluation

NavSim (PDM Score)

PDM score evaluation requires a metric cache — a set of per-scenario .pkl files that store precomputed map and route information to score each predicted trajectory. The precomputed metric cache for the navtest split is available for download on Hugging Face. To generate it yourself, run:

python navsim/planning/script/run_metric_caching.py \
train_test_split=navtest \
cache.cache_path=./data/navsim/metric_cache

This writes one metric_cache.pkl per scenario token under ./data/navsim/metric_cache/. Pass the resulting directory to the evaluation script via --metric-cache-path.

python -m src.navsim.eval \
--checkpoint-path /path/to/checkpoint \
--config-name navsim_cfg \
--dataset-path ./data/navsim/test \
--metric-cache-path ./data/navsim/metric_cache

PhysicalAI

python -m src.physicalai.eval \
--checkpoint-path /path/to/checkpoint \
--config-name physicalai_cfg

Citation

If you find DriveWAM useful, please cite:

@article{shi2026drivewam,
title={DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving},
author={Shi, Chen and Xu, Jinrui and Shi, Shaoshuai and Sheng, Kehua and Zhang, Bo and Jiang, Li},
journal={arXiv preprint arXiv:2605.28544},
year={2026}
}

Acknowledgements

We gratefully acknowledge the following open-source projects that DriveWAM builds upon: Wan2.2, LingBot-VA, NavSim, NVIDIA PhysicalAI-Autonomous-Vehicles.

About

Official Implementation of "DriveWAM: Video Generative Priors Enable Scalable World-Action Modeling for Autonomous Driving"

Resources

Stars

60 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages