{ "_notes": [ "Standalone geometry tower: GeometrySegEncoder over UNet-derived seg maps,", "MonoBridge passthrough, classification head. Same architecture as the", "seg_cnn_unet_ft_mono test run, used as a 10-rep baseline for comparison", "against tritower configurations." ], "run_name": "v4/geometry_solo", "num_classes": 2, "label_filter": [0, 1], "split_identity_level": 1, "eval_stage": "geom_fuse", "save_predictions": true, "seed": 1234, "folds": 5, "fold_seed": 100, "output_root": "v4/results", "out_dir_tags": ["binary"], "data": { "module": "v4.classes.profiles.v4papila", "args": { "image_dir": "Papila/FundusImages", "clinical_dir": "Papila/ClinicalData", "label_col": "Diagnosis", "iop_corr_method": "ratio", "iop_drop_raw": true, "exclude_cols": ["Axial_Length"], "in_memory_cache": false } }, "towers": [ { "name": "geom", "module": "v4.classes.towers.geometry_tower", "class": "GeometrySegEncoder", "data_source": "image", "args": { "backbone": "resnet18", "channels": 3, "target_size": 224, "augment": true, "freeze_ratio": 0.0, "seg_source": "unet", "weights_path": "models/v2/refuge/segmentation/per_image/best.pt", "contour_dir": "Papila/ExpertsSegmentations/Contours", "unet_size": 512, "normalize": "per_image", "threshold": 0.5, "crop_to_disc": true, "finetune_epochs": 10, "finetune_lr": 1e-5, "finetune_batch_size": 4 } } ], "stages": [ { "name": "geom_fuse", "type": "fusion", "module": "v4.classes.bridges.mono_bridge", "class": "MonoBridge", "inputs": ["geom"], "level": "eye", "epochs": 60, "train_towers": true, "args": { "use_ln": false } }, { "name": "geom_head", "type": "head", "input": "geom_fuse", "train_with": "geom_fuse", "args": { "dropout": 0.3 } } ], "training": { "lr": 1e-4, "batch_size": 16, "tune_binary_threshold": true } }