{ "_notes": [ "Phase 5 — Full HyperTower: bilateral + clinical data + aggregation strategy comparison.", "Goal: show the effect of a dual CNN + clinical data, and compare ensemble vs fused-head.", "Best settings from all prior phases: refugelike, iop_ratio_drop_raw, bcd_p05.", "Best bilateral architecture from phase 4 should be used — update tower-mode accordingly.", "common_args are prepended to every run's args list.", "NOTE: update --tower-mode in groups below once phase 4 winner is known.", "Placeholder uses 'bilateral' — change to 'siamese' if that wins phase 4." ], "common_args": [ "--eval-mode", "binary", "--bridge-mode", "fused", "--epochs", "30", "--in-memory-cache", "--augment", "--tune-binary-threshold", "--backbone", "refugelike", "--iop-corr-method", "ratio", "--iop-drop-raw", "--exclude-cols", "Axial_Length", "--output-root", "v3/results" ], "_common_args_implicit_defaults": { "--tower-loss-mode": "bcd", "--bcd-prob": "0.5", "--warmup-cd-epochs": "40", "--single-warmup-tower-epochs": "3", "--single-warmup-fused-epochs": "3", "--bilat-warmup-tower-epochs": "3", "--bilat-warmup-fused-epochs": "3" }, "baseline": { "run_name": "phase5/single_fused", "description": "Single-eye + clinical data — phase 3 best config, re-run as direct comparison baseline for phase 5.", "extra_args": ["--tower-mode", "single"] }, "groups": [ { "name": "bilateral_clinical", "description": "Add clinical data to bilateral architectures.", "runs": [ { "run_name": "phase5/ensemble_fused", "description": "Ensemble (independent OD+OS) + clinical data via fused bridge.", "extra_args": ["--tower-mode", "ensemble"] }, { "run_name": "phase5/bilateral_fused", "description": "BilateralHT + clinical data — full canonical HyperTower.", "extra_args": ["--tower-mode", "bilateral"] }, { "run_name": "phase5/siamese_fused", "description": "SiameseHT + clinical data — siamese mean+delta with fused clinical bridge.", "extra_args": ["--tower-mode", "siamese"] } ] }, { "name": "aggregation", "description": "Compare patient-level prediction aggregation strategies on top of ensemble.", "runs": [ { "run_name": "phase5/ensemble_fused_head", "description": "Ensemble + clinical data + attention scorer head (Linear(C→1) per eye, softmax-weighted average).", "extra_args": ["--tower-mode", "ensemble", "--fused-head"] }, { "run_name": "phase5/logit_mlp_head", "description": "Ensemble + clinical data + logit-level MLP head (cat([logit_od, logit_os]) → FC(64) → FC(C)).", "extra_args": ["--tower-mode", "ensemble", "--fused-head", "--head-type", "logit_mlp"] }, { "run_name": "phase5/embedding_mlp_head", "description": "Ensemble + clinical data + embedding-level MLP head (cat([z_od, z_os]) → FC(256) → FC(C)).", "extra_args": ["--tower-mode", "ensemble", "--fused-head", "--head-type", "embedding_mlp"] } ] } ] }