Laddaphone/topoconf-mammography-edl
0
TopoConf: Evidential Deep Learning for Graph-Based Mammography
Overview
Model checkpoints and analysis results for the paper: "Evidence Phenotypes Determine Optimal Uncertainty Channels for Safety-Critical Mammography Triage"
Submitted to CMBBE: Imaging & Visualization.
Key Findings
- Evidence-poor FNs on CBIS-DDSM (S-ratio=0.584): EDL's vacuity signal catches 97.5% of false negatives at 42% review burden on digitized-film mammography.
- Evidence-normal FNs on digital FFDM (INbreast S-ratio=0.983, CMMD S-ratio=1.109): Vacuity-based triage fails; predictive entropy is the better FN detection signal.
- The S-ratio diagnostic: Compute SFN / Scorrect on your calibration set to determine which triage channel to deploy.
Contents
Checkpoints (checkpoints/)
All EDL models return Dirichlet alphas directly (softplus + 1 inside forward()). Non-EDL models return raw logits.
Architecture
- Backbone: ResNet-18 truncated at layer3 (256→128 dim)
- Graph: 3× GAT layers (4 heads, 128 dim) with residual connections + LayerNorm
- EDL head: Linear(128, 2) + Softplus + 1.0
- Parameters: ~2.9M (graph models), ~11.2M (ResNet baseline)
Results (results/)
Pre-computed analysis tables:
error_prediction.csv— corrected AUROC (E[H], MI, vacuity, H_pred)triage_75pct.csv— 75th-percentile triage with old/corrected signalstriage_matched_workload.csv— FN catch at 7 burden levelsthree_dataset_comprehensive.csv— S-ratio, all metrics, 3 datasetsdirectional_prediction.csv— R_S → triage advantage analysiscbis_subgroup_analysis.csv— clinical subgroup FN phenotypes
Ablation (results/ablation/)
class_weight_ablation.csv— [1,1], [1,3], [1,5], [1,10] × 10 seedskl_coef_ablation.csv— 0.0, 0.001, 0.01, 0.1 × 10 seedsdeep_ensemble.csv— 5 members × 10 seeds (softmax CE loss)
Usage
import torch
from model import TopoConfGNN # See training code
model = TopoConfGNN(topo=False) # NoTopo variant
state = torch.load("checkpoints/cbis/NoTopo/CBIS_NoTopo_s42.pt",
map_location="cpu")
if "model_state_dict" in state:
state = state["model_state_dict"]
model.load_state_dict(state, strict=True)
model.eval()
# Returns Dirichlet alphas directly
alphas = model(graph_data) # shape: (batch, 2)
S = alphas.sum(dim=1)
vacuity = 2.0 / S # Evidence-based uncertaintyTraining Details
- Loss: Type II maximum likelihood (digamma) + 0.01 × KL regularization
- Optimizer: Adam, lr=1e-4, cosine annealing
- Class weights: [1.0, 5.0] (benign, malignant)
- Epochs: 80, early stopping patience=15
- Splits: Patient-disjoint (50% train, 15% val, 15% cal, 20% test)
- Seeds: 42-51 (10 random partitions)
Citation
@article{douangnouanexay2025evidence,
title={Evidence Phenotypes Determine Optimal Uncertainty Channels
for Safety-Critical Mammography Triage},
author={Douangnouanexay, Laddaphone},
journal={CMBBE: Imaging \& Visualization},
year={2026}
}License
MIT
