PRINGLE ( PeRception INteGrity pipeLinE) is a reproducible research pipeline for ontology-guided semantic validation of vision–language perception in autonomous driving, focused on traffic-light perception under physical manipulation and ambiguity.
PRINGLE is described in:
[article reference]
Not included in this repository is the DTLD dataset; you can download it here.
.
data/
dtld/ # YOU provide: DTLD city data
labels/ # YOU provide: DTLD_Labels_v2.0/v2.0 JSON (Berlin.json, …)
laser/ # provided: Red/ Green/ IR_modulated/ reference traces
crops_jpg/ # created by scripts/process_data.py
synth_jpg/ # optional; created by scripts/process_data.py
checkpoints/ # place or train *.pt checkpoints here
output/ # laser ASR + cardinality-consistency results
scripts/ # Python train / eval / data pipeline
conda env create -f environment.yml
conda activate traffic-vlmCopy (or symlink) inputs into place:
| Path | Contents |
|---|---|
data/dtld/ |
DTLD image tree (city folders / *_k0.tiff, …) |
data/labels/ |
Per-city label JSON from DTLD_Labels_v2.0/v2.0/ |
data/laser/Red, …/Green, …/IR_modulated |
Reference laser / IR frames |
From this directory:
# Crops only (needed for training / benign eval)
python scripts/process_data.py --crops_only
# Crops + synthetic laser-attack cache
python scripts/process_data.py
# Synth cache only (reuses existing crops / DTLD)
python scripts/process_data.py --synth_onlyDefaults:
--dtld_root->data/dtld--labels_dir->data/labels--laser_root->data/laser--out_root->data-> writesdata/crops_jpganddata/synth_jpg
Pretrained models are available upon request.
python scripts/train_models.py \
--mode baseline \
--image_dir data/crops_jpg \
--labels_dir data/labels \
--save_dir checkpoints/baseline
python scripts/train_models.py \
--mode card_owned \
--image_dir data/crops_jpg \
--labels_dir data/labels \
--save_dir checkpoints/card_ownedFrom this directory, after checkpoints exist:
bash run_eval.shReads from data/, writes under output/. Default caps are 1000 attack images per combo and 1000 benign images per state. Full eval:
MAX_PER_ATTACK_COMBO=0 MAX_PER_STATE=0 bash run_eval.shOptional: BATCH_SIZE, CONDA_ENV.
The results can be visualized with visualize_results.ipynb
- Override any path with the corresponding CLI flag or env var if your tree differs.
- Shared path constants live in
scripts/helper.py(DATA_ROOT,DEFAULT_*).