Skip to content

Commit 417296b

Browse files
committed
Fix: fix rare case extraction workflow
1 parent c81ea0c commit 417296b

7 files changed

Lines changed: 12862 additions & 31 deletions

File tree

docs/algengine_usage.md

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ This guide covers how to use AlgEngine for training end-to-end autonomous drivin
1111
- [Fine-Tuning](#fine-tuning)
1212
- [Configuration](#configuration)
1313
- [Model Architectures](#model-architectures)
14+
- [Advanced Training](#advanced-training)
1415
- [Troubleshooting](#troubleshooting)
16+
- [Performance Optimization](#performance-optimization)
1517

1618
---
1719

@@ -25,6 +27,9 @@ cd projects/AlgEngine
2527
# Open-loop evaluation
2628
./scripts/e2e_dist_eval.sh <config> <checkpoint> <num_gpus>
2729

30+
# Full train set evaluation (chunked)
31+
bash scripts/e2e_dist_eval_navtrain_chunked.sh <config> <checkpoint> <num_gpus> [num_chunks]
32+
2833
# Rare case extraction
2934
python scripts/rare_case_sampling_by_pdms.py \
3035
--pdm-result <csv_file> \
@@ -248,7 +253,7 @@ conda activate algengine
248253
cd projects/AlgEngine
249254

250255
python scripts/rare_case_sampling_by_pdms.py \
251-
--pdm-result work_dirs/e2e_vadv2_50pct/navtrain.csv \
256+
--pdm-result ${WORLDENGINE_ROOT}/experiments/worldengine/e2e_vadv2_50pct/navtrain.csv \
252257
--base-split configs/navsim_splits/navtrain_split/navtrain_50pct.yaml \
253258
--output-dir configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare
254259
```
@@ -263,10 +268,10 @@ python scripts/rare_case_sampling_by_pdms.py \
263268
The script generates three rare case split files:
264269

265270
```
266-
configs/navsim_splits/navtest_split/e2e_vadv2_50pct_rare/
267-
├── navtest_collision.yaml # Collision scenarios
268-
├── navtest_off_road.yaml # Off-road scenarios
269-
└── navtest_ep_1pct.yaml # Low ego-progress (bottom 1%)
271+
configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/
272+
├── navtrain_50pct_collision.yaml # Collision scenarios
273+
├── navtrain_50pct_off_road.yaml # Off-road scenarios
274+
└── navtrain_50pct_ep_1.0pct.yaml # Low ego-progress (bottom 1%)
270275
```
271276

272277
### Using Custom Thresholds
@@ -287,10 +292,10 @@ ep_threshold = df['ego_progress'].quantile(0.05) # From 0.01 (1% -> 5%)
287292

288293
```bash
289294
# Check how many scenarios were extracted
290-
wc -l configs/navsim_splits/navtest_split/e2e_vadv2_50pct_rare/*.yaml
295+
wc -l configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/*.yaml
291296

292297
# View first few scenarios
293-
head -20 configs/navsim_splits/navtest_split/e2e_vadv2_50pct_rare/navtest_collision.yaml
298+
head -20 configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_collision.yaml
294299
```
295300

296301
---
@@ -303,7 +308,22 @@ Fine-tune a trained model on rare cases using reinforcement learning.
303308

304309
**Important:** Rare case extraction and Rollout data must be generated by SimEngine before fine-tuning. This involves:
305310

306-
1. **Run SimEngine Rollout** to generate trajectory data:
311+
1. **Convert nuPlan Data to SimEngine Format** — convert rare case scenarios to SimEngine scenario format:
312+
```bash
313+
conda activate simengine
314+
315+
python projects/SimEngine/worldengine/utils/dataset_utils/nuplan/digitaltwin_nuplan_converter_navsim_filter.py \
316+
--navsim-filters $ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_collision.yaml \
317+
$ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_ep_1.0pct.yaml \
318+
$ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_off_road.yaml \
319+
--out-dir data/sim_engine/scenarios/original/navtrain_vadv2_50pct_rare \
320+
--num-processes 8
321+
```
322+
**Output:** `data/sim_engine/scenarios/original/navtrain_vadv2_50pct_rare/all_scenarios.pkl`
323+
324+
For full parameter reference, see [SimEngine: Convert nuPlan Data](simengine_usage.md#convert-nuplan-data-to-simengine-format).
325+
326+
2. **Run SimEngine Rollout** to generate trajectory data:
307327
```bash
308328
# Multi-GPU distributed rollout (recommended for large datasets)
309329
export WORLDENGINE_ROOT=/path/to/WorldEngine
@@ -312,11 +332,11 @@ Fine-tune a trained model on rare cases using reinforcement learning.
312332
$WORLDENGINE_ROOT/projects/AlgEngine/configs/worldengine/e2e_vadv2_50pct.py \
313333
$WORLDENGINE_ROOT/data/alg_engine/ckpts/e2e_vadv2_50pct_ep8.pth \
314334
e2e_vadv2_50pct \
315-
navtrain_50pct_collision \
335+
navtrain_vadv2_50pct_rare \
316336
navtrain
317337
```
318338

319-
2. **Rollout Output** is saved to:
339+
3. **Rollout Output** is saved to:
320340
```
321341
experiments/closed_loop_exps/e2e_vadv2_50pct/navtrain_NR/
322342
└── WE_output/
@@ -327,7 +347,7 @@ Fine-tune a trained model on rare cases using reinforcement learning.
327347
└── all_scenes_pdm_averages_NR.csv
328348
```
329349

330-
3. **Reorganize to AlgEngine Format** (creates `openscene-synthetic` dataset):
350+
4. **Reorganize to AlgEngine Format** (creates `openscene-synthetic` dataset):
331351
```bash
332352
conda activate simengine
333353

@@ -339,7 +359,7 @@ Fine-tune a trained model on rare cases using reinforcement learning.
339359

340360
**Output location:** `data/alg_engine/openscene-synthetic/`
341361

342-
4. **Verify Data Structure:**
362+
5. **Verify Data Structure:**
343363
```bash
344364
data/alg_engine/openscene-synthetic/
345365
├── sensor_blobs/ # Replayed scenario sensor data
@@ -444,10 +464,10 @@ configs/
444464
├── navtrain_split/
445465
│ ├── navtrain.yaml # Full training set
446466
│ ├── navtrain_50pct.yaml # 50% subset
447-
│ └── e2e_vadv2_50pct_ep8/ # Rare case splits
467+
│ └── e2e_vadv2_50pct_rare/ # Rare case splits
448468
│ ├── navtrain_50pct_collision.yaml
449469
│ ├── navtrain_50pct_off_road.yaml
450-
│ └── navtrain_50pct_ep_1pct.yaml
470+
│ └── navtrain_50pct_ep_1.0pct.yaml
451471
└── navtest_split/
452472
├── navtest.yaml # Full test set
453473
└── navtest_failures.yaml # Failure subset

docs/simengine_usage.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ bash scripts/run_ray_distributed_rollout.sh \
8484
1. `<config>`: Model configuration file
8585
2. `<checkpoint>`: Trained model checkpoint
8686
3. `<model_name>`: Experiment name (creates output folder)
87-
4. `<data_type>`: Scenario split (e.g., `navtrain_50pct_collision`) PS: **Default** original, please change it in `run_ray_distributed_rollout.sh`.
87+
4. `<data_type>`: Scenario split (e.g., `navtrain_50pct_collision`). Must match a directory under `data/sim_engine/scenarios/original/`
8888
5. `<asset_name>` (optional): Asset folder name under `data/sim_engine/assets/`. Defaults to `<data_type>` if not provided
8989

9090
**Features:**
@@ -265,18 +265,19 @@ WE_output/openscene_format/
265265

266266
## Utility Scripts
267267

268-
### Convert nuPlan Data to WorldEngine Format
268+
### Convert nuPlan Data to SimEngine Format
269269

270-
Convert nuPlan dataset to WorldEngine scenario format with navsim filter-based scene selection.
270+
Convert nuPlan dataset to SimEngine scenario format with navsim filter-based scene selection.
271271

272272
Example:
273273
```bash
274274
conda activate simengine
275275

276276
python projects/SimEngine/worldengine/utils/dataset_utils/nuplan/digitaltwin_nuplan_converter_navsim_filter.py \
277-
--navsim-filters $ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_collision.yaml \
278-
$ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_ep_1pct.yaml \
279-
--out-dir data/sim_engine/scenarios/original/navtrain_hydramdp_failures \
277+
--navsim-filters $ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_collision.yaml \
278+
$ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_ep_1.0pct.yaml \
279+
$ALGENGINE_ROOT/configs/navsim_splits/navtrain_split/e2e_vadv2_50pct_rare/navtrain_50pct_off_road.yaml \
280+
--out-dir data/sim_engine/scenarios/original/navtrain_vadv2_50pct_rare \
280281
--num-processes 8
281282
```
282283

@@ -291,7 +292,7 @@ python projects/SimEngine/worldengine/utils/dataset_utils/nuplan/digitaltwin_nup
291292
- `--num-processes`: Number of parallel processes
292293

293294
**Output:**
294-
- `{out-dir}/combined/all_scenarios.pkl` - Converted WorldEngine scenario file
295+
- `{out-dir}/all_scenarios.pkl` - Converted WorldEngine scenario file
295296

296297
The script extracts from Digital Twin config and nuPlan raw data:
297298
- Ego and agent vehicle trajectories

0 commit comments

Comments
 (0)