Add new regression and ensemble experiment configurations for V2-M and OrthoBridge

- Introduced multiple regression experiment configurations targeting vf_md, including:
  - cd_solo_reg_set.json: CD tower only regression setup.
  - img_solo_reg_set.json: Image tower only regression setup.
  - reg_head_epoch_sweep.json: Baseline regression sweeps at different epochs (50, 75, 100).
  - reg_head_set.json: Various regression setups including baseline and OrthoBridge configurations.
  - single_eye_reg.json: Single-eye regression setup for worst-eye aggregation analysis.

- Added ensemble configurations for OrthoBridge with different inner bridges:
  - ortho_alts_ensemble.json: Ensemble tests with ConcatBridge, PairwiseAdditiveBridge, and GatedAdditiveBridge.
  - ortho_alts_tritower.json: Tritower tests with the same inner bridges.

- Created V2-M specific configurations:
  - baseline_reg_nt50.json: Regression baseline with V2-M backbone.
  - geom_vec_gt.json and geom_vec_unet.json: Geometry vector injection experiments with V2-M.
  - single_l1_bridges.json: Single-eye ensemble experiments with various bridge types.
  - tritower_geom_gt.json: Tritower setup with GT contour-rasterized masks.

- Promoted existing experiments to higher repetitions for robustness.
This commit is contained in:
rpotter6298
2026-06-11 15:08:20 +02:00
parent 32a801a572
commit 280060db82
343 changed files with 8558 additions and 57747 deletions
@@ -0,0 +1,7 @@
[
{
"_note": "CD tower only, regression. Ablation vs baseline_reg_nt50 to isolate the contribution of clinical data.",
"run_name": "experiments/reg_head/cd_solo_reg",
"reps": 3
}
]
@@ -0,0 +1,7 @@
[
{
"_note": "Image tower only, regression. Ablation vs baseline_reg_nt50 to isolate the contribution of fundus images.",
"run_name": "experiments/reg_head/img_solo_reg",
"reps": 3
}
]
@@ -0,0 +1,97 @@
[
{
"_note": "baseline_reg at nt=50 (vs default 36). All heads regression on vf_md, label_filter expanded to [0,1,2]. Bumped to 10 reps for final regression-head reporting + 3-bin severity confusion matrix.",
"run_name": "experiments/reg_head/baseline_reg_nt50",
"reps": 10,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"nt": { "epochs": 50 },
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"hb_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
},
{
"_note": "baseline_reg at nt=75",
"run_name": "experiments/reg_head/baseline_reg_nt75",
"reps": 3,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"nt": { "epochs": 75 },
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"hb_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
},
{
"_note": "baseline_reg at nt=100",
"run_name": "experiments/reg_head/baseline_reg_nt100",
"reps": 3,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"nt": { "epochs": 100 },
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"hb_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
}
]
@@ -0,0 +1,116 @@
[
{
"_note": "1) Baseline classification — sanity check that the runner refactor didn't break anything. Should match baseline_ensemble at 0.896.",
"run_name": "experiments/reg_head/baseline_class",
"reps": 3
},
{
"_note": "2) Same architecture as baseline, but all heads (img_aux, cd_aux, nt_head, hb_head) are regression heads targeting vf_md. label_filter expanded to include suspect patients (label=2) since regression handles continuous targets naturally.",
"run_name": "experiments/reg_head/baseline_reg",
"reps": 3,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"hb_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
},
{
"_note": "3) OrthoBridge (w=0.1) wrapping Hadamard inner + regression heads",
"run_name": "experiments/reg_head/ortho_reg",
"reps": 3,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.ortho_bridge",
"class": "OrthoBridge",
"args": {
"fusion_dim": 256,
"ortho_weight": 0.1,
"inner_module": "v4.classes.bridges.fusion_bridge",
"inner_class": "FusionBridge",
"inner_args": { "fusion_dim": 256 }
}
},
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"hb_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
},
{
"_note": "4) PairwiseAdditiveBridge + regression heads",
"run_name": "experiments/reg_head/pairwise_reg",
"reps": 3,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.pairwise_bridge",
"class": "PairwiseAdditiveBridge",
"args": { "fusion_dim": 256 }
},
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"hb_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
}
]
@@ -0,0 +1,28 @@
[
{
"_note": "Single-eye regression at nt=50, refugelike backbone. Eye-level fusion (no hb), regression heads predicting per-eye vf_md. Pairs with the bilateral baseline_reg_nt50 (mean-of-eyes target, hb fusion) for the worst-eye aggregation analysis: predict per-eye MD at nt, then aggregate to patient-level via min(OD_pred, OS_pred).",
"run_name": "experiments/reg_head/single_eye_reg_nt50",
"reps": 10,
"overrides": {
"label_filter": [0, 1, 2]
},
"stage_overrides": {
"nt": { "epochs": 50 },
"img_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"cd_aux": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
},
"nt_head": {
"module": "v4.classes.heads.regression",
"class": "RegressionHead",
"args": { "dropout": 0.3, "target_key": "vf_md", "loss": "mse" }
}
}
}
]