8.6 GB
2,838 files
Updated 16 days ago
Name
Size
aide
baselines_dms
common
data
eval
models
paper
probes
tests
tools
train
weak
README.md9.17 kB
xet
README.md

TriDrive — code snapshot

Training / evaluation code of the paper (anonymous submission under double-blind review). 505 files (.py, .sh, .txt job queues, .yaml, .md, the AIDE split .csv and one .json joint map); no results, data caches or weights.

Code name. Identifiers in this tree keep the development code name: CockpitWM, cwm3, cwm3d (and the joint model class CWM3Joint) denote TriDrive; cwm2 / s12_wm are earlier internal stages whose evaluators and packs the code reuses unchanged.

Layout

Directory Files Contents
aide/ 94 AIDE keypoint-forecasting programme — data/ (official split lists, protocol.py constants, build_cache.py, Gate-0 verify_protocol.py), models/ (cwm3d* part-tokenised causal Transformer with anchor-mixture horizon head; SiMLPe / ST-GCN / MotionBERT ports; the Driver-WM reproduction driverwm_repro.py / driverwm_kp.py), train/ (train_kp.py + stage runners), eval/ (metrics.py, harness.py, report_*.py), features/ (Qwen3-VL / ego-motion / BATON pose-corpus extraction), tests/, docs/
baselines_dms/ 35 Driver-monitoring baselines (L2CS gaze, MediaPipe face, OpenFace 3, OpenVINO action / gaze, VideoMAE2): feature extractors/, the common learned warning read-out fit_readout.py (same protocol as train/train_warning_head.py), eval_dms.py wrappers around the unchanged evaluators, phase-1 manifests and reports
common/ 3 pagecache.py (evict a file's pages from the OS page cache after it was read into arrays) and runmeta.py (run.json provenance writer: command, code hash, inputs sha256, seed, timestamps)
data/ 45 Dataset join and target builders — cwm3_dataset.py (row-aligned join of the branch inputs, both regimes), CAN packs, behaviour / gaze / pressure / response / road-dynamics targets, V-JEPA 2 stream packs (build_pack_v2.py), hold-out pipeline, pose-extraction wrappers, feature_provenance.yaml
eval/ 123 Evaluators and report renderers — eval_cwm3.py (scores pred layouts with the unchanged cwm2 evaluator), paired_compare.py (device-cluster bootstrap paired comparison, source of the paired_compare.csv ledger), warning_head_eval.py, alert timing, hold-out scoring, robustness / identity-invariance checks, human-evaluation analysis (newtest_*.py), report_*.py
models/ 16 The joint model cwm3.py (three pretrained base branches V/U/E + directed zero-init interactions + decoders), the branches (branches.py: TCN vehicle branch, GRU driver branch, causal-Transformer environment branch), heads / decoders (incl. RSSM), future-state and overlap heads, keypoint forecaster, Driver-WM-style driver branch u_driverwm.py
paper/ 4 tables/gen_tables.py (regenerates tab_*.tex verbatim from the markdown result tables; policy in NUMBERS_POLICY.md), figs/make_figs.py + figs/FIGURE_LIST.md
probes/ 13 Latent / representation probes over the trunk latents
tests/ 47 pytest suite — causality / no-future-leak checks (test_bank_causality.py, test_chunked_no_target_leak.py, test_no_future_leak.py), the no-DMS-input rule (test_no_dms_inputs.py), layout contracts, model and metric unit tests
tools/ 19 vlm_handson/ — VLM hands-on candidate ranking, scoring and evaluation on the owner-labelled validation frames
train/ 93 Stage trainers — train_cwm3.py (one base branch, one variant, one seed; registry stages.yaml), train_cwm3_joint.py (interactions / decoders; stages_joint.yaml), warning-head, future-state, road-dynamics and keypoint-residual trainers, the sequential queue runner run_queue.py with the queue_*.txt job lists and the shell wrappers used for the paper runs
weak/ 12 Weak supervision — GPT weak-label batches behind a calibration gate and a cost ledger (gpt_*.py), DMS-teacher soft targets and trunk pretraining (dms_teacher_*.py, the only code allowed to read DMS-derived data), hard-clip mining

Top-level file(s): budget.yaml — the budget file records the paid-API budget and the rules that applied to the weak-label annotation (kept for provenance).

How paths are configured

  • Python modules locate the project root relative to their own file, so the tree can live anywhere as long as its layout is kept: CWM3 = Path(__file__).resolve().parents[1], EXPLORE = CWM3.parent, S12R = EXPLORE / "s12_wm" / "results" (train/train_cwm3.py), CWM2 = EXPLORE / "cwm2" (train/train_warning_head.py); the AIDE package uses ROOT = Path(__file__).resolve().parents[2] (aide/data/build_cache.py, aide/eval/harness.py) and reads the dataset location from the environment: AIDE_ROOT = Path(os.environ.get("AIDE_ROOT", "/home/USER/AIDE")) (aide/data/protocol.py). The sibling trees cwm2/ and s12_wm/ of the development checkout are therefore expected next to this directory when a script imports them.
  • Absolute paths of the development machine were replaced by the placeholder /home/USER/... — in the shell wrappers (e.g. PY=python, cd /home/USER/cwm3) and in the modules that name a data root. Set these to your own root before running. code/common/ holds the shared helpers (pagecache.py, runmeta.py); the snapshot does not define a central root constant, so the placeholders above are the values to edit.
  • The snapshot contains no host names or IP addresses of the development infrastructure; the remote data server appears as REMOTE = "USER@REMOTE_HOST" (data/remote_baton.py). The GPU-lock files used by the trainers (/tmp/s13_gpu.lock, /tmp/cwm3_joint_launch.lock, /tmp/cwm3_robust_gate.lock) are plain local paths and are unchanged.

Reproduction entry points (usage lines quoted from the module docstrings)

AIDE keypoint forecasting (Table 1, Appendix C):

python aide/data/build_cache.py [--workers 8]          # AIDE keypoint cache (results/cache/aide_kp.npz) from the official splits
python aide/data/verify_protocol.py                    # Gate 0: reproduce the published zero-velocity numbers on the official test split
python aide/train/train_kp.py --model simlpe_kp --seed 42 --lr 3e-4 --epochs 300 --patience 60
python aide/train/train_kp.py --model cwm3d --seed 42  # plan recipe defaults
python aide/eval/harness.py --pred results/runs/<name>/pred_test.npz --run <name> --model <m> [--seed 0] [--split test] [--n-boot 10000]

train_kp.py flags read from its argument parser include --model, --seed, --epochs, --bs, --lr, --wd, --warmup, --ema, --patience, --clip, --loss {euc,l1,mse}, --w-euc/--w-nll/--w-bone/--w-jerk, --no-physics, augmentation (--aug-window, --noise-px, --joint-drop, --translate, --scale, --flip-p), architecture (--d, --layers, --heads, --ffn, --head-hidden, --no-anchor, --no-uncertainty, --dct, --rollout {chunked,recursive}), --visual / --vis-key / --traffic-gate / --egomotion, --semantic / --lambda-sem / --label-smoothing / --class-balanced, --select {mpjpe,f1}, --dual-select, --patience-f1.

BATON joint model (Table 3, Appendix B) — train/ and eval/:

python train/train_cwm3.py --stage U0 --variant kin_can --seed 0 [--max-anchors N] [--synthetic N] [--minutes 18] [--epochs E] [--out DIR]
python train/train_cwm3_joint.py --stage I1 --variant all --seed 0 [--base-v can4s|can8s] [--max-anchors N] [--synthetic N] [--minutes 18] [--out DIR]
python train/run_queue.py --jobs U0:kin_can:0 U0:kin_can_vc:0 V0:can4s:0 ... [--extra "--minutes 18"]
python eval/eval_cwm3.py --item cwm3_exp2 --regime manual --runs V0_can4s_s0 V0_can8s_s0 [--with-can-only] [--cells veh_onset,d_onset,y_mae,y_crps] [--n-boot 1000] [--split test]
python eval/warning_head_eval.py --runs I1_all_s0 [I1_all_s1 I1_all_s2] [--item cwm3_v1] [--n-boot 2000] [--skip-gold]

Stage definitions (recipe keys batch, rows_per_epoch, max_epochs, patience, lr, weight_decay, sched, val_rows, amp, grad_clip, select_LF; lambda branch-loss weights) are in train/stages.yaml and train/stages_joint.yaml; defaults.seeds: [0, 1, 2].

Paper tables and figures: paper/tables/gen_tables.py copies every number verbatim from the markdown result tables (benchmark/tables/ in this bucket) into tab_*.tex; python3 paper/figs/make_figs.py [heatmap] regenerates the figures.

Data this code expects

The joint-model scripts read the development layout documented in data/cwm3_dataset.py: s12_wm/results/targets_{r}_{s}.npz (anchor grid, CAN history X, targets Y), cwm3/results/pack/xpre_{r}_{s}.npz (the 8 s CAN pre-history) and the driver-side kinematic histories (cwm2/results/targets_kin/kinhist_*). The pseudonymised packs released under data/ of this bucket correspond to the first two; the driver-side cabin-derived features are not released (see the bucket README) and are rebuilt by code/data/ from the BATON corpus. The AIDE scripts need the AIDE dataset from its authors (AIDE_ROOT); benchmark/aide_protocol/ holds the split lists and the protocol verification record.

Total size
8.6 GB
Files
2,838
Last updated
Oct 7
Pre-warmed CDN
US EU US EU

Contributors