Buckets:
| # cwm3/data/feature_provenance.yaml — lineage of the cwm3 DATA families (extends the cwm2 pattern and vocabulary of | |
| # cwm2/data/feature_provenance.yaml; same field meanings so cwm2/tests/test_no_op_dms_dependency.py-style consumers can read it). | |
| # Written 2026-09-10 from a read of each producer script. Numbers are copied from the named script outputs | |
| # (results/*.json / run_*.json) — nothing here is computed by hand. | |
| # | |
| # Field vocabulary (as cwm2) | |
| # dms_lineage : none | target_only | selection_only | FORBIDDEN_as_input | |
| # causality : causal | non_causal_roi | uses_future | future_target | |
| # time_base : how t is defined ("frame/20" = frame_index/20, frame-anchored; never container fps) | |
| # status : materialized | to_build | benchmark_only | |
| # allowed_as_input : yes | no | target_only | |
| schema_version: 1 | |
| extends: /home/USER/cwm2/data/feature_provenance.yaml | |
| dms_forbidden_terms_source: "cwm2/annotation_package/tools/strip_check.py:38-58" | |
| families: | |
| # ------------------------------------------------------------------------------------------------ | |
| pose_causal_rtmw136: | |
| description: Driver whole-body keypoints (RTMW-x-l, COCO-WholeBody 133 re-ordered to HALPE-136) at 5 Hz on the 15 s clip window, estimated detection-free inside the per-clip CAUSAL person_box of the frame shards (roi.json, chosen from prefix frames only). | |
| files: /home/USER/cwm3/results/pose_causal/<clip_id>.npz | |
| arrays: | |
| t_rel: "[75] f32 −5.0 + 0.2·k (k=25 is the anchor t0)" | |
| t_abs: "[75] f64 t0 − 5 + 0.2·k, seconds since route start" | |
| frame_idx: "[75] i64 round(t_abs·20) (identical to source_frame_idx of frames_full_standard index.json)" | |
| frame_ok: "[75] bool frame index inside the video and decoded" | |
| kpts: "[75,136,3] f16 (x/W, y/H, conf) in native-frame normalised units; NaN where undefined" | |
| mask: "[75,136] bool finite ∧ conf ≥ 0.3 (derived from the stored f16 values)" | |
| person_box: "[4] i32 native px xyxy, from roi.json (causal)" | |
| person_box_used: "[4] i32 native px xyxy, person_box expanded by 10 % per side, clipped" | |
| roi_source: "str pose_detector | seat_region_prior (copied from roi.json)" | |
| co_occupant_present: "bool (copied from roi.json)" | |
| model_id: "str rtmw-dw-x-l_simcc-cocktail14_270e-256x192_20231122.onnx (rtmlib 0.0.15 'balanced' pose model, onnxruntime-gpu CUDA EP)" | |
| native_wh: "[2] i32" | |
| uid/dongle/t0/video_source/kpt_order/score_th/margin/n_video_frames: scalars | |
| keypoint_order: | |
| name: halpe136 | |
| body_0_16: "COCO-17 order (= COCO-WholeBody 0–16 = old pose10hz order)" | |
| 17_head_top: "always NaN (RTMW has no head-top point)" | |
| 18_neck: "midpoint(5,6), conf = min(conf5, conf6)" | |
| 19_hip: "midpoint(11,12), conf = min(conf11, conf12)" | |
| 20_25_feet: "BY NAME: 20 LBigToe←WB17, 21 RBigToe←WB20, 22 LSmallToe←WB18, 23 RSmallToe←WB21, 24 LHeel←WB19, 25 RHeel←WB22 (HALPE interleaves L/R per toe type; COCO-WholeBody groups per foot — the naive index shift 20–25←17–22 would swap 4 of 6 points)" | |
| 26_93_face: "← WB 23–90 (68-landmark order)" | |
| 94_114_left_hand: "← WB 91–111" | |
| 115_135_right_hand: "← WB 112–132" | |
| spec_source: /home/USER/Drive/explore/opendriver/odlib.py:16-18 (BODY/FEET/FACE/LHAND/RHAND slots) | |
| producer: | |
| script: /home/USER/cwm3/data/extract_pose_causal.py | |
| lines: "frame_grid (t_abs, frame_idx); expand_box (margin); box_geometry/crop_input (rtmlib bbox_xyxy2cs padding 1.25 + aspect-fixed top_down_affine on a crop); decode_clip (cv2 seek+grab/retrieve in worker processes, verified bit-identical to decord.get_batch); Pose.infer (one CUDA batch per clip, rtmlib RTMPose.postprocess formula); wb133_to_halpe136; finish_clip (savez)" | |
| runner: /home/USER/cwm3/data/run_extract_pose_causal.sh (flock /tmp/s13_gpu.lock, ≤ 20 min chunks, resumable) | |
| gate: /home/USER/cwm3/data/qc_pose_gate.py -> results/pose_causal/qc_200.json | |
| layout_test: /home/USER/cwm3/tests/test_pose_causal_layout.py | |
| source_files: | |
| - "<BATON leaf>/dcamera.mp4 (HEVC 1928×1208 @ 20 fps; local copy if size-identical to the remote canonical copy, else rsync'd from USER@REMOTE_HOST:/data/backup/BATON to results/scratch_video and deleted after use)" | |
| - /home/USER/cwm3/results/roi/<clip_id>.json (causal person_box; see cwm2_causal_roi_mirror) | |
| - /home/USER/cwm2/private/clip_map_full.json (clip_id -> uid, dongle, t0, dcam path, native w/h/n_frames; read-only) | |
| - /home/USER/cwm3/results/baton_leaves.json (video source decision) | |
| dms_lineage: none | |
| causality: causal # the ROI is chosen from prefix frames only (cwm2/data/extract_frames.driver_roi); keypoints are per-frame | |
| time_base: frame/20 (frame_idx = round(t_abs·20); asserted by tests/test_pose_causal_layout.py::test_time_base) | |
| units: native-frame normalised (x/W, y/H), confidence 0..1 | |
| coverage: {status: benchmark_only, n_clips_materialized: 202, benchmark_clips: 200, expected_full: 26578, benchmark: results/pose_causal/bench_200.json, bench_infer_ms_per_frame: 1.084, bench_per_clip_wall_s: 0.565, bench_clips_per_s: 1.77, bench_aggregate_decode_fps: 525.8, bench_download_MBps: 107.2, projected_gpu_h_infer_only: 0.60, projected_wall_h_total: 4.18, projected_20min_chunks: 13, qc_pck05_pooled: 0.954, qc_hands_on_agreement_new_bench_vs_old_route: 0.933, qc_hands_on_agreement_new_oldmed_vs_old_route: 0.956, qc_old_bench_vs_old_route_reference: 0.959, qc_det_rate_new_B_kvalid: 0.998, qc_det_rate_old_B_kvalid: 0.982} | |
| status: benchmark_only # full run NOT launched (run_extract_pose_causal.sh is ready) | |
| allowed_as_input: yes | |
| notes: | |
| - "Replaces pose10hz_driver_keypoints (non_causal_roi, target_only) as the driver-kinematics INPUT family; the old cache stays target-only." | |
| - "Old-cache comparison / gate numbers: results/pose_causal/qc_200.json (PCK@0.05·H, detection rate, hands_on rule agreement)." | |
| - "No detector is run; a person_box from roi_source=seat_region_prior yields low-confidence keypoints (masked), never a different person." | |
| # ------------------------------------------------------------------------------------------------ | |
| cwm2_causal_roi_mirror: | |
| description: Local mirror of every clip's roi.json (+ index.json header) pulled out of the remote frame shards without downloading the shards. | |
| files: | |
| - /home/USER/cwm3/results/roi/<clip_id>.json (roi.json content + clip_id, shard, index_meta) | |
| - /home/USER/cwm3/results/roi_index/shard_NNNN.jsonl.gz (full index.json per clip) | |
| - /home/USER/cwm3/results/roi_coverage.json | |
| producer: | |
| script: /home/USER/cwm3/data/fetch_roi.py | |
| lines: "REMOTE_PY (remote python3 tarfile 'r|' single pass per shard); fetch_shard (JSONL stream -> files, time-base check source_frame_idx == round(source_ts_s·20)); coverage (histograms)" | |
| original_producer: /home/USER/cwm2/data/extract_frames.py driver_roi (prefix frames only, yolo11x-pose, dongle driver-side prior; never reads DMS) | |
| source_files: | |
| - USER@REMOTE_HOST:/data/backup/cwm2_derived/frames_full_standard/shard_0000..0066.tar (members frames/<clip_id>/{roi.json,index.json}) | |
| dms_lineage: none | |
| causality: causal | |
| time_base: frame/20 (index.json source_frame_idx == round(source_ts_s·20) verified on every fetched clip; count in roi_coverage.json / shard_*.done n_bad_timebase) | |
| roi_source_values: [pose_detector, seat_region_prior] | |
| coverage: {n_manifest: 26578, n_roi_fetched: 26578, n_missing: 0, n_extra: 0, n_bad_timebase: 0, roi_source: {pose_detector: 26577, seat_region_prior: 1}, co_occupant_present: {False: 17295, True: 9283}, selection_rule: {single_cluster: 19574, nearest_dongle_driver_side: 6479, largest_cluster_no_side_prior: 524, no_person_detected: 1}, driver_side_uncertain_true: 3289, hands_missing: {none: 26327, left: 103, right: 88, both: 60}} | |
| status: materialized | |
| allowed_as_input: yes | |
| # ------------------------------------------------------------------------------------------------ | |
| baton_leaves: | |
| description: Inventory of the canonical (remote) BATON route leaves with dcamera/qcamera sizes and the local-copy match status; the single source for "which video file may be read for this clip". | |
| files: /home/USER/cwm3/results/baton_leaves.json | |
| producer: | |
| script: /home/USER/cwm3/data/remote_baton.py | |
| lines: "remote_listing (find -mindepth 5 -maxdepth 5 dcamera.mp4/qcamera.mp4 -printf %h %f %s); local_listing (glob at the same depth); main (status per leaf, manifest usage)" | |
| layout: "<CAR_MODEL>/<dongle_16hex>/<NNNNNNNN--routehash>/route_<a>-<b>/{dcamera.mp4,qcamera.mp4,*.csv} — leaf dir 4 levels below /data/backup/BATON, files at depth 5; raw <seg>--dcamera.hevc segment dirs are not leaves" | |
| source_files: | |
| - USER@REMOTE_HOST:/data/backup/BATON (read-only listing via SSH ControlMaster /tmp/baton_bak_ctl) | |
| - /home/USER/BATON (partial local copy) | |
| - /home/USER/cwm2/private/clip_map_full.json (leaves used by the manifest) | |
| dms_lineage: none | |
| causality: n/a (inventory) | |
| time_base: n/a | |
| coverage: {n_remote: 1489, n_remote_with_dcamera: 1489, n_remote_with_qcamera: 1485, remote_dcamera_TB: 1.462, n_local: 1273, n_local_identical_size: 1273, n_local_size_differs: 0, n_missing_local: 216, n_only_local: 0, manifest_leaves: 487, manifest_leaves_local_identical: 484, manifest_leaves_missing_local: 3, manifest_clips_local: 26459, manifest_clips_remote_only: 119} | |
| status: materialized | |
| allowed_as_input: n/a | |
| notes: | |
| - "run: results/run_remote_baton_20260910T083333Z.json" | |
| - "The first probe (2026-09-10 08:23Z) used find -maxdepth 3 and found 0 leaves; leaves are one level deeper." | |
| # ------------------------------------------------------------------------------------------------ | |
| grid_preds_archive: | |
| description: Raw cwm2 grid predictions (pred_test.npz / pred_val.npz of the 30 completed cells) moved to the remote derived store; local copies deleted only after the remote sha256 matched. | |
| files: | |
| remote: USER@REMOTE_HOST:/data/backup/cwm2_derived/grid_preds/<cell>/pred_{test,val}.npz | |
| ledger: /home/USER/cwm3/results/grid_preds_ledger.jsonl (cell, file, bytes, sha256, remote_sha256, remote_ok, local_deleted, secs_transfer, ts) | |
| kept_local: "/home/USER/cwm2/results/grid/<cell>/{pred_layout_test.npz, pred_layout_val.npz, BEST, ckpt_*.pt, *.log, run_*.json, metrics_*.json, history.jsonl, stats.npz}" | |
| producer: | |
| script: /home/USER/cwm3/data/ship_grid_preds.py | |
| lines: "main: sha256 local -> rsync -a --partial --inplace per file -> remote sha256sum -> ledger row -> unlink only if remote_ok" | |
| dms_lineage: n/a (model outputs; lineage of each cell in its run_train_*.json) | |
| causality: n/a | |
| time_base: n/a | |
| coverage: {n_files: 60, n_cells: 30, bytes_archived_and_deleted: 25589485326, GB_archived: 25.59, transfer_secs: 844.1, mean_MBps: 30.3, disk_free_before_GB: 228.7, disk_free_after_GB: 248.7, disk_freed_GB: 19.97} | |
| status: materialized | |
| allowed_as_input: n/a | |
| notes: | |
| - "run: results/run_ship_grid_preds_*.json; the plan said ~30 GB, du measured 24 GiB = 25.59 GB." | |
| - "disk_freed_GB (df delta) < bytes deleted because fetch_roi and other processes wrote to the same volume during the run." | |
| # ------------------------------------------------------------------------------------------------ | |
| kin_causal_targets: | |
| description: CAUSAL driver-kinematics history (Kh_c) and future targets (K_c / S_c / E_c) on the s12 anchor grid, computed from the causal RTMW pose of the 15 s clip windows with causal per-device rest/head references; row-aligned with s12_wm/results/targets_{regime}_{split}.npz. | |
| files: | |
| - /home/USER/cwm3/results/targets_kin_causal/kin_causal_{manual,engaged}_{train,val,test}.npz | |
| - /home/USER/cwm3/results/targets_kin_causal/kinhist_causal_{manual,engaged}_{train,val,test}.npz | |
| - /home/USER/cwm3/results/targets_kin_causal/clip_refs.npz (reference used per clip and frame) | |
| - /home/USER/cwm3/results/targets_kin_causal/build_stats_latest.json, qc.json | |
| arrays: | |
| uid/dongle/t: "copies of the s12 fields (alignment witnesses; equality asserted)" | |
| row_ok: "[N] bool anchor lies in a clip window with t0-1 <= t <= t0+5 (nearest t0 when several)" | |
| clip_id: "[N] str source clip ('' if !row_ok)" | |
| dt_anchor: "[N] f32 t - t0 (NaN if !row_ok)" | |
| K_c: "[N,25,11] f16 t+0.2..t+5.0 s; NaN = invalid / outside window / beyond the pose grid (t0+9.8)" | |
| Kvalid: "[N,25] bool frame present & conf>0.3 (nose, shoulders, wrists) & finite head_turn & causal reference defined & s12 M" | |
| Kframe: "[N,25] bool pose frame(s) present" | |
| interp: "[N,25] bool step interpolated (anchor on the odd 0.1 s grid)" | |
| K0_c/K0valid/interp0: "[N,11] f32 / [N] / [N] state at the anchor" | |
| S_c: "[N,25,2] f32 {hands_on, head_turned} (NaN invalid / s12-censored)" | |
| S0_c: "[N,2]" | |
| E_c: "[N,25,3] u8 {hand_return, hand_leave, head_turn_onset}" | |
| EM_c: "[N,25,3] bool" | |
| E0_c: "[N,3]" | |
| Kh_c (kinhist): "[N,20,11] f16 t-3.8..t @ 5 Hz incl. t" | |
| Khvalid: "[N,20]" | |
| interp_h: "[N,20]" | |
| channels: [head_cx, head_cy, Lwri_x, Lwri_y, Rwri_x, Rwri_y, head_turn, head_turn_dev, Lhand_rest_dist, Rhand_rest_dist, min_hand_rest_dist] | |
| producer: | |
| script: /home/USER/cwm3/data/build_kin_causal.py | |
| lines: "clip_raw (COCO-17 subset of HALPE-136, x*1.6 / y old-crop-equivalent units, conf>0.3); expanding_median (causal reference); clip_series (11 channels as posefeat.per_frame / build_kinematics_targets.per_cache); to_10hz (5 Hz -> 10 Hz, odd steps linear, flag interp); hysteresis (old TRAIN thresholds); main (nearest-t0 clip per anchor, gather, s12 censoring, onsets)" | |
| qc: /home/USER/cwm3/data/qc_kin_causal.py -> results/targets_kin_causal/qc.json | |
| layout_test: /home/USER/cwm3/tests/test_kin_causal_layout.py | |
| reference_rule: "REF_q(k) = median(POOL_q ∪ {q(j): j<=k}) per clip and frame; POOL_q = valid 5 Hz values of the same device's clips on routes ordered strictly before (date-named routes first by date, then counter-named by counter, then segment start) plus same-route clips with t0'+10 <= t0; capped to the 4000 most recent values; undefined while < 25 values (then head_turn_dev / rest distances NaN and Kvalid False). Stored per clip in clip_refs.npz." | |
| thresholds: {conf: 0.3, wheel: 0.10, head_turn_on: 0.19412308931350708, head_turn_off: 0.1025589182972908, thresholds_source: "cwm2/results/targets_kin/build_stats_latest.json (TRAIN-only fit of the old build, reused unchanged)"} | |
| source_files: | |
| - /home/USER/cwm3/results/pose_causal/<clip_id>.npz (pose_causal_rtmw136, all 26,578 clips) | |
| - /home/USER/s12_wm/results/targets_{manual,engaged}_{train,val,test}.npz (anchors, s12 censoring M) | |
| - /home/USER/cwm2/private/clip_map_full.json (clip -> uid, dongle, t0; read-only) | |
| dms_lineage: none | |
| causality: causal # ROI from prefix frames; references from data <= current time / earlier clips of the device; hysteresis run forward inside the window | |
| time_base: frame/20 (pose frame_idx = round(t_abs*20); anchors on the 0.1 s s12 grid; odd-grid anchors interpolated, flagged) | |
| units: "crop-normalised-equivalent of the old cache: x = x_norm*1.6 (offset 0, differs from the old x by the route constant crop_x0/400), y = y_norm; distances/deviations identical units to the old build" | |
| coverage: {n_clips_used_total: 26578, manual_train: {N: 632463, n_row_ok: 305716, coverage: 0.4834, routes_with_clips: '432/440', clips_used: 12784, Kvalid_row_ok: 0.9859, Kvalid_all25: 0.9264, Khvalid_all20: 0.9753, interp_frac: 0.5509, rows_future_truncated: 7338, multi_clip_anchors: 55734, hands_on_prev: 0.8482, head_turned_prev: 0.2220}, engaged_train: {N: 824859, n_row_ok: 261318, coverage: 0.3168, routes_with_clips: '295/299', clips_used: 10748, Kvalid_row_ok: 0.9883, Kvalid_all25: 0.9455, Khvalid_all20: 0.9747, interp_frac: 0.5641, rows_future_truncated: 7077, multi_clip_anchors: 30036, hands_on_prev: 0.8860, head_turned_prev: 0.1340}, manual_val: {N: 70330, n_row_ok: 0}, manual_test: {N: 512934, n_row_ok: 0}, engaged_val: {N: 110948, n_row_ok: 0}, engaged_test: {N: 451840, n_row_ok: 0}, ref_undefined_frame_frac: 0.0020, clips_without_prior_pool: 167, events_at_3s: {manual_train: {hand_return: '26436/44510', hand_leave: '42094/256758', head_turn_onset: '59785/233389'}, engaged_train: {hand_return: '10173/27988', hand_leave: '15486/230757', head_turn_onset: '39440/225461'}}} | |
| qc_vs_old_noncausal: {rows_compared: {manual_train: 305716, engaged_train: 261318}, cells_both_valid_K: {manual_train: 7045690, engaged_train: 6027390}, pooled_pearson_K: {head_cx: 0.326, head_cy: 0.977, Lwri_x: 0.391, Lwri_y: 0.924, Rwri_x: 0.555, Rwri_y: 0.929, head_turn: 0.786, head_turn_dev: 0.773, Lhand_rest_dist: 0.568, Rhand_rest_dist: 0.708, min_hand_rest_dist: 0.467}, pooled_pearson_Kh: {head_cx: 0.335, head_cy: 0.977, Lwri_x: 0.374, Lwri_y: 0.923, Rwri_x: 0.554, Rwri_y: 0.930, head_turn: 0.748, head_turn_dev: 0.719, Lhand_rest_dist: 0.548, Rhand_rest_dist: 0.701, min_hand_rest_dist: 0.409}, mean_abs_diff_K_manual_train: {head_cx: 0.0217, head_cy: 0.0036, Lwri_x: 0.0375, Lwri_y: 0.0186, Rwri_x: 0.0273, Rwri_y: 0.0137, head_turn: 0.0403, head_turn_dev: 0.0412, Lhand_rest_dist: 0.0424, Rhand_rest_dist: 0.0398, min_hand_rest_dist: 0.0302}, states_pooled: {hands_on: {agreement: 0.883, kappa: 0.437, prevalence_old: 0.899, prevalence_new: 0.866}, head_turned: {agreement: 0.927, kappa: 0.745, prevalence_old: 0.168, prevalence_new: 0.180}}, events_pm1_step_f1_pooled: {hand_return: 0.289, hand_leave: 0.300, head_turn_onset: 0.686}, exact_step_agreement_pooled: {hand_return: 0.979, hand_leave: 0.980, head_turn_onset: 0.982}, reading: 'y channels and head_turn agree (r 0.92-0.98 / 0.79); x channels have low r because their pooled std (0.05-0.11) is close to the model disagreement (|diff| 0.02-0.05; head_cx = ear-inclusion in the face mean, wrists = localisation), not a mapping error (same mapping gives r 0.98 in y); rest-distance channels and hand events inherit the reference difference (causal expanding vs whole-route incl. future)'} | |
| status: materialized | |
| allowed_as_input: "Kh_c / K0_c yes (causal); K_c, S_c, E_c targets only" | |
| notes: | |
| - "NO clip lies on any s12 val/test route (26,118 clips on train routes, 460 on routes outside s12): causal coverage exists on train anchors only; val/test rows are all row_ok=False. The 200 held-out gold clips are not on s12 val/test routes either." | |
| - "Future steps beyond the pose grid (anchors with t > t0+4.8) are absent (Kframe False) rather than extrapolated; counted as n_rows_future_truncated in build_stats." | |
| - "Old (non-causal) hands_on used whole-route medians including the future; agreement figures in qc.json measure how much the events depended on that." | |
| # ------------------------------------------------------------------------------------------------ | |
| pose_causal_routes_rtmw136: | |
| description: ROUTE-LEVEL causal driver whole-body pose at 10 Hz (RTMW-x-l, HALPE-136) on a CAUSAL driver box (YOLO11x-pose per frame, device-side prior, expanding median over moving frames <= t, frozen after 60 s of moving frames), for every s12 route; causal replacement of s8_pose/cache/pose10hz (whose crop was a whole-route median). | |
| files: /home/USER/cwm3/results/pose_causal_routes/<uid>.npz (+ dside_prior.json, span_frames_total.json, bench_5.json, run_*.json) | |
| arrays: | |
| t: "[N] f32 = k/10 (10 Hz)" | |
| frame_idx: "[N] i64 = 2k (frame/20 time base as s8_pose/extract_pose.py)" | |
| kpts: "[N,136,3] f16 (x/W, y/H, conf) native-normalised; NaN where no box yet" | |
| mask: "[N,136] finite & conf >= 0.3" | |
| box: "[N,4] f32 native px xyxy causal box at t (NaN undefined)" | |
| box_stage: "[N] u8 0 none / 1 warm-up (<300 moving frames) / 2 expanding (<600) / 3 frozen" | |
| box_frozen_from_t: "f32 (NaN if never frozen)" | |
| driver_det: "[N] driver candidate selected at t" | |
| n_persons: "[N] u8" | |
| moving: "[N] grid10 vEgo > 2 m/s" | |
| dside_prior/dside_source: "per-dongle driver-side cx prior used (roi_mirror_solo_median | person_diag_dside | route_bootstrap | none_largest_area)" | |
| spans: "[S,2] extracted [t-8.2, t+5.2] anchor-span union (merge gap 10 s)" | |
| decode_wh_native_wh_model_ids_video_source: "decode_wh [2], native_wh [2], model_ids [2] str, video_source str" | |
| producer: | |
| script: /home/USER/cwm3/data/extract_pose_causal_routes.py | |
| lines: "spans_of; decode_block (cv2 seek+grab, aspect-preserving resize to width 640 in worker processes); DriverTracker (v2 driver_roi rules: area >= 2 %, |dcx| <= 0.18 to the prior / running median, largest-area fallback, per-coordinate expanding median on moving frames, freeze at 600); RTMW on box+10 % margin via extract_pose_causal.{box_geometry,crop_input,Pose,wb133_to_halpe136}" | |
| runner: /home/USER/cwm3/data/run_extract_pose_causal_routes.sh (LOCK=1 flock chunks MAX_MIN=10, or LOCK=0 if decode-bound) | |
| vEgo_column: "recovered by AST from s14_corr/grid_s14.py (DCOLS+PCOLS+canspec.FEATURES+RCOLS) -> index 12" | |
| source_files: | |
| - "<BATON leaf>/dcamera.mp4 (local if size-identical to the remote canonical copy, else rsync from the remote and deleted after use)" | |
| - /home/USER/explore/s14_corr/cache/grid10/<uid>.npz (vEgo only, for the moving mask) | |
| - /home/USER/cwm3/results/roi/*.json + cwm2/private/person_diag.json (driver-side prior per dongle) | |
| - /home/USER/s12_wm/results/targets_*.npz (anchor times -> spans) | |
| dms_lineage: none | |
| causality: causal # box(t) uses detections <= t only; prior is per-device (not per-route-future) | |
| time_base: frame/20 (t = k/10, frame_idx = 2k) | |
| units: native-frame normalised (x/W, y/H), confidence 0..1 | |
| coverage: {n_routes: 644, of_s12_routes: 644, frames_10hz_total: 5939848, hours: 165.0, video_source: {local: 603, remote_download: 41}, driver_det_rate_mean: 0.9952, mask_body_rate_mean: 0.9743, moving_frac_mean: 0.846, box_stage_frames: {none: 771, warmup: 297585, expanding: 204456, frozen: 5437036}, routes_box_frozen: 548, dside_source: {roi_mirror_solo_median: 424, person_diag_dside: 4, none_largest_area: 216}, largest_area_fallback_frames: 2399, run: {chunks: 26, first_chunk_utc: '20260910T143240Z', all_done_utc: '2026-09-11T03:54:32Z', sum_route_wall_h: 10.92, frames_per_s: 151, worker_decode_h: 31.05, yolo_h: 4.23, rtmw_h: 3.30, chunk_wall_max_s: 2321, chunks_over_22min: 18, failures: 0}, bench_5: {frames_per_s: 175.2, yolo_ms_per_frame: 1.72, rtmw_ms_per_frame: 2.09, gpu_busy_frac: 0.667, gpu_peak_torch_GB: 1.12}} | |
| status: materialized | |
| allowed_as_input: yes | |
| notes: | |
| - "YOLO11x-pose is used only to place the causal box; keypoints come from RTMW-x-l (as pose_causal_rtmw136)." | |
| - "Frames before any driver detection or before the first moving frame use the running median of all selected frames so far (box_stage 1)." | |
| - "v2 (results/pose_causal_routes_v2/, 74 routes): devices WITHOUT a clip-derived side prior and a co-occupant fraction > 0.5 were re-extracted with the POPULATION driver-side prior cx 0.6343 (median over the 87 mirror-prior dongles, 90.8 % > 0.5) instead of the largest-area fallback — a causal, route-independent prior (no route's own future or labels); dside_source='population_median_cx'; v1 files kept." | |
| # ------------------------------------------------------------------------------------------------ | |
| kin_causal_routes_targets: | |
| description: Same 11 causal kinematics channels / states / events as kin_causal_targets, but from the ROUTE-LEVEL causal pose for ALL s12 rows, with 10 Hz histories Kh_c[N,40,11] (4 s) and Kh8_c[N,80,11] (8 s) and causal per-route references (expanding medians over moving frames <= t, initialised from the device's earlier routes). | |
| files: | |
| - /home/USER/cwm3/results/targets_kin_causal_routes/kin_causal_{manual,engaged}_{train,val,test}.npz | |
| - /home/USER/cwm3/results/targets_kin_causal_routes/kinhist_causal_{manual,engaged}_{train,val,test}.npz | |
| - /home/USER/cwm3/results/targets_kin_causal_routes/route_refs.npz, build_stats_latest.json, qc.json | |
| arrays: "as kin_causal_targets minus clip_id/dt_anchor/interp*, plus route_decoded[N], Kh_c[N,40,11]/Khvalid[N,40] (t-3.9..t), Kh8_c[N,80,11]/Kh8valid[N,80] (t-7.9..t); source='routes'" | |
| producer: | |
| script: /home/USER/cwm3/data/build_kin_causal.py --source routes | |
| lines: "raw_from_kpts; expanding_median_moving (sorted-list expanding median over moving frames, pool = device's earlier routes, POOL_CAP 4000, N_MIN 25); main_routes (10 Hz absolute grid per route, hysteresis with the old TRAIN thresholds, gather at offsets +2..+50 / -39..0 / -79..0, s12 censoring, onsets)" | |
| qc: /home/USER/cwm3/data/qc_kin_causal.py --new-dir results/targets_kin_causal_routes | |
| layout_test: /home/USER/cwm3/tests/test_kin_causal_routes_layout.py | |
| thresholds: {conf: 0.3, wheel: 0.10, head_turn_on: 0.19412308931350708, head_turn_off: 0.1025589182972908} | |
| source_files: | |
| - /home/USER/cwm3/results/pose_causal_routes/<uid>.npz | |
| - /home/USER/s12_wm/results/targets_{manual,engaged}_{train,val,test}.npz | |
| dms_lineage: none | |
| causality: causal | |
| time_base: frame/20 (10 Hz grid, no interpolation) | |
| units: "crop-normalised-equivalent of the old cache (x = x_norm*1.6 offset 0, y = y_norm)" | |
| coverage: {manual_train: {N: 632463, routes_decoded: '440/440', row_ok: 632340, coverage: 0.9998, Kvalid_row_ok: 0.9856, Kh_all40: 0.9696, Kh8_all80: 0.9484, hands_on_prev: 0.857, head_turned_prev: 0.189}, manual_val: {N: 70330, routes_decoded: '46/46', row_ok: 69423, coverage: 0.9871, Kvalid_row_ok: 0.9829, Kh_all40: 0.9654, Kh8_all80: 0.9427, hands_on_prev: 0.914, head_turned_prev: 0.131}, manual_test: {N: 512934, routes_decoded: '158/158', row_ok: 512779, coverage: 0.9997, Kvalid_row_ok: 0.9811, Kh_all40: 0.9550, Kh8_all80: 0.9353, hands_on_prev: 0.896, head_turned_prev: 0.139}, engaged_train: {N: 824859, routes_decoded: '299/299', row_ok: 809364, coverage: 0.9812, Kvalid_row_ok: 0.9789, Kh_all40: 0.9686, Kh8_all80: 0.9598, hands_on_prev: 0.909, head_turned_prev: 0.117}, engaged_val: {N: 110948, routes_decoded: '31/31', row_ok: 97018, coverage: 0.8744, Kvalid_row_ok: 0.9960, Kh_all40: 0.9894, Kh8_all80: 0.9839, hands_on_prev: 0.918, head_turned_prev: 0.062}, engaged_test: {N: 451840, routes_decoded: '101/101', row_ok: 451834, coverage: 1.0000, Kvalid_row_ok: 0.9939, Kh_all40: 0.9781, Kh8_all80: 0.9685, hands_on_prev: 0.871, head_turned_prev: 0.130}, ref_undefined_frame_frac: 0.0044, routes_without_prior_pool: 162, note_engaged_val: '13,899 of the 13,930 rows without coverage are CAN anchors beyond the end of one VW Tiguan video (video 2,284 s, anchors to 5,280 s)'} | |
| qc_vs_old_noncausal: {manual_train: {rows: 632340, r_head_turn: 0.862, r_min_hand_rest_dist: 0.561, r_head_cy: 0.974, r_Rwri_y: 0.938, hands_on_agreement: 0.8853, hands_on_kappa: 0.472, head_turned_kappa: 0.770, f1_pm1_hand_return: 0.318, f1_pm1_head_turn_onset: 0.698}, manual_val: {rows: 69423, r_head_turn: 0.947, r_min_hand_rest_dist: 0.602, r_head_cy: 0.998, r_Rwri_y: 0.991, hands_on_agreement: 0.9310, hands_on_kappa: 0.503, head_turned_kappa: 0.809, f1_pm1_hand_return: 0.377, f1_pm1_head_turn_onset: 0.743}, manual_test: {rows: 512779, r_head_turn: 0.477, r_min_hand_rest_dist: 0.146, r_head_cy: 0.809, r_Rwri_y: 0.708, hands_on_agreement: 0.8648, hands_on_kappa: 0.238, head_turned_kappa: 0.525, f1_pm1_hand_return: 0.236, f1_pm1_head_turn_onset: 0.544}, engaged_train: {rows: 809364, r_head_turn: 0.641, r_min_hand_rest_dist: 0.533, r_head_cy: 0.976, r_Rwri_y: 0.922, hands_on_agreement: 0.9166, hands_on_kappa: 0.484, head_turned_kappa: 0.691, f1_pm1_hand_return: 0.237, f1_pm1_head_turn_onset: 0.674}, engaged_val: {rows: 97018, r_head_turn: 0.666, r_min_hand_rest_dist: 0.679, r_head_cy: 0.997, r_Rwri_y: 0.903, hands_on_agreement: 0.9204, hands_on_kappa: 0.491, head_turned_kappa: 0.658, f1_pm1_hand_return: 0.160, f1_pm1_head_turn_onset: 0.676}, engaged_test: {rows: 451834, r_head_turn: 0.414, r_min_hand_rest_dist: 0.289, r_head_cy: 0.871, r_Rwri_y: 0.811, hands_on_agreement: 0.8802, hands_on_kappa: 0.378, head_turned_kappa: 0.426, f1_pm1_hand_return: 0.167, f1_pm1_head_turn_onset: 0.462}, pooled: {r_head_turn: 0.640, r_min_hand_rest_dist: 0.373, hands_on_agreement: 0.8926, head_turned_kappa: 0.646}, per_route_median_r_head_turn: {roi_mirror_prior_train: 0.977, largest_area_fallback_test: 0.968}, wrong_occupant_suspects: {file: results/targets_kin_causal_routes/driver_box_suspect_routes.json, n_routes: 80, anchors_frac: {manual_train: 0.0458, manual_test: 0.2756, engaged_train: 0.1002, engaged_test: 0.2627}, cause: 'largest-area fallback (no device side prior on test devices) with a near-permanent co-occupant', fix_proposed: 'population side prior cx 0.634 for 74 routes (35.8 h)'}} | |
| status: materialized (v1; wrong-occupant suspects flagged, re-extraction proposed) | |
| allowed_as_input: "Kh_c / Kh8_c / K0_c yes (causal); K_c, S_c, E_c targets only" | |
| # ------------------------------------------------------------------------------------------------ | |
| # ---- appended 2026-09-10 (week-2 data assets: disentangled target families P / R / B, DMS teacher, mining index) ---- | |
| pressure_targets: | |
| description: ROAD-PRESSURE chains P[N,25,6] on the s12 anchor grid — the road-side half of the old demand D (ttc, ttc_drop, badas kept with identical definitions) plus three road-event families (cut_in, lead_braking, lane_excursion); NO ego-motion family (steer_rate / decel / pedals live in response_targets). | |
| files: /home/USER/cwm3/results/targets_pressure/pressure_{manual,engaged}_{train,val,test}.npz (+ build_stats_latest.json, route_thresholds_<utc>.csv, sensitivity_val_<utc>.csv, run_build_pressure_targets_<utc>.json) | |
| arrays: | |
| P/Pvalid: "[N,25,6] bool pressure-high at t+0.2..t+5.0 / signal present (InRange applied)" | |
| P0/P0valid: "[N,6] bool at the anchor t itself" | |
| P_first: "[N,6] int16 first onset step given inactive & valid at t (-1 none, -2 anchor active/invalid)" | |
| S0: "[N,6] f32 continuous margin ratio at t (>1 fired; diagnostic current-signal baseline)" | |
| M0/M0valid: "[N,10] f32/bool current margins at t: ttc_s, headway_s, dRel_m, vRel_mps, aLead_mps2, lat_margin_m, lane_width_m, badas, lead_valid, lane_valid (margin_names)" | |
| Moving/Moving0/InRange/uid/t/dongle/families: "as targets_demand" | |
| families: [ttc, ttc_drop, cut_in, lead_braking, lane_excursion, badas] | |
| thresholds: {ttc_lt_s: 4.0, ttc_drop_lt_sps: -1.0, ttc_drop_maxttc_s: 8.0, cut_in_headway_lt_s: 2.5, cut_in_new_lead_gap_s: 0.5, cut_in_jump_gt_m: 5.0, cut_in_hold_s: 1.0, lead_brake_a_lt_mps2: -2.0, lead_brake_window_s: 1.0, lead_brake_headway_lt_s: 4.0, same_target_jump_m: 5.0, veh_half_width_m: 0.9, lane_width_range_m: [2.5, 5.0], badas_gt: "max(0.85, route P95 of moving badas_risk)", moving_gate_mps: 2.0} | |
| producer: | |
| script: /home/USER/cwm3/data/build_pressure_targets.py | |
| lines: "grid_cols (AST recovery of grid_s14 COLS, READ_COLS asserted index >= 12); route_pressure (families, validity, margins); first_onset; gather_route; build_split (uid/t alignment < 0.05 s asserted); sensitivity (val sweep)" | |
| report: /home/USER/cwm3/data/report_targets_pr.py -> results/tables/targets_pr.md | |
| tests: "/home/USER/cwm3/tests/test_targets_causal.py (no-future-leak into P0/M0/S0, per-step causality, contract vs targets_demand: row order, ttc/ttc_drop/badas identical)" | |
| source_files: | |
| - "/home/USER/explore/s14_corr/cache/grid10/<uid>.npz (columns read: vEgo 12, lane_center_offset 21, lane_width 22, lane_valid 23, lead_dRel 24, lead_vRel 25, lead_vLead 26, lead_valid 27, badas_risk 28, ttc 29, lane_off 30; columns 0-11 never read)" | |
| - /home/USER/s12_wm/results/targets_{regime}_{split}.npz (anchors) | |
| can_whitelist: "lead_* <- radar.csv leadOne_dRel/vRel/vLead (+status as mask); lane_* <- planning.csv laneLeft_y/laneRight_y (+probs as mask); vEgo <- vehicle_dynamics.csv; all via canspec.can_features (grid10 C block). vEgo used only as moving gate and headway normaliser." | |
| dms_lineage: none | |
| causality: future_target # P0/M0/S0 causal at t (tests); P future steps read samples <= their own time; badas route quantile = label definition over the whole route (as D) | |
| time_base: frame/20 (10 Hz grid; anchors 0.1 s s12 grid, exact alignment) | |
| coverage: {manual_train: {N: 632463, prev_steps: {ttc: 0.0126, ttc_drop: 0.0141, cut_in: 0.0252, lead_braking: 0.0081, lane_excursion: 0.0304, badas: 0.0527}, base_rate_3s: {ttc: 0.0224, ttc_drop: 0.0532, cut_in: 0.0525, lead_braking: 0.0396, lane_excursion: 0.0342, badas: 0.0907}, valid_frac_steps: {radar_families: 0.987, lane_excursion: 0.396, badas: 0.562}}, manual_val: {N: 70330, base_rate_3s: {ttc: 0.0373, ttc_drop: 0.0718, cut_in: 0.0575, lead_braking: 0.0322, lane_excursion: 0.0135, badas: 0.085}}, manual_test: {N: 512934, base_rate_3s: {ttc: 0.0222, ttc_drop: 0.0552, cut_in: 0.0512, lead_braking: 0.056, lane_excursion: 0.0199, badas: 0.0889}}, engaged_train: {N: 824859, base_rate_3s: {ttc: 0.0084, ttc_drop: 0.0323, cut_in: 0.0568, lead_braking: 0.0492, lane_excursion: 0.0061, badas: 0.0644}}, engaged_val: {N: 110948, base_rate_3s: {ttc: 0.0021, ttc_drop: 0.0107, cut_in: 0.0587, lead_braking: 0.0176, lane_excursion: 0.0025, badas: 0.0356}}, engaged_test: {N: 451840, base_rate_3s: {ttc: 0.0039, ttc_drop: 0.0319, cut_in: 0.0756, lead_braking: 0.0567, lane_excursion: 0.0027, badas: 0.0533}}} | |
| status: materialized | |
| allowed_as_input: "M0 / S0 / P0 yes (causal anchor state); P, P_first targets only" | |
| notes: | |
| - "lane_excursion is valid only while both lane-line probabilities >= 0.5: crossings during which openpilot drops a line are invalid, not negative (under-detection disclosed)." | |
| - "lead_braking threshold chosen against the val noise floor of the 1.0 s backward vLead difference on a steadily tracked lead (P5 -1.25 / P2 -2.0 / P1 -2.8 m/s^2); the first draft (0.5 s, -1.5) sat inside the noise (10 % of anchors) and was replaced before any full build was used." | |
| # ------------------------------------------------------------------------------------------------ | |
| response_targets: | |
| description: Graded VEHICLE RESPONSE R[N,25] in {0 none, 1 mild, 2 hard} on the s12 anchor grid from brakePressed / aEgo / 2-sample-lagged steer rate; `Resp = R >= 1` is bit-identical to cwm2 targets_demand Resp (asserted on every split at build time). | |
| files: /home/USER/cwm3/results/targets_response/response_{manual,engaged}_{train,val,test}.npz (+ build_stats_latest.json, sensitivity_val_<utc>.csv, run_build_response_targets_<utc>.json) | |
| arrays: | |
| R/Rvalid: "[N,25] u8 / bool max grade over the two 10 Hz samples of each 0.2 s step" | |
| R0/R0valid: "[N] u8 / bool at the anchor (samples k-1, k)" | |
| Bits/Bits0: "[N,25]/[N] u8 1 brakePressed, 2 aEgo<-0.8, 4 |sr_c|>30, 8 aEgo<-2.5, 16 |sr_c|>100" | |
| Resp: "[N,25] bool = (R>=1) & Rvalid (cwm2 chain)" | |
| R_first_any/R_first_hard: "[N] int16 first-passage step (-1 none, -2 anchor active/invalid)" | |
| rules: {mild: "brakePressed > 0.5 | aEgo < -0.8 m/s^2 | |sr_c| > 30 deg/s (analyze_safety.py:72-77)", hard: "aEgo < -2.5 m/s^2 | |sr_c| > 100 deg/s", steer_lag_samples: 2} | |
| producer: | |
| script: /home/USER/cwm3/data/build_response_targets.py | |
| lines: "route_response (sr_c lag, bits, grades); gather_response; check_against_cwm2 (bit-identity); sensitivity" | |
| tests: "/home/USER/cwm3/tests/test_targets_causal.py (steer-rate lag: samples k-1,k never read at the anchor, k-2 read; future-leak; Resp identity)" | |
| source_files: | |
| - "/home/USER/explore/s14_corr/cache/grid10/<uid>.npz (columns read: vEgo 12, aEgo 13, steer_rate 15, brakePressed 20)" | |
| - /home/USER/s12_wm/results/targets_{regime}_{split}.npz | |
| dms_lineage: none | |
| causality: future_target # R0/Bits0 causal (lagged steer rate); R future steps causal at their own time | |
| time_base: frame/20 (10 Hz) | |
| coverage: {manual_train: {grade_none: 0.7136, grade_mild: 0.2391, grade_hard: 0.0473, R0_any: 0.2828, R0_hard: 0.0502, onsets_3s_any: "122006/453577", onsets_3s_hard: "66723/600743"}, manual_val: {grade_mild: 0.216, grade_hard: 0.0477, onsets_3s_any: "11461/52053", onsets_3s_hard: "6361/66806"}, manual_test: {grade_mild: 0.2157, grade_hard: 0.0357, onsets_3s_any: "73325/387583", onsets_3s_hard: "37730/493765"}, engaged_train: {grade_mild: 0.0712, grade_hard: 0.004, onsets_3s_any: "67437/768239", onsets_3s_hard: "8759/822105"}, engaged_val: {grade_mild: 0.0253, grade_hard: 0.0011, onsets_3s_any: "4656/108184", onsets_3s_hard: "291/110727"}, engaged_test: {grade_mild: 0.0348, grade_hard: 0.0017, onsets_3s_any: "26309/437663", onsets_3s_hard: "1857/451189"}, cwm2_resp_identical: "True on all 6 (regime, split) files"} | |
| status: materialized | |
| allowed_as_input: "R0 / Bits0 yes (causal anchor state); R, R_first_* targets only" | |
| notes: | |
| - "The old D ego-motion families (|steer_rate| > 100, aEgo < -2) are strict subsets of the R >= 1 rule: every ego-demand onset is a response by construction (results/tables/targets_pr.md section 4)." | |
| # ------------------------------------------------------------------------------------------------ | |
| behaviour_targets: | |
| description: Driver-behaviour event chains B[N,25,3] {hand_return, hand_leave, head_turn_onset} on the s12 anchor grid, copied per row from the CAUSAL kinematics where they exist (kin_causal clip windows; route-level set when complete) with the old non-causal cwm2 kin as a DISCLOSED fallback (B_source). | |
| files: /home/USER/cwm3/results/targets_behaviour/behaviour_{manual,engaged}_{train,val,test}.npz (+ build_stats_latest.json, run_build_behaviour_targets_<utc>.json) | |
| arrays: "B u8[N,25,3], Bvalid[N,25,3], B0 f32[N,3] (chain state at t, NaN unknown), Bstate f32[N,25,2], Bstate0[N,2], B_first int16[N,3], B_source u8[N] {0 none, 1 causal_clip, 2 old_noncausal, 3 causal_routes}, Bc_only/Bc_valid (causal-only copy), events, states" | |
| producer: | |
| script: /home/USER/cwm3/data/build_behaviour_targets.py | |
| lines: "build_split (priority causal_routes > causal_clip > old_noncausal; --use-routes only when results/targets_kin_causal_routes is complete)" | |
| source_files: | |
| - /home/USER/cwm3/results/targets_kin_causal/kin_causal_{regime}_{split}.npz | |
| - /home/USER/cwm2/results/targets_kin/kin_{regime}_{split}.npz (fallback, non_causal_roi) | |
| - /home/USER/s12_wm/results/targets_{regime}_{split}.npz | |
| dms_lineage: none | |
| causality: "future_target; source per row: causal_clip = causal ROI + causal references; old_noncausal = route-median ROI incl. the future (disclosed)" | |
| time_base: frame/20 | |
| coverage: {manual_train: {causal_clip: 305716, old_noncausal: 326597, none: 150, base_rate_3s_causal: {hand_return: 0.5939, hand_leave: 0.1639, head_turn_onset: 0.2562}, base_rate_3s_old: {hand_return: 0.5449, hand_leave: 0.1, head_turn_onset: 0.1837}}, engaged_train: {causal_clip: 261318, old_noncausal: 547986, none: 15555, base_rate_3s_causal: {hand_return: 0.3635, hand_leave: 0.0671, head_turn_onset: 0.1749}, base_rate_3s_old: {hand_return: 0.3283, hand_leave: 0.0414, head_turn_onset: 0.1515}}, manual_val: {causal_clip: 0, old_noncausal: 69418, none: 912}, manual_test: {causal_clip: 0, old_noncausal: 512765, none: 169}, engaged_val: {causal_clip: 0, old_noncausal: 97018, none: 13930}, engaged_test: {causal_clip: 0, old_noncausal: 451816, none: 24}} | |
| status: materialized | |
| allowed_as_input: "B0 / Bstate0 (causal rows only, B_source in {1,3}); B targets only; old_noncausal rows are targets-with-disclosure, never inputs" | |
| notes: | |
| - "No pose pipeline is run here. Causal coverage exists on train routes only (48 % manual / 32 % engaged rows); val/test are 100 % old_noncausal until the route-level causal set lands (rebuild with --use-routes)." | |
| # ------------------------------------------------------------------------------------------------ | |
| dms_teacher_targets: | |
| description: openpilot DMS weak-teacher SOFT TARGETS (face yaw/pitch, eye-open, blink, distracted_soft, gaze_off_soft) on the s12 anchor grid for TRAIN and VAL rows only, with faceProb >= 0.5 gating, 10 Hz hold-value (stale) filtering and route reliability weights; plus clip-level DMS alert flags for the 26,578 TRAIN-device clips (mining only). | |
| files: | |
| - /home/USER/cwm3/results/targets_dms_teacher/dms_{manual,engaged}_{train,val}.npz | |
| - /home/USER/cwm3/results/targets_dms_teacher/clip_dms_flags_train.csv | |
| - /home/USER/cwm3/results/tables/dms_teacher.md, build_stats_latest.json, run_dms_teacher_targets_<utc>.json (dms_fields_used) | |
| arrays: "T0 f32[N,6] / T0valid, T f16[N,25,6] / Tvalid, Th f16[N,20,6] / Thvalid (t-3.8..t @5 Hz), w_route f32[N], norm_mean/norm_std[6] (train anchors), channels, uid/t/dongle" | |
| channels: [face_yaw, face_pitch, eye_open, blink, distracted_soft, gaze_off_soft] | |
| rules: {faceprob_min: 0.5, stale_identical_samples: 3, gaze_off_yaw_rad: 0.4, soft_window_samples: 11, soft_min_valid: 6, clip_alert_sustain_s: 1.5, route_weight: "valid fraction over moving samples x (1 - stale fraction)"} | |
| producer: | |
| script: /home/USER/cwm3/weak/dms_teacher_targets.py # THE ONLY DMS READER (with weak/dms_teacher_pretrain.py later) | |
| lines: "route_dms (validity, stale runs, soft channels, alerts); gather_dms; clip_flags (train-device assertion); main (refuses --splits test)" | |
| contract: /home/USER/cwm3/docs/weak_teacher.md (pretraining contract + K5 shifted-twin identity-leak design) | |
| tests: /home/USER/cwm3/tests/test_no_dms_inputs.py (single reader in tree; no weak/ import from models/train/eval/data/common) | |
| source_files: | |
| - "/home/USER/explore/s14_corr/cache/grid10/<uid>.npz (columns 0-6 face_yaw, face_pitch, face_roll, blink, eye, isDistracted, faceProb <- s14_corr/dstate.route_dstate <- driver_state.csv; plus vEgo 12)" | |
| - /home/USER/cwm2/private/clip_map_full.json (clip flags) | |
| dms_lineage: target_only # FORBIDDEN_as_input; teacher for U pretraining and clip selection only | |
| causality: future_target # T0/Th at or before t; T future; soft windows centred (targets, not inputs) | |
| time_base: frame/20 (10 Hz) | |
| coverage: {manual_train: {N: 632463, routes_with_dms: "428/440", T0valid: 0.9615, Tvalid_all25: 0.9461, w_route_mean: 0.9629, distracted_soft_gt05: 0.1343, gaze_off_gt05: 0.0823, eye_open_lt05: 0.4813}, manual_val: {N: 70330, routes_with_dms: "44/46", T0valid: 0.9667, w_route_mean: 0.9671, distracted_soft_gt05: 0.053, gaze_off_gt05: 0.0067}, engaged_train: {N: 824859, routes_with_dms: "288/299", T0valid: 0.9159, w_route_mean: 0.9146, distracted_soft_gt05: 0.0972, gaze_off_gt05: 0.0657}, engaged_val: {N: 110948, routes_with_dms: "29/31", T0valid: 0.7703, w_route_mean: 0.769, distracted_soft_gt05: 0.0482, gaze_off_gt05: 0.0054}, stale_frac_routes_mean: 0.0007, clip_flags_train: {n_clips: 26578, dms_present: 0.9756, alert_distract: 0.2679, alert_gaze: 0.1922, alert_any: 0.3059}, test_rows_written: false} | |
| status: materialized (targets); pretraining script to_build (GPU) | |
| allowed_as_input: no | |
| notes: | |
| - "eye_open is openpilot's leftEyeProb/rightEyeProb minimum (eye visibility/openness probability), not a validated eyes-closed measure; 33-48 % of valid anchors have eye_open < 0.5." | |
| - "Train routes show 2-3x the distracted_soft rate of val routes (0.13 vs 0.05 manual): route composition differs by split; the teacher is used for pretraining only, never compared across splits as a result." | |
| # ------------------------------------------------------------------------------------------------ | |
| mining_strata_v1: | |
| description: Clip-mining strata index v1 (one row per clip; 26,578 train-device clips + 15,029 held-out val/test episodes) with data-derived strata flags, a TRAIN-only active score, and the proposed round-2 human-labelling draw (train 400 / val 100 / test 100, seed 0). SELECTION artefact only. | |
| files: | |
| - /home/USER/cwm3/results/mining/strata_v1.csv | |
| - /home/USER/cwm3/results/mining/round2_draw_v1.csv | |
| - /home/USER/cwm3/results/tables/mining_v1.md, run_mine_hard_clips_<utc>.json | |
| columns: "clip_id, idx, uid, dongle, t0, regime, ctrl, split, pool, pool_family/pool_stratum (legacy s15 strata, disclosure), existing_label(_protocol), excluded_reason, video_local, route_clock_hour, night_proxy, P_<fam>_h5 / P0_<fam> (6 road-pressure families), D_ego_h5, D_any_h5, demand_any_h5, demand_at_anchor, response_after_demand, demand_resp, demand_noresp, hard_response_h5, resp_any_h5, rare_road_h5, hand_leave_h5/hand_return_h5/head_turn_h5, hands_off_at_anchor, head_turned_at_anchor, kin_source {causal_clip, old_noncausal, none}, kin_valid_frac, kin_anchor_dt, hand_head_event, co_occupant_present, driver_side_uncertain, hands_missing_n, roi_selection_rule (train only), dms_alert_any/distract/gaze, dms_valid_frac (train only, derived flags), model_disagreement (NaN), primary_stratum, active_score (train only), n_flags, near_excluded_10s, eligible" | |
| producer: | |
| script: /home/USER/cwm3/weak/mine_hard_clips.py | |
| lines: "build_pool (opaque ids: full salt cwm2-full-v1, held-out salt cwm2-heldout-v1, verified on the 200 gold clips); exclusions; route_cache_entry (P from build_pressure_targets, R from build_response_targets, D from cwm2 build_demand_targets); kin_lookup / nearest_old; stratum (priority rare_road > demand_noresp > demand_resp > hand_head > dms_alert(train) > occlusion_night > background); take (regime-alternating stratified draw, device cap, 10 s same-event guard)" | |
| source_files: | |
| - /home/USER/cwm2/private/{clip_map_full,clip_map_heldout,clip_map,heldout_episodes}.json | |
| - /home/USER/s15_cockpit/{annotate_episodes_v2,annotations_v2,annotations_v2_cross}.json (episode fields idx/uid/dongle/t0/regime/ctrl only; the `dm` block is never read) | |
| - /home/USER/cwm2/annotation_human/clips_h5.json (round-1 queue, excluded) | |
| - /home/USER/explore/s14_corr/cache/grid10/<uid>.npz (CAN + R block columns via the three builders) | |
| - /home/USER/cwm3/results/targets_kin_causal/kin_causal_{manual,engaged}_train.npz; cwm2/results/targets_kin/kin_*.npz (fallback) | |
| - /home/USER/cwm3/results/targets_dms_teacher/clip_dms_flags_train.csv (derived DMS flags, train only) | |
| - /home/USER/cwm3/results/roi/<clip_id>.json, results/baton_leaves.json | |
| dms_lineage: selection_only # dms_alert_* columns exist for TRAIN clips only; val/test draws use data-derived strata only | |
| causality: n/a (clip window flags incl. the outcome window; selection, never input) | |
| time_base: frame/20 (clip t0 on the 10 Hz grid) | |
| coverage: {pool: {train: 26578, val: 2272, test: 12757}, eligible: {train: 19252, val: 1637, test: 9647}, exclusions: {labelled_v2: 4650, labelled_cross: 248, h5_round1_queue: 400, pilot_187: 187, heldout_gold_200: 200}, primary_stratum_train: {rare_road: 7516, demand_noresp: 3666, demand_resp: 6113, hand_head: 3482, dms_alert: 2148, occlusion_night: 1334, background: 2319}, primary_stratum_val: {rare_road: 661, demand_noresp: 401, demand_resp: 500, hand_head: 289, occlusion_night: 30, background: 391}, primary_stratum_test: {rare_road: 4049, demand_noresp: 2530, demand_resp: 2977, hand_head: 1240, occlusion_night: 15, background: 1946}, kin_source_train: {causal_clip: 23449, old_noncausal: 4, none: 3125}, draw: {train: 400, val: 100, test: 100, shortfalls: "val/hand_head 3 -> background refill 3"}, draw_kin_source: {train_causal_clip: 375, val_old_noncausal: 91, test_old_noncausal: 83}, video_local_in_draw: {train: 397, val: 92, test: 91}, night_proxy_available_clips: 4296} | |
| status: materialized | |
| allowed_as_input: no | |
| notes: | |
| - "model_disagreement is NaN everywhere: needs a train-row inference pass of the cwm3 branches (GPU); no model score touches val/test rows." | |
| - "Image luminance (night/occlusion) not computed: roi.json / index.json carry no pixel statistics, frames are in remote shards; night_proxy = clock hour of date-named routes only (4,296 / 41,607 clips)." | |
| - "Held-out draw rows need frame packages (needs_frames = True) before labelling; held-out clips are never sent to a VLM / cloud." | |
| # ------------------------------------------------------------------------------------------------ | |
| vis_pooled_streams_v2: | |
| description: "PACK VERSION 2 of the pooled V-JEPA2 streams Vf (front) / Vc (cabin) -> PCA-256 (vf256 / vc256), rebuilt on the frame/20 axis: every s5 clip is re-indexed from its container-fps label to the true frame/20 time of the END frame it actually read; v1 (results/pack, s12_wm/results/vis_*) is left untouched." | |
| files: | |
| - /home/USER/cwm3/results/pack_v2/{vf256,vc256}_{manual,engaged}_{train,val,test}.npz (v1 keys Z f16[N,256], row_ok, pca_file, pca_sha256, source, targets, n, stream, roi + axis, version=2) | |
| - /home/USER/cwm3/results/pack_v2/pca_{Vf,Vc}_256.npz (re-fit, manual train only, 200k seeded rows, exact covariance eigh) | |
| - /home/USER/cwm3/results/pack_v2/container_fps.json (per route x camera: fps, n_frames, source) | |
| - /home/USER/cwm3/results/pack_v2/alignment.json, /home/USER/cwm3/results/tables/pack_v2_alignment.md | |
| producer: | |
| script: /home/USER/cwm3/data/build_pack_v2.py | |
| lines: "fps_table (cv2 CAP_PROP_FPS locally, ffprobe avg_frame_rate over SSH for remote-only leaves, clip_map cross-check); S5.get (frame_end = round(ts*fps), t_true = frame_end/20); pool_rows (featpool.FeatStore.pool arithmetic: clips with END in [t-2,t], >=3, [mean,last,last-first] float32 -> f16); fit_pca; main (row_ok = both cameras as materialize_s12.py)" | |
| finding: "cwm3/probes/audit_features.py audit A -> results/tables/latent_audit.md, docs/latent_quality.md; s5_features/s5_extract_v4.py:101 `fps = float(vr.get_avg_fps()) or 20.0`" | |
| test: /home/USER/cwm3/tests/test_pack_v2_alignment.py | |
| source_files: | |
| - /home/USER/s5_features/vjepa2g384/{front,cabin}/<uid>.npz {timestamps f32 (container-fps clip END, 0.5 s grid from 2.0), features f16[n,1408]} | |
| - "<BATON leaf>/{qcamera,dcamera}.mp4 headers (container avg fps; identical between cv2, decord and ffprobe, verified 2026-09-10)" | |
| - /home/USER/s12_wm/results/targets_{regime}_{split}.npz (row order; uid/t asserted equal) | |
| dms_lineage: none | |
| causality: causal # clip END frame <= anchor frame on the frame/20 axis; v1 could be stale by up to ~18 s (never future except 0.1 %) | |
| time_base: frame/20 (v2); v1 was container fps (s5 label) | |
| units: dimensionless PCA-256 of the [mean, last, last-first] pooled V-JEPA2 latent | |
| fps_table: {n_routes: 644, front: {cv2_local: 599, ffprobe_remote: 41, missing_video: 4, fps_eq_20: 49, fps_ne_20: 591, fps_quantiles_0_5_50_95_100: [19.6742, 19.9605, 19.9997, 20.0013, 20.0616]}, cabin: {cv2_local: 603, ffprobe_remote: 41, fps_eq_20: 456, fps_ne_20: 188}, clip_map_crosscheck: '864 route-cameras, max |dfps| = 0.0'} | |
| coverage: {manual_train: {row_ok_v2: 629527, row_ok_v1: 629528, N: 632463}, manual_val: {row_ok_v2: 69423, row_ok_v1: 69423, N: 70330}, manual_test: {row_ok_v2: 511642, row_ok_v1: 511643, N: 512934}, engaged_train: {row_ok_v2: 803704, row_ok_v1: 803704, N: 824859}, engaged_val: {row_ok_v2: 97032, row_ok_v1: 97034, N: 110948}, engaged_test: {row_ok_v2: 446002, row_ok_v1: 446002, N: 451840}, pca_evr256: {Vf_v2: 0.9753, Vf_v1: 0.9752, Vc_v2: 0.9740, Vc_v1: 0.9740, n_fit: 200000}} | |
| seqcheck_v2: {definition: 'route x 300 s window cross-correlation of frame/20 frontfeat clips vs s5 clips (lags +-20 s, 0.25 s grid); resolvable = peak minus best score >= 0.5 s away >= 0.01', windows_total: 2537, routes_total: 632, unresolvable_flat_windows: 1922, v1_all: {le_0p25: 0.8415, ge_1s: 0.1080, ge_3s: 0.0461, max_s: 11.75, routes_with_window_ge_1s: 62}, v2_all: {le_0p25: 0.9764, le_0p5: 0.9807, ge_1s: 0.0020, ge_3s: 0.0000, max_s: 1.0, routes_with_window_ge_1s: 5}, v1_resolvable: {n_windows: 614, le_0p25: 0.9902, ge_1s: 0.0098, max_s: 3.25}, v2_resolvable: {n_windows: 615, n_routes: 348, le_0p25: 1.0000, le_0p25_anchor_weighted: 1.0000, max_s: 0.25, fps_eq_20_windows: 91, fps_ne_20_windows: 524}, acceptance_le_0p25_ge_99p5pct_of_resolvable_anchors: PASS, known_exception: 'driver_167__route_1__route_0-62 (remote-only, fps 19.97522): route-constant +0.75 s offset in low-sharpness windows, present in v1 at t~0 too; s5-implied frame count (75456..75466] vs current file 75451 -> s5 read a different file version; not an fps effect, not corrected, flagged for s5 re-extraction'} | |
| alignment: {analytic_v1_front_abs_lag_ge_1s: {manual_train: 0.0835, manual_val: 0.2181, manual_test: 0.0760, engaged_train: 0.1668, engaged_val: 0.2533, engaged_test: 0.1014}, analytic_v1_front_abs_lag_ge_3s: {manual_train: 0.0150, manual_val: 0.0662, manual_test: 0.0419, engaged_train: 0.0880, engaged_val: 0.1713, engaged_test: 0.0366}, analytic_v1_front_max_s: {manual_train: 11.00, manual_val: 11.90, manual_test: 12.00, engaged_train: 10.70, engaged_val: 11.80, engaged_test: 10.05}, analytic_v1_cabin_abs_lag_ge_1s: {manual_train: 0.0078, manual_val: 0.0014, manual_test: 0.0206, engaged_train: 0.0046, engaged_val: 0.0009, engaged_test: 0.0589}, v1_future_content_front: {manual_train: 0.0227, manual_val: 0.0045, manual_test: 0.0324, engaged_train: 0.0306, engaged_val: 0.0010, engaged_test: 0.1257}, analytic_v2_lag: '0 for 100 % of rows by construction; v2 staleness in [0, 0.5) s, future-content 0', routes_changed_front: {manual_train: '85/437', manual_val: '5/46', manual_test: '22/157', engaged_train: '56/297', engaged_val: '4/31', engaged_test: '17/100'}, identical_to_v1_under_v1_basis: {manual_train: {Vf: 0.6464, Vc: 0.8131}, manual_val: {Vf: 0.6169, Vc: 0.8934}, manual_test: {Vf: 0.6745, Vc: 0.8725}, engaged_train: {Vf: 0.6504, Vc: 0.8350}, engaged_val: {Vf: 0.6154, Vc: 0.8930}, engaged_test: {Vf: 0.6243, Vc: 0.8438}}, empirical_per_anchor_argmax: 'exact (1.0000 within 0.25 s) on fps == 20 routes; confounded by neighbouring clips on fps != 20 routes (82-89 %); see seqcheck in alignment.json for the acceptance metric', seqcheck: {definition: 'route x 300 s window cross-correlation of frame/20 frontfeat clips vs s5 clips (lags ±20 s, 0.25 s grid); resolvable = peak minus best score >= 0.5 s away >= 0.01', windows_total: 2537, routes_total: 632, unresolvable_flat_windows: 1922, v1_all: {le_0p25: 0.8415, ge_1s: 0.1080, ge_3s: 0.0461, max_s: 11.75, routes_with_window_ge_1s: 62}, v2_all: {le_0p25: 0.9764, le_0p5: 0.9807, ge_1s: 0.0020, ge_3s: 0.0000, max_s: 1.0, routes_with_window_ge_1s: 5}, v1_resolvable: {n_windows: 614, le_0p25: 0.9902, ge_1s: 0.0098, max_s: 3.25}, v2_resolvable: {n_windows: 615, n_routes: 348, le_0p25: 1.0000, le_0p25_anchor_weighted: 1.0000, max_s: 0.25, fps_eq_20_windows: 91, fps_ne_20_windows: 524}, acceptance_le_0p25_ge_99p5pct_of_resolvable_anchors: PASS, known_exception: 'driver_167__route_1__route_0-62 (remote-only, fps 19.97522): route-constant +0.75 s offset in low-sharpness windows, present in v1 at t~0 too; s5-implied frame count (75456..75466] vs current file 75451 -> s5 read a different file version; not an fps effect, not corrected, flagged for s5 re-extraction'}} | |
| status: materialized | |
| allowed_as_input: yes | |
| notes: | |
| - "Under the v1 PCA basis, v2 pooled vectors are byte-identical to v1 on routes whose container fps == 20 (identity check in alignment.json); the shipped v2 packs use the re-fitted basis, so their Z differ everywhere by construction." | |
| - "Consumers: cwm3/data/cwm3_dataset.py reads results/pack/{vf256,vc256}; switching to pack_v2 is a path change owned by the training agents." | |
| # ------------------------------------------------------------------------------------------------ | |
| future_front_latent_v2: | |
| description: "Future forward-camera latent target F[N,5,256] at t+1..t+5 s rebuilt on the frame/20 axis (v2); v1 = s12_wm/results/future_{regime}_{split}.npz (read by cwm3_dataset.py:126-128 as F/Fok) whose s5 label drift made F(t+k) point at PAST content on drifting routes." | |
| files: | |
| - /home/USER/cwm3/results/pack_v2/future_{manual,engaged}_{train,val,test}.npz {F f16[N,5,256], ok bool[N,5], pca_file, pca_sha256, targets, axis, version=2} | |
| - /home/USER/cwm3/results/pack_v2/future_pca_v2.npz {mu[1408], W[1408,256], evr, n_fit, train_only=True} | |
| producer: | |
| script: /home/USER/cwm3/data/build_pack_v2.py --phase future | |
| lines: "future PCA re-fit on TRAIN routes only (manual ∪ engaged train uids; 100k vectors, SVD on 50k — v1 fitted on ALL routes: s12_wm/materialize_oracle_future.fit_future_pca); mat_future rule reproduced on t_true: last t_true <= t+k with |t_true-(t+k)| <= 0.6" | |
| source_files: | |
| - /home/USER/s5_features/vjepa2g384/front/<uid>.npz | |
| - /home/USER/cwm3/results/pack_v2/container_fps.json | |
| dms_lineage: none | |
| causality: future_target | |
| time_base: frame/20 (v2) | |
| units: dimensionless (PCA-256 latent) | |
| coverage: {manual_train: {ok_v2: 0.9948, ok_v1: 0.9949, ok_masks_equal: 0.9999, v1_target_content_in_past: 0.0357, v1_past_at_plus1s: 0.1036, same_clip_pick: 0.7845}, manual_val: {ok_v2: 0.9996, ok_v1: 0.9997, ok_masks_equal: 1.0000, v1_target_content_in_past: 0.1046, v1_past_at_plus1s: 0.2327, same_clip_pick: 0.7184}, manual_test: {ok_v2: 0.9974, ok_v1: 0.9975, ok_masks_equal: 1.0000, v1_target_content_in_past: 0.0467, v1_past_at_plus1s: 0.0827, same_clip_pick: 0.8374}, engaged_train: {ok_v2: 0.9926, ok_v1: 0.9926, ok_masks_equal: 1.0000, v1_target_content_in_past: 0.1038, v1_past_at_plus1s: 0.1754, same_clip_pick: 0.7568}, engaged_val: {ok_v2: 0.9988, ok_v1: 0.9988, ok_masks_equal: 1.0000, v1_target_content_in_past: 0.1599, v1_past_at_plus1s: 0.2321, same_clip_pick: 0.7429}, engaged_test: {ok_v2: 0.9869, ok_v1: 0.9869, ok_masks_equal: 1.0000, v1_target_content_in_past: 0.0514, v1_past_at_plus1s: 0.1094, same_clip_pick: 0.7375}, future_pca_v2: {n_fit: 100000, n_train_routes: 437, evr256_of_1408: 0.9909, train_only: true}} | |
| status: materialized | |
| allowed_as_input: no (future); target/posterior only | |
| # ------------------------------------------------------------------------------------------------ | |
| regionpca256_road_stream: | |
| description: "Spatially resolved road stream (pack v2): the frontfeat REGION tensor (16 regions x 1408) of the causal window ending at t, flattened to 22,528-d and reduced by a PCA-256 fitted on manual TRAIN rows only; two vectors per anchor -> [N,512]: last (last clip with END in [t-2,t]) and mean (PCA vectors of the clips with END in [t-8,t])." | |
| files: | |
| - /home/USER/cwm3/results/pack_v2/regionpca256_{manual,engaged}_{train,val,test}.npz {vector f16[N,512], ok bool[N], n_last_window, n_hist, axis, version=2, pca_file, pca_sha256, targets, layout, window_rule} | |
| - /home/USER/cwm3/results/pack_v2/pca_region_256.npz {mu[22528], W[22528,256], evr, n_fit} | |
| - /home/USER/cwm3/results/pack_v2/regionpca256_report.json, /home/USER/cwm3/results/tables/regionpca256_probe.md | |
| producer: | |
| script: /home/USER/cwm3/data/build_regionpca256.py | |
| lines: "windows (v1 pooled-stream rule: >= 3 clips with END in [t-2,t]; history [t-8,t]); fit (sklearn IncrementalPCA(256), 200k seeded manual-train rows, streamed region reads); pack (per-route projection, cumsum mean); probe (probes.common.ridge_fit_predict on CPU, alpha on VAL AP, device-cluster bootstrap on TEST)" | |
| motivation: "docs/latent_quality.md §2/§8: spatial pooling before PCA loses lane_excursion; the flattened spatial PCA-256 keeps it" | |
| source_files: | |
| - /home/USER/s12_wm/cache/frontfeat/<uid>.npz {t f32 (clip END, 0.5 s grid on frame/20 — extract_crop.py uses round(t*20) frames), region f16[N,16,1408]} | |
| - /home/USER/s12_wm/results/targets_{regime}_{split}.npz (row order = vf256) | |
| dms_lineage: none | |
| causality: causal # clip END <= t; frontfeat is natively on frame/20 (no container-fps drift), so no re-indexing was needed | |
| time_base: frame/20 | |
| units: dimensionless PCA-256 latent (x2) | |
| pca: {n_fit: 200000, d_in: 22528, k: 256, evr256: 0.9335, evr_first8: [0.19, 0.117, 0.07, 0.061, 0.058, 0.037, 0.031, 0.025]} | |
| coverage: {manual_train: {N: 632463, ok: 629526, ok_frac: 0.9954, both_with_vf256: 629526}, manual_val: {N: 70330, ok: 70330, ok_frac: 1.0000, both_with_vf256: 69423}, manual_test: {N: 512934, ok: 511773, ok_frac: 0.9977, both_with_vf256: 511642}, engaged_train: {N: 824859, ok: 819189, ok_frac: 0.9931, both_with_vf256: 803704}, engaged_val: {N: 110948, ok: 110946, ok_frac: 1.0000, both_with_vf256: 97032}, engaged_test: {N: 451840, ok: 446002, ok_frac: 0.9871, both_with_vf256: 446002}} | |
| probe_identical_rows: {protocol: 'ridge, fit on TRAIN probe rows (50k), alpha selected on VAL AP, PR-AUC on VAL and TEST, device-cluster bootstrap CI (200)', manual_lane_excursion: {regionpca256_test_ap: 0.354, regionpca256_test_ci: [0.103, 0.414], vf256_v2_test_ap: 0.181, regionpca256_val_ap: 0.083, vf256_v2_val_ap: 0.055, n_test: 21126, pos_test: 429}, manual_ttc: {regionpca256_test_ap: 0.342, regionpca256_test_ci: [0.211, 0.450], vf256_v2_test_ap: 0.325, regionpca256_val_ap: 0.317, vf256_v2_val_ap: 0.291, n_test: 39767, pos_test: 583}, engaged_lane_excursion: {regionpca256_test_ap: 0.484, regionpca256_test_ci: [0.154, 0.671], vf256_v2_test_ap: 0.229, regionpca256_val_ap: 0.387, vf256_v2_val_ap: 0.375, n_test: 28184, pos_test: 171}, engaged_ttc: {regionpca256_test_ap: 0.287, regionpca256_test_ci: [0.197, 0.488], vf256_v2_test_ap: 0.271, regionpca256_val_ap: 0.140, vf256_v2_val_ap: 0.092, n_test: 39483, pos_test: 87}, reference_latent_quality: {manual_lane_region_pca256: 0.352, manual_lane_vf256: 0.160, engaged_lane_region_pca256: 0.558, engaged_lane_vf256: 0.218}, verdict: 'lane_excursion retained: manual 0.354 (>= 0.352 target) vs vf256 0.181; engaged 0.484 vs 0.229 (2.1x vf256, below the 0.558 region-subset reference; CI [0.154, 0.671]); ttc not worse than vf256 (0.342 vs 0.325, 0.287 vs 0.271)'} | |
| status: materialized | |
| allowed_as_input: yes | |
| # ------------------------------------------------------------------------------------------------ | |
| kin_causal_routes_targets_v2: | |
| description: "kin_causal_routes_targets rebuilt with the v2 route pose (population driver-side prior on the 74 re-extracted routes, v1 pose elsewhere); same keys/contract; the K4 input set." | |
| files: /home/USER/cwm3/results/targets_kin_causal_routes_v2/{kin_causal,kinhist_causal}_{manual,engaged}_{train,val,test}.npz (+ route_refs.npz, build_stats_latest.json, qc.json, qc_per_route.csv, driver_box_suspect_routes.json) | |
| producer: {script: "/home/USER/cwm3/data/build_kin_causal.py --source routes --pose-dir results/pose_causal_routes_v2 --out-dir results/targets_kin_causal_routes_v2", qc: "qc_kin_causal.py --new-dir ...; qc_driver_box_suspects.py --kin-dir ... --pose-dirs v2 v1", layout_test: "KIN_ROUTES_DIR=... tests/test_kin_causal_routes_layout.py (12 passed)"} | |
| source_files: [/home/USER/cwm3/results/pose_causal_routes_v2/<uid>.npz (74), /home/USER/cwm3/results/pose_causal_routes/<uid>.npz (570)] | |
| dms_lineage: none | |
| causality: causal | |
| time_base: frame/20 (10 Hz grid) | |
| units: "as kin_causal_routes_targets" | |
| coverage: {n_routes_from_v2_pose: 74, manual_train: {row_ok: 632340, coverage: 0.9998, Kvalid_row_ok: 0.9855, Kh8_all80: 0.9479}, manual_val: {row_ok: 69423, coverage: 0.9871, Kvalid_row_ok: 0.9829, Kh8_all80: 0.9414}, manual_test: {row_ok: 512779, coverage: 0.9997, Kvalid_row_ok: 0.9852, Kh8_all80: 0.9366}, engaged_train: {row_ok: 809364, coverage: 0.9812, Kvalid_row_ok: 0.9788, Kh8_all80: 0.9595}, engaged_val: {row_ok: 97018, coverage: 0.8744, Kvalid_row_ok: 0.9960, Kh8_all80: 0.9839}, engaged_test: {row_ok: 451834, coverage: 1.0000, Kvalid_row_ok: 0.9924, Kh8_all80: 0.9703}} | |
| qc_vs_old_noncausal_v1_to_v2: {manual_train: {r_head_turn: [0.862, 0.898], r_min_hand_rest_dist: [0.561, 0.552], hands_on_agreement: [0.8853, 0.8870], head_turned_kappa: [0.770, 0.779]}, manual_val: {r_head_turn: [0.947, 0.972], r_min_hand_rest_dist: [0.602, 0.649], hands_on_agreement: [0.9310, 0.9330], head_turned_kappa: [0.809, 0.823]}, manual_test: {r_head_turn: [0.477, 0.720], r_min_hand_rest_dist: [0.146, 0.319], hands_on_agreement: [0.8648, 0.8916], head_turned_kappa: [0.525, 0.619]}, engaged_train: {r_head_turn: [0.641, 0.712], r_min_hand_rest_dist: [0.533, 0.549], hands_on_agreement: [0.9166, 0.9194], head_turned_kappa: [0.691, 0.708]}, engaged_val: {r_head_turn: [0.666, 0.976], r_min_hand_rest_dist: [0.679, 0.780], hands_on_agreement: [0.9204, 0.9338], head_turned_kappa: [0.658, 0.825]}, engaged_test: {r_head_turn: [0.414, 0.639], r_min_hand_rest_dist: [0.289, 0.537], hands_on_agreement: [0.8802, 0.9153], head_turned_kappa: [0.426, 0.637]}, suspect_routes: [80, 64], suspect_anchor_frac_test: {manual: [0.2756, 0.1787], engaged: [0.2627, 0.1402]}, reextracted_routes: {n: 74, suspects_v1: 32, now_ok: 20, still_suspect: 12}} | |
| status: materialized | |
| allowed_as_input: "Kh_c / Kh8_c / K0_c yes (causal); K_c, S_c, E_c targets only" | |
| # ------------------------------------------------------------------------------------------------ | |
| face_causal_routes_v2: | |
| description: "CAUSAL face-geometry channels from OUR OWN RTMW HALPE-136 face landmarks of the route-level causal pose (v2 pose on 74 routes, v1 elsewhere) on the s12 anchor grid; the warning head's `face` block (roadmap §B3 1b) and the candidate kin-v3 stream. Channel names use `lm_` (landmark) on purpose: no openpilot DMS quantity is read or reproduced." | |
| files: "/home/USER/cwm3/results/targets_face_causal_routes_v2/facehist_causal_{manual,engaged}_{train,val,test}.npz (+ route_face_refs.npz, build_stats_latest.json, run_build_face_causal_latest.json)" | |
| arrays: | |
| F0_c: "[N,9] f32 at t (NaN invalid)" | |
| F0valid: "[N] bool = row_ok ∧ frame validity at t" | |
| Fh8_c: "[N,80,9] f16 t-7.9..t @ 10 Hz (NaN outside / invalid)" | |
| Fh8valid: "[N,80] bool" | |
| channels: ['lm_yaw', 'lm_yaw_dev', 'lm_pitch_dev', 'lm_roll_dev', 'ear_conf_asym', 'eye_open', 'blink_rate_4s', 'gaze_off', 'gaze_off_dwell_s'] | |
| thresholds: "json (gaze_off on/off, blink, IOD, pool)" | |
| producer: {script: "/home/USER/cwm3/data/build_face_causal.py --source routes --pose-dir results/pose_causal_routes_v2 --out-dir results/targets_face_causal_routes_v2", layout_test: "tests/test_face_causal_layout.py (13 passed)", consumer: "train/warning_features_ext.face_block"} | |
| definitions: "lm_yaw = (nose_tip_x − eye_mid_x)/IOD (HALPE 56; eye centres from HALPE 62-67 / 68-73); lm_*_dev = quantity − causal expanding per-route median over MOVING valid frames <= t initialised from the device's earlier routes (build_kin_causal.expanding_median_moving, POOL_CAP 4000, N_MIN 25); ear_conf_asym = conf(left ear) − conf(right ear); eye_open = mean EAR ÷ REF_EAR; blink_rate_4s = blinks/s (eye_open < 0.6 on 1..5 frames then recovery) over 4 s; gaze_off = hysteresis on |lm_yaw_dev| with on/off = TRAIN moving-frame P90/P75 = 0.2121/0.1033 (n = 3036512); gaze_off_dwell_s = seconds in the current gaze-off run (cap 30.0 s)" | |
| validity: "box present ∧ nose conf >= 0.3 ∧ >= 5/6 landmarks per eye conf >= 0.3 ∧ IOD >= 10.0 px ∧ finite geometry ∧ references defined" | |
| source_files: | |
| - "/home/USER/cwm3/results/pose_causal_routes_v2/<uid>.npz (74 routes)" | |
| - "/home/USER/cwm3/results/pose_causal_routes/<uid>.npz (570 routes)" | |
| - "/home/USER/s12_wm/results/targets_{regime}_{split}.npz (row order / uid-t witness)" | |
| dms_lineage: none | |
| causality: causal | |
| time_base: frame/20 (10 Hz grid) | |
| units: "lm_yaw / lm_*_dev dimensionless (IOD-normalised; roll in rad), ear_conf_asym conf units, eye_open ratio to the route reference EAR, blink_rate_4s 1/s, gaze_off {0,1}, dwell s" | |
| coverage: {"n_routes": 644, "n_frames": 5939848, "valid_frame_frac": 0.9912, "routes_without_prior_pool": 162, "manual_train": {"N": 632463, "row_ok": 0.9998, "F0valid_row_ok": 0.9901, "Fh8_all80": 0.9392, "gaze_off_prev": 0.1966, "blink_rate_mean": 0.0223}, "manual_val": {"N": 70330, "row_ok": 0.9871, "F0valid_row_ok": 0.9863, "Fh8_all80": 0.9155, "gaze_off_prev": 0.1733, "blink_rate_mean": 0.0103}, "manual_test": {"N": 512934, "row_ok": 0.9997, "F0valid_row_ok": 0.9918, "Fh8_all80": 0.9609, "gaze_off_prev": 0.1374, "blink_rate_mean": 0.0286}, "engaged_train": {"N": 824859, "row_ok": 0.9812, "F0valid_row_ok": 0.9982, "Fh8_all80": 0.9781, "gaze_off_prev": 0.1252, "blink_rate_mean": 0.02}, "engaged_val": {"N": 110948, "row_ok": 0.8744, "F0valid_row_ok": 0.9982, "Fh8_all80": 0.9816, "gaze_off_prev": 0.1327, "blink_rate_mean": 0.01}, "engaged_test": {"N": 451840, "row_ok": 1.0, "F0valid_row_ok": 0.9988, "Fh8_all80": 0.9897, "gaze_off_prev": 0.1099, "blink_rate_mean": 0.0088}} | |
| status: materialized | |
| allowed_as_input: yes | |
| notes: | |
| - "blink_rate_4s is weak by construction (10 Hz landmarks, f16 storage): eye_open < 0.6 on 0.16 % of valid frames; kept as a descriptive channel." | |
| - "Diagnostic correlation with the derived openpilot DMS channels (train/val anchors only): weak/face_vs_dms_diag.py -> results/tables/face_vs_dms_diag.md (never a feature)." | |
Xet Storage Details
- Size:
- 69.5 kB
- Xet hash:
- 3aa9008ffa7ab9d90e393f09b80189bd4e31414d60f89b19ded047e0d98104fe
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.