AsianPlayer/TriDrive / code /paper /figs /FIGURE_LIST.md
AsianPlayer's picture
|
download
raw
9.21 kB
# Planned figures — CWM3 ICRA/IROS submission
Every figure is regenerated from a verified source table (NUMBERS_POLICY.md); the generator and the exact source
are listed so a reader can re-derive every plotted number. Existing assets are copied into this directory as-is
(sha256 recorded). Figures render as vector PDF where we generate them ourselves; the copied PNG is kept until a
vector regeneration exists. Follow the `dataviz` skill before writing any plotting code.
Generator: **`figs/make_figs.py`** (python3 + matplotlib, no seaborn; `python3 make_figs.py [heatmap|arch|pareto]`,
run from anywhere). Each generated PDF carries source path + source sha256 + UTC timestamp in its PDF metadata
(`Subject`) and writes a sidecar `<name>.txt` listing every plotted string with its source. `main.tex` sets
`\graphicspath{{figs/}}`, so sections include the files as `\includegraphics[width=\columnwidth]{<name>}`.
| # | file (figs/) | status | content | source of every plotted number | generator |
|---|---|---|---|---|---|
| 1 | `architecture.pdf` | **DONE 2026-09-13** (sha256 in the table below; 252 × 267.84 pt = 3.5 × 3.72 in, `\includegraphics[width=\columnwidth]`). Fig. 1 in Sec. IV (`fig:arch`, `04_method.tex`, p. 4 of the 2026-09-13 build). | Block diagram, read bottom to top, columns U (driver) \| V (vehicle) \| E (environment) so that V sits between the two surviving paths: inputs (Kx [40×18] 4 s @ 10 Hz causal ROI; X [40×6] CAN 4 s @ 10 Hz; pooled V-JEPA 2 tokens 1 per 0.5 s slot over the 8 s causal bank + front latent [256]); trunks (GRU 18→128; TCN 6→256, k 5, dil 1/2/4/8; 2× causal Transformer d 128 / 4 heads / FFN 256); latent states h_U [128], z_V [256], [z_E ; z_vf] [256] inside the directed interaction block I (zero-init residuals, identity at init): driver→vehicle mode-gated MLP 247,680 and env→vehicle MLP 329,088 solid; road→driver cross-attention 231,424 + 11,392 token embedding dashed and crossed out (removed in the main model `all_minus_road2drv`); heads = direct 25-step decoders ([25×26] hands_on / head_turned; [25×35] 3 MDNs + gas/brake/steer_phase/resp; [25×12] 6 demand chains + F [5×256]) with the detached K (89,510) / R (41,394) / P (146,988) heads as dotted sub-boxes; post-hoc warning head W (fixed HGB) on current-state features + dwell block (11) + face-landmark block (16) on top. Branch parameter counts U 159,290 / V 1,608,347 / E 880,604 (pooled) in the column titles. No derived sums are printed. | `/home/USER/cwm3/docs/model_spec.md` §1 (inputs), §2 (trunks, heads, branch params), §3 (interaction modules + params, forward order), §4/§4b (detached K/P/R params), §5 (direct decoder); `results/tables/warning_head_final_ext.md` header (dwell 11 dims, face 16 dims; feature sets); main-model naming `docs/results_cwm3.md` §0. Label→source list in `figs/architecture.txt`. | `make_figs.py arch` (includes a text-overflow check that fails the run if any label exceeds its box) |
| 2 | `pareto_all_vs_hm.png` | COPIED 2026-09-13 (sha256 b4e1d697a62ca66ead0d12cc96b5da631c52ef6b87092d19812706336011a490, byte-identical to source; re-checked by `make_figs.py pareto`, which only copies when the hash differs) | AIDE All-MPJPE vs High-Motion h=5 trade-off: analytic shrinkage curve, published Driver-WM rows, our two models (5.8 M geometry; 6.3 M vis+sem, kept separate). | `/home/USER/cwm3/aide/results/tables/pareto_all_vs_hm.png`; data `aide/results/tables/tradeoff_all_vs_hm.md` / `.json`; published rows `aide/eval/paper_rows.py` | `aide/eval/baselines_analytic.py` (existing) — regenerate as PDF if the palette/labels change |
| 3 | `label_curve.pdf` | TODO | Label / power curve: paired-Δ AUROC CI half-width vs number of gold positives (calibrated + Hanley–McNeil), with the current gold (509 rows / 63 positives) marked and the "smallest declarable Δ" line; new-clip axis at 12.4 % / 25 % positive share. Human-evaluation round: mark as IN PROGRESS, no result. | `/home/USER/cwm3/results/tables/power_gold.md` (eval/power_gold.py run 20260912T033553Z table); `docs/annotation_programme.md` (design only) | to be added to `make_figs.py` (sub-command `label_curve`) reading power_gold.md |
| 4 | `robustness_heatmap.pdf` | **DONE 2026-09-13** (sha256 in the table below; wide layout 516 × 191.52 pt = 7.167 × 2.66 in = IEEEtran `\textwidth`). `figure*` float with `\label{fig:robustness_heatmap}` added in Sec. VI (`06_results_baton.tex`, directly after `\input{tables/tab_robustness}`, `\includegraphics[width=\textwidth]`); the previously undefined `\ref` resolves and the float lands on the same page as Table IX (p. 14 of the 2026-09-13 build). A stacked `\columnwidth` variant (3.5 × 4.33 in) is available via `make_figs.py heatmap --column` if the owner prefers a single-column figure. | Two side-by-side panels (manual left, engaged right; rows aligned, row labels on the left panel), rows = clean level + 6 test-time perturbations (kin_drop20, kin_drop50, can_noise, road_off, kh_trunc_old2s, kh_mask_recent2s), cols = 9 main endpoints (steer_phase, gas, brake, veh_any \| hand_leave, hand_return, head_turn \| P ttc_drop, P cut_in; white separators and muted family labels vehicle / driver / road pressure). Cell colour = Δ PR-AUC@3s (perturbed − clean, mean of 3 seeds) on ColorBrewer RdBu, symmetric about 0 (vmin/vmax = ∓0.22 = max \|Δ\| over all cells rounded up to 0.01); cell text = the copied mean (typographic minus for display; ASCII verbatim in the sidecar) and the verdict letter W / N / I (WORSE bold; B would appear for BEATS — no cell has it). Top row of each panel = clean level mean ± sd copied from the table. Wording rules of NUMBERS_POLICY.md: W = "significantly worse", N/I = "no significant difference"; legend printed under the colourbar. | `/home/USER/cwm3/results/tables/robustness_final.md` §1 (rendered 2026-09-12 21:22:40 UTC; 3 seeds; source sha256 ec51626713a2812e32021ec112063bca5d52701bd75efbbc31cf03441100eac7) — the markdown tables `### manual` / `### engaged` are parsed with a strict regex (`mean ± sd VERDICT`); nothing is recomputed. Parsed grid dumped verbatim to `figs/robustness_heatmap.txt`. | `make_figs.py heatmap` (wide, default) / `make_figs.py heatmap --column` (stacked) |
| 5 | `operating_points.pdf` | TODO | Equal-alert-load operating points: learned warning head vs openpilot DMS attention chain — gold recall / precision at DMS-matched and low (10 / h) alert loads per regime, with device-cluster bootstrap CIs; lead-time paired Δ (kill rule: CI ⊃ 0 -> EQUAL). Shares are enriched-gold quantities; NEVER relabelled as natural rates. | `/home/USER/cwm3/results/tables/operating_points.md` (items `oof`, `final_*`); raw rows `results/operating_points/<run>/`; existing calibration asset `results/operating_points/oof_20260911T194413Z/reliability.png` | to be added to `make_figs.py` (sub-command `operating_points`) |
| 6 (optional, plan §六) | `aide_per_horizon.pdf` | TODO | AIDE per-horizon MPJPE (h = 1..5, All and HM) for our two models vs zero-velocity and the published Driver-WM anchors (HM h=5 155.82 / ZV 178.62 quoted only). | `aide/results/tables/stage_a.md`, `stage_bc.md`, `tradeoff_all_vs_hm.md`; `aide/eval/paper_rows.py` (PAPER_HM5) | to be added to `make_figs.py` |
## Hashes of the generated assets (2026-09-13)
| file | sha256 |
|---|---|
| `architecture.pdf` | `728d473b66833c306349f8d1b497b03970933b3ed8f8faa41e4777172b21c379` |
| `architecture.txt` | `7261b476b4c0207267c1e929e49a13d40d04b540cd03907396202a00bed99fc9` |
| `robustness_heatmap.pdf` | `c2d43dab3ac89890f55354909422a9cfbfa7170247008011d56e3ed133bd200b` |
| `robustness_heatmap.txt` | `07a1d5bc0776b4dfd0e698528bf2280094f0a566682abb7e8bf1cdfb38ee6a49` |
| `pareto_all_vs_hm.png` | `b4e1d697a62ca66ead0d12cc96b5da631c52ef6b87092d19812706336011a490` |
| `make_figs.py` | `247a55adf9b45ce87784beb871fd63b59c93b9f419bbedb2358af5b647602869` |
(PDF hashes change on every regeneration because the metadata carries a timestamp; the sidecar `.txt` files also carry the timestamp in their first line. To check that the plotted numbers are unchanged, diff the `.txt` files ignoring their first line.)
## Design notes (dataviz skill)
- Heatmap: diverging job → two poles (red = loss, blue = gain) with a neutral near-white midpoint at exactly Δ = 0; one colour scale for both panels; the colour never carries meaning alone — every cell also prints its value and verdict letter, and the table `tab_robustness` is the table-view twin. Chrome is hairline / muted ink; text uses ink tokens, never the cell colour. Colour ramps are exempt from the categorical validator by design (`color-formula.md`).
- Architecture: the three branches use categorical slots 1–3 of the reference palette (blue / orange / aqua, documented as passing all-pairs in both modes) as light tints with the hue as edge; identity is always also carried by the text label. The ablated path uses the status "critical" red for the × only, next to the word "removed". Fonts: Nimbus Sans (Helvetica clone) embedded as Type 42; mathtext uses the same face.
- Appendix-only variants (gaze chain, non-causal ROI, 5-seed) may appear in appendix figures but never in Figs. 1–6.

Xet Storage Details

Size:
9.21 kB
·
Xet hash:
8f86fe223c17ff1d81740c00c2bfe35d01f9d8d93e98e2d6b39b5c3ce2675d45

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.