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": "Clinical-only floor reference under the new baseline framework. No img backbone change since there is no img tower.",
"run_name": "experiments/refuge_v2m_baseline/cd_solo",
"reps": 3
}
]
@@ -0,0 +1,149 @@
[
{
"_note": "Ortho-wrapped Hadamard at w=0.1 — best ortho weight from prior sweep. Bumped to 10 reps after 3-rep showed +0.009 vs anchor.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_ortho_w0.1",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"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 }
}
}
}
},
{
"_note": "ConcatBridge alternative to Hadamard.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_concat",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.concat_bridge",
"class": "ConcatBridge",
"args": { "fusion_dim": 256 }
}
}
},
{
"_note": "PairwiseAdditiveBridge — for N=2 streams this reduces to ≈ FusionBridge additive=True. Bumped to 10 reps after 3-rep showed +0.017 vs anchor (but with a suspicious val/test gap).",
"run_name": "experiments/refuge_v2m_baseline/ensemble_pairwise",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.pairwise_bridge",
"class": "PairwiseAdditiveBridge",
"args": { "fusion_dim": 256 }
}
}
},
{
"_note": "GatedAdditiveBridge — per-sample sigmoid gates over each stream.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_gated",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.gated_bridge",
"class": "GatedAdditiveBridge",
"args": { "fusion_dim": 256 }
}
}
},
{
"_note": "Ortho w=0.1 wrapping ConcatBridge inner.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_ortho_concat_w0.1",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.ortho_bridge",
"class": "OrthoBridge",
"args": {
"fusion_dim": 256,
"ortho_weight": 0.1,
"inner_module": "v4.classes.bridges.concat_bridge",
"inner_class": "ConcatBridge",
"inner_args": { "fusion_dim": 256 }
}
}
}
},
{
"_note": "Ortho w=0.1 wrapping PairwiseAdditiveBridge inner.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_ortho_pairwise_w0.1",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.ortho_bridge",
"class": "OrthoBridge",
"args": {
"fusion_dim": 256,
"ortho_weight": 0.1,
"inner_module": "v4.classes.bridges.pairwise_bridge",
"inner_class": "PairwiseAdditiveBridge",
"inner_args": { "fusion_dim": 256 }
}
}
}
},
{
"_note": "Ortho w=0.1 wrapping GatedAdditiveBridge inner.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_ortho_gated_w0.1",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": {
"module": "v4.classes.bridges.ortho_bridge",
"class": "OrthoBridge",
"args": {
"fusion_dim": 256,
"ortho_weight": 0.1,
"inner_module": "v4.classes.bridges.gated_bridge",
"inner_class": "GatedAdditiveBridge",
"inner_args": { "fusion_dim": 256 }
}
}
}
},
{
"_note": "Bottleneck (fusion_dim=8) — tests whether the new backbone still survives aggressive compression.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_bottleneck",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": { "args": { "fusion_dim": 8 } }
}
}
]
@@ -0,0 +1,19 @@
[
{
"_note": "Geometry-vector injection (GT contours, EPC) added to img+cd ensemble at refuge V2-M backbone. Replaces refugelike's ensemble_fused/geom_gt (0.9121) at the new backbone. For the geometry panel.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_geom_vec_gt",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
}
},
{
"_note": "Geometry-vector injection via UNet-derived geometry (not GT). Same architecture; uses the per-fold-finetuned UNet segmenter EPC channel. Tests whether GT vs predicted segmentation matters under the new backbone.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_geom_vec_unet",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
}
}
]
@@ -0,0 +1,10 @@
[
{
"_note": "Image-only (no cd) at the new refuge_efficientnet_v2_m baseline. 10 reps — definite test, establishes how much cd contributes to the ensemble.",
"run_name": "experiments/refuge_v2m_baseline/img_solo",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
}
}
]
@@ -0,0 +1,7 @@
[
{
"_note": "Bilateral img-only with refugelike — missing corner of the img_solo single-vs-bilateral × refugelike-vs-V2M grid. (Bilateral V2-M already exists at 0.8923.)",
"run_name": "experiments/refuge_v2m_baseline/img_solo_bilateral_refugelike",
"reps": 10
}
]
@@ -0,0 +1,16 @@
[
{
"_note": "Single-eye ensemble (img+cd, eval at nt) under the original refugelike backbone. Pairs with tri_v1/baseline_ensemble (bilateral, 0.8958 ± 0.017 at 10 reps) to standardize the v3 single-vs-bilateral comparison.",
"run_name": "experiments/refuge_v2m_baseline/ensemble_single_refugelike",
"reps": 10
},
{
"_note": "Single-eye ensemble under the new refuge V2-M backbone. Pairs with efficientnet/refuge_efficientnetv2_m (bilateral, 0.9132 ± 0.019 at 10 reps).",
"run_name": "experiments/refuge_v2m_baseline/ensemble_single_refuge_v2m",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
}
}
]
@@ -0,0 +1,16 @@
[
{
"_note": "Single-eye img-only (eval at img_fuse) under the original refugelike backbone. Goes with img_solo_bilateral_refugelike below to fill the 2x2 grid.",
"run_name": "experiments/refuge_v2m_baseline/img_solo_single_refugelike",
"reps": 10
},
{
"_note": "Single-eye img-only under the new refuge V2-M backbone. Pairs with refuge_v2m_baseline/img_solo (bilateral, 0.8923 ± 0.018 at 10 reps).",
"run_name": "experiments/refuge_v2m_baseline/img_solo_single_refuge_v2m",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
}
}
]
@@ -0,0 +1,44 @@
[
{
"_note": "Tritower (img + cd + geom) at the new img backbone. 10 reps — definite test, establishes whether the geom tower adds value over img+cd.",
"run_name": "experiments/refuge_v2m_baseline/tritower",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
}
},
{
"_note": "Tritower + OrthoBridge w=0.1 (best ortho weight from earlier sweep) wrapping Hadamard inner. Bumped to 10 reps after 3-rep showed 0.9059 with tight std — wanted to confirm against plain tritower's 0.9040.",
"run_name": "experiments/refuge_v2m_baseline/tritower_ortho_w0.1",
"reps": 10,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"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 }
}
}
}
},
{
"_note": "Tritower + bottleneck (fusion_dim=8) — tests whether the strong img backbone can survive aggressive bottlenecking.",
"run_name": "experiments/refuge_v2m_baseline/tritower_bottleneck",
"reps": 3,
"tower_overrides": {
"img": { "args": { "backbone": "refuge_efficientnet_v2_m", "freeze_ratio": 0.0 } }
},
"stage_overrides": {
"nt": { "args": { "fusion_dim": 8 } }
}
}
]