Add PersonaDrive Stage-3 checkpoint and model card
Browse files
.gitattributes
CHANGED
|
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
assets/architecture.png filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
assets/hero_teaser.webp filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,3 +1,169 @@
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
+
base_model: RenzKa/simlingo
|
| 4 |
+
pipeline_tag: robotics
|
| 5 |
+
language:
|
| 6 |
+
- en
|
| 7 |
+
tags:
|
| 8 |
+
- autonomous-driving
|
| 9 |
+
- carla
|
| 10 |
+
- bench2drive
|
| 11 |
+
- vision-language-action
|
| 12 |
+
- retrieval-augmented
|
| 13 |
+
- in-context-learning
|
| 14 |
+
- driving-style
|
| 15 |
+
- lora
|
| 16 |
---
|
| 17 |
+
|
| 18 |
+
<div align="center">
|
| 19 |
+
|
| 20 |
+
# PersonaDrive
|
| 21 |
+
|
| 22 |
+
### Human-Style Retrieval-Augmented VLA Agents for Closed-Loop Driving Simulation
|
| 23 |
+
|
| 24 |
+
Mahmoud Srewa · Praneetsai Vasu Iddamsetty · Mohammad Abdullah Al Faruque · Salma Elmalaki
|
| 25 |
+
|
| 26 |
+
University of California, Irvine · WACV 2027
|
| 27 |
+
|
| 28 |
+
**[Project page](https://pervasiveautonomylab.github.io/personadrive-landpage/)** ·
|
| 29 |
+
[Paper (arXiv 2606.12616)](https://arxiv.org/abs/2606.12616) ·
|
| 30 |
+
[Code](https://github.com/PervasiveAutonomyLab/PersonaDrive) ·
|
| 31 |
+
[Demo video](https://pervasiveautonomylab.github.io/personadrive-landpage/static/videos/demo_full.mp4)
|
| 32 |
+
|
| 33 |
+
<a href="https://pervasiveautonomylab.github.io/personadrive-landpage/"><img src="assets/hero_teaser.webp" width="88%" alt="PersonaDrive teaser"></a>
|
| 34 |
+
|
| 35 |
+
**A driving agent that drives carefully or aggressively, based on how real people drove.**
|
| 36 |
+
|
| 37 |
+
</div>
|
| 38 |
+
|
| 39 |
+
This is the released driving model of PersonaDrive. PersonaDrive conditions a vision-language-action (VLA) driving agent on demonstrations retrieved from people who were asked to drive in a given style: aggressive, neutral or conservative. **One set of weights serves every style.** Switching style only changes which database of human demonstrations the retrieval head searches.
|
| 40 |
+
|
| 41 |
+
Videos, the method and the full results are on the **[project page](https://pervasiveautonomylab.github.io/personadrive-landpage/)**.
|
| 42 |
+
|
| 43 |
+
<p align="center"><img src="assets/architecture.png" width="95%" alt="PersonaDrive architecture"></p>
|
| 44 |
+
|
| 45 |
+
## This checkpoint
|
| 46 |
+
|
| 47 |
+
This checkpoint is Stage 3 of the PersonaDrive pipeline (in-context fine-tuning). It is SimLingo's driving model, fine-tuned to read **K = 2 retrieved context points** as few-shot demonstrations before it predicts its own waypoints. Each context point holds an image, control history, command, target points, commentary and executed waypoints. The model gets no style label and infers the style from the demonstrations.
|
| 48 |
+
|
| 49 |
+
| | |
|
| 50 |
+
|---|---|
|
| 51 |
+
| Initialised from | [RenzKa/simlingo](https://huggingface.co/RenzKa/simlingo) (`epoch=013`) |
|
| 52 |
+
| Backbone | [OpenGVLab/InternVL2-1B](https://huggingface.co/OpenGVLab/InternVL2-1B) |
|
| 53 |
+
| Parameters | 1.36 B in total; about 24 M trained in this stage |
|
| 54 |
+
| Retrieved context points | K = 2 |
|
| 55 |
+
| Simulator / benchmark | CARLA 0.9.15 / Bench2Drive |
|
| 56 |
+
|
| 57 |
+
The retrieval head (Stages 1–2) is a separate model of about 2 M trained parameters. It is in the code repository: `persona_drive_rag/checkpoints/best_model.pt`.
|
| 58 |
+
|
| 59 |
+
## Files
|
| 60 |
+
|
| 61 |
+
| Path | Size | Purpose |
|
| 62 |
+
|---|---:|---|
|
| 63 |
+
| `personadrive_icl_sft/checkpoints/epoch=000.ckpt/pytorch_model.pt` | 1.96 GB | **The model.** A single-file PyTorch state dict; load it for evaluation. |
|
| 64 |
+
| `personadrive_icl_sft/.hydra/config.yaml` | 2 KB | The training config. The agent builds the model from it and finds `.hydra/` by walking up from the checkpoint path. |
|
| 65 |
+
|
| 66 |
+
`pytorch_model.pt` was consolidated from the run's DeepSpeed ZeRO-2 checkpoint (`last.ckpt`). It contains only tensors, so it also loads with `torch.load(..., weights_only=True)`.
|
| 67 |
+
|
| 68 |
+
The checkpoint is the **complete model**, not just an adapter. You don't need SimLingo's weights to use it. The weights trained in this stage are stored in fp32 and the frozen ones in bf16:
|
| 69 |
+
|
| 70 |
+
| Part | Tensors | In this stage |
|
| 71 |
+
|---|---:|---|
|
| 72 |
+
| LoRA adapters on the language model (r 32, α 64), stored unmerged | 336 | trained, continuing from SimLingo's adapters |
|
| 73 |
+
| Vision-to-language projector (`mlp1`) | 6 | trained |
|
| 74 |
+
| Driving adaptor | 10 | trained |
|
| 75 |
+
| Waypoint encoder | 6 | trained |
|
| 76 |
+
| Language-model base weights and language adaptor | 294 | frozen (as in SimLingo) |
|
| 77 |
+
| Vision encoder (InternViT) | 340 | frozen (as in SimLingo) |
|
| 78 |
+
|
| 79 |
+
The file is loaded by the PersonaDrive code. It is not a `transformers` or PEFT checkpoint.
|
| 80 |
+
|
| 81 |
+
## How to use
|
| 82 |
+
|
| 83 |
+
**Requirements:**
|
| 84 |
+
- Linux x86-64 and CARLA 0.9.15.
|
| 85 |
+
- An NVIDIA Ampere, Ada or Hopper GPU, for bf16 and flash-attention 2. Blackwell GPUs need a newer PyTorch than the pinned 2.2.2.
|
| 86 |
+
- Installation steps are in the [code repository](https://github.com/PervasiveAutonomyLab/PersonaDrive).
|
| 87 |
+
|
| 88 |
+
In a clone of the repository, with the `personadrive` environment active:
|
| 89 |
+
|
| 90 |
+
```bash
|
| 91 |
+
# the model and its config (~2 GB)
|
| 92 |
+
hf download PervasiveAutonomyLab/PersonaDrive --local-dir pretrained \
|
| 93 |
+
--include "personadrive_icl_sft/.hydra/*" "personadrive_icl_sft/checkpoints/epoch=000.ckpt/*"
|
| 94 |
+
|
| 95 |
+
# one Bench2Drive route on one GPU, aggressive style, K = 2
|
| 96 |
+
export AGENT_CKPT=$PWD/pretrained/personadrive_icl_sft/checkpoints/epoch=000.ckpt/pytorch_model.pt
|
| 97 |
+
PERSONADRIVE_ICL_PROFILE=fast \
|
| 98 |
+
ROUTE_XML=$PERSONADRIVE_ROOT/leaderboard/data/bench2drive_split/bench2drive_00.xml \
|
| 99 |
+
OUT_DIR=/tmp/personadrive_route00 \
|
| 100 |
+
bash scripts/eval/test_one_lb1_route.sh
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
- **Style:** set `PERSONADRIVE_ICL_PROFILE` to `fast` (aggressive), `default` (neutral), `slow` (conservative) or `normal` (no style; the PDM-lite expert index). `PERSONADRIVE_NUM_ICL=0` turns retrieval off.
|
| 104 |
+
- **Retrieval data:** retrieval needs three things:
|
| 105 |
+
- the retrieval head, included in the code repository;
|
| 106 |
+
- the FAISS indices under `persona_drive_rag/`;
|
| 107 |
+
- the camera frames those indices point to.
|
| 108 |
+
|
| 109 |
+
The repository's `datasets/README.md` lists which archives to get for each style. Retrieved frames whose image is missing are skipped. If none can be loaded, the model runs without retrieval.
|
| 110 |
+
- **Paper query:** `PERSONADRIVE_LEGACY_ICL_QUERY=1` reproduces the retrieval query used for the paper's results.
|
| 111 |
+
|
| 112 |
+
## Results
|
| 113 |
+
|
| 114 |
+
These are the numbers published in the paper (Bench2Drive, 220 routes, closed loop).
|
| 115 |
+
|
| 116 |
+
| Without style | DS ↑ | SR (%) ↑ |
|
| 117 |
+
|---|---:|---:|
|
| 118 |
+
| SimLingo | 85.07 ± 0.95 | 67.27 ± 2.11 |
|
| 119 |
+
| HiP-AD | 86.77 | 69.09 |
|
| 120 |
+
| **PersonaDrive** (`normal` index) | **88.95** | **72.29** |
|
| 121 |
+
|
| 122 |
+
| PersonaDrive with style (one checkpoint) | DS ↑ | Speed (m/s) | Accel. (m/s²) |
|
| 123 |
+
|---|---:|---:|---:|
|
| 124 |
+
| Conservative | 89.62 | 5.05 | 3.17 |
|
| 125 |
+
| Neutral | 87.55 | 5.52 | 3.51 |
|
| 126 |
+
| Aggressive | 88.69 | 6.05 | 3.96 |
|
| 127 |
+
|
| 128 |
+
From conservative to aggressive, speed rises by 19.8 % and acceleration by 24.9 %. The project page compares these with SimLingo prompted with the style name, StyleDrive and DMW.
|
| 129 |
+
|
| 130 |
+
## Training
|
| 131 |
+
|
| 132 |
+
- **Data:**
|
| 133 |
+
- 2,848 PDM-lite routes;
|
| 134 |
+
- 350 expert routes in the aggressive style (`fast/lb1_split`);
|
| 135 |
+
- 350 expert routes in the conservative style (`slow/lb1_split`).
|
| 136 |
+
|
| 137 |
+
Each frame is paired with its K = 2 context points, retrieved from the index of the matching style.
|
| 138 |
+
- **Settings:** LoRA on the language model (r 32, α 64, dropout 0.1) with the vision encoder frozen. AdamW at lr 3e-5 (OneCycle, weight decay 0.1); batch 6 per GPU × 4 GPUs with DeepSpeed ZeRO-2 in bf16; 1 epoch.
|
| 139 |
+
- **Hardware:** 4× NVIDIA L40S (48 GB), about 12 h.
|
| 140 |
+
- **Reproducing the run:** `python simlingo_training/train.py experiment=personadrive_icl_sft` in the code repository. The composed config of this run is `personadrive_icl_sft/.hydra/config.yaml`.
|
| 141 |
+
|
| 142 |
+
## Intended use and limitations
|
| 143 |
+
|
| 144 |
+
- **Research use in simulation only (CARLA).** The model is not meant to control a real vehicle.
|
| 145 |
+
- **Where the styles come from:** 15 participants who drove under aggressive, neutral and conservative instructions on a driver-in-the-loop rig. Styles are paired at route level, so style is separated from driver identity.
|
| 146 |
+
- **Speed:** with K = 2 the model takes about 0.56 s per simulator tick (paper, offline), so the agent does not run in real time at CARLA's 20 Hz.
|
| 147 |
+
|
| 148 |
+
## License
|
| 149 |
+
|
| 150 |
+
Apache 2.0, the same license as SimLingo (code and the [RenzKa/simlingo](https://huggingface.co/RenzKa/simlingo) weights). The backbone [InternVL2-1B](https://huggingface.co/OpenGVLab/InternVL2-1B) is released under the MIT license.
|
| 151 |
+
|
| 152 |
+
This work was made using the SimLingo dataset, provided by Wayve Technologies Ltd under licence terms available at https://github.com/RenzKa/simlingo. This model was fine-tuned with that dataset, so its terms also restrict the model:
|
| 153 |
+
- it may only be distributed free of charge and on an academic or scientific basis;
|
| 154 |
+
- it must not be used in, or to assist in, the operation of a vehicle or robot, or for any high-risk purpose.
|
| 155 |
+
|
| 156 |
+
## Citation
|
| 157 |
+
|
| 158 |
+
```bibtex
|
| 159 |
+
@article{srewa2026personadrive,
|
| 160 |
+
title = {PersonaDrive: Human-Style Retrieval-Augmented VLA Agents for Closed-Loop Driving Simulation},
|
| 161 |
+
author = {Srewa, Mahmoud and Iddamsetty, Praneetsai Vasu and Al Faruque, Mohammad Abdullah and Elmalaki, Salma},
|
| 162 |
+
journal = {arXiv preprint arXiv:2606.12616},
|
| 163 |
+
year = {2026}
|
| 164 |
+
}
|
| 165 |
+
```
|
| 166 |
+
|
| 167 |
+
## Acknowledgements
|
| 168 |
+
|
| 169 |
+
This work is supported by the U.S. National Science Foundation under grant 2339266 and partially supported by the UCI ProperAI Institute. PersonaDrive builds directly on SimLingo, CARLA garage, DriveLM / PDM-Lite and Bench2Drive; we thank their authors for releasing their code.
|
assets/architecture.png
ADDED
|
Git LFS Details
|
assets/hero_teaser.webp
ADDED
|
Git LFS Details
|
personadrive_icl_sft/.hydra/config.yaml
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model:
|
| 2 |
+
vision_model:
|
| 3 |
+
variant: OpenGVLab/InternVL2-1B
|
| 4 |
+
embed_dim: 512
|
| 5 |
+
freeze: true
|
| 6 |
+
_target_: simlingo_training.models.encoder.vlm.VLMEncoderModel
|
| 7 |
+
language_model:
|
| 8 |
+
variant: OpenGVLab/InternVL2-1B
|
| 9 |
+
lora: true
|
| 10 |
+
lora_alpha: 64
|
| 11 |
+
lora_r: 32
|
| 12 |
+
lora_dropout: 0.1
|
| 13 |
+
_target_: simlingo_training.models.language_model.llm.LLM
|
| 14 |
+
lr: 3.0e-05
|
| 15 |
+
weight_decay: 0.1
|
| 16 |
+
betas:
|
| 17 |
+
- 0.9
|
| 18 |
+
- 0.999
|
| 19 |
+
pct_start: 0.05
|
| 20 |
+
speed_wps_mode: 2d
|
| 21 |
+
predict_route_as_wps: true
|
| 22 |
+
_target_: simlingo_training.models.driving.DrivingModel
|
| 23 |
+
data_module:
|
| 24 |
+
base_dataset:
|
| 25 |
+
data_path: tmp_link/msrewa/current/database/simlingo
|
| 26 |
+
bucket_path: null
|
| 27 |
+
use_aggregated_dataset: true
|
| 28 |
+
cache_dataset: false
|
| 29 |
+
cache_index_to_disk: false
|
| 30 |
+
cut_bottom_quarter: true
|
| 31 |
+
use_1d_wps: false
|
| 32 |
+
use_commentary: true
|
| 33 |
+
use_qa: true
|
| 34 |
+
qa_augmentation: true
|
| 35 |
+
commentary_augmentation: true
|
| 36 |
+
use_old_towns: true
|
| 37 |
+
use_only_old_towns: false
|
| 38 |
+
use_town13: true
|
| 39 |
+
skip_first_n_frames: 10
|
| 40 |
+
pred_len: 11
|
| 41 |
+
hist_len: 1
|
| 42 |
+
hist_len_commentary: 5
|
| 43 |
+
img_augmentation: true
|
| 44 |
+
img_augmentation_prob: 0.5
|
| 45 |
+
img_shift_augmentation: true
|
| 46 |
+
img_shift_augmentation_prob: 0.5
|
| 47 |
+
use_safety_flag: true
|
| 48 |
+
use_icl: true
|
| 49 |
+
num_icl_examples: 2
|
| 50 |
+
num_route_points: 20
|
| 51 |
+
route_as: target_point_command
|
| 52 |
+
use_lmdrive_commands: true
|
| 53 |
+
driving_dataset:
|
| 54 |
+
_target_: simlingo_training.dataloader.dataset_driving.Data_Driving
|
| 55 |
+
dreamer_dataset: null
|
| 56 |
+
qa_dataset:
|
| 57 |
+
_target_: simlingo_training.dataloader.dataset_eval_qa_comm.Data_Eval
|
| 58 |
+
insteval_dataset:
|
| 59 |
+
_target_: simlingo_training.dataloader.dataset_eval_dreamer.Eval_Dreamer
|
| 60 |
+
batch_size: 6
|
| 61 |
+
num_workers: 6
|
| 62 |
+
train_partitions: null
|
| 63 |
+
train_partitions_dreamer: null
|
| 64 |
+
use_global_img: false
|
| 65 |
+
_target_: simlingo_training.dataloader.datamodule.DataModule
|
| 66 |
+
seed: 42
|
| 67 |
+
gpus: 4
|
| 68 |
+
resume: false
|
| 69 |
+
resume_path: null
|
| 70 |
+
debug: false
|
| 71 |
+
overfit: 0
|
| 72 |
+
fp16_loss_scale: 32.0
|
| 73 |
+
enable_wandb: true
|
| 74 |
+
wandb_project: simlingo
|
| 75 |
+
name: debug-2
|
| 76 |
+
wandb_name: '2026_05_01_13_46_51'
|
| 77 |
+
max_epochs: 1
|
| 78 |
+
precision: bf16-mixed
|
| 79 |
+
strategy: deepspeed_stage_2
|
| 80 |
+
val_every_n_epochs: 1
|
| 81 |
+
val_check_interval: 0.25
|
| 82 |
+
checkpoint: pretrained/RenzKa_simlingo/simlingo/checkpoints/epoch=013.ckpt/pytorch_model.pt
|
| 83 |
+
ckpt_monitor: val/loss
|
| 84 |
+
ckpt_top_k: 2
|
| 85 |
+
ckpt_mode: min
|
personadrive_icl_sft/.hydra/overrides.yaml
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
[]
|
personadrive_icl_sft/checkpoints/epoch=000.ckpt/pytorch_model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:47557b934d1f826ce24eaca972bbc90df1ea945786612f524c06085d8d55b285
|
| 3 |
+
size 1961721642
|