Model card: held-out AlpaSim results (344 scenes), test-drive section, Quickstart fix
Browse files
README.md
CHANGED
|
@@ -66,7 +66,25 @@ each model's native camera rig (Pilot and the base: 3 × 1080p f-theta; Alpamayo
|
|
| 66 |
**The route is given to every model that accepts one: Pilot and the base do; Alpamayo 1.5 and SimForge-D1.5 have no
|
| 67 |
route input.** Pilot's plans take effect 0.2 s after they are issued. Paired bootstrap, 10,000 resamples.
|
| 68 |
|
| 69 |
-
### Internal AlpaSim:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
|
| 71 |
| | Pilot-4B v1.5 | Alpamayo 1.5 (10B) | SimForge-D1.5 | Qwen-Drive-1.0-4B (base) |
|
| 72 |
|---|---|---|---|---|
|
|
@@ -74,15 +92,16 @@ route input.** Pilot's plans take effect 0.2 s after they are issued. Paired boo
|
|
| 74 |
| Pilot − model [95% CI] | — | +0.046 [−0.068, +0.161], **not significant** | +0.131 [+0.006, +0.255] | +0.179 [+0.067, +0.295] |
|
| 75 |
|
| 76 |
**These 96 scenes were used to select and tune Pilot.** They share no clips with its training data, but the
|
| 77 |
-
selection favours Pilot, so read this table as a within-family check.
|
| 78 |
-
|
| 79 |
-
have fewer collisions than Alpamayo 1.5; its edge is fewer exits from the lane corridor, and it does better in
|
| 80 |
cruising scenes while Alpamayo 1.5 does better in slow and stationary ones.
|
| 81 |
|
| 82 |
-
Protocol: our own run of AlpaSim 0.89.0 (not the public leaderboard); 200 steps × 0.1 s, the
|
| 83 |
-
from the log; one rollout per scene; AlpaSim's default controller gains for every model; post-fix
|
| 84 |
-
Scene score = 0 on an at-fault collision, off-road or a lateral corridor exit, otherwise
|
| 85 |
min(progress / 0.8, 1). The route is sent to all four models, but Alpamayo 1.5 and D1.5 ignore it in this version.
|
|
|
|
| 86 |
|
| 87 |
### Open loop: where Pilot is weaker
|
| 88 |
|
|
@@ -115,9 +134,51 @@ cameras' f-theta calibration for the veto.
|
|
| 115 |
exact benchmarked profile:
|
| 116 |
|
| 117 |
```bash
|
| 118 |
-
docker run --rm --gpus all -p 6789:6789 -v $PWD:/repo:ro pilot-4b /repo/run_alpasim_driver.sh
|
| 119 |
```
|
| 120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
## Inputs and outputs
|
| 122 |
|
| 123 |
| | |
|
|
@@ -140,7 +201,7 @@ weights. Two stages, both by SimForge:
|
|
| 140 |
of them, with recovery targets mined from earlier versions' failures. 4 × A100, learning rate 5e-6, seed 43, about
|
| 141 |
2 hours.
|
| 142 |
|
| 143 |
-
None of the
|
| 144 |
scenarios are authored and have no recorded drive). The training manifests are not part of this release.
|
| 145 |
|
| 146 |
## Limitations
|
|
@@ -157,6 +218,8 @@ scenarios are authored and have no recorded drive). The training manifests are n
|
|
| 157 |
- **The planning head was selected.** v1.5 was the best of four training seeds on a validation panel, so some of
|
| 158 |
its gain over its predecessor may not carry over. During training, the route for recorded drives was built from
|
| 159 |
the path the human driver went on to take.
|
|
|
|
|
|
|
| 160 |
- **Open loop is weaker** than the base model (see above).
|
| 161 |
|
| 162 |
## Files
|
|
@@ -170,6 +233,7 @@ scenarios are authored and have no recorded drive). The training manifests are n
|
|
| 170 |
| `driver_profile.txt` | the benchmarked driver flags |
|
| 171 |
| `inference.py`, `examples/` | single-decision example |
|
| 172 |
| `run_alpasim_driver.sh`, `Dockerfile`, `requirements.txt` | closed-loop service and environment |
|
|
|
|
| 173 |
| `SHA256SUMS` | checksums; the weights and `pilot/` match the serving image used for every result above |
|
| 174 |
|
| 175 |
Weights SHA-256: VLM `b9de4bf4…caccc`, perception `e964ca94…450ae`, planner `a8e5d329…b4d14` (full hashes in `SHA256SUMS`).
|
|
|
|
| 66 |
**The route is given to every model that accepts one: Pilot and the base do; Alpamayo 1.5 and SimForge-D1.5 have no
|
| 67 |
route input.** Pilot's plans take effect 0.2 s after they are issued. Paired bootstrap, 10,000 resamples.
|
| 68 |
|
| 69 |
+
### Internal AlpaSim: 344 held-out scenes
|
| 70 |
+
|
| 71 |
+
| | Pilot-4B v1.5 | Qwen-Drive-1.0-4B (base) |
|
| 72 |
+
|---|---|---|
|
| 73 |
+
| Average scene score ↑ [95% CI] | **0.672** [0.624, 0.720] | 0.465 [0.417, 0.513] |
|
| 74 |
+
| Scenes ended by an at-fault collision (of 344) ↓ | **31** | 54 |
|
| 75 |
+
| Scenes scored 0 (any failure) ↓ | **105** | 161 |
|
| 76 |
+
| Pilot − base [95% CI] | +0.207 [+0.150, +0.264] (+45 %); better in 154 scenes, worse in 40 | — |
|
| 77 |
+
|
| 78 |
+
The held-out set is AlpaSim's public `nurec_curated_val` split (441 scenes) without one scene and without the 96
|
| 79 |
+
tuning scenes below. None of its clips was used to train Pilot or its initialisation, or to tune it (checked by clip
|
| 80 |
+
ID). It is not untouched: it belongs to the validation panel on which v1.5 was chosen among training candidates, so
|
| 81 |
+
some selection bias remains. 21 of the scenes were recorded within 50 m of a training clip; without them the result is
|
| 82 |
+
the same (Pilot 0.672, base 0.467). Alpamayo 1.5 and SimForge-D1.5 have not been run on this set.
|
| 83 |
+
|
| 84 |
+
By scene type, Pilot's lead over its base is largest in urban cruising (0.853 vs 0.538, 119 scenes) and smallest in
|
| 85 |
+
fast cruising, where it is no better than its base (0.306 vs 0.274, 59 scenes; +0.03 [−0.13, +0.19]).
|
| 86 |
+
|
| 87 |
+
### Internal AlpaSim: 96 tuning scenes, all four models
|
| 88 |
|
| 89 |
| | Pilot-4B v1.5 | Alpamayo 1.5 (10B) | SimForge-D1.5 | Qwen-Drive-1.0-4B (base) |
|
| 90 |
|---|---|---|---|---|
|
|
|
|
| 92 |
| Pilot − model [95% CI] | — | +0.046 [−0.068, +0.161], **not significant** | +0.131 [+0.006, +0.255] | +0.179 [+0.067, +0.295] |
|
| 93 |
|
| 94 |
**These 96 scenes were used to select and tune Pilot.** They share no clips with its training data, but the
|
| 95 |
+
selection favours Pilot, so read this table as a within-family check. Pilot's gain over its base (+0.179, +42 %)
|
| 96 |
+
holds on the held-out set above. Its lead over Alpamayo 1.5 is not statistically significant. On this panel Pilot does
|
| 97 |
+
not have fewer collisions than Alpamayo 1.5; its edge is fewer exits from the lane corridor, and it does better in
|
| 98 |
cruising scenes while Alpamayo 1.5 does better in slow and stationary ones.
|
| 99 |
|
| 100 |
+
Protocol for both AlpaSim tables: our own run of AlpaSim 0.89.0 (not the public leaderboard); 200 steps × 0.1 s, the
|
| 101 |
+
first 1.7 s replayed from the log; one rollout per scene; AlpaSim's default controller gains for every model; post-fix
|
| 102 |
+
scorer `e121e59`. Scene score = 0 on an at-fault collision, off-road or a lateral corridor exit, otherwise
|
| 103 |
min(progress / 0.8, 1). The route is sent to all four models, but Alpamayo 1.5 and D1.5 ignore it in this version.
|
| 104 |
+
Paired bootstrap, 10,000 resamples.
|
| 105 |
|
| 106 |
### Open loop: where Pilot is weaker
|
| 107 |
|
|
|
|
| 134 |
exact benchmarked profile:
|
| 135 |
|
| 136 |
```bash
|
| 137 |
+
docker run --rm --gpus all -p 6789:6789 -v $PWD:/repo:ro pilot-4b sh /repo/run_alpasim_driver.sh
|
| 138 |
```
|
| 139 |
|
| 140 |
+
### Test drive in AlpaSim
|
| 141 |
+
|
| 142 |
+
`test_drive_alpasim.sh` runs one complete closed-loop drive: it sets up the public
|
| 143 |
+
[AlpaSim](https://github.com/NVlabs/alpasim) simulator, starts Pilot as its driver, drives a recorded scene for 20 s
|
| 144 |
+
and prints the score, with a video of the drive.
|
| 145 |
+
|
| 146 |
+
```bash
|
| 147 |
+
hf download SIMFORGE-AI/Pilot-4B-v1.5 --local-dir Pilot-4B-v1.5
|
| 148 |
+
cd Pilot-4B-v1.5
|
| 149 |
+
export HF_TOKEN=hf_... # a read token for an account with access to the scene dataset (below)
|
| 150 |
+
bash test_drive_alpasim.sh # or: bash test_drive_alpasim.sh <scene id>
|
| 151 |
+
```
|
| 152 |
+
|
| 153 |
+
```text
|
| 154 |
+
scene 28621273-20ed-4570-98d1-cd0dcf451fc1
|
| 155 |
+
score 1.000 (0 on an at-fault collision, off-road or lane-corridor exit; otherwise min(progress / 0.8, 1))
|
| 156 |
+
outcome no failure; progress 1.00 of the logged route (323 m)
|
| 157 |
+
video test-drives/28621273-…/alpasim/aggregate/videos/all/clipgt-28621273-…_camera_front_wide_120fov_default.mp4
|
| 158 |
+
rollout test-drives/28621273-…/alpasim/rollouts/clipgt-28621273-…/<rollout id>/rollout.asl
|
| 159 |
+
summary test-drives/28621273-…/alpasim/aggregate/results-summary.json
|
| 160 |
+
wall time 8 min 36 s for the drive
|
| 161 |
+
```
|
| 162 |
+
|
| 163 |
+
You need Linux, an NVIDIA GPU with driver 570 or newer, Docker with the compose plugin and the NVIDIA Container
|
| 164 |
+
Toolkit (usable without `sudo`), `git`, [`uv`](https://docs.astral.sh/uv/) 0.9.17 or newer and a Rust toolchain
|
| 165 |
+
(AlpaSim's setup compiles an extension). The scenes come from the gated dataset
|
| 166 |
+
[nvidia/PhysicalAI-Autonomous-Vehicles-NuRec](https://huggingface.co/datasets/nvidia/PhysicalAI-Autonomous-Vehicles-NuRec):
|
| 167 |
+
request access on its page and accept its terms first. One GPU with 40 GB or more holds Pilot and the simulator; on
|
| 168 |
+
24 GB cards, set `DRIVER_GPU` and `SIM_GPU` to two different GPUs. The first run clones AlpaSim into `./alpasim`,
|
| 169 |
+
installs it, builds its images and Pilot's, pulls the NuRec renderer image and downloads the scene (about 1.7 GB),
|
| 170 |
+
so it takes much longer than later runs.
|
| 171 |
+
|
| 172 |
+
The default scene, `28621273-20ed-4570-98d1-cd0dcf451fc1`, is a left turn from AlpaSim's `nurec_curated_val` split.
|
| 173 |
+
It was not used to train or tune Pilot. Any scene id in AlpaSim's `data/scenes/sim_scenes*.csv` works.
|
| 174 |
+
|
| 175 |
+
The script pins AlpaSim to commit `e121e59` (version 0.89.0, branch `e2e_challenge`), whose scorer produced the
|
| 176 |
+
AlpaSim results above, and drives with the same settings: the public challenge preset (`+e2e_challenge=dev`), the
|
| 177 |
+
nonlinear MPC controller with default gains, the renderer without the NRE harmonizer, and no driver calls during the
|
| 178 |
+
first 1.7 s, which are replayed from the log. Two things differ from our evaluation runs: those rendered only the three
|
| 179 |
+
cameras Pilot reads, which gives the same pixels faster, and they seeded Pilot's sampling from a deterministic session
|
| 180 |
+
id. A single drive is one sample, so its score can differ from ours on the same scene.
|
| 181 |
+
|
| 182 |
## Inputs and outputs
|
| 183 |
|
| 184 |
| | |
|
|
|
|
| 201 |
of them, with recovery targets mined from earlier versions' failures. 4 × A100, learning rate 5e-6, seed 43, about
|
| 202 |
2 hours.
|
| 203 |
|
| 204 |
+
None of the 440 AlpaSim scenes (344 held-out, 96 tuning) or the 60 SF scenarios above appears in the training clips (checked by clip ID; the SF
|
| 205 |
scenarios are authored and have no recorded drive). The training manifests are not part of this release.
|
| 206 |
|
| 207 |
## Limitations
|
|
|
|
| 218 |
- **The planning head was selected.** v1.5 was the best of four training seeds on a validation panel, so some of
|
| 219 |
its gain over its predecessor may not carry over. During training, the route for recorded drives was built from
|
| 220 |
the path the human driver went on to take.
|
| 221 |
+
- **Fast cruising is weak.** On the held-out set Pilot scores 0.31 in fast-cruising scenes, no better than its base;
|
| 222 |
+
most of those failures are lane-corridor exits and leaving the road.
|
| 223 |
- **Open loop is weaker** than the base model (see above).
|
| 224 |
|
| 225 |
## Files
|
|
|
|
| 233 |
| `driver_profile.txt` | the benchmarked driver flags |
|
| 234 |
| `inference.py`, `examples/` | single-decision example |
|
| 235 |
| `run_alpasim_driver.sh`, `Dockerfile`, `requirements.txt` | closed-loop service and environment |
|
| 236 |
+
| `test_drive_alpasim.sh` | one closed-loop test drive in AlpaSim (sets up AlpaSim, runs Pilot, prints the score) |
|
| 237 |
| `SHA256SUMS` | checksums; the weights and `pilot/` match the serving image used for every result above |
|
| 238 |
|
| 239 |
Weights SHA-256: VLM `b9de4bf4…caccc`, perception `e964ca94…450ae`, planner `a8e5d329…b4d14` (full hashes in `SHA256SUMS`).
|