AsianPlayer/TriDrive / code /eval /run_joint_evals_final_face.sh
AsianPlayer's picture
download
raw
5.59 kB
#!/usr/bin/env bash
# cwm3/eval/run_joint_evals_final_face.sh — R2 WP4 batch 1 F3 (2026-09-16; pre-registration docs/decisions.md 2026-09-16T06:46:35Z): paired evaluations of the
# face-input variant of the joint model, CPU, layout guards on. Runs I1_{indep,all_minus_road2drv}_s<k>_final_face (U base *_face: the FINAL U recipe + the 9
# causal face-landmark channels, NO gaze chain) vs the FROZEN main I1_all_minus_road2drv_s<k>_final and I1_indep_s<k>_final (read-only). Identical rows, driver
# populations from the v2 causal kin targets (both protocols); every tag idempotent. Mirrors eval/run_joint_evals_final_gzfc.sh.
# finalc_s<k>_allminusface_vs_allminus (a) the pre-registered comparison: variant vs FROZEN main (driver cells: Δ [CI] + the acceptable-degradation margins)
# finalc_s<k>_allminusface_vs_indepface (b) interaction effect on the face bases (B2-style, descriptive)
# finalc_s<k>_indepface_vs_indep attribution: the U-base swap alone (assembled bases, no training)
# finalc_s<k>_allminusface_vs_allminusgzfc face input alone vs face input + gaze chain (the `_gzfc` appendix variant): is the gzfc head_turn gain the INPUT or the LOSS?
# finalcm_s<k>_allminusface_vs_{allminus,indepface} masked protocol (64 v2 driver-box-suspect routes censored)
# finalc_s<k>_{allminusface,indepface}_vs_k0, finalcm_s<k>_allminusface_vs_k0 driver cells vs the k0 heuristic / persistence (B1 on the variant)
# finalP_s<k>_allminusface_vs_{allminus,indepface} P cells (eval/pressure_eval.py)
# finalcv_s<k>_allminusface_vs_{allminus,indepface,allminusgzfc} the same onset cells on the VALIDATION split (--split val, every cell): the rev-2 discipline
# decides module adoption on validation; the test rows above are the confirmation (the held-out set follows in WP5)
# bash eval/run_joint_evals_final_face.sh "0 1 2" [render=1]
set -u
cd "$(dirname "$0")/.."
PY=python
export OMP_NUM_THREADS=4 MKL_NUM_THREADS=4
MASK=results/targets_kin_causal_routes_v2/driver_box_suspect_routes.json
have_tag() { grep -q ",$1,$2,test," results/paired_compare.csv 2>/dev/null; }
# 2026-09-16: pairings go through eval/pc_joint_locked.py (private rows + flock-guarded append to the shared CSV; several agents pair concurrently) and each
# call waits for MemAvailable >= MIN_AVAIL_GB (default 8; a pairing holds ~4 GB) — the first seed-1/2 pass was killed by host memory pressure.
MIN_AVAIL_GB="${MIN_AVAIL_GB:-8}"
mem_wait() { while [[ $(awk '/MemAvailable/ {printf "%d", $2/1048576}' /proc/meminfo) -lt $MIN_AVAIL_GB ]]; do sleep 30; done; }
have_tag_val() { grep -q ",$1,$2,val," results/paired_compare.csv 2>/dev/null; }
pcv() { # validation split, onset cells only: tag a b [extra args]
local tag="$1" a="$2" b="$3"; shift 3
done_run "$a" && done_run "$b" || { echo "skip $tag"; return; }
for reg in manual engaged; do
have_tag_val "$tag" "$reg" && continue
mem_wait; echo "== $tag $reg (val)"
$PY eval/pc_joint_locked.py --regime "$reg" --split val --a "results/runs/$a" --b "results/runs/$b" --tag "$tag" "$@" 2>&1 | grep -E "appended|Error|Traceback|File \"|LAYOUT GUARD" | cut -c1-220
done
}
done_run() { [[ -f results/runs/$1/PRED_DONE && -f results/runs/$1/TRAIN_DONE ]]; }
pc() { # tag a b [extra args] (b = none with --b-k0)
local tag="$1" a="$2" b="$3"; shift 3
done_run "$a" || { echo "skip $tag ($a not finished)"; return; }
[[ "$b" == none ]] || done_run "$b" || { echo "skip $tag ($b not finished)"; return; }
for reg in manual engaged; do
have_tag "$tag" "$reg" && continue
mem_wait; echo "== $tag $reg"
$PY eval/pc_joint_locked.py --regime "$reg" --a "results/runs/$a" --b "results/runs/$b" --tag "$tag" "$@" 2>&1 | grep -E "appended|Error|Traceback|File \"|LAYOUT GUARD" | cut -c1-220
done
}
pe() { # pressure_eval: tag a b
local tag="$1" a="$2" b="$3"
done_run "$a" && done_run "$b" || { echo "skip $tag"; return; }
for reg in manual engaged; do
have_tag "$tag" "$reg" && continue
mem_wait; echo "== $tag $reg (P cells)"
$PY eval/pressure_eval.py --regime "$reg" --a "results/runs/$a" --b "results/runs/$b" --tag "$tag" 2>&1 | grep -E "appended|Error|Traceback|File \"|LAYOUT GUARD" | cut -c1-220
done
}
C="--kin-targets causal_routes --kin-version v2"
for s in ${1:-0 1 2}; do
AF=I1_all_minus_road2drv_s${s}_final_face; IF=I1_indep_s${s}_final_face; AM=I1_all_minus_road2drv_s${s}_final; I=I1_indep_s${s}_final; AG=I1_all_minus_road2drv_s${s}_final_gzfc
pc "finalc_s${s}_allminusface_vs_allminus" $AF $AM $C
pc "finalc_s${s}_allminusface_vs_indepface" $AF $IF $C
pc "finalc_s${s}_indepface_vs_indep" $IF $I $C
pc "finalc_s${s}_allminusface_vs_allminusgzfc" $AF $AG $C
pc "finalcm_s${s}_allminusface_vs_allminus" $AF $AM $C --mask-routes $MASK
pc "finalcm_s${s}_allminusface_vs_indepface" $AF $IF $C --mask-routes $MASK
pc "finalc_s${s}_allminusface_vs_k0" $AF none $C --b-k0
pc "finalcm_s${s}_allminusface_vs_k0" $AF none $C --b-k0 --mask-routes $MASK
pc "finalc_s${s}_indepface_vs_k0" $IF none $C --b-k0
pe "finalP_s${s}_allminusface_vs_allminus" $AF $AM
pe "finalP_s${s}_allminusface_vs_indepface" $AF $IF
pcv "finalcv_s${s}_allminusface_vs_allminus" $AF $AM $C
pcv "finalcv_s${s}_allminusface_vs_indepface" $AF $IF $C
pcv "finalcv_s${s}_allminusface_vs_allminusgzfc" $AF $AG $C
done
if [[ "${2:-1}" == "1" ]]; then S=${1:-0 1 2}
$PY eval/report_final_face.py --seeds ${S// /,} --out results/tables/stage_final_face.md 2>&1 | grep -E "written|VERDICT|READING"
fi
echo FINAL_FACE_EVALS_DONE

Xet Storage Details

Size:
5.59 kB
·
Xet hash:
f46eeb11f6006c2d2255e037db243b2b7d47c5931c798a168dba334bfaa3b680

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