report: paper-style layout (transposed methods×datasets, sig-bold, ranking, per-class)
Browse files- code/framework/report/aggregate.py +349 -261
- results/summary.html +138 -191
- results/summary.md +14 -82
- results/summary.tex +13 -82
code/framework/report/aggregate.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
| 1 |
-
"""Aggregate per-seed metrics.json
|
| 2 |
|
| 3 |
-
Scans results/<exp_name>/**/seed*/metrics.json, groups by (dataset, protocol,
|
| 4 |
-
|
| 5 |
-
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
python framework/report/aggregate.py --exp_name baselines [--out_root results]
|
| 8 |
"""
|
|
@@ -12,10 +15,15 @@ import os
|
|
| 12 |
import json
|
| 13 |
import glob
|
| 14 |
import argparse
|
|
|
|
| 15 |
from collections import defaultdict
|
| 16 |
|
| 17 |
import numpy as np
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
# (key, label, is_percent, higher_is_better)
|
| 20 |
METRICS = [
|
| 21 |
("dice", "Dice", True, True),
|
|
@@ -39,19 +47,12 @@ def load_runs(out_root, exp_name):
|
|
| 39 |
return runs
|
| 40 |
|
| 41 |
|
| 42 |
-
# Display labels for split protocols (replaces opaque "fold01" with the real
|
| 43 |
-
# reporting protocol). Datasets with an official split keep "official"/"holdout";
|
| 44 |
-
# fold-1-of-k single splits are labelled "single-split"; PanNuke is reported as
|
| 45 |
-
# its official k-fold cross-validation (handled in summarize via fold-merge).
|
| 46 |
_PROTO_LABEL = {
|
| 47 |
-
("idridd_segmentation", "fold01"): "official",
|
| 48 |
("busi", "fold01"): "single-split",
|
| 49 |
("medsegdb_kits19", "fold01"): "single-split",
|
| 50 |
-
("pannuke_semantic", "fold01"): "single-split",
|
| 51 |
}
|
| 52 |
-
|
| 53 |
-
# Datasets reported as official k-fold cross-validation (mean±SD OVER folds, not
|
| 54 |
-
# over seeds): folds are merged into one row when >1 fold is present.
|
| 55 |
_CV_DATASETS = {"pannuke_semantic"}
|
| 56 |
|
| 57 |
|
|
@@ -66,7 +67,6 @@ def _agg_over(items, key):
|
|
| 66 |
|
| 67 |
|
| 68 |
def summarize(runs):
|
| 69 |
-
# (dataset, arch) -> protocol -> [runs]
|
| 70 |
by_da = defaultdict(lambda: defaultdict(list))
|
| 71 |
for d in runs:
|
| 72 |
by_da[(d.get("dataset"), d.get("arch"))][d.get("protocol")].append(d)
|
|
@@ -75,7 +75,6 @@ def summarize(runs):
|
|
| 75 |
protos = sorted(p for p in proto_map if p is not None)
|
| 76 |
row = {"dataset": dataset, "arch": arch}
|
| 77 |
if dataset in _CV_DATASETS and len(protos) > 1:
|
| 78 |
-
# k-fold CV: collapse seeds within each fold, then mean±SD OVER folds
|
| 79 |
row["protocol"] = f"{len(protos)}-fold"
|
| 80 |
row["n_seeds"] = len(protos)
|
| 81 |
for key, _, _, _ in METRICS:
|
|
@@ -85,7 +84,6 @@ def summarize(runs):
|
|
| 85 |
row[f"{key}_mean"] = float(fm.mean()) if fm.size else float("nan")
|
| 86 |
row[f"{key}_sd"] = float(fm.std()) if fm.size else float("nan")
|
| 87 |
else:
|
| 88 |
-
# single fixed split: mean±SD over seeds
|
| 89 |
proto = protos[0] if protos else None
|
| 90 |
items = proto_map.get(proto, [])
|
| 91 |
row["protocol"] = _proto_label(dataset, proto)
|
|
@@ -96,23 +94,107 @@ def summarize(runs):
|
|
| 96 |
return rows
|
| 97 |
|
| 98 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
def _fmt(row, key, pct):
|
| 100 |
m, s = row[f"{key}_mean"], row[f"{key}_sd"]
|
| 101 |
-
if
|
| 102 |
return "—"
|
| 103 |
return f"{m*100:.2f}±{s*100:.2f}" if pct else f"{m:.2f}±{s:.2f}"
|
| 104 |
|
| 105 |
|
| 106 |
-
def
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
return out
|
| 114 |
|
| 115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
def to_csv(rows):
|
| 117 |
cols = ["dataset", "protocol", "arch", "n_seeds"]
|
| 118 |
for k, _, _, _ in METRICS:
|
|
@@ -123,23 +205,74 @@ def to_csv(rows):
|
|
| 123 |
return out
|
| 124 |
|
| 125 |
|
| 126 |
-
def
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
return out
|
| 136 |
|
| 137 |
|
| 138 |
-
|
| 139 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
|
| 141 |
|
| 142 |
-
#
|
| 143 |
_DATASETS_INFO = [
|
| 144 |
("1", "CVC-ClinicDB", "Colonoscopy (endoscopy)", "Polyp", "2", "RGB", "384×288", "official", "490 / 61 / 61"),
|
| 145 |
("2", "Kvasir-SEG", "GI endoscopy", "Polyp", "2", "RGB", "~622×529 (var)", "official", "800 / 100 / 100"),
|
|
@@ -152,102 +285,25 @@ _DATASETS_INFO = [
|
|
| 152 |
("9", "ISIC2018", "Dermoscopy", "Skin lesion", "2", "RGB", "256×256", "holdout", "2582 / 369 / 737"),
|
| 153 |
("10", "KiTS19", "Kidney CT (2D slices)", "Kidney (binary)", "2", "grayscale¹", "256×256", "single-split²", "2832 / 479 / 705"),
|
| 154 |
]
|
| 155 |
-
|
| 156 |
_METHODS_INFO = [
|
| 157 |
-
("UNet", "CNN encoder–decoder", "SMP, ResNet-50 encoder (ImageNet
|
| 158 |
("UNet++", "Nested UNet", "SMP, ResNet-50 (ImageNet)"),
|
| 159 |
("DeepLabV3+", "Atrous CNN", "SMP, ResNet-50 (ImageNet)"),
|
| 160 |
-
("Attention-UNet", "Attention-gated UNet", "Re-implemented,
|
| 161 |
-
("TransUNet", "CNN–Transformer hybrid", "R50-ViT-B/16 (ImageNet
|
| 162 |
-
("Swin-UNet", "Pure-Transformer UNet", "Swin-Tiny (ImageNet
|
| 163 |
("nnU-Net (v2)", "Self-configuring CNN", "2D config, 250 epochs"),
|
| 164 |
("U-Mamba", "State-space (Mamba) UNet", "U-Mamba_Bot, 100 epochs"),
|
| 165 |
]
|
| 166 |
-
|
| 167 |
-
# (metric, formula/definition, direction, unit, chinese role)
|
| 168 |
_METRICS_INFO = [
|
| 169 |
-
("Dice (DSC)", "
|
| 170 |
-
|
| 171 |
-
("
|
| 172 |
-
|
| 173 |
-
("Sensitivity
|
| 174 |
-
|
| 175 |
-
("
|
| 176 |
-
"特异度:真值背景中被正确判为背景的比例,反映对背景区域的误报控制能力。"),
|
| 177 |
-
("Precision", "TP / (TP+FP)", "↑ higher", "%",
|
| 178 |
-
"精确率:预测为前景的像素中真正属于前景的比例,反映“过分割/误报”程度(越高误分越少)。"),
|
| 179 |
-
("HD95", "95th-percentile Hausdorff distance between predicted & GT boundaries", "↓ lower", "pixels",
|
| 180 |
-
"边界距离:预测与真值轮廓间偏差的 95% 分位 Hausdorff 距离,衡量最大边界误差(取95%分位以抑制离群点),越小边界越贴合。"),
|
| 181 |
-
("ASSD", "Average symmetric surface distance between boundaries", "↓ lower", "pixels",
|
| 182 |
-
"平均对称表面距离:两条轮廓间双向平均距离,衡量整体边界吻合度,越小边界越准。"),
|
| 183 |
]
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
def _intro_html():
|
| 187 |
-
h = ["<div class='ov'>"]
|
| 188 |
-
h.append("<h2>Project overview</h2>")
|
| 189 |
-
h.append("<p>A unified benchmark of <b>8 2D medical-image segmentation methods</b> across "
|
| 190 |
-
"<b>10 public datasets</b> spanning <b>7 imaging modalities</b> (endoscopy, retinal fundus, "
|
| 191 |
-
"ultrasound, cardiac MRI, dermoscopy, histopathology, abdominal CT). Every method runs through "
|
| 192 |
-
"one pipeline with identical metrics. Reported as "
|
| 193 |
-
"<b>mean±SD</b> over <b>3 seeds</b> for fixed-split datasets and over <b>folds</b> for "
|
| 194 |
-
"cross-validation datasets (PanNuke: official 3-fold). Each (dataset,method) cell aggregates "
|
| 195 |
-
"~tens–thousands of test images; the suite totals ≈20k images. Per-method efficiency "
|
| 196 |
-
"(params / FLOPs / throughput) is in <code>efficiency.md</code>.</p>")
|
| 197 |
-
h.append("<p style='background:#eef7f0;border-left:3px solid #0a6;padding:8px 12px'>"
|
| 198 |
-
"<b>Resolution-fair evaluation (unified 512).</b> Convolutional methods are trained at "
|
| 199 |
-
"512×512; the fixed-input transformers (Swin-UNet 224, TransUNet 256) run at their native "
|
| 200 |
-
"size; nnU-Net / U-Mamba predict natively. <b>For scoring, every method's prediction and the "
|
| 201 |
-
"ground truth are resized to a common 512×512</b> before computing all 7 metrics — so the "
|
| 202 |
-
"boundary metrics (HD95 / ASSD), which are measured in pixels, are <b>directly comparable "
|
| 203 |
-
"across methods</b> regardless of each method's native working resolution. (Earlier 256-px "
|
| 204 |
-
"tables mixed pixel scales and were not boundary-comparable.)</p>")
|
| 205 |
-
|
| 206 |
-
h.append("<h2>Datasets</h2>")
|
| 207 |
-
h.append("<table><tr><th>#</th><th>Dataset</th><th>Modality</th><th>Target</th><th>Classes</th>"
|
| 208 |
-
"<th>Channels</th><th>Image size</th><th>Reported protocol</th><th>Train / Val / Test</th></tr>")
|
| 209 |
-
for r in _DATASETS_INFO:
|
| 210 |
-
h.append("<tr><td>%s</td><td class='l'>%s</td><td class='l'>%s</td><td class='l'>%s</td>"
|
| 211 |
-
"<td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % r)
|
| 212 |
-
h.append("</table>")
|
| 213 |
-
h.append("<div class='cap'>¹ BUSI/KiTS19 are grayscale in content but stored as 3-channel PNG — read as "
|
| 214 |
-
"grayscale. ² BUSI/KiTS19 have no canonical split, so one fixed fold (of a 5-fold partition) is "
|
| 215 |
-
"reported with 3 seeds; datasets with an official split use it. Mask labels are 0…C-1 "
|
| 216 |
-
"(0=background); multi-class metrics are macro-averaged over foreground classes.</div>")
|
| 217 |
-
|
| 218 |
-
h.append("<h2>Segmentation methods</h2>")
|
| 219 |
-
h.append("<table><tr><th>Method</th><th>Family</th><th>Backbone / setup</th></tr>")
|
| 220 |
-
for m in _METHODS_INFO:
|
| 221 |
-
h.append("<tr><td class='l'>%s</td><td class='l'>%s</td><td class='l'>%s</td></tr>" % m)
|
| 222 |
-
h.append("</table>")
|
| 223 |
-
|
| 224 |
-
h.append("<h2>Evaluation metrics</h2>")
|
| 225 |
-
h.append("<table><tr><th>Metric</th><th>Definition</th><th>Direction</th><th>Unit</th>"
|
| 226 |
-
"<th>作用 / 含义(中文)</th></tr>")
|
| 227 |
-
for m in _METRICS_INFO:
|
| 228 |
-
h.append("<tr><td class='l'>%s</td><td class='l'>%s</td><td>%s</td><td>%s</td>"
|
| 229 |
-
"<td class='l'>%s</td></tr>" % m)
|
| 230 |
-
h.append("</table>")
|
| 231 |
-
h.append("<p style='font-size:12.5px'>P = predicted foreground, G = ground-truth foreground; "
|
| 232 |
-
"TP/FP/FN/TN are pixel counts. Overlap metrics (Dice/IoU/Sens/Spec/Prec) are exact pixel "
|
| 233 |
-
"computations; boundary metrics (HD95/ASSD) are computed with MONAI on the mask edges.</p>")
|
| 234 |
-
|
| 235 |
-
h.append("<h2>Evaluation protocol</h2>")
|
| 236 |
-
h.append("<p>For each test image, every metric is computed <b>per foreground class</b> (background "
|
| 237 |
-
"excluded) and macro-averaged over the classes present; classes absent in <i>both</i> "
|
| 238 |
-
"prediction and ground truth are skipped so they do not dilute the score. Per-image values are "
|
| 239 |
-
"averaged to one score per (dataset, method, run); we then report <b>mean±SD across runs</b> — "
|
| 240 |
-
"3 random seeds for fixed-split datasets, or across folds for CV datasets. For surface metrics, "
|
| 241 |
-
"an empty–empty (no foreground in either) pair scores 0, while empty-vs-non-empty is undefined "
|
| 242 |
-
"(NaN) and excluded from the average. All methods share the same held-out test images per "
|
| 243 |
-
"dataset, so comparisons are paired.</p>")
|
| 244 |
-
h.append("<hr style='margin:18px 0;border:none;border-top:1px solid #ddd'>")
|
| 245 |
-
h.append("</div>")
|
| 246 |
-
return "\n".join(h)
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
# ---- (3) per-class Dice tables for the multi-class datasets ----
|
| 250 |
-
# Class names follow each dataset's standard foreground labelling (0=background excluded).
|
| 251 |
_PERCLASS_NAMES = {
|
| 252 |
"acdc_png": {"1": "RV", "2": "Myocardium", "3": "LV"},
|
| 253 |
"refuge2": {"1": "Optic Disc", "2": "Optic Cup"},
|
|
@@ -257,7 +313,7 @@ _PERCLASS_NAMES = {
|
|
| 257 |
|
| 258 |
|
| 259 |
def _collect_perclass(runs):
|
| 260 |
-
acc = defaultdict(lambda: defaultdict(list))
|
| 261 |
for d in runs:
|
| 262 |
key = (d.get("dataset"), d.get("arch"))
|
| 263 |
for pi in d.get("per_image", []):
|
|
@@ -268,159 +324,189 @@ def _collect_perclass(runs):
|
|
| 268 |
return {k: {c: float(np.mean(v)) for c, v in cd.items() if v} for k, cd in acc.items()}
|
| 269 |
|
| 270 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 271 |
def _perclass_section(runs):
|
| 272 |
pc = _collect_perclass(runs)
|
| 273 |
-
h = [
|
| 274 |
-
"<div class='cap'>Mean per-class Dice (%) over all test images and all runs (0=background "
|
| 275 |
-
"excluded). Reveals which structures/types drive a method's macro-Dice. Class names follow each "
|
| 276 |
-
"dataset's standard labelling (IDRiD: MA=microaneurysm, exudates hard/soft, optic disc).</div>"]
|
| 277 |
for ds, names in _PERCLASS_NAMES.items():
|
| 278 |
methods = [a for a in _ARCH_ORDER if (ds, a) in pc and pc[(ds, a)]]
|
| 279 |
if not methods:
|
| 280 |
continue
|
| 281 |
classes = sorted(names, key=int)
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
default=float('nan')) for c in classes}
|
| 288 |
for a in methods:
|
| 289 |
-
|
| 290 |
-
cells = []
|
| 291 |
-
present = []
|
| 292 |
for c in classes:
|
| 293 |
-
v =
|
| 294 |
if v is None:
|
| 295 |
-
cells.append("<td>
|
| 296 |
else:
|
| 297 |
present.append(v)
|
| 298 |
-
|
| 299 |
-
cells.append(f"<td>{'<b>'+
|
| 300 |
macro = (sum(present) / len(present) * 100) if present else float("nan")
|
| 301 |
-
h.append(f"<tr><td class='
|
| 302 |
-
|
|
|
|
| 303 |
return "\n".join(h)
|
| 304 |
|
| 305 |
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
from scipy.stats import wilcoxon
|
| 328 |
-
except Exception:
|
| 329 |
-
return "<p>(scipy unavailable — significance section skipped)</p>"
|
| 330 |
-
by_da = defaultdict(list)
|
| 331 |
-
for d in runs:
|
| 332 |
-
by_da[(d.get("dataset"), d.get("arch"))].append(d)
|
| 333 |
-
|
| 334 |
-
def pval(a, b):
|
| 335 |
-
L = min(a.size, b.size)
|
| 336 |
-
if L < 6:
|
| 337 |
-
return float("nan")
|
| 338 |
-
x, y = a[:L], b[:L]
|
| 339 |
-
m = ~(np.isnan(x) | np.isnan(y))
|
| 340 |
-
if m.sum() < 6 or np.allclose(x[m], y[m]):
|
| 341 |
-
return 1.0
|
| 342 |
-
try:
|
| 343 |
-
return float(wilcoxon(x[m], y[m]).pvalue)
|
| 344 |
-
except Exception:
|
| 345 |
-
return 1.0
|
| 346 |
-
|
| 347 |
-
h = ["<h1 style='font-size:18px'>Statistical significance — paired Wilcoxon (per-image Dice)</h1>",
|
| 348 |
-
"<div class='cap'>Per dataset, the best method by mean Dice is marked ★; a paired Wilcoxon "
|
| 349 |
-
"signed-rank test on per-image Dice (paired by image) compares it against every other method. "
|
| 350 |
-
"Methods <u>not</u> significantly worse than the best (p≥0.05) are <u>underlined</u> = statistically "
|
| 351 |
-
"tied for best. The last column is the best-vs-2nd-best p-value. Pairing is exact for the in-framework "
|
| 352 |
-
"methods (shared dataloader order); nnU-Net/U-Mamba use cached predictions paired by index where "
|
| 353 |
-
"image counts match.</div>"]
|
| 354 |
-
h.append("<table><tr><th>Dataset</th><th>Best ��� and tied-for-best (underlined)</th>"
|
| 355 |
-
"<th>best vs 2nd p</th></tr>")
|
| 356 |
-
for ds in sorted({k[0] for k in by_da}):
|
| 357 |
-
vecs = {a: _per_image_dice_vec(by_da[(ds, a)]) for a in _ARCH_ORDER if (ds, a) in by_da}
|
| 358 |
-
vecs = {a: v for a, v in vecs.items() if v.size}
|
| 359 |
-
if len(vecs) < 2:
|
| 360 |
-
continue
|
| 361 |
-
means = {a: float(np.nanmean(v)) for a, v in vecs.items()}
|
| 362 |
-
ranked = sorted(means, key=means.get, reverse=True)
|
| 363 |
-
best = ranked[0]
|
| 364 |
-
tied = [a for a in ranked[1:] if not (pval(vecs[best], vecs[a]) < 0.05)]
|
| 365 |
-
p2 = pval(vecs[best], vecs[ranked[1]])
|
| 366 |
-
marks = f"<b>★ {best} ({means[best]*100:.1f})</b>"
|
| 367 |
-
if tied:
|
| 368 |
-
marks += " · tied: " + ", ".join(f"<u>{a}</u>" for a in tied)
|
| 369 |
-
h.append(f"<tr><td class='l'>{ds}</td><td class='l'>{marks}</td>"
|
| 370 |
-
f"<td>{('%.2g' % p2) if p2 == p2 else '—'}</td></tr>")
|
| 371 |
h.append("</table>")
|
| 372 |
return "\n".join(h)
|
| 373 |
|
| 374 |
|
| 375 |
-
def to_html(rows, runs=None, title="SegGen
|
| 376 |
-
cell,
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
h.append(
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
| 407 |
-
|
| 408 |
-
|
| 409 |
-
|
| 410 |
-
|
| 411 |
-
|
| 412 |
-
txt = _fmt(cell[(ds, a)], key, pct)
|
| 413 |
-
tds.append(f"<td>{'<b>'+txt+'</b>' if a in bold else txt}</td>")
|
| 414 |
-
else:
|
| 415 |
-
tds.append("<td>—</td>")
|
| 416 |
-
tds.append(f"<td>{nseeds.get(ds,'')}</td>")
|
| 417 |
-
h.append("<tr>" + "".join(tds) + "</tr>")
|
| 418 |
-
h.append("</table>")
|
| 419 |
if runs:
|
| 420 |
-
|
| 421 |
-
|
| 422 |
-
|
| 423 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 424 |
h.append("</body></html>")
|
| 425 |
return "\n".join(h)
|
| 426 |
|
|
@@ -436,12 +522,14 @@ def main():
|
|
| 436 |
print(f"no metrics.json under {args.out_root}/{args.exp_name}")
|
| 437 |
return
|
| 438 |
rows = summarize(runs)
|
|
|
|
| 439 |
base = os.path.join(args.out_root, args.exp_name)
|
| 440 |
open(os.path.join(base, "summary.csv"), "w").write(to_csv(rows))
|
| 441 |
-
open(os.path.join(base, "summary.md"), "w").write(to_markdown(rows))
|
| 442 |
-
open(os.path.join(base, "summary.tex"), "w").write(to_latex(rows))
|
| 443 |
-
open(os.path.join(base, "summary.html"), "w").write(
|
| 444 |
-
|
|
|
|
| 445 |
print(f"{len(runs)} runs -> {len(rows)} (dataset,arch) cells; written {base}/summary.{{csv,md,tex,html}}")
|
| 446 |
|
| 447 |
|
|
|
|
| 1 |
+
"""Aggregate per-seed metrics.json into paper-style result tables (mean±SD).
|
| 2 |
|
| 3 |
+
Scans results/<exp_name>/**/seed*/metrics.json, groups by (dataset, protocol, arch),
|
| 4 |
+
reports mean±SD over seeds (over folds for CV datasets). Emits:
|
| 5 |
+
- summary.csv : full per-(dataset,method) detail, every metric (raw data export)
|
| 6 |
+
- summary.md : the main Dice table, methods×datasets (quick read)
|
| 7 |
+
- summary.tex : the main Dice table as booktabs LaTeX (paper-ready)
|
| 8 |
+
- summary.html : full paper-style report (main tables, per-class, significance, setup)
|
| 9 |
|
| 10 |
python framework/report/aggregate.py --exp_name baselines [--out_root results]
|
| 11 |
"""
|
|
|
|
| 15 |
import json
|
| 16 |
import glob
|
| 17 |
import argparse
|
| 18 |
+
import warnings
|
| 19 |
from collections import defaultdict
|
| 20 |
|
| 21 |
import numpy as np
|
| 22 |
|
| 23 |
+
# per-image Dice vectors can have all-NaN positions (empty masks across seeds);
|
| 24 |
+
# np.nanmean warns harmlessly on those — silence it for clean console/report runs.
|
| 25 |
+
warnings.filterwarnings("ignore", message="Mean of empty slice")
|
| 26 |
+
|
| 27 |
# (key, label, is_percent, higher_is_better)
|
| 28 |
METRICS = [
|
| 29 |
("dice", "Dice", True, True),
|
|
|
|
| 47 |
return runs
|
| 48 |
|
| 49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
_PROTO_LABEL = {
|
| 51 |
+
("idridd_segmentation", "fold01"): "official",
|
| 52 |
("busi", "fold01"): "single-split",
|
| 53 |
("medsegdb_kits19", "fold01"): "single-split",
|
| 54 |
+
("pannuke_semantic", "fold01"): "single-split",
|
| 55 |
}
|
|
|
|
|
|
|
|
|
|
| 56 |
_CV_DATASETS = {"pannuke_semantic"}
|
| 57 |
|
| 58 |
|
|
|
|
| 67 |
|
| 68 |
|
| 69 |
def summarize(runs):
|
|
|
|
| 70 |
by_da = defaultdict(lambda: defaultdict(list))
|
| 71 |
for d in runs:
|
| 72 |
by_da[(d.get("dataset"), d.get("arch"))][d.get("protocol")].append(d)
|
|
|
|
| 75 |
protos = sorted(p for p in proto_map if p is not None)
|
| 76 |
row = {"dataset": dataset, "arch": arch}
|
| 77 |
if dataset in _CV_DATASETS and len(protos) > 1:
|
|
|
|
| 78 |
row["protocol"] = f"{len(protos)}-fold"
|
| 79 |
row["n_seeds"] = len(protos)
|
| 80 |
for key, _, _, _ in METRICS:
|
|
|
|
| 84 |
row[f"{key}_mean"] = float(fm.mean()) if fm.size else float("nan")
|
| 85 |
row[f"{key}_sd"] = float(fm.std()) if fm.size else float("nan")
|
| 86 |
else:
|
|
|
|
| 87 |
proto = protos[0] if protos else None
|
| 88 |
items = proto_map.get(proto, [])
|
| 89 |
row["protocol"] = _proto_label(dataset, proto)
|
|
|
|
| 94 |
return rows
|
| 95 |
|
| 96 |
|
| 97 |
+
# ----------------------------------------------------------------------------- display
|
| 98 |
+
_ARCH_ORDER = ["unet", "unetpp", "deeplabv3plus", "attention_unet", "transunet", "swinunet",
|
| 99 |
+
"nnunet", "umamba"]
|
| 100 |
+
_ARCH_DISP = {"unet": "UNet", "unetpp": "UNet++", "deeplabv3plus": "DeepLabV3+",
|
| 101 |
+
"attention_unet": "Attention-UNet", "transunet": "TransUNet",
|
| 102 |
+
"swinunet": "Swin-UNet", "nnunet": "nnU-Net", "umamba": "U-Mamba"}
|
| 103 |
+
_DS_ORDER = ["cvc_clinicdb", "kvasir_seg", "fives", "busi", "refuge2", "acdc_png",
|
| 104 |
+
"idridd_segmentation", "pannuke_semantic", "medsegdb_isic2018", "medsegdb_kits19"]
|
| 105 |
+
_DS_DISP = {"cvc_clinicdb": "CVC-ClinicDB", "kvasir_seg": "Kvasir-SEG", "fives": "FIVES",
|
| 106 |
+
"busi": "BUSI", "refuge2": "REFUGE2", "acdc_png": "ACDC",
|
| 107 |
+
"idridd_segmentation": "IDRiD", "pannuke_semantic": "PanNuke",
|
| 108 |
+
"medsegdb_isic2018": "ISIC2018", "medsegdb_kits19": "KiTS19"}
|
| 109 |
+
|
| 110 |
+
|
| 111 |
def _fmt(row, key, pct):
|
| 112 |
m, s = row[f"{key}_mean"], row[f"{key}_sd"]
|
| 113 |
+
if m != m:
|
| 114 |
return "—"
|
| 115 |
return f"{m*100:.2f}±{s*100:.2f}" if pct else f"{m:.2f}±{s:.2f}"
|
| 116 |
|
| 117 |
|
| 118 |
+
def _grid(rows):
|
| 119 |
+
cell = {(r["dataset"], r["arch"]): r for r in rows}
|
| 120 |
+
methods = [a for a in _ARCH_ORDER if any(r["arch"] == a for r in rows)] or \
|
| 121 |
+
sorted({r["arch"] for r in rows})
|
| 122 |
+
seen = [d for d in _DS_ORDER if any(r["dataset"] == d for r in rows)]
|
| 123 |
+
extra = [r["dataset"] for r in rows if r["dataset"] not in _DS_ORDER]
|
| 124 |
+
datasets = list(dict.fromkeys(seen + extra))
|
| 125 |
+
return cell, datasets, methods
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
def _col_means(cell, datasets, methods):
|
| 129 |
+
"""method -> {key: macro-mean over datasets}"""
|
| 130 |
+
out = {}
|
| 131 |
+
for a in methods:
|
| 132 |
+
out[a] = {}
|
| 133 |
+
for key, _, _, _ in METRICS:
|
| 134 |
+
vs = [cell[(d, a)][f"{key}_mean"] for d in datasets
|
| 135 |
+
if (d, a) in cell and cell[(d, a)][f"{key}_mean"] == cell[(d, a)][f"{key}_mean"]]
|
| 136 |
+
out[a][key] = float(np.mean(vs)) if vs else float("nan")
|
| 137 |
return out
|
| 138 |
|
| 139 |
|
| 140 |
+
# ----------------------------------------------------------------------------- significance
|
| 141 |
+
def _per_image_dice_vec(runs_for_da):
|
| 142 |
+
by_proto = defaultdict(list)
|
| 143 |
+
for d in runs_for_da:
|
| 144 |
+
by_proto[d.get("protocol")].append(d)
|
| 145 |
+
parts = []
|
| 146 |
+
for proto in sorted(by_proto):
|
| 147 |
+
arrs = [np.array([pi.get("dice", np.nan) for pi in d.get("per_image", [])], float)
|
| 148 |
+
for d in by_proto[proto]]
|
| 149 |
+
arrs = [a for a in arrs if a.size]
|
| 150 |
+
if not arrs:
|
| 151 |
+
continue
|
| 152 |
+
L = min(a.size for a in arrs)
|
| 153 |
+
parts.append(np.nanmean(np.stack([a[:L] for a in arrs]), axis=0))
|
| 154 |
+
return np.concatenate(parts) if parts else np.array([])
|
| 155 |
+
|
| 156 |
+
|
| 157 |
+
def _sig_tied_sets(runs):
|
| 158 |
+
"""{dataset: set(archs whose per-image Dice is NOT significantly worse than the best,
|
| 159 |
+
paired Wilcoxon p>=0.05)} — the 'statistically best' set, used to bold the Dice table."""
|
| 160 |
+
try:
|
| 161 |
+
from scipy.stats import wilcoxon
|
| 162 |
+
except Exception:
|
| 163 |
+
return {}
|
| 164 |
+
by_da = defaultdict(list)
|
| 165 |
+
for d in runs:
|
| 166 |
+
by_da[(d.get("dataset"), d.get("arch"))].append(d)
|
| 167 |
+
|
| 168 |
+
def pval(a, b):
|
| 169 |
+
L = min(a.size, b.size)
|
| 170 |
+
if L < 6:
|
| 171 |
+
return float("nan")
|
| 172 |
+
x, y = a[:L], b[:L]
|
| 173 |
+
m = ~(np.isnan(x) | np.isnan(y))
|
| 174 |
+
if m.sum() < 6 or np.allclose(x[m], y[m]):
|
| 175 |
+
return 1.0
|
| 176 |
+
try:
|
| 177 |
+
return float(wilcoxon(x[m], y[m]).pvalue)
|
| 178 |
+
except Exception:
|
| 179 |
+
return 1.0
|
| 180 |
+
|
| 181 |
+
out = {}
|
| 182 |
+
for ds in {k[0] for k in by_da}:
|
| 183 |
+
vecs = {a: _per_image_dice_vec(by_da[(ds, a)]) for a in _ARCH_ORDER if (ds, a) in by_da}
|
| 184 |
+
vecs = {a: v for a, v in vecs.items() if v.size}
|
| 185 |
+
if not vecs:
|
| 186 |
+
continue
|
| 187 |
+
means = {a: float(np.nanmean(v)) for a, v in vecs.items()}
|
| 188 |
+
best = max(means, key=means.get)
|
| 189 |
+
tied = {best}
|
| 190 |
+
for a, v in vecs.items():
|
| 191 |
+
if a != best and not (pval(vecs[best], v) < 0.05):
|
| 192 |
+
tied.add(a)
|
| 193 |
+
out[ds] = tied
|
| 194 |
+
return out
|
| 195 |
+
|
| 196 |
+
|
| 197 |
+
# ----------------------------------------------------------------------------- text exports
|
| 198 |
def to_csv(rows):
|
| 199 |
cols = ["dataset", "protocol", "arch", "n_seeds"]
|
| 200 |
for k, _, _, _ in METRICS:
|
|
|
|
| 205 |
return out
|
| 206 |
|
| 207 |
|
| 208 |
+
def _dice_matrix(rows):
|
| 209 |
+
"""(methods, datasets, cell, avg) for the main Dice table."""
|
| 210 |
+
cell, datasets, methods = _grid(rows)
|
| 211 |
+
avg = {a: np.nanmean([cell[(d, a)]["dice_mean"] for d in datasets if (d, a) in cell] or [np.nan])
|
| 212 |
+
for a in methods}
|
| 213 |
+
return cell, datasets, methods, avg
|
| 214 |
+
|
| 215 |
+
|
| 216 |
+
def _dice_bold(a, d, cell, best, sig):
|
| 217 |
+
"""Whether (dataset d, arch a)'s Dice cell should be bold: in the significance
|
| 218 |
+
'tied-for-best' set when available, else the single best per dataset."""
|
| 219 |
+
if (d, a) not in cell:
|
| 220 |
+
return False
|
| 221 |
+
if sig is not None:
|
| 222 |
+
return a in sig.get(d, set())
|
| 223 |
+
return cell[(d, a)]["dice_mean"] == best[d]
|
| 224 |
+
|
| 225 |
+
|
| 226 |
+
def to_markdown(rows, sig=None):
|
| 227 |
+
cell, datasets, methods, avg = _dice_matrix(rows)
|
| 228 |
+
head = ["Method"] + [_DS_DISP.get(d, d) for d in datasets] + ["Avg"]
|
| 229 |
+
out = "## Main results — Dice (mean±SD %, ↑)\n\n"
|
| 230 |
+
out += ("_**Bold** = best or not significantly worse than best per dataset "
|
| 231 |
+
"(paired Wilcoxon on per-image Dice, p≥0.05)._\n\n")
|
| 232 |
+
out += "| " + " | ".join(head) + " |\n|" + "---|" * len(head) + "\n"
|
| 233 |
+
best = {d: max((cell[(d, a)]["dice_mean"] for a in methods if (d, a) in cell), default=np.nan)
|
| 234 |
+
for d in datasets}
|
| 235 |
+
for a in methods:
|
| 236 |
+
cells = [_ARCH_DISP.get(a, a)]
|
| 237 |
+
for d in datasets:
|
| 238 |
+
if (d, a) in cell:
|
| 239 |
+
t = _fmt(cell[(d, a)], "dice", True)
|
| 240 |
+
cells.append(f"**{t}**" if _dice_bold(a, d, cell, best, sig) else t)
|
| 241 |
+
else:
|
| 242 |
+
cells.append("–")
|
| 243 |
+
cells.append(f"{avg[a]*100:.1f}")
|
| 244 |
+
out += "| " + " | ".join(cells) + " |\n"
|
| 245 |
return out
|
| 246 |
|
| 247 |
|
| 248 |
+
def to_latex(rows, sig=None):
|
| 249 |
+
cell, datasets, methods, avg = _dice_matrix(rows)
|
| 250 |
+
spec = "l" + "c" * (len(datasets) + 1)
|
| 251 |
+
out = ("% Main results: Dice (mean over seeds, %). Bold = best or not significantly\n"
|
| 252 |
+
"% worse than best per dataset (paired Wilcoxon on per-image Dice, p>=0.05).\n")
|
| 253 |
+
out += "\\begin{tabular}{" + spec + "}\n\\toprule\n"
|
| 254 |
+
out += "Method & " + " & ".join(_DS_DISP.get(d, d) for d in datasets) + " & Avg \\\\\n\\midrule\n"
|
| 255 |
+
best = {d: max((cell[(d, a)]["dice_mean"] for a in methods if (d, a) in cell), default=np.nan)
|
| 256 |
+
for d in datasets}
|
| 257 |
+
abest = max(methods, key=lambda a: avg[a])
|
| 258 |
+
for a in methods:
|
| 259 |
+
cells = [_ARCH_DISP.get(a, a)]
|
| 260 |
+
for d in datasets:
|
| 261 |
+
if (d, a) in cell:
|
| 262 |
+
t = f"{cell[(d, a)]['dice_mean'] * 100:.1f}"
|
| 263 |
+
cells.append(f"\\textbf{{{t}}}" if _dice_bold(a, d, cell, best, sig) else t)
|
| 264 |
+
else:
|
| 265 |
+
cells.append("--")
|
| 266 |
+
at = f"{avg[a]*100:.1f}"
|
| 267 |
+
cells.append(f"\\textbf{{{at}}}" if a == abest else at)
|
| 268 |
+
out += " & ".join(cells) + " \\\\\n"
|
| 269 |
+
if a == "attention_unet":
|
| 270 |
+
out += "\\midrule\n" # separate CNNs from transformers/foundation
|
| 271 |
+
out += "\\bottomrule\n\\end{tabular}\n"
|
| 272 |
+
return out
|
| 273 |
|
| 274 |
|
| 275 |
+
# ----------------------------------------------------------------------------- HTML report
|
| 276 |
_DATASETS_INFO = [
|
| 277 |
("1", "CVC-ClinicDB", "Colonoscopy (endoscopy)", "Polyp", "2", "RGB", "384×288", "official", "490 / 61 / 61"),
|
| 278 |
("2", "Kvasir-SEG", "GI endoscopy", "Polyp", "2", "RGB", "~622×529 (var)", "official", "800 / 100 / 100"),
|
|
|
|
| 285 |
("9", "ISIC2018", "Dermoscopy", "Skin lesion", "2", "RGB", "256×256", "holdout", "2582 / 369 / 737"),
|
| 286 |
("10", "KiTS19", "Kidney CT (2D slices)", "Kidney (binary)", "2", "grayscale¹", "256×256", "single-split²", "2832 / 479 / 705"),
|
| 287 |
]
|
|
|
|
| 288 |
_METHODS_INFO = [
|
| 289 |
+
("UNet", "CNN encoder–decoder", "SMP, ResNet-50 encoder (ImageNet)"),
|
| 290 |
("UNet++", "Nested UNet", "SMP, ResNet-50 (ImageNet)"),
|
| 291 |
("DeepLabV3+", "Atrous CNN", "SMP, ResNet-50 (ImageNet)"),
|
| 292 |
+
("Attention-UNet", "Attention-gated UNet", "Re-implemented, from scratch"),
|
| 293 |
+
("TransUNet", "CNN–Transformer hybrid", "R50-ViT-B/16 (ImageNet), input 256"),
|
| 294 |
+
("Swin-UNet", "Pure-Transformer UNet", "Swin-Tiny (ImageNet), input 224"),
|
| 295 |
("nnU-Net (v2)", "Self-configuring CNN", "2D config, 250 epochs"),
|
| 296 |
("U-Mamba", "State-space (Mamba) UNet", "U-Mamba_Bot, 100 epochs"),
|
| 297 |
]
|
|
|
|
|
|
|
| 298 |
_METRICS_INFO = [
|
| 299 |
+
("Dice (DSC)", "2TP / (2TP+FP+FN)", "↑", "%", "区��重叠度(主指标),对类别不平衡较鲁棒。"),
|
| 300 |
+
("IoU (Jaccard)", "TP / (TP+FP+FN)", "↑", "%", "交并比,更严格的重叠度,常与 Dice 并列。"),
|
| 301 |
+
("HD95", "95% Hausdorff distance (boundaries)", "↓", "px", "边界最大误差的95%分位,越小边界越贴合。"),
|
| 302 |
+
("ASSD", "average symmetric surface distance", "↓", "px", "平均对称表面距离,整体边界吻合度。"),
|
| 303 |
+
("Sensitivity", "TP / (TP+FN)", "↑", "%", "召回/敏感度,反映漏分割程度。"),
|
| 304 |
+
("Specificity", "TN / (TN+FP)", "↑", "%", "特异度,背景误报控制。"),
|
| 305 |
+
("Precision", "TP / (TP+FP)", "↑", "%", "精确率,反映过分割/误报程度。"),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 306 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 307 |
_PERCLASS_NAMES = {
|
| 308 |
"acdc_png": {"1": "RV", "2": "Myocardium", "3": "LV"},
|
| 309 |
"refuge2": {"1": "Optic Disc", "2": "Optic Cup"},
|
|
|
|
| 313 |
|
| 314 |
|
| 315 |
def _collect_perclass(runs):
|
| 316 |
+
acc = defaultdict(lambda: defaultdict(list))
|
| 317 |
for d in runs:
|
| 318 |
key = (d.get("dataset"), d.get("arch"))
|
| 319 |
for pi in d.get("per_image", []):
|
|
|
|
| 324 |
return {k: {c: float(np.mean(v)) for c, v in cd.items() if v} for k, cd in acc.items()}
|
| 325 |
|
| 326 |
|
| 327 |
+
_CSS = """
|
| 328 |
+
body{font-family:'Helvetica Neue',Arial,sans-serif;margin:30px auto;max-width:1180px;color:#1a1a1a;line-height:1.5}
|
| 329 |
+
h1{font-size:21px;margin:0 0 4px}h2{font-size:15px;color:#0a5a33;margin:30px 0 4px;border-bottom:1px solid #e3e3e3;padding-bottom:3px}
|
| 330 |
+
h3{font-size:13px;margin:16px 0 4px;color:#333}
|
| 331 |
+
p,li{font-size:13px}code{background:#f2f2f2;padding:1px 4px;border-radius:3px}
|
| 332 |
+
.cap{color:#666;font-size:11.5px;margin:3px 0 6px}
|
| 333 |
+
.tw{overflow-x:auto}
|
| 334 |
+
table.rt{border-collapse:collapse;margin:6px 0 8px;font-size:11.5px}
|
| 335 |
+
table.rt th,table.rt td{padding:4px 9px;text-align:center;white-space:nowrap}
|
| 336 |
+
table.rt thead th{border-top:2px solid #222;border-bottom:1.2px solid #222;font-weight:600}
|
| 337 |
+
table.rt tbody tr:last-child td{border-bottom:2px solid #222}
|
| 338 |
+
table.rt td.m,table.rt th.m{text-align:left;font-weight:600}
|
| 339 |
+
table.rt td.avg,table.rt th.avg{border-left:1px solid #c8c8c8;background:#f7f9f8}
|
| 340 |
+
table.rt tbody tr.grp td{border-top:1px solid #cfcfcf}
|
| 341 |
+
table.rt b{color:#08402a}
|
| 342 |
+
table.info{border-collapse:collapse;margin:6px 0 14px;font-size:12px}
|
| 343 |
+
table.info th,table.info td{border:1px solid #ddd;padding:4px 8px;text-align:center}
|
| 344 |
+
table.info th{background:#f3f3f3}table.info td.l{text-align:left}
|
| 345 |
+
.note{background:#eef7f0;border-left:3px solid #0a6;padding:8px 12px;font-size:12.5px;margin:8px 0}
|
| 346 |
+
hr{border:none;border-top:1px solid #e3e3e3;margin:24px 0}
|
| 347 |
+
"""
|
| 348 |
+
|
| 349 |
+
|
| 350 |
+
def _metric_table(cell, datasets, methods, key, pct, hib, bold_sets=None):
|
| 351 |
+
"""Transposed table: methods (rows) × datasets (cols) + Avg. bold_sets[ds] (set of archs)
|
| 352 |
+
if given (Dice significance), else bold the single best per column."""
|
| 353 |
+
best = {}
|
| 354 |
+
for d in datasets:
|
| 355 |
+
vals = {a: cell[(d, a)][f"{key}_mean"] for a in methods
|
| 356 |
+
if (d, a) in cell and cell[(d, a)][f"{key}_mean"] == cell[(d, a)][f"{key}_mean"]}
|
| 357 |
+
best[d] = ((max if hib else min)(vals, key=vals.get) if vals else None)
|
| 358 |
+
avg = {a: np.nanmean([cell[(d, a)][f"{key}_mean"] for d in datasets if (d, a) in cell] or [np.nan])
|
| 359 |
+
for a in methods}
|
| 360 |
+
avg = {a: (v if v == v else np.nan) for a, v in avg.items()}
|
| 361 |
+
finite = {a: v for a, v in avg.items() if v == v}
|
| 362 |
+
abest = ((max if hib else min)(finite, key=finite.get) if finite else None)
|
| 363 |
+
h = ["<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th>"
|
| 364 |
+
+ "".join(f"<th>{_DS_DISP.get(d, d)}</th>" for d in datasets)
|
| 365 |
+
+ "<th class='avg'>Avg</th></tr></thead><tbody>"]
|
| 366 |
+
for a in methods:
|
| 367 |
+
grp = " class='grp'" if a == "transunet" else ""
|
| 368 |
+
tds = [f"<td class='m'>{_ARCH_DISP.get(a, a)}</td>"]
|
| 369 |
+
for d in datasets:
|
| 370 |
+
if (d, a) in cell and cell[(d, a)][f"{key}_mean"] == cell[(d, a)][f"{key}_mean"]:
|
| 371 |
+
t = _fmt(cell[(d, a)], key, pct)
|
| 372 |
+
b = (a in bold_sets.get(d, set())) if bold_sets is not None else (a == best[d])
|
| 373 |
+
tds.append(f"<td>{'<b>'+t+'</b>' if b else t}</td>")
|
| 374 |
+
else:
|
| 375 |
+
tds.append("<td>–</td>")
|
| 376 |
+
av = avg[a]
|
| 377 |
+
at = ("–" if av != av else (f"{av*100:.1f}" if pct else f"{av:.2f}"))
|
| 378 |
+
tds.append(f"<td class='avg'>{'<b>'+at+'</b>' if a == abest else at}</td>")
|
| 379 |
+
h.append(f"<tr{grp}>" + "".join(tds) + "</tr>")
|
| 380 |
+
h.append("</tbody></table></div>")
|
| 381 |
+
return "\n".join(h)
|
| 382 |
+
|
| 383 |
+
|
| 384 |
+
def _overall_table(cell, datasets, methods):
|
| 385 |
+
cm = _col_means(cell, datasets, methods)
|
| 386 |
+
best = {}
|
| 387 |
+
for key, _, _, hib in METRICS:
|
| 388 |
+
vals = {a: cm[a][key] for a in methods if cm[a][key] == cm[a][key]}
|
| 389 |
+
best[key] = ((max if hib else min)(vals, key=vals.get) if vals else None)
|
| 390 |
+
h = ["<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th>"
|
| 391 |
+
+ "".join(f"<th>{lbl}{'↑' if hib else '↓'}</th>" for _, lbl, _, hib in METRICS)
|
| 392 |
+
+ "</tr></thead><tbody>"]
|
| 393 |
+
for a in methods:
|
| 394 |
+
grp = " class='grp'" if a == "transunet" else ""
|
| 395 |
+
tds = [f"<td class='m'>{_ARCH_DISP.get(a, a)}</td>"]
|
| 396 |
+
for key, _, pct, _ in METRICS:
|
| 397 |
+
v = cm[a][key]
|
| 398 |
+
t = ("–" if v != v else (f"{v*100:.1f}" if pct else f"{v:.2f}"))
|
| 399 |
+
tds.append(f"<td>{'<b>'+t+'</b>' if a == best[key] else t}</td>")
|
| 400 |
+
h.append(f"<tr{grp}>" + "".join(tds) + "</tr>")
|
| 401 |
+
h.append("</tbody></table></div>")
|
| 402 |
+
return "\n".join(h)
|
| 403 |
+
|
| 404 |
+
|
| 405 |
def _perclass_section(runs):
|
| 406 |
pc = _collect_perclass(runs)
|
| 407 |
+
h = []
|
|
|
|
|
|
|
|
|
|
| 408 |
for ds, names in _PERCLASS_NAMES.items():
|
| 409 |
methods = [a for a in _ARCH_ORDER if (ds, a) in pc and pc[(ds, a)]]
|
| 410 |
if not methods:
|
| 411 |
continue
|
| 412 |
classes = sorted(names, key=int)
|
| 413 |
+
colbest = {c: max((pc[(ds, a)].get(c, float('nan')) for a in methods), default=float('nan'))
|
| 414 |
+
for c in classes}
|
| 415 |
+
h.append(f"<h3>{_DS_DISP.get(ds, ds)}</h3>")
|
| 416 |
+
h.append("<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th>"
|
| 417 |
+
+ "".join(f"<th>{names[c]}</th>" for c in classes) + "<th class='avg'>macro</th></tr></thead><tbody>")
|
|
|
|
| 418 |
for a in methods:
|
| 419 |
+
grp = " class='grp'" if a == "transunet" else ""
|
| 420 |
+
cells, present = [], []
|
|
|
|
| 421 |
for c in classes:
|
| 422 |
+
v = pc[(ds, a)].get(c)
|
| 423 |
if v is None:
|
| 424 |
+
cells.append("<td>–</td>")
|
| 425 |
else:
|
| 426 |
present.append(v)
|
| 427 |
+
t = f"{v*100:.1f}"
|
| 428 |
+
cells.append(f"<td>{'<b>'+t+'</b>' if v == colbest[c] else t}</td>")
|
| 429 |
macro = (sum(present) / len(present) * 100) if present else float("nan")
|
| 430 |
+
h.append(f"<tr{grp}><td class='m'>{_ARCH_DISP.get(a, a)}</td>{''.join(cells)}"
|
| 431 |
+
f"<td class='avg'>{macro:.1f}</td></tr>")
|
| 432 |
+
h.append("</tbody></table></div>")
|
| 433 |
return "\n".join(h)
|
| 434 |
|
| 435 |
|
| 436 |
+
def _setup_html():
|
| 437 |
+
h = ["<h2>A. Datasets</h2>",
|
| 438 |
+
"<table class='info'><tr><th>#</th><th>Dataset</th><th>Modality</th><th>Target</th><th>Cls</th>"
|
| 439 |
+
"<th>Ch</th><th>Native size</th><th>Protocol</th><th>Train/Val/Test</th></tr>"]
|
| 440 |
+
for r in _DATASETS_INFO:
|
| 441 |
+
h.append("<tr><td>%s</td><td class='l'>%s</td><td class='l'>%s</td><td class='l'>%s</td><td>%s</td>"
|
| 442 |
+
"<td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % r)
|
| 443 |
+
h.append("</table>")
|
| 444 |
+
h.append("<div class='cap'>¹ BUSI/KiTS19 grayscale stored as 3-ch PNG (read as grayscale). "
|
| 445 |
+
"² no canonical split → one fixed fold (of 5) with 3 seeds; others use the official split. "
|
| 446 |
+
"Labels 0…C-1 (0=bg); multi-class metrics macro-averaged over foreground classes.</div>")
|
| 447 |
+
h.append("<h2>B. Methods</h2>")
|
| 448 |
+
h.append("<table class='info'><tr><th>Method</th><th>Family</th><th>Backbone / setup</th></tr>")
|
| 449 |
+
for m in _METHODS_INFO:
|
| 450 |
+
h.append("<tr><td class='l'>%s</td><td class='l'>%s</td><td class='l'>%s</td></tr>" % m)
|
| 451 |
+
h.append("</table>")
|
| 452 |
+
h.append("<h2>C. Metrics</h2>")
|
| 453 |
+
h.append("<table class='info'><tr><th>Metric</th><th>Definition</th><th>Dir</th><th>Unit</th>"
|
| 454 |
+
"<th>作用 / 含义(中文)</th></tr>")
|
| 455 |
+
for m in _METRICS_INFO:
|
| 456 |
+
h.append("<tr><td class='l'>%s</td><td class='l'>%s</td><td>%s</td><td>%s</td><td class='l'>%s</td></tr>" % m)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 457 |
h.append("</table>")
|
| 458 |
return "\n".join(h)
|
| 459 |
|
| 460 |
|
| 461 |
+
def to_html(rows, runs=None, title="SegGen benchmark", sig=None):
|
| 462 |
+
cell, datasets, methods = _grid(rows)
|
| 463 |
+
if sig is None:
|
| 464 |
+
sig = _sig_tied_sets(runs) if runs else None
|
| 465 |
+
nseeds = {r["dataset"]: r["n_seeds"] for r in rows}
|
| 466 |
+
h = [f"<!doctype html><html><head><meta charset='utf-8'><title>{title}</title><style>{_CSS}</style>"
|
| 467 |
+
"</head><body>"]
|
| 468 |
+
h.append(f"<h1>{title}: 8 methods × 10 datasets (unified 512, resolution-fair)</h1>")
|
| 469 |
+
h.append("<p>Eight 2D medical-image segmentation methods on ten public datasets (seven modalities). "
|
| 470 |
+
"Values are <b>mean±SD</b> over 3 seeds (over the 3 folds for PanNuke). "
|
| 471 |
+
"Each (dataset,method) cell aggregates tens–thousands of test images.</p>")
|
| 472 |
+
h.append("<div class='note'><b>Resolution-fair protocol.</b> Convolutional nets train at 512; the fixed-input "
|
| 473 |
+
"transformers (Swin-UNet 224, TransUNet 256) and nnU-Net/U-Mamba run at their native size; "
|
| 474 |
+
"<b>every prediction and ground truth is then resized to a common 512×512 before scoring</b>, so "
|
| 475 |
+
"boundary metrics (HD95/ASSD, in pixels) are directly comparable across methods.</div>")
|
| 476 |
+
|
| 477 |
+
h.append("<h2>1. Main results — Dice (%) ↑</h2>")
|
| 478 |
+
h.append("<div class='cap'><b>Bold</b> = best, or not significantly different from the best per dataset "
|
| 479 |
+
"(paired Wilcoxon on per-image Dice, p≥0.05). Last column = mean over the 10 datasets. "
|
| 480 |
+
"Horizontal rule separates CNNs (top) from Transformer / foundation models (bottom).</div>")
|
| 481 |
+
h.append(_metric_table(cell, datasets, methods, "dice", True, True, bold_sets=sig))
|
| 482 |
+
|
| 483 |
+
h.append("<h2>2. Boundary accuracy — HD95 (px) ↓</h2>")
|
| 484 |
+
h.append("<div class='cap'>95% Hausdorff distance at the common 512 resolution (lower = better; "
|
| 485 |
+
"<b>bold</b> = best per dataset). Now comparable across methods.</div>")
|
| 486 |
+
h.append(_metric_table(cell, datasets, methods, "hd95", False, False))
|
| 487 |
+
|
| 488 |
+
h.append("<h2>3. Overlap — IoU (%) ↑</h2>")
|
| 489 |
+
h.append("<div class='cap'>Jaccard index, the stricter overlap measure (<b>bold</b> = best per dataset). "
|
| 490 |
+
"Last column = mean over the 10 datasets.</div>")
|
| 491 |
+
h.append(_metric_table(cell, datasets, methods, "iou", True, True))
|
| 492 |
+
|
| 493 |
+
h.append("<h2>4. Overall ranking — mean over the 10 datasets</h2>")
|
| 494 |
+
h.append("<div class='cap'>Each method's macro-average of every metric across all datasets "
|
| 495 |
+
"(<b>bold</b> = best column). ↑ higher better, ↓ lower better.</div>")
|
| 496 |
+
h.append(_overall_table(cell, datasets, methods))
|
| 497 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 498 |
if runs:
|
| 499 |
+
pcs = _perclass_section(runs)
|
| 500 |
+
if pcs.strip():
|
| 501 |
+
h.append("<h2>5. Per-class Dice (%) — multi-class datasets</h2>")
|
| 502 |
+
h.append("<div class='cap'>Mean per-class Dice over all test images/runs (0=background excluded; "
|
| 503 |
+
"<b>bold</b>=best per class). Shows which structures drive each method's macro-Dice.</div>")
|
| 504 |
+
h.append(pcs)
|
| 505 |
+
|
| 506 |
+
h.append("<hr><h2>Appendix — Experimental setup</h2>")
|
| 507 |
+
h.append("<p class='cap'>Full per-(dataset,method) values for every metric are in "
|
| 508 |
+
"<code>summary.csv</code>; the main Dice table as LaTeX is in <code>summary.tex</code>.</p>")
|
| 509 |
+
h.append(_setup_html())
|
| 510 |
h.append("</body></html>")
|
| 511 |
return "\n".join(h)
|
| 512 |
|
|
|
|
| 522 |
print(f"no metrics.json under {args.out_root}/{args.exp_name}")
|
| 523 |
return
|
| 524 |
rows = summarize(runs)
|
| 525 |
+
sig = _sig_tied_sets(runs)
|
| 526 |
base = os.path.join(args.out_root, args.exp_name)
|
| 527 |
open(os.path.join(base, "summary.csv"), "w").write(to_csv(rows))
|
| 528 |
+
open(os.path.join(base, "summary.md"), "w").write(to_markdown(rows, sig))
|
| 529 |
+
open(os.path.join(base, "summary.tex"), "w").write(to_latex(rows, sig))
|
| 530 |
+
open(os.path.join(base, "summary.html"), "w").write(
|
| 531 |
+
to_html(rows, runs, title=f"SegGen benchmark ({args.exp_name})", sig=sig))
|
| 532 |
+
print(to_markdown(rows, sig))
|
| 533 |
print(f"{len(runs)} runs -> {len(rows)} (dataset,arch) cells; written {base}/summary.{{csv,md,tex,html}}")
|
| 534 |
|
| 535 |
|
results/summary.html
CHANGED
|
@@ -1,19 +1,125 @@
|
|
| 1 |
-
<!doctype html><html><head><meta charset='utf-8'><title>SegGen
|
| 2 |
-
body{font-family:
|
| 3 |
-
h1{font-size:
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
<tr><td>1</td><td class='l'>CVC-ClinicDB</td><td class='l'>Colonoscopy (endoscopy)</td><td class='l'>Polyp</td><td>2</td><td>RGB</td><td>384×288</td><td>official</td><td>490 / 61 / 61</td></tr>
|
| 18 |
<tr><td>2</td><td class='l'>Kvasir-SEG</td><td class='l'>GI endoscopy</td><td class='l'>Polyp</td><td>2</td><td>RGB</td><td>~622×529 (var)</td><td>official</td><td>800 / 100 / 100</td></tr>
|
| 19 |
<tr><td>3</td><td class='l'>FIVES</td><td class='l'>Retinal fundus</td><td class='l'>Vessel</td><td>2</td><td>RGB</td><td>2048×2048</td><td>official</td><td>480 / 120 / 200</td></tr>
|
|
@@ -25,185 +131,26 @@ b{color:#0a6}.cap{color:#777;font-size:12px;margin:2px 0 14px}</style></head><bo
|
|
| 25 |
<tr><td>9</td><td class='l'>ISIC2018</td><td class='l'>Dermoscopy</td><td class='l'>Skin lesion</td><td>2</td><td>RGB</td><td>256×256</td><td>holdout</td><td>2582 / 369 / 737</td></tr>
|
| 26 |
<tr><td>10</td><td class='l'>KiTS19</td><td class='l'>Kidney CT (2D slices)</td><td class='l'>Kidney (binary)</td><td>2</td><td>grayscale¹</td><td>256×256</td><td>single-split²</td><td>2832 / 479 / 705</td></tr>
|
| 27 |
</table>
|
| 28 |
-
<div class='cap'>¹ BUSI/KiTS19
|
| 29 |
-
<h2>
|
| 30 |
-
<table><tr><th>Method</th><th>Family</th><th>Backbone / setup</th></tr>
|
| 31 |
-
<tr><td class='l'>UNet</td><td class='l'>CNN encoder–decoder</td><td class='l'>SMP, ResNet-50 encoder (ImageNet
|
| 32 |
<tr><td class='l'>UNet++</td><td class='l'>Nested UNet</td><td class='l'>SMP, ResNet-50 (ImageNet)</td></tr>
|
| 33 |
<tr><td class='l'>DeepLabV3+</td><td class='l'>Atrous CNN</td><td class='l'>SMP, ResNet-50 (ImageNet)</td></tr>
|
| 34 |
-
<tr><td class='l'>Attention-UNet</td><td class='l'>Attention-gated UNet</td><td class='l'>Re-implemented,
|
| 35 |
-
<tr><td class='l'>TransUNet</td><td class='l'>CNN–Transformer hybrid</td><td class='l'>R50-ViT-B/16 (ImageNet
|
| 36 |
-
<tr><td class='l'>Swin-UNet</td><td class='l'>Pure-Transformer UNet</td><td class='l'>Swin-Tiny (ImageNet
|
| 37 |
<tr><td class='l'>nnU-Net (v2)</td><td class='l'>Self-configuring CNN</td><td class='l'>2D config, 250 epochs</td></tr>
|
| 38 |
<tr><td class='l'>U-Mamba</td><td class='l'>State-space (Mamba) UNet</td><td class='l'>U-Mamba_Bot, 100 epochs</td></tr>
|
| 39 |
</table>
|
| 40 |
-
<h2>
|
| 41 |
-
<table><tr><th>Metric</th><th>Definition</th><th>
|
| 42 |
-
<tr><td class='l'>Dice (DSC)</td><td class='l'>
|
| 43 |
-
<tr><td class='l'>IoU (Jaccard)</td><td class='l'>
|
| 44 |
-
<tr><td class='l'>
|
| 45 |
-
<tr><td class='l'>
|
| 46 |
-
<tr><td class='l'>
|
| 47 |
-
<tr><td class='l'>
|
| 48 |
-
<tr><td class='l'>
|
| 49 |
-
</table>
|
| 50 |
-
<p style='font-size:12.5px'>P = predicted foreground, G = ground-truth foreground; TP/FP/FN/TN are pixel counts. Overlap metrics (Dice/IoU/Sens/Spec/Prec) are exact pixel computations; boundary metrics (HD95/ASSD) are computed with MONAI on the mask edges.</p>
|
| 51 |
-
<h2>Evaluation protocol</h2>
|
| 52 |
-
<p>For each test image, every metric is computed <b>per foreground class</b> (background excluded) and macro-averaged over the classes present; classes absent in <i>both</i> prediction and ground truth are skipped so they do not dilute the score. Per-image values are averaged to one score per (dataset, method, run); we then report <b>mean±SD across runs</b> — 3 random seeds for fixed-split datasets, or across folds for CV datasets. For surface metrics, an empty–empty (no foreground in either) pair scores 0, while empty-vs-non-empty is undefined (NaN) and excluded from the average. All methods share the same held-out test images per dataset, so comparisons are paired.</p>
|
| 53 |
-
<hr style='margin:18px 0;border:none;border-top:1px solid #ddd'>
|
| 54 |
-
</div>
|
| 55 |
-
<h1 style='font-size:18px'>Results</h1>
|
| 56 |
-
<h2>Dice (%)</h2>
|
| 57 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 58 |
-
<tr><td class='ds'>acdc_png/official</td><td>77.78±0.39</td><td><b>79.75±0.57</b></td><td>78.33±0.49</td><td>74.57±0.15</td><td>79.46±0.44</td><td>71.26±1.36</td><td>73.81±0.38</td><td>68.68±0.89</td><td>3</td></tr>
|
| 59 |
-
<tr><td class='ds'>busi/single-split</td><td>72.76±2.47</td><td>74.67±0.68</td><td>76.12±1.20</td><td>65.98±1.11</td><td><b>76.53±1.65</b></td><td>76.00±0.94</td><td>75.39±1.35</td><td>73.73±0.35</td><td>3</td></tr>
|
| 60 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td><b>94.49±0.14</b></td><td>93.92±0.51</td><td>93.83±0.42</td><td>91.73±0.33</td><td>94.29±0.31</td><td>92.72±0.33</td><td>94.24±0.64</td><td>92.98±0.55</td><td>3</td></tr>
|
| 61 |
-
<tr><td class='ds'>fives/official</td><td>86.81±0.08</td><td>86.77±0.80</td><td>80.97±0.30</td><td>85.64±0.20</td><td>73.10±0.84</td><td>68.78±0.18</td><td><b>89.00±0.35</b></td><td>82.68±1.21</td><td>3</td></tr>
|
| 62 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>49.75±0.65</td><td>50.52±2.11</td><td>49.34±0.48</td><td>44.65±0.61</td><td>25.66±3.11</td><td>20.95±15.57</td><td>64.64±0.11</td><td><b>64.64±0.10</b></td><td>3</td></tr>
|
| 63 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>88.41±0.54</td><td>87.88±0.19</td><td>90.39±0.47</td><td>87.58±0.11</td><td>90.76±0.37</td><td>90.15±0.62</td><td>90.44±0.88</td><td><b>91.23±0.14</b></td><td>3</td></tr>
|
| 64 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>90.08±0.12</td><td>89.92±0.06</td><td>90.68±0.10</td><td>88.57±0.25</td><td>90.83±0.27</td><td><b>91.04±0.14</b></td><td>90.20±0.14</td><td>90.22±0.21</td><td>3</td></tr>
|
| 65 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td>74.59±5.62</td><td>72.19±3.00</td><td><b>78.70±1.34</b></td><td>64.74±1.44</td><td>76.82±0.93</td><td>63.42±2.92</td><td>70.44±1.93</td><td>72.41±1.03</td><td>3</td></tr>
|
| 66 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td>49.85±0.33</td><td>50.01±0.13</td><td>52.35±0.35</td><td>45.87±0.39</td><td>53.60±0.35</td><td><b>54.34±0.42</b></td><td>47.82±0.55</td><td>49.40±0.51</td><td>3</td></tr>
|
| 67 |
-
<tr><td class='ds'>refuge2/official</td><td>84.76±0.89</td><td><b>86.66±1.10</b></td><td>84.26±0.94</td><td>75.49±4.01</td><td>76.90±1.37</td><td>80.95±4.15</td><td>85.55±0.23</td><td>82.42±1.25</td><td>3</td></tr>
|
| 68 |
-
</table>
|
| 69 |
-
<h2>IoU (%)</h2>
|
| 70 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 71 |
-
<tr><td class='ds'>acdc_png/official</td><td>70.36±0.40</td><td><b>72.56±0.81</b></td><td>70.80±0.43</td><td>66.90±0.47</td><td>71.08±0.70</td><td>62.36±1.35</td><td>66.98±0.35</td><td>61.82±0.88</td><td>3</td></tr>
|
| 72 |
-
<tr><td class='ds'>busi/single-split</td><td>64.44±2.32</td><td>66.19±0.61</td><td>67.48±1.21</td><td>57.34±0.92</td><td><b>68.44±1.56</b></td><td>67.46±0.68</td><td>67.68±1.22</td><td>65.57±0.50</td><td>3</td></tr>
|
| 73 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td><b>89.91±0.20</b></td><td>89.42±0.61</td><td>89.12±0.42</td><td>86.04±0.51</td><td>89.62±0.41</td><td>87.03±0.35</td><td>89.69±0.75</td><td>87.93±0.81</td><td>3</td></tr>
|
| 74 |
-
<tr><td class='ds'>fives/official</td><td>78.13±0.07</td><td>77.97±1.27</td><td>69.44±0.34</td><td>76.20±0.22</td><td>58.44±1.10</td><td>53.20±0.10</td><td><b>82.66±0.21</b></td><td>74.13±1.87</td><td>3</td></tr>
|
| 75 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>41.31±0.60</td><td>41.58±1.32</td><td>39.78±0.37</td><td>36.58±0.44</td><td>22.79±2.25</td><td>17.08±12.51</td><td>52.93±0.04</td><td><b>53.04±0.09</b></td><td>3</td></tr>
|
| 76 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>82.98±0.38</td><td>82.32±0.25</td><td>84.62±0.60</td><td>80.22±0.22</td><td>85.28±0.29</td><td>84.10±0.69</td><td>84.42±1.19</td><td><b>85.29±0.14</b></td><td>3</td></tr>
|
| 77 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>83.65±0.10</td><td>83.46±0.03</td><td>84.40±0.15</td><td>81.64±0.30</td><td>84.53±0.37</td><td><b>84.89±0.21</b></td><td>83.97±0.18</td><td>83.98±0.22</td><td>3</td></tr>
|
| 78 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td>67.10±5.84</td><td>64.12±3.25</td><td><b>70.91±1.74</b></td><td>56.30±2.10</td><td>69.11±1.04</td><td>55.87±2.86</td><td>63.29±1.50</td><td>65.00±1.11</td><td>3</td></tr>
|
| 79 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td>40.50±0.35</td><td>40.65±0.20</td><td>42.54±0.38</td><td>36.95±0.34</td><td>43.82±0.20</td><td><b>44.11±0.34</b></td><td>38.39±0.50</td><td>40.01±0.51</td><td>3</td></tr>
|
| 80 |
-
<tr><td class='ds'>refuge2/official</td><td>74.31±1.24</td><td><b>77.11±1.72</b></td><td>73.60±1.40</td><td>63.91±3.95</td><td>64.73±1.36</td><td>68.98±5.52</td><td>75.57±0.31</td><td>71.20±1.97</td><td>3</td></tr>
|
| 81 |
-
</table>
|
| 82 |
-
<h2>HD95 (lower=better)</h2>
|
| 83 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 84 |
-
<tr><td class='ds'>acdc_png/official</td><td>17.91±1.55</td><td>16.63±3.75</td><td>15.79±0.90</td><td>27.13±2.50</td><td><b>15.64±1.75</b></td><td>15.85±0.56</td><td>16.93±0.70</td><td>21.79±1.16</td><td>3</td></tr>
|
| 85 |
-
<tr><td class='ds'>busi/single-split</td><td>70.02±7.49</td><td>62.67±0.86</td><td>53.29±0.90</td><td>98.10±5.07</td><td><b>43.79±1.43</b></td><td>51.91±2.96</td><td>49.83±1.37</td><td>60.19±3.74</td><td>3</td></tr>
|
| 86 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td>19.46±0.53</td><td><b>19.28±3.15</b></td><td>21.19±0.33</td><td>45.21±6.77</td><td>19.53±0.69</td><td>22.70±1.25</td><td>22.37±1.75</td><td>22.80±2.25</td><td>3</td></tr>
|
| 87 |
-
<tr><td class='ds'>fives/official</td><td>12.21±0.68</td><td><b>11.60±0.43</b></td><td>17.02±0.93</td><td>13.82±2.13</td><td>22.64±0.42</td><td>29.64±2.19</td><td>14.76±1.05</td><td>28.66±1.08</td><td>3</td></tr>
|
| 88 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>68.00±0.38</td><td>77.61±8.63</td><td>87.84±3.82</td><td>75.44±4.17</td><td>86.98±29.21</td><td>89.66±13.40</td><td>67.25±2.79</td><td><b>64.19±1.12</b></td><td>3</td></tr>
|
| 89 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>39.96±3.32</td><td>41.23±2.76</td><td>38.27±3.50</td><td>63.80±1.73</td><td><b>31.81±1.27</b></td><td>34.84±0.81</td><td>38.85±5.15</td><td>37.78±1.17</td><td>3</td></tr>
|
| 90 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>34.82±1.57</td><td>34.66±0.03</td><td>30.76±0.28</td><td>46.32±2.81</td><td>28.21±0.86</td><td><b>26.72±0.58</b></td><td>30.38±0.42</td><td>29.95±0.87</td><td>3</td></tr>
|
| 91 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td>39.79±6.37</td><td>46.19±1.36</td><td><b>36.29±1.75</b></td><td>50.10±0.65</td><td>41.37±2.53</td><td>52.42±1.11</td><td>39.19±0.93</td><td>38.55±2.43</td><td>3</td></tr>
|
| 92 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td>140.39±1.84</td><td>140.91±2.40</td><td>136.89±1.88</td><td>146.04±3.87</td><td>134.40±1.48</td><td><b>132.62±0.94</b></td><td>147.16±1.97</td><td>142.36±1.82</td><td>3</td></tr>
|
| 93 |
-
<tr><td class='ds'>refuge2/official</td><td>17.13±1.77</td><td>16.78±8.92</td><td>8.93±0.64</td><td>23.03±10.16</td><td>9.24±0.48</td><td>17.42±4.99</td><td><b>6.36±1.11</b></td><td>7.23±0.47</td><td>3</td></tr>
|
| 94 |
-
</table>
|
| 95 |
-
<h2>ASSD (lower=better)</h2>
|
| 96 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 97 |
-
<tr><td class='ds'>acdc_png/official</td><td>4.29±0.19</td><td><b>3.89±0.42</b></td><td>3.96±0.20</td><td>6.64±0.60</td><td>4.29±0.25</td><td>5.25±0.23</td><td>6.73±0.40</td><td>11.22±1.22</td><td>3</td></tr>
|
| 98 |
-
<tr><td class='ds'>busi/single-split</td><td>24.70±4.36</td><td>18.90±1.26</td><td>17.36±0.79</td><td>34.20±1.08</td><td><b>14.88±0.85</b></td><td>17.56±0.21</td><td>15.63±0.67</td><td>20.37±1.68</td><td>3</td></tr>
|
| 99 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td><b>4.05±0.04</b></td><td>4.23±0.76</td><td>4.42±0.11</td><td>9.76±1.90</td><td>4.26±0.23</td><td>4.99±0.22</td><td>5.23±0.60</td><td>4.99±0.30</td><td>3</td></tr>
|
| 100 |
-
<tr><td class='ds'>fives/official</td><td>2.79±0.35</td><td><b>2.61±0.10</b></td><td>3.82±0.33</td><td>2.84±0.27</td><td>4.07±0.22</td><td>5.26±0.71</td><td>3.31±0.11</td><td>5.12±0.23</td><td>3</td></tr>
|
| 101 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>14.87±0.84</td><td>18.99±2.70</td><td>24.05±2.07</td><td>18.07±1.24</td><td>31.60±9.41</td><td>27.12±4.24</td><td>14.39±0.41</td><td><b>11.88±0.76</b></td><td>3</td></tr>
|
| 102 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>10.44±1.04</td><td>10.75±0.76</td><td>9.24±0.59</td><td>13.54±0.38</td><td><b>8.13±0.45</b></td><td>9.03±0.74</td><td>9.34±1.11</td><td>8.85±0.16</td><td>3</td></tr>
|
| 103 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>11.64±0.26</td><td>11.58±0.09</td><td>10.54±0.16</td><td>15.07±0.79</td><td>10.36±0.30</td><td><b>9.85±0.16</b></td><td>11.62±0.16</td><td>11.51±0.48</td><td>3</td></tr>
|
| 104 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td><b>12.45±2.46</b></td><td>13.69±0.81</td><td>14.49±0.75</td><td>16.36±0.51</td><td>17.79±1.51</td><td>27.15±1.89</td><td>18.90±1.27</td><td>20.21±2.64</td><td>3</td></tr>
|
| 105 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td>40.59±0.81</td><td>40.58±0.36</td><td>38.90±0.80</td><td>41.79±1.35</td><td><b>37.35±0.11</b></td><td>37.48±0.61</td><td>44.45±0.13</td><td>42.08±0.67</td><td>3</td></tr>
|
| 106 |
-
<tr><td class='ds'>refuge2/official</td><td>4.72±0.76</td><td>3.64±0.97</td><td>3.34±0.18</td><td>8.58±5.22</td><td>3.61±0.10</td><td>4.47±1.14</td><td><b>2.51±0.08</b></td><td>3.09±0.23</td><td>3</td></tr>
|
| 107 |
-
</table>
|
| 108 |
-
<h2>Sens (%)</h2>
|
| 109 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 110 |
-
<tr><td class='ds'>acdc_png/official</td><td>78.65±0.41</td><td><b>80.79±0.63</b></td><td>78.56±0.34</td><td>75.24±0.28</td><td>80.68±1.27</td><td>71.35±1.76</td><td>73.28±0.55</td><td>67.83±0.65</td><td>3</td></tr>
|
| 111 |
-
<tr><td class='ds'>busi/single-split</td><td>77.53±1.43</td><td>76.45±1.52</td><td>77.79±1.07</td><td>68.44±1.30</td><td>76.77±2.13</td><td><b>79.00±0.64</b></td><td>77.32±1.17</td><td>76.05±0.47</td><td>3</td></tr>
|
| 112 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td>93.84±0.18</td><td>93.42±0.62</td><td>93.24±0.49</td><td>91.61±0.58</td><td><b>94.74±0.75</b></td><td>93.13±1.08</td><td>93.83±0.55</td><td>91.93±0.53</td><td>3</td></tr>
|
| 113 |
-
<tr><td class='ds'>fives/official</td><td>85.48±0.10</td><td>85.32±0.79</td><td>81.56±0.18</td><td>84.98±0.29</td><td>71.89±0.77</td><td>70.22±0.92</td><td><b>89.65±0.59</b></td><td>89.24±0.19</td><td>3</td></tr>
|
| 114 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>48.47±1.40</td><td>48.91±1.24</td><td>46.76±0.52</td><td>45.22±0.63</td><td>26.27±2.73</td><td>21.93±16.29</td><td>65.23±0.50</td><td><b>65.39±0.15</b></td><td>3</td></tr>
|
| 115 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>87.96±0.61</td><td>87.27±0.34</td><td>90.26±0.31</td><td>87.79±0.30</td><td>90.93±0.58</td><td>89.69±0.38</td><td>91.23±0.65</td><td><b>91.53±0.04</b></td><td>3</td></tr>
|
| 116 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>91.23±0.39</td><td>90.87±0.27</td><td>91.46±0.47</td><td>89.45±0.32</td><td>91.87±1.33</td><td>91.60±0.25</td><td><b>92.34±0.12</b></td><td>92.32±0.15</td><td>3</td></tr>
|
| 117 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td>76.36±4.84</td><td>73.91±3.85</td><td>79.33±1.99</td><td>64.87±2.73</td><td><b>79.55±1.61</b></td><td>65.11±4.13</td><td>68.80±1.89</td><td>70.16±1.49</td><td>3</td></tr>
|
| 118 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td>50.72±0.24</td><td>50.79±0.46</td><td>53.30±0.34</td><td>47.19±0.83</td><td>55.87±0.22</td><td><b>56.75±0.60</b></td><td>48.82±0.48</td><td>50.81±0.59</td><td>3</td></tr>
|
| 119 |
-
<tr><td class='ds'>refuge2/official</td><td><b>91.06±0.81</b></td><td>88.88±0.23</td><td>87.53±1.41</td><td>78.22±6.52</td><td>72.98±2.95</td><td>87.62±1.11</td><td>90.46±0.32</td><td>88.34±0.75</td><td>3</td></tr>
|
| 120 |
-
</table>
|
| 121 |
-
<h2>Spec (%)</h2>
|
| 122 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 123 |
-
<tr><td class='ds'>acdc_png/official</td><td>99.85±0.02</td><td>99.86±0.02</td><td>99.87±0.01</td><td>99.85±0.01</td><td>99.84±0.01</td><td>99.81±0.01</td><td><b>99.88±0.01</b></td><td>99.85±0.02</td><td>3</td></tr>
|
| 124 |
-
<tr><td class='ds'>busi/single-split</td><td>97.64±0.70</td><td>98.25±0.25</td><td><b>98.29±0.19</b></td><td>98.12±0.24</td><td>98.25±0.20</td><td>97.89±0.41</td><td>98.11±0.15</td><td>97.89±0.08</td><td>3</td></tr>
|
| 125 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td>99.46±0.02</td><td>99.44±0.02</td><td>99.45±0.04</td><td>99.30±0.07</td><td>99.41±0.08</td><td>99.28±0.12</td><td><b>99.53±0.02</b></td><td>99.52±0.03</td><td>3</td></tr>
|
| 126 |
-
<tr><td class='ds'>fives/official</td><td><b>98.29±0.01</b></td><td>98.28±0.08</td><td>96.91±0.45</td><td>98.14±0.04</td><td>97.09±0.32</td><td>96.24±0.42</td><td>97.81±0.43</td><td>97.12±0.19</td><td>3</td></tr>
|
| 127 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>99.86±0.01</td><td>99.87±0.01</td><td>99.84±0.00</td><td>99.76±0.01</td><td><b>99.89±0.02</b></td><td>99.83±0.13</td><td>99.87±0.01</td><td>99.86±0.00</td><td>3</td></tr>
|
| 128 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>99.02±0.15</td><td><b>99.07±0.14</b></td><td>99.04±0.17</td><td>98.43±0.06</td><td>98.93±0.06</td><td>98.92±0.12</td><td>98.42±0.46</td><td>98.76±0.10</td><td>3</td></tr>
|
| 129 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>97.11±0.12</td><td>97.20±0.11</td><td>97.22±0.10</td><td>97.23±0.22</td><td><b>97.30±0.72</b></td><td>97.26±0.17</td><td>95.92±0.14</td><td>96.16±0.24</td><td>3</td></tr>
|
| 130 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td>99.84±0.01</td><td>99.85±0.02</td><td>99.86±0.01</td><td>99.86±0.02</td><td>99.85±0.03</td><td>99.83±0.03</td><td><b>99.91±0.00</b></td><td>99.90±0.03</td><td>3</td></tr>
|
| 131 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td><b>98.00±0.02</b></td><td>97.98±0.04</td><td>97.88±0.07</td><td>97.97±0.08</td><td>97.63±0.02</td><td>97.55±0.11</td><td>97.77±0.03</td><td>97.74±0.08</td><td>3</td></tr>
|
| 132 |
-
<tr><td class='ds'>refuge2/official</td><td>99.84±0.04</td><td>99.89±0.00</td><td>99.88±0.01</td><td>99.87±0.04</td><td><b>99.92±0.01</b></td><td>99.80±0.08</td><td>99.87±0.00</td><td>99.85±0.02</td><td>3</td></tr>
|
| 133 |
-
</table>
|
| 134 |
-
<h2>Prec (%)</h2>
|
| 135 |
-
<table><tr><th>Dataset</th><th>unet</th><th>unetpp</th><th>deeplabv3plus</th><th>attention_unet</th><th>transunet</th><th>swinunet</th><th>nnunet</th><th>umamba</th><th>seeds</th></tr>
|
| 136 |
-
<tr><td class='ds'>acdc_png/official</td><td>79.84±0.63</td><td><b>81.01±1.05</b></td><td>80.77±0.91</td><td>77.92±0.36</td><td>80.96±0.52</td><td>75.09±0.66</td><td>78.40±0.17</td><td>73.46±0.58</td><td>3</td></tr>
|
| 137 |
-
<tr><td class='ds'>busi/single-split</td><td>74.59±5.01</td><td>78.73±0.53</td><td>80.23±2.16</td><td>71.35±2.12</td><td><b>81.18±0.95</b></td><td>78.71±2.19</td><td>77.75±1.08</td><td>76.75±0.65</td><td>3</td></tr>
|
| 138 |
-
<tr><td class='ds'>cvc_clinicdb/official</td><td><b>95.75±0.01</b></td><td>95.12±0.55</td><td>95.45±0.18</td><td>93.39±0.29</td><td>94.49±1.09</td><td>93.09±0.66</td><td>95.29±0.44</td><td>95.30±0.38</td><td>3</td></tr>
|
| 139 |
-
<tr><td class='ds'>fives/official</td><td>89.69±0.27</td><td>89.89±0.67</td><td>82.82±0.47</td><td>88.02±0.39</td><td>76.28±2.66</td><td>69.31±1.44</td><td><b>90.81±0.72</b></td><td>80.56±2.18</td><td>3</td></tr>
|
| 140 |
-
<tr><td class='ds'>idridd_segmentation/official</td><td>53.82±0.67</td><td>55.73±3.66</td><td>56.89±0.64</td><td>47.45±1.40</td><td>27.52±4.62</td><td>22.02±16.14</td><td><b>67.53±0.18</b></td><td>67.37±0.02</td><td>3</td></tr>
|
| 141 |
-
<tr><td class='ds'>kvasir_seg/official</td><td>91.95±1.48</td><td>92.14±0.90</td><td><b>93.38±0.91</b></td><td>90.60±0.12</td><td>92.63±0.36</td><td>93.15±0.43</td><td>92.06±1.07</td><td>92.84±0.24</td><td>3</td></tr>
|
| 142 |
-
<tr><td class='ds'>medsegdb_isic2018/holdout</td><td>91.72±0.28</td><td>91.90±0.41</td><td>92.47±0.40</td><td>90.98±0.63</td><td>92.34±1.62</td><td><b>92.94±0.21</b></td><td>91.29±0.29</td><td>91.27±0.17</td><td>3</td></tr>
|
| 143 |
-
<tr><td class='ds'>medsegdb_kits19/single-split</td><td>78.34±4.37</td><td>77.43±1.77</td><td><b>82.33±0.20</b></td><td>74.88±1.60</td><td>77.89±1.41</td><td>66.14±1.56</td><td>75.57±1.49</td><td>78.36±0.33</td><td>3</td></tr>
|
| 144 |
-
<tr><td class='ds'>pannuke_semantic/3-fold</td><td>53.64±0.56</td><td>54.27±0.67</td><td>56.62±0.74</td><td>50.02±0.28</td><td>56.60±0.56</td><td><b>56.94±0.64</b></td><td>52.25±0.56</td><td>53.87±0.41</td><td>3</td></tr>
|
| 145 |
-
<tr><td class='ds'>refuge2/official</td><td>80.96±1.86</td><td>86.19±1.66</td><td>83.72±1.73</td><td>79.57±0.70</td><td><b>86.82±1.00</b></td><td>77.35±6.97</td><td>82.64±0.20</td><td>79.69±2.64</td><td>3</td></tr>
|
| 146 |
-
</table>
|
| 147 |
-
<hr style='margin:22px 0;border:none;border-top:2px solid #0a6'>
|
| 148 |
-
<h1 style='font-size:18px'>Per-class Dice — multi-class datasets</h1>
|
| 149 |
-
<div class='cap'>Mean per-class Dice (%) over all test images and all runs (0=background excluded). Reveals which structures/types drive a method's macro-Dice. Class names follow each dataset's standard labelling (IDRiD: MA=microaneurysm, exudates hard/soft, optic disc).</div>
|
| 150 |
-
<h2>acdc_png</h2>
|
| 151 |
-
<table><tr><th>Method</th><th>RV</th><th>Myocardium</th><th>LV</th><th>macro</th></tr>
|
| 152 |
-
<tr><td class='l'>unet</td><td>75.3</td><td>78.3</td><td>83.9</td><td>79.2</td></tr>
|
| 153 |
-
<tr><td class='l'>unetpp</td><td><b>78.3</b></td><td><b>79.7</b></td><td><b>86.0</b></td><td>81.3</td></tr>
|
| 154 |
-
<tr><td class='l'>deeplabv3plus</td><td>75.8</td><td>78.6</td><td>84.7</td><td>79.7</td></tr>
|
| 155 |
-
<tr><td class='l'>attention_unet</td><td>70.6</td><td>75.1</td><td>82.0</td><td>75.9</td></tr>
|
| 156 |
-
<tr><td class='l'>transunet</td><td>75.7</td><td>79.2</td><td>85.6</td><td>80.2</td></tr>
|
| 157 |
-
<tr><td class='l'>swinunet</td><td>64.8</td><td>71.5</td><td>80.6</td><td>72.3</td></tr>
|
| 158 |
-
<tr><td class='l'>nnunet</td><td>65.0</td><td>77.5</td><td>82.4</td><td>75.0</td></tr>
|
| 159 |
-
<tr><td class='l'>umamba</td><td>56.4</td><td>72.9</td><td>78.8</td><td>69.4</td></tr>
|
| 160 |
-
</table>
|
| 161 |
-
<h2>refuge2</h2>
|
| 162 |
-
<table><tr><th>Method</th><th>Optic Disc</th><th>Optic Cup</th><th>macro</th></tr>
|
| 163 |
-
<tr><td class='l'>unet</td><td>85.5</td><td>84.0</td><td>84.8</td></tr>
|
| 164 |
-
<tr><td class='l'>unetpp</td><td><b>87.0</b></td><td><b>86.4</b></td><td>86.7</td></tr>
|
| 165 |
-
<tr><td class='l'>deeplabv3plus</td><td>84.4</td><td>84.2</td><td>84.3</td></tr>
|
| 166 |
-
<tr><td class='l'>attention_unet</td><td>74.5</td><td>76.4</td><td>75.5</td></tr>
|
| 167 |
-
<tr><td class='l'>transunet</td><td>75.7</td><td>78.1</td><td>76.9</td></tr>
|
| 168 |
-
<tr><td class='l'>swinunet</td><td>81.1</td><td>80.8</td><td>80.9</td></tr>
|
| 169 |
-
<tr><td class='l'>nnunet</td><td>86.8</td><td>84.3</td><td>85.5</td></tr>
|
| 170 |
-
<tr><td class='l'>umamba</td><td>83.7</td><td>81.2</td><td>82.4</td></tr>
|
| 171 |
-
</table>
|
| 172 |
-
<h2>idridd_segmentation</h2>
|
| 173 |
-
<table><tr><th>Method</th><th>MA</th><th>Haemorrhage</th><th>Hard Exudate</th><th>Soft Exudate</th><th>Optic Disc</th><th>macro</th></tr>
|
| 174 |
-
<tr><td class='l'>unet</td><td>0.0</td><td>49.9</td><td>56.6</td><td><b>45.3</b></td><td>96.1</td><td>49.6</td></tr>
|
| 175 |
-
<tr><td class='l'>unetpp</td><td>6.5</td><td>51.2</td><td>57.2</td><td>39.5</td><td><b>96.2</b></td><td>50.1</td></tr>
|
| 176 |
-
<tr><td class='l'>deeplabv3plus</td><td>10.9</td><td>48.3</td><td>50.0</td><td>39.8</td><td>95.2</td><td>48.8</td></tr>
|
| 177 |
-
<tr><td class='l'>attention_unet</td><td>0.0</td><td>43.2</td><td>54.8</td><td>29.6</td><td>94.2</td><td>44.4</td></tr>
|
| 178 |
-
<tr><td class='l'>transunet</td><td>0.0</td><td>21.2</td><td>0.0</td><td>2.2</td><td>93.6</td><td>23.4</td></tr>
|
| 179 |
-
<tr><td class='l'>swinunet</td><td>0.0</td><td>9.8</td><td>20.9</td><td>11.1</td><td>60.2</td><td>20.4</td></tr>
|
| 180 |
-
<tr><td class='l'>nnunet</td><td>50.5</td><td>60.6</td><td>70.6</td><td>39.4</td><td>95.8</td><td>63.4</td></tr>
|
| 181 |
-
<tr><td class='l'>umamba</td><td><b>50.6</b></td><td><b>61.7</b></td><td><b>71.6</b></td><td>36.7</td><td>95.9</td><td>63.3</td></tr>
|
| 182 |
-
</table>
|
| 183 |
-
<h2>pannuke_semantic</h2>
|
| 184 |
-
<table><tr><th>Method</th><th>Neoplastic</th><th>Inflammatory</th><th>Connective</th><th>Dead</th><th>Epithelial</th><th>macro</th></tr>
|
| 185 |
-
<tr><td class='l'>unet</td><td>57.5</td><td>38.2</td><td>45.9</td><td>11.9</td><td>44.2</td><td>39.6</td></tr>
|
| 186 |
-
<tr><td class='l'>unetpp</td><td>56.2</td><td>38.4</td><td>46.1</td><td>9.9</td><td>47.6</td><td>39.6</td></tr>
|
| 187 |
-
<tr><td class='l'>deeplabv3plus</td><td>64.3</td><td>38.0</td><td>45.8</td><td>14.5</td><td>57.1</td><td>44.0</td></tr>
|
| 188 |
-
<tr><td class='l'>attention_unet</td><td>52.0</td><td>38.0</td><td>44.9</td><td>6.9</td><td>30.8</td><td>34.5</td></tr>
|
| 189 |
-
<tr><td class='l'>transunet</td><td>65.6</td><td>38.8</td><td>47.0</td><td>11.9</td><td>59.4</td><td>44.5</td></tr>
|
| 190 |
-
<tr><td class='l'>swinunet</td><td><b>66.5</b></td><td><b>39.5</b></td><td><b>47.5</b></td><td><b>17.1</b></td><td><b>62.4</b></td><td>46.6</td></tr>
|
| 191 |
-
<tr><td class='l'>nnunet</td><td>59.8</td><td>33.8</td><td>42.5</td><td>12.3</td><td>50.8</td><td>39.9</td></tr>
|
| 192 |
-
<tr><td class='l'>umamba</td><td>61.5</td><td>35.6</td><td>43.4</td><td>14.0</td><td>52.5</td><td>41.4</td></tr>
|
| 193 |
-
</table>
|
| 194 |
-
<hr style='margin:22px 0;border:none;border-top:2px solid #0a6'>
|
| 195 |
-
<h1 style='font-size:18px'>Statistical significance — paired Wilcoxon (per-image Dice)</h1>
|
| 196 |
-
<div class='cap'>Per dataset, the best method by mean Dice is marked ★; a paired Wilcoxon signed-rank test on per-image Dice (paired by image) compares it against every other method. Methods <u>not</u> significantly worse than the best (p≥0.05) are <u>underlined</u> = statistically tied for best. The last column is the best-vs-2nd-best p-value. Pairing is exact for the in-framework methods (shared dataloader order); nnU-Net/U-Mamba use cached predictions paired by index where image counts match.</div>
|
| 197 |
-
<table><tr><th>Dataset</th><th>Best ★ and tied-for-best (underlined)</th><th>best vs 2nd p</th></tr>
|
| 198 |
-
<tr><td class='l'>acdc_png</td><td class='l'><b>★ unetpp (79.7)</b></td><td>6e-09</td></tr>
|
| 199 |
-
<tr><td class='l'>busi</td><td class='l'><b>★ nnunet (74.7)</b> · tied: <u>transunet</u>, <u>swinunet</u>, <u>deeplabv3plus</u></td><td>0.8</td></tr>
|
| 200 |
-
<tr><td class='l'>cvc_clinicdb</td><td class='l'><b>★ unet (94.5)</b> · tied: <u>transunet</u>, <u>nnunet</u>, <u>unetpp</u></td><td>0.2</td></tr>
|
| 201 |
-
<tr><td class='l'>fives</td><td class='l'><b>★ nnunet (89.0)</b></td><td>5.4e-24</td></tr>
|
| 202 |
-
<tr><td class='l'>idridd_segmentation</td><td class='l'><b>★ umamba (64.6)</b> · tied: <u>nnunet</u></td><td>0.86</td></tr>
|
| 203 |
-
<tr><td class='l'>kvasir_seg</td><td class='l'><b>★ umamba (91.2)</b> · tied: <u>transunet</u>, <u>nnunet</u>, <u>deeplabv3plus</u>, <u>swinunet</u>, <u>unet</u>, <u>unetpp</u></td><td>0.46</td></tr>
|
| 204 |
-
<tr><td class='l'>medsegdb_isic2018</td><td class='l'><b>★ swinunet (91.0)</b> · tied: <u>deeplabv3plus</u>, <u>umamba</u>, <u>nnunet</u></td><td>0.046</td></tr>
|
| 205 |
-
<tr><td class='l'>medsegdb_kits19</td><td class='l'><b>★ deeplabv3plus (78.7)</b></td><td>0.0015</td></tr>
|
| 206 |
-
<tr><td class='l'>pannuke_semantic</td><td class='l'><b>★ swinunet (54.3)</b> · tied: <u>transunet</u></td><td>0.61</td></tr>
|
| 207 |
-
<tr><td class='l'>refuge2</td><td class='l'><b>★ unetpp (86.7)</b></td><td>7.1e-05</td></tr>
|
| 208 |
</table>
|
| 209 |
</body></html>
|
|
|
|
| 1 |
+
<!doctype html><html><head><meta charset='utf-8'><title>SegGen benchmark (unified512)</title><style>
|
| 2 |
+
body{font-family:'Helvetica Neue',Arial,sans-serif;margin:30px auto;max-width:1180px;color:#1a1a1a;line-height:1.5}
|
| 3 |
+
h1{font-size:21px;margin:0 0 4px}h2{font-size:15px;color:#0a5a33;margin:30px 0 4px;border-bottom:1px solid #e3e3e3;padding-bottom:3px}
|
| 4 |
+
h3{font-size:13px;margin:16px 0 4px;color:#333}
|
| 5 |
+
p,li{font-size:13px}code{background:#f2f2f2;padding:1px 4px;border-radius:3px}
|
| 6 |
+
.cap{color:#666;font-size:11.5px;margin:3px 0 6px}
|
| 7 |
+
.tw{overflow-x:auto}
|
| 8 |
+
table.rt{border-collapse:collapse;margin:6px 0 8px;font-size:11.5px}
|
| 9 |
+
table.rt th,table.rt td{padding:4px 9px;text-align:center;white-space:nowrap}
|
| 10 |
+
table.rt thead th{border-top:2px solid #222;border-bottom:1.2px solid #222;font-weight:600}
|
| 11 |
+
table.rt tbody tr:last-child td{border-bottom:2px solid #222}
|
| 12 |
+
table.rt td.m,table.rt th.m{text-align:left;font-weight:600}
|
| 13 |
+
table.rt td.avg,table.rt th.avg{border-left:1px solid #c8c8c8;background:#f7f9f8}
|
| 14 |
+
table.rt tbody tr.grp td{border-top:1px solid #cfcfcf}
|
| 15 |
+
table.rt b{color:#08402a}
|
| 16 |
+
table.info{border-collapse:collapse;margin:6px 0 14px;font-size:12px}
|
| 17 |
+
table.info th,table.info td{border:1px solid #ddd;padding:4px 8px;text-align:center}
|
| 18 |
+
table.info th{background:#f3f3f3}table.info td.l{text-align:left}
|
| 19 |
+
.note{background:#eef7f0;border-left:3px solid #0a6;padding:8px 12px;font-size:12.5px;margin:8px 0}
|
| 20 |
+
hr{border:none;border-top:1px solid #e3e3e3;margin:24px 0}
|
| 21 |
+
</style></head><body>
|
| 22 |
+
<h1>SegGen benchmark (unified512): 8 methods × 10 datasets (unified 512, resolution-fair)</h1>
|
| 23 |
+
<p>Eight 2D medical-image segmentation methods on ten public datasets (seven modalities). Values are <b>mean±SD</b> over 3 seeds (over the 3 folds for PanNuke). Each (dataset,method) cell aggregates tens–thousands of test images.</p>
|
| 24 |
+
<div class='note'><b>Resolution-fair protocol.</b> Convolutional nets train at 512; the fixed-input transformers (Swin-UNet 224, TransUNet 256) and nnU-Net/U-Mamba run at their native size; <b>every prediction and ground truth is then resized to a common 512×512 before scoring</b>, so boundary metrics (HD95/ASSD, in pixels) are directly comparable across methods.</div>
|
| 25 |
+
<h2>1. Main results — Dice (%) ↑</h2>
|
| 26 |
+
<div class='cap'><b>Bold</b> = best, or not significantly different from the best per dataset (paired Wilcoxon on per-image Dice, p≥0.05). Last column = mean over the 10 datasets. Horizontal rule separates CNNs (top) from Transformer / foundation models (bottom).</div>
|
| 27 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>CVC-ClinicDB</th><th>Kvasir-SEG</th><th>FIVES</th><th>BUSI</th><th>REFUGE2</th><th>ACDC</th><th>IDRiD</th><th>PanNuke</th><th>ISIC2018</th><th>KiTS19</th><th class='avg'>Avg</th></tr></thead><tbody>
|
| 28 |
+
<tr><td class='m'>UNet</td><td><b>94.49±0.14</b></td><td><b>88.41±0.54</b></td><td>86.81±0.08</td><td>72.76±2.47</td><td>84.76±0.89</td><td>77.78±0.39</td><td>49.75±0.65</td><td>49.85±0.33</td><td>90.08±0.12</td><td>74.59±5.62</td><td class='avg'>76.9</td></tr>
|
| 29 |
+
<tr><td class='m'>UNet++</td><td><b>93.92±0.51</b></td><td><b>87.88±0.19</b></td><td>86.77±0.80</td><td>74.67±0.68</td><td><b>86.66±1.10</b></td><td><b>79.75±0.57</b></td><td>50.52±2.11</td><td>50.01±0.13</td><td>89.92±0.06</td><td>72.19±3.00</td><td class='avg'>77.2</td></tr>
|
| 30 |
+
<tr><td class='m'>DeepLabV3+</td><td>93.83±0.42</td><td><b>90.39±0.47</b></td><td>80.97±0.30</td><td><b>76.12±1.20</b></td><td>84.26±0.94</td><td>78.33±0.49</td><td>49.34±0.48</td><td>52.35±0.35</td><td><b>90.68±0.10</b></td><td><b>78.70±1.34</b></td><td class='avg'>77.5</td></tr>
|
| 31 |
+
<tr><td class='m'>Attention-UNet</td><td>91.73±0.33</td><td>87.58±0.11</td><td>85.64±0.20</td><td>65.98±1.11</td><td>75.49±4.01</td><td>74.57±0.15</td><td>44.65±0.61</td><td>45.87±0.39</td><td>88.57±0.25</td><td>64.74±1.44</td><td class='avg'>72.5</td></tr>
|
| 32 |
+
<tr class='grp'><td class='m'>TransUNet</td><td><b>94.29±0.31</b></td><td><b>90.76±0.37</b></td><td>73.10±0.84</td><td><b>76.53±1.65</b></td><td>76.90±1.37</td><td>79.46±0.44</td><td>25.66±3.11</td><td><b>53.60±0.35</b></td><td>90.83±0.27</td><td>76.82±0.93</td><td class='avg'>73.8</td></tr>
|
| 33 |
+
<tr><td class='m'>Swin-UNet</td><td>92.72±0.33</td><td><b>90.15±0.62</b></td><td>68.78±0.18</td><td><b>76.00±0.94</b></td><td>80.95±4.15</td><td>71.26±1.36</td><td>20.95±15.57</td><td><b>54.34±0.42</b></td><td><b>91.04±0.14</b></td><td>63.42±2.92</td><td class='avg'>71.0</td></tr>
|
| 34 |
+
<tr><td class='m'>nnU-Net</td><td><b>94.24±0.64</b></td><td><b>90.44±0.88</b></td><td><b>89.00±0.35</b></td><td><b>75.39±1.35</b></td><td>85.55±0.23</td><td>73.81±0.38</td><td><b>64.64±0.11</b></td><td>47.82±0.55</td><td><b>90.20±0.14</b></td><td>70.44±1.93</td><td class='avg'><b>78.2</b></td></tr>
|
| 35 |
+
<tr><td class='m'>U-Mamba</td><td>92.98±0.55</td><td><b>91.23±0.14</b></td><td>82.68±1.21</td><td>73.73±0.35</td><td>82.42±1.25</td><td>68.68±0.89</td><td><b>64.64±0.10</b></td><td>49.40±0.51</td><td><b>90.22±0.21</b></td><td>72.41±1.03</td><td class='avg'>76.8</td></tr>
|
| 36 |
+
</tbody></table></div>
|
| 37 |
+
<h2>2. Boundary accuracy — HD95 (px) ↓</h2>
|
| 38 |
+
<div class='cap'>95% Hausdorff distance at the common 512 resolution (lower = better; <b>bold</b> = best per dataset). Now comparable across methods.</div>
|
| 39 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>CVC-ClinicDB</th><th>Kvasir-SEG</th><th>FIVES</th><th>BUSI</th><th>REFUGE2</th><th>ACDC</th><th>IDRiD</th><th>PanNuke</th><th>ISIC2018</th><th>KiTS19</th><th class='avg'>Avg</th></tr></thead><tbody>
|
| 40 |
+
<tr><td class='m'>UNet</td><td>19.46±0.53</td><td>39.96±3.32</td><td>12.21±0.68</td><td>70.02±7.49</td><td>17.13±1.77</td><td>17.91±1.55</td><td>68.00±0.38</td><td>140.39±1.84</td><td>34.82±1.57</td><td>39.79±6.37</td><td class='avg'>45.97</td></tr>
|
| 41 |
+
<tr><td class='m'>UNet++</td><td><b>19.28±3.15</b></td><td>41.23±2.76</td><td><b>11.60±0.43</b></td><td>62.67±0.86</td><td>16.78±8.92</td><td>16.63±3.75</td><td>77.61±8.63</td><td>140.91±2.40</td><td>34.66±0.03</td><td>46.19±1.36</td><td class='avg'>46.75</td></tr>
|
| 42 |
+
<tr><td class='m'>DeepLabV3+</td><td>21.19±0.33</td><td>38.27±3.50</td><td>17.02±0.93</td><td>53.29±0.90</td><td>8.93±0.64</td><td>15.79±0.90</td><td>87.84±3.82</td><td>136.89±1.88</td><td>30.76±0.28</td><td><b>36.29±1.75</b></td><td class='avg'>44.63</td></tr>
|
| 43 |
+
<tr><td class='m'>Attention-UNet</td><td>45.21±6.77</td><td>63.80±1.73</td><td>13.82±2.13</td><td>98.10±5.07</td><td>23.03±10.16</td><td>27.13±2.50</td><td>75.44±4.17</td><td>146.04±3.87</td><td>46.32±2.81</td><td>50.10±0.65</td><td class='avg'>58.90</td></tr>
|
| 44 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>19.53±0.69</td><td><b>31.81±1.27</b></td><td>22.64±0.42</td><td><b>43.79±1.43</b></td><td>9.24±0.48</td><td><b>15.64±1.75</b></td><td>86.98±29.21</td><td>134.40±1.48</td><td>28.21±0.86</td><td>41.37±2.53</td><td class='avg'>43.36</td></tr>
|
| 45 |
+
<tr><td class='m'>Swin-UNet</td><td>22.70±1.25</td><td>34.84±0.81</td><td>29.64±2.19</td><td>51.91±2.96</td><td>17.42±4.99</td><td>15.85±0.56</td><td>89.66±13.40</td><td><b>132.62±0.94</b></td><td><b>26.72±0.58</b></td><td>52.42±1.11</td><td class='avg'>47.38</td></tr>
|
| 46 |
+
<tr><td class='m'>nnU-Net</td><td>22.37±1.75</td><td>38.85±5.15</td><td>14.76±1.05</td><td>49.83±1.37</td><td><b>6.36±1.11</b></td><td>16.93±0.70</td><td>67.25±2.79</td><td>147.16±1.97</td><td>30.38±0.42</td><td>39.19±0.93</td><td class='avg'><b>43.31</b></td></tr>
|
| 47 |
+
<tr><td class='m'>U-Mamba</td><td>22.80±2.25</td><td>37.78±1.17</td><td>28.66±1.08</td><td>60.19±3.74</td><td>7.23±0.47</td><td>21.79±1.16</td><td><b>64.19±1.12</b></td><td>142.36±1.82</td><td>29.95±0.87</td><td>38.55±2.43</td><td class='avg'>45.35</td></tr>
|
| 48 |
+
</tbody></table></div>
|
| 49 |
+
<h2>3. Overlap — IoU (%) ↑</h2>
|
| 50 |
+
<div class='cap'>Jaccard index, the stricter overlap measure (<b>bold</b> = best per dataset). Last column = mean over the 10 datasets.</div>
|
| 51 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>CVC-ClinicDB</th><th>Kvasir-SEG</th><th>FIVES</th><th>BUSI</th><th>REFUGE2</th><th>ACDC</th><th>IDRiD</th><th>PanNuke</th><th>ISIC2018</th><th>KiTS19</th><th class='avg'>Avg</th></tr></thead><tbody>
|
| 52 |
+
<tr><td class='m'>UNet</td><td><b>89.91±0.20</b></td><td>82.98±0.38</td><td>78.13±0.07</td><td>64.44±2.32</td><td>74.31±1.24</td><td>70.36±0.40</td><td>41.31±0.60</td><td>40.50±0.35</td><td>83.65±0.10</td><td>67.10±5.84</td><td class='avg'>69.3</td></tr>
|
| 53 |
+
<tr><td class='m'>UNet++</td><td>89.42±0.61</td><td>82.32±0.25</td><td>77.97±1.27</td><td>66.19±0.61</td><td><b>77.11±1.72</b></td><td><b>72.56±0.81</b></td><td>41.58±1.32</td><td>40.65±0.20</td><td>83.46±0.03</td><td>64.12±3.25</td><td class='avg'>69.5</td></tr>
|
| 54 |
+
<tr><td class='m'>DeepLabV3+</td><td>89.12±0.42</td><td>84.62±0.60</td><td>69.44±0.34</td><td>67.48±1.21</td><td>73.60±1.40</td><td>70.80±0.43</td><td>39.78±0.37</td><td>42.54±0.38</td><td>84.40±0.15</td><td><b>70.91±1.74</b></td><td class='avg'>69.3</td></tr>
|
| 55 |
+
<tr><td class='m'>Attention-UNet</td><td>86.04±0.51</td><td>80.22±0.22</td><td>76.20±0.22</td><td>57.34±0.92</td><td>63.91±3.95</td><td>66.90±0.47</td><td>36.58±0.44</td><td>36.95±0.34</td><td>81.64±0.30</td><td>56.30±2.10</td><td class='avg'>64.2</td></tr>
|
| 56 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>89.62±0.41</td><td>85.28±0.29</td><td>58.44±1.10</td><td><b>68.44±1.56</b></td><td>64.73±1.36</td><td>71.08±0.70</td><td>22.79±2.25</td><td>43.82±0.20</td><td>84.53±0.37</td><td>69.11±1.04</td><td class='avg'>65.8</td></tr>
|
| 57 |
+
<tr><td class='m'>Swin-UNet</td><td>87.03±0.35</td><td>84.10±0.69</td><td>53.20±0.10</td><td>67.46±0.68</td><td>68.98±5.52</td><td>62.36±1.35</td><td>17.08±12.51</td><td><b>44.11±0.34</b></td><td><b>84.89±0.21</b></td><td>55.87±2.86</td><td class='avg'>62.5</td></tr>
|
| 58 |
+
<tr><td class='m'>nnU-Net</td><td>89.69±0.75</td><td>84.42±1.19</td><td><b>82.66±0.21</b></td><td>67.68±1.22</td><td>75.57±0.31</td><td>66.98±0.35</td><td>52.93±0.04</td><td>38.39±0.50</td><td>83.97±0.18</td><td>63.29±1.50</td><td class='avg'><b>70.6</b></td></tr>
|
| 59 |
+
<tr><td class='m'>U-Mamba</td><td>87.93±0.81</td><td><b>85.29±0.14</b></td><td>74.13±1.87</td><td>65.57±0.50</td><td>71.20±1.97</td><td>61.82±0.88</td><td><b>53.04±0.09</b></td><td>40.01±0.51</td><td>83.98±0.22</td><td>65.00±1.11</td><td class='avg'>68.8</td></tr>
|
| 60 |
+
</tbody></table></div>
|
| 61 |
+
<h2>4. Overall ranking — mean over the 10 datasets</h2>
|
| 62 |
+
<div class='cap'>Each method's macro-average of every metric across all datasets (<b>bold</b> = best column). ↑ higher better, ↓ lower better.</div>
|
| 63 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>Dice↑</th><th>IoU↑</th><th>HD95↓</th><th>ASSD↓</th><th>Sens↑</th><th>Spec↑</th><th>Prec↑</th></tr></thead><tbody>
|
| 64 |
+
<tr><td class='m'>UNet</td><td>76.9</td><td>69.3</td><td>45.97</td><td>13.05</td><td>78.1</td><td>98.9</td><td>79.0</td></tr>
|
| 65 |
+
<tr><td class='m'>UNet++</td><td>77.2</td><td>69.5</td><td>46.75</td><td><b>12.89</b></td><td>77.7</td><td><b>99.0</b></td><td>80.2</td></tr>
|
| 66 |
+
<tr><td class='m'>DeepLabV3+</td><td>77.5</td><td>69.3</td><td>44.63</td><td>13.01</td><td>78.0</td><td>98.8</td><td><b>80.5</b></td></tr>
|
| 67 |
+
<tr><td class='m'>Attention-UNet</td><td>72.5</td><td>64.2</td><td>58.90</td><td>16.69</td><td>73.3</td><td>98.9</td><td>76.4</td></tr>
|
| 68 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>73.8</td><td>65.8</td><td>43.36</td><td>13.63</td><td>74.2</td><td>98.8</td><td>76.7</td></tr>
|
| 69 |
+
<tr><td class='m'>Swin-UNet</td><td>71.0</td><td>62.5</td><td>47.38</td><td>14.82</td><td>72.6</td><td>98.6</td><td>72.5</td></tr>
|
| 70 |
+
<tr><td class='m'>nnU-Net</td><td><b>78.2</b></td><td><b>70.6</b></td><td><b>43.31</b></td><td>13.21</td><td><b>79.1</b></td><td>98.7</td><td>80.4</td></tr>
|
| 71 |
+
<tr><td class='m'>U-Mamba</td><td>76.8</td><td>68.8</td><td>45.35</td><td>13.93</td><td>78.4</td><td>98.7</td><td>78.9</td></tr>
|
| 72 |
+
</tbody></table></div>
|
| 73 |
+
<h2>5. Per-class Dice (%) — multi-class datasets</h2>
|
| 74 |
+
<div class='cap'>Mean per-class Dice over all test images/runs (0=background excluded; <b>bold</b>=best per class). Shows which structures drive each method's macro-Dice.</div>
|
| 75 |
+
<h3>ACDC</h3>
|
| 76 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>RV</th><th>Myocardium</th><th>LV</th><th class='avg'>macro</th></tr></thead><tbody>
|
| 77 |
+
<tr><td class='m'>UNet</td><td>75.3</td><td>78.3</td><td>83.9</td><td class='avg'>79.2</td></tr>
|
| 78 |
+
<tr><td class='m'>UNet++</td><td><b>78.3</b></td><td><b>79.7</b></td><td><b>86.0</b></td><td class='avg'>81.3</td></tr>
|
| 79 |
+
<tr><td class='m'>DeepLabV3+</td><td>75.8</td><td>78.6</td><td>84.7</td><td class='avg'>79.7</td></tr>
|
| 80 |
+
<tr><td class='m'>Attention-UNet</td><td>70.6</td><td>75.1</td><td>82.0</td><td class='avg'>75.9</td></tr>
|
| 81 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>75.7</td><td>79.2</td><td>85.6</td><td class='avg'>80.2</td></tr>
|
| 82 |
+
<tr><td class='m'>Swin-UNet</td><td>64.8</td><td>71.5</td><td>80.6</td><td class='avg'>72.3</td></tr>
|
| 83 |
+
<tr><td class='m'>nnU-Net</td><td>65.0</td><td>77.5</td><td>82.4</td><td class='avg'>75.0</td></tr>
|
| 84 |
+
<tr><td class='m'>U-Mamba</td><td>56.4</td><td>72.9</td><td>78.8</td><td class='avg'>69.4</td></tr>
|
| 85 |
+
</tbody></table></div>
|
| 86 |
+
<h3>REFUGE2</h3>
|
| 87 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>Optic Disc</th><th>Optic Cup</th><th class='avg'>macro</th></tr></thead><tbody>
|
| 88 |
+
<tr><td class='m'>UNet</td><td>85.5</td><td>84.0</td><td class='avg'>84.8</td></tr>
|
| 89 |
+
<tr><td class='m'>UNet++</td><td><b>87.0</b></td><td><b>86.4</b></td><td class='avg'>86.7</td></tr>
|
| 90 |
+
<tr><td class='m'>DeepLabV3+</td><td>84.4</td><td>84.2</td><td class='avg'>84.3</td></tr>
|
| 91 |
+
<tr><td class='m'>Attention-UNet</td><td>74.5</td><td>76.4</td><td class='avg'>75.5</td></tr>
|
| 92 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>75.7</td><td>78.1</td><td class='avg'>76.9</td></tr>
|
| 93 |
+
<tr><td class='m'>Swin-UNet</td><td>81.1</td><td>80.8</td><td class='avg'>80.9</td></tr>
|
| 94 |
+
<tr><td class='m'>nnU-Net</td><td>86.8</td><td>84.3</td><td class='avg'>85.5</td></tr>
|
| 95 |
+
<tr><td class='m'>U-Mamba</td><td>83.7</td><td>81.2</td><td class='avg'>82.4</td></tr>
|
| 96 |
+
</tbody></table></div>
|
| 97 |
+
<h3>IDRiD</h3>
|
| 98 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>MA</th><th>Haemorrhage</th><th>Hard Exudate</th><th>Soft Exudate</th><th>Optic Disc</th><th class='avg'>macro</th></tr></thead><tbody>
|
| 99 |
+
<tr><td class='m'>UNet</td><td>0.0</td><td>49.9</td><td>56.6</td><td><b>45.3</b></td><td>96.1</td><td class='avg'>49.6</td></tr>
|
| 100 |
+
<tr><td class='m'>UNet++</td><td>6.5</td><td>51.2</td><td>57.2</td><td>39.5</td><td><b>96.2</b></td><td class='avg'>50.1</td></tr>
|
| 101 |
+
<tr><td class='m'>DeepLabV3+</td><td>10.9</td><td>48.3</td><td>50.0</td><td>39.8</td><td>95.2</td><td class='avg'>48.8</td></tr>
|
| 102 |
+
<tr><td class='m'>Attention-UNet</td><td>0.0</td><td>43.2</td><td>54.8</td><td>29.6</td><td>94.2</td><td class='avg'>44.4</td></tr>
|
| 103 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>0.0</td><td>21.2</td><td>0.0</td><td>2.2</td><td>93.6</td><td class='avg'>23.4</td></tr>
|
| 104 |
+
<tr><td class='m'>Swin-UNet</td><td>0.0</td><td>9.8</td><td>20.9</td><td>11.1</td><td>60.2</td><td class='avg'>20.4</td></tr>
|
| 105 |
+
<tr><td class='m'>nnU-Net</td><td>50.5</td><td>60.6</td><td>70.6</td><td>39.4</td><td>95.8</td><td class='avg'>63.4</td></tr>
|
| 106 |
+
<tr><td class='m'>U-Mamba</td><td><b>50.6</b></td><td><b>61.7</b></td><td><b>71.6</b></td><td>36.7</td><td>95.9</td><td class='avg'>63.3</td></tr>
|
| 107 |
+
</tbody></table></div>
|
| 108 |
+
<h3>PanNuke</h3>
|
| 109 |
+
<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th><th>Neoplastic</th><th>Inflammatory</th><th>Connective</th><th>Dead</th><th>Epithelial</th><th class='avg'>macro</th></tr></thead><tbody>
|
| 110 |
+
<tr><td class='m'>UNet</td><td>57.5</td><td>38.2</td><td>45.9</td><td>11.9</td><td>44.2</td><td class='avg'>39.6</td></tr>
|
| 111 |
+
<tr><td class='m'>UNet++</td><td>56.2</td><td>38.4</td><td>46.1</td><td>9.9</td><td>47.6</td><td class='avg'>39.6</td></tr>
|
| 112 |
+
<tr><td class='m'>DeepLabV3+</td><td>64.3</td><td>38.0</td><td>45.8</td><td>14.5</td><td>57.1</td><td class='avg'>44.0</td></tr>
|
| 113 |
+
<tr><td class='m'>Attention-UNet</td><td>52.0</td><td>38.0</td><td>44.9</td><td>6.9</td><td>30.8</td><td class='avg'>34.5</td></tr>
|
| 114 |
+
<tr class='grp'><td class='m'>TransUNet</td><td>65.6</td><td>38.8</td><td>47.0</td><td>11.9</td><td>59.4</td><td class='avg'>44.5</td></tr>
|
| 115 |
+
<tr><td class='m'>Swin-UNet</td><td><b>66.5</b></td><td><b>39.5</b></td><td><b>47.5</b></td><td><b>17.1</b></td><td><b>62.4</b></td><td class='avg'>46.6</td></tr>
|
| 116 |
+
<tr><td class='m'>nnU-Net</td><td>59.8</td><td>33.8</td><td>42.5</td><td>12.3</td><td>50.8</td><td class='avg'>39.9</td></tr>
|
| 117 |
+
<tr><td class='m'>U-Mamba</td><td>61.5</td><td>35.6</td><td>43.4</td><td>14.0</td><td>52.5</td><td class='avg'>41.4</td></tr>
|
| 118 |
+
</tbody></table></div>
|
| 119 |
+
<hr><h2>Appendix — Experimental setup</h2>
|
| 120 |
+
<p class='cap'>Full per-(dataset,method) values for every metric are in <code>summary.csv</code>; the main Dice table as LaTeX is in <code>summary.tex</code>.</p>
|
| 121 |
+
<h2>A. Datasets</h2>
|
| 122 |
+
<table class='info'><tr><th>#</th><th>Dataset</th><th>Modality</th><th>Target</th><th>Cls</th><th>Ch</th><th>Native size</th><th>Protocol</th><th>Train/Val/Test</th></tr>
|
| 123 |
<tr><td>1</td><td class='l'>CVC-ClinicDB</td><td class='l'>Colonoscopy (endoscopy)</td><td class='l'>Polyp</td><td>2</td><td>RGB</td><td>384×288</td><td>official</td><td>490 / 61 / 61</td></tr>
|
| 124 |
<tr><td>2</td><td class='l'>Kvasir-SEG</td><td class='l'>GI endoscopy</td><td class='l'>Polyp</td><td>2</td><td>RGB</td><td>~622×529 (var)</td><td>official</td><td>800 / 100 / 100</td></tr>
|
| 125 |
<tr><td>3</td><td class='l'>FIVES</td><td class='l'>Retinal fundus</td><td class='l'>Vessel</td><td>2</td><td>RGB</td><td>2048×2048</td><td>official</td><td>480 / 120 / 200</td></tr>
|
|
|
|
| 131 |
<tr><td>9</td><td class='l'>ISIC2018</td><td class='l'>Dermoscopy</td><td class='l'>Skin lesion</td><td>2</td><td>RGB</td><td>256×256</td><td>holdout</td><td>2582 / 369 / 737</td></tr>
|
| 132 |
<tr><td>10</td><td class='l'>KiTS19</td><td class='l'>Kidney CT (2D slices)</td><td class='l'>Kidney (binary)</td><td>2</td><td>grayscale¹</td><td>256×256</td><td>single-split²</td><td>2832 / 479 / 705</td></tr>
|
| 133 |
</table>
|
| 134 |
+
<div class='cap'>¹ BUSI/KiTS19 grayscale stored as 3-ch PNG (read as grayscale). ² no canonical split → one fixed fold (of 5) with 3 seeds; others use the official split. Labels 0…C-1 (0=bg); multi-class metrics macro-averaged over foreground classes.</div>
|
| 135 |
+
<h2>B. Methods</h2>
|
| 136 |
+
<table class='info'><tr><th>Method</th><th>Family</th><th>Backbone / setup</th></tr>
|
| 137 |
+
<tr><td class='l'>UNet</td><td class='l'>CNN encoder–decoder</td><td class='l'>SMP, ResNet-50 encoder (ImageNet)</td></tr>
|
| 138 |
<tr><td class='l'>UNet++</td><td class='l'>Nested UNet</td><td class='l'>SMP, ResNet-50 (ImageNet)</td></tr>
|
| 139 |
<tr><td class='l'>DeepLabV3+</td><td class='l'>Atrous CNN</td><td class='l'>SMP, ResNet-50 (ImageNet)</td></tr>
|
| 140 |
+
<tr><td class='l'>Attention-UNet</td><td class='l'>Attention-gated UNet</td><td class='l'>Re-implemented, from scratch</td></tr>
|
| 141 |
+
<tr><td class='l'>TransUNet</td><td class='l'>CNN–Transformer hybrid</td><td class='l'>R50-ViT-B/16 (ImageNet), input 256</td></tr>
|
| 142 |
+
<tr><td class='l'>Swin-UNet</td><td class='l'>Pure-Transformer UNet</td><td class='l'>Swin-Tiny (ImageNet), input 224</td></tr>
|
| 143 |
<tr><td class='l'>nnU-Net (v2)</td><td class='l'>Self-configuring CNN</td><td class='l'>2D config, 250 epochs</td></tr>
|
| 144 |
<tr><td class='l'>U-Mamba</td><td class='l'>State-space (Mamba) UNet</td><td class='l'>U-Mamba_Bot, 100 epochs</td></tr>
|
| 145 |
</table>
|
| 146 |
+
<h2>C. Metrics</h2>
|
| 147 |
+
<table class='info'><tr><th>Metric</th><th>Definition</th><th>Dir</th><th>Unit</th><th>作用 / 含义(中文)</th></tr>
|
| 148 |
+
<tr><td class='l'>Dice (DSC)</td><td class='l'>2TP / (2TP+FP+FN)</td><td>↑</td><td>%</td><td class='l'>区域重叠度(主指标),对类别不平衡较鲁棒。</td></tr>
|
| 149 |
+
<tr><td class='l'>IoU (Jaccard)</td><td class='l'>TP / (TP+FP+FN)</td><td>↑</td><td>%</td><td class='l'>交并比,更严格的重叠度,常与 Dice 并列。</td></tr>
|
| 150 |
+
<tr><td class='l'>HD95</td><td class='l'>95% Hausdorff distance (boundaries)</td><td>↓</td><td>px</td><td class='l'>边界最大误差的95%分位,越小边界越贴合。</td></tr>
|
| 151 |
+
<tr><td class='l'>ASSD</td><td class='l'>average symmetric surface distance</td><td>↓</td><td>px</td><td class='l'>平均对称表面距离,整体边界吻合度。</td></tr>
|
| 152 |
+
<tr><td class='l'>Sensitivity</td><td class='l'>TP / (TP+FN)</td><td>↑</td><td>%</td><td class='l'>召回/敏感度,反映漏分割程度。</td></tr>
|
| 153 |
+
<tr><td class='l'>Specificity</td><td class='l'>TN / (TN+FP)</td><td>↑</td><td>%</td><td class='l'>特异度,背景误报控制。</td></tr>
|
| 154 |
+
<tr><td class='l'>Precision</td><td class='l'>TP / (TP+FP)</td><td>↑</td><td>%</td><td class='l'>精确率,反映过分割/误报程度。</td></tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
</table>
|
| 156 |
</body></html>
|
results/summary.md
CHANGED
|
@@ -1,82 +1,14 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
|
| 6 |
-
|
|
| 7 |
-
|
|
| 8 |
-
|
|
| 9 |
-
|
|
| 10 |
-
|
|
| 11 |
-
|
|
| 12 |
-
|
|
| 13 |
-
|
|
| 14 |
-
|
|
| 15 |
-
| busi | single-split | transunet | 3 | 76.53±1.65 | 68.44±1.56 | 43.79±1.43 | 14.88±0.85 | 76.77±2.13 | 98.25±0.20 | 81.18±0.95 |
|
| 16 |
-
| busi | single-split | umamba | 3 | 73.73±0.35 | 65.57±0.50 | 60.19±3.74 | 20.37±1.68 | 76.05±0.47 | 97.89±0.08 | 76.75±0.65 |
|
| 17 |
-
| busi | single-split | unet | 3 | 72.76±2.47 | 64.44±2.32 | 70.02±7.49 | 24.70±4.36 | 77.53±1.43 | 97.64±0.70 | 74.59±5.01 |
|
| 18 |
-
| busi | single-split | unetpp | 3 | 74.67±0.68 | 66.19±0.61 | 62.67±0.86 | 18.90±1.26 | 76.45±1.52 | 98.25±0.25 | 78.73±0.53 |
|
| 19 |
-
| cvc_clinicdb | official | attention_unet | 3 | 91.73±0.33 | 86.04±0.51 | 45.21±6.77 | 9.76±1.90 | 91.61±0.58 | 99.30±0.07 | 93.39±0.29 |
|
| 20 |
-
| cvc_clinicdb | official | deeplabv3plus | 3 | 93.83±0.42 | 89.12±0.42 | 21.19±0.33 | 4.42±0.11 | 93.24±0.49 | 99.45±0.04 | 95.45±0.18 |
|
| 21 |
-
| cvc_clinicdb | official | nnunet | 3 | 94.24±0.64 | 89.69±0.75 | 22.37±1.75 | 5.23±0.60 | 93.83±0.55 | 99.53±0.02 | 95.29±0.44 |
|
| 22 |
-
| cvc_clinicdb | official | swinunet | 3 | 92.72±0.33 | 87.03±0.35 | 22.70±1.25 | 4.99±0.22 | 93.13±1.08 | 99.28±0.12 | 93.09±0.66 |
|
| 23 |
-
| cvc_clinicdb | official | transunet | 3 | 94.29±0.31 | 89.62±0.41 | 19.53±0.69 | 4.26±0.23 | 94.74±0.75 | 99.41±0.08 | 94.49±1.09 |
|
| 24 |
-
| cvc_clinicdb | official | umamba | 3 | 92.98±0.55 | 87.93±0.81 | 22.80±2.25 | 4.99±0.30 | 91.93±0.53 | 99.52±0.03 | 95.30±0.38 |
|
| 25 |
-
| cvc_clinicdb | official | unet | 3 | 94.49±0.14 | 89.91±0.20 | 19.46±0.53 | 4.05±0.04 | 93.84±0.18 | 99.46±0.02 | 95.75±0.01 |
|
| 26 |
-
| cvc_clinicdb | official | unetpp | 3 | 93.92±0.51 | 89.42±0.61 | 19.28±3.15 | 4.23±0.76 | 93.42±0.62 | 99.44±0.02 | 95.12±0.55 |
|
| 27 |
-
| fives | official | attention_unet | 3 | 85.64±0.20 | 76.20±0.22 | 13.82±2.13 | 2.84±0.27 | 84.98±0.29 | 98.14±0.04 | 88.02±0.39 |
|
| 28 |
-
| fives | official | deeplabv3plus | 3 | 80.97±0.30 | 69.44±0.34 | 17.02±0.93 | 3.82±0.33 | 81.56±0.18 | 96.91±0.45 | 82.82±0.47 |
|
| 29 |
-
| fives | official | nnunet | 3 | 89.00±0.35 | 82.66±0.21 | 14.76±1.05 | 3.31±0.11 | 89.65±0.59 | 97.81±0.43 | 90.81±0.72 |
|
| 30 |
-
| fives | official | swinunet | 3 | 68.78±0.18 | 53.20±0.10 | 29.64±2.19 | 5.26±0.71 | 70.22±0.92 | 96.24±0.42 | 69.31±1.44 |
|
| 31 |
-
| fives | official | transunet | 3 | 73.10±0.84 | 58.44±1.10 | 22.64±0.42 | 4.07±0.22 | 71.89±0.77 | 97.09±0.32 | 76.28±2.66 |
|
| 32 |
-
| fives | official | umamba | 3 | 82.68±1.21 | 74.13±1.87 | 28.66±1.08 | 5.12±0.23 | 89.24±0.19 | 97.12±0.19 | 80.56±2.18 |
|
| 33 |
-
| fives | official | unet | 3 | 86.81±0.08 | 78.13±0.07 | 12.21±0.68 | 2.79±0.35 | 85.48±0.10 | 98.29±0.01 | 89.69±0.27 |
|
| 34 |
-
| fives | official | unetpp | 3 | 86.77±0.80 | 77.97±1.27 | 11.60±0.43 | 2.61±0.10 | 85.32±0.79 | 98.28±0.08 | 89.89±0.67 |
|
| 35 |
-
| idridd_segmentation | official | attention_unet | 3 | 44.65±0.61 | 36.58±0.44 | 75.44±4.17 | 18.07±1.24 | 45.22±0.63 | 99.76±0.01 | 47.45±1.40 |
|
| 36 |
-
| idridd_segmentation | official | deeplabv3plus | 3 | 49.34±0.48 | 39.78±0.37 | 87.84±3.82 | 24.05±2.07 | 46.76±0.52 | 99.84±0.00 | 56.89±0.64 |
|
| 37 |
-
| idridd_segmentation | official | nnunet | 3 | 64.64±0.11 | 52.93±0.04 | 67.25±2.79 | 14.39±0.41 | 65.23±0.50 | 99.87±0.01 | 67.53±0.18 |
|
| 38 |
-
| idridd_segmentation | official | swinunet | 3 | 20.95±15.57 | 17.08±12.51 | 89.66±13.40 | 27.12±4.24 | 21.93±16.29 | 99.83±0.13 | 22.02±16.14 |
|
| 39 |
-
| idridd_segmentation | official | transunet | 3 | 25.66±3.11 | 22.79±2.25 | 86.98±29.21 | 31.60±9.41 | 26.27±2.73 | 99.89±0.02 | 27.52±4.62 |
|
| 40 |
-
| idridd_segmentation | official | umamba | 3 | 64.64±0.10 | 53.04±0.09 | 64.19±1.12 | 11.88±0.76 | 65.39±0.15 | 99.86±0.00 | 67.37±0.02 |
|
| 41 |
-
| idridd_segmentation | official | unet | 3 | 49.75±0.65 | 41.31±0.60 | 68.00±0.38 | 14.87±0.84 | 48.47±1.40 | 99.86±0.01 | 53.82±0.67 |
|
| 42 |
-
| idridd_segmentation | official | unetpp | 3 | 50.52±2.11 | 41.58±1.32 | 77.61±8.63 | 18.99±2.70 | 48.91±1.24 | 99.87±0.01 | 55.73±3.66 |
|
| 43 |
-
| kvasir_seg | official | attention_unet | 3 | 87.58±0.11 | 80.22±0.22 | 63.80±1.73 | 13.54±0.38 | 87.79±0.30 | 98.43±0.06 | 90.60±0.12 |
|
| 44 |
-
| kvasir_seg | official | deeplabv3plus | 3 | 90.39±0.47 | 84.62±0.60 | 38.27±3.50 | 9.24±0.59 | 90.26±0.31 | 99.04±0.17 | 93.38±0.91 |
|
| 45 |
-
| kvasir_seg | official | nnunet | 3 | 90.44±0.88 | 84.42±1.19 | 38.85±5.15 | 9.34±1.11 | 91.23±0.65 | 98.42±0.46 | 92.06±1.07 |
|
| 46 |
-
| kvasir_seg | official | swinunet | 3 | 90.15±0.62 | 84.10±0.69 | 34.84±0.81 | 9.03±0.74 | 89.69±0.38 | 98.92±0.12 | 93.15±0.43 |
|
| 47 |
-
| kvasir_seg | official | transunet | 3 | 90.76±0.37 | 85.28±0.29 | 31.81±1.27 | 8.13±0.45 | 90.93±0.58 | 98.93±0.06 | 92.63±0.36 |
|
| 48 |
-
| kvasir_seg | official | umamba | 3 | 91.23±0.14 | 85.29±0.14 | 37.78±1.17 | 8.85±0.16 | 91.53±0.04 | 98.76±0.10 | 92.84±0.24 |
|
| 49 |
-
| kvasir_seg | official | unet | 3 | 88.41±0.54 | 82.98±0.38 | 39.96±3.32 | 10.44±1.04 | 87.96±0.61 | 99.02±0.15 | 91.95±1.48 |
|
| 50 |
-
| kvasir_seg | official | unetpp | 3 | 87.88±0.19 | 82.32±0.25 | 41.23±2.76 | 10.75±0.76 | 87.27±0.34 | 99.07±0.14 | 92.14±0.90 |
|
| 51 |
-
| medsegdb_isic2018 | holdout | attention_unet | 3 | 88.57±0.25 | 81.64±0.30 | 46.32±2.81 | 15.07±0.79 | 89.45±0.32 | 97.23±0.22 | 90.98±0.63 |
|
| 52 |
-
| medsegdb_isic2018 | holdout | deeplabv3plus | 3 | 90.68±0.10 | 84.40±0.15 | 30.76±0.28 | 10.54±0.16 | 91.46±0.47 | 97.22±0.10 | 92.47±0.40 |
|
| 53 |
-
| medsegdb_isic2018 | holdout | nnunet | 3 | 90.20±0.14 | 83.97±0.18 | 30.38±0.42 | 11.62±0.16 | 92.34±0.12 | 95.92±0.14 | 91.29±0.29 |
|
| 54 |
-
| medsegdb_isic2018 | holdout | swinunet | 3 | 91.04±0.14 | 84.89±0.21 | 26.72±0.58 | 9.85±0.16 | 91.60±0.25 | 97.26±0.17 | 92.94±0.21 |
|
| 55 |
-
| medsegdb_isic2018 | holdout | transunet | 3 | 90.83±0.27 | 84.53±0.37 | 28.21±0.86 | 10.36±0.30 | 91.87±1.33 | 97.30±0.72 | 92.34±1.62 |
|
| 56 |
-
| medsegdb_isic2018 | holdout | umamba | 3 | 90.22±0.21 | 83.98±0.22 | 29.95±0.87 | 11.51±0.48 | 92.32±0.15 | 96.16±0.24 | 91.27±0.17 |
|
| 57 |
-
| medsegdb_isic2018 | holdout | unet | 3 | 90.08±0.12 | 83.65±0.10 | 34.82±1.57 | 11.64±0.26 | 91.23±0.39 | 97.11±0.12 | 91.72±0.28 |
|
| 58 |
-
| medsegdb_isic2018 | holdout | unetpp | 3 | 89.92±0.06 | 83.46±0.03 | 34.66±0.03 | 11.58±0.09 | 90.87±0.27 | 97.20±0.11 | 91.90±0.41 |
|
| 59 |
-
| medsegdb_kits19 | single-split | attention_unet | 3 | 64.74±1.44 | 56.30±2.10 | 50.10±0.65 | 16.36±0.51 | 64.87±2.73 | 99.86±0.02 | 74.88±1.60 |
|
| 60 |
-
| medsegdb_kits19 | single-split | deeplabv3plus | 3 | 78.70±1.34 | 70.91±1.74 | 36.29±1.75 | 14.49±0.75 | 79.33±1.99 | 99.86±0.01 | 82.33±0.20 |
|
| 61 |
-
| medsegdb_kits19 | single-split | nnunet | 3 | 70.44±1.93 | 63.29±1.50 | 39.19±0.93 | 18.90±1.27 | 68.80±1.89 | 99.91±0.00 | 75.57±1.49 |
|
| 62 |
-
| medsegdb_kits19 | single-split | swinunet | 3 | 63.42±2.92 | 55.87±2.86 | 52.42±1.11 | 27.15±1.89 | 65.11±4.13 | 99.83±0.03 | 66.14±1.56 |
|
| 63 |
-
| medsegdb_kits19 | single-split | transunet | 3 | 76.82±0.93 | 69.11±1.04 | 41.37±2.53 | 17.79±1.51 | 79.55±1.61 | 99.85±0.03 | 77.89±1.41 |
|
| 64 |
-
| medsegdb_kits19 | single-split | umamba | 3 | 72.41±1.03 | 65.00±1.11 | 38.55±2.43 | 20.21±2.64 | 70.16±1.49 | 99.90±0.03 | 78.36±0.33 |
|
| 65 |
-
| medsegdb_kits19 | single-split | unet | 3 | 74.59±5.62 | 67.10±5.84 | 39.79±6.37 | 12.45±2.46 | 76.36±4.84 | 99.84±0.01 | 78.34±4.37 |
|
| 66 |
-
| medsegdb_kits19 | single-split | unetpp | 3 | 72.19±3.00 | 64.12±3.25 | 46.19±1.36 | 13.69±0.81 | 73.91±3.85 | 99.85±0.02 | 77.43±1.77 |
|
| 67 |
-
| pannuke_semantic | 3-fold | attention_unet | 3 | 45.87±0.39 | 36.95±0.34 | 146.04±3.87 | 41.79±1.35 | 47.19±0.83 | 97.97±0.08 | 50.02±0.28 |
|
| 68 |
-
| pannuke_semantic | 3-fold | deeplabv3plus | 3 | 52.35±0.35 | 42.54±0.38 | 136.89±1.88 | 38.90±0.80 | 53.30±0.34 | 97.88±0.07 | 56.62±0.74 |
|
| 69 |
-
| pannuke_semantic | 3-fold | nnunet | 3 | 47.82±0.55 | 38.39±0.50 | 147.16±1.97 | 44.45±0.13 | 48.82±0.48 | 97.77±0.03 | 52.25±0.56 |
|
| 70 |
-
| pannuke_semantic | 3-fold | swinunet | 3 | 54.34±0.42 | 44.11±0.34 | 132.62±0.94 | 37.48±0.61 | 56.75±0.60 | 97.55±0.11 | 56.94±0.64 |
|
| 71 |
-
| pannuke_semantic | 3-fold | transunet | 3 | 53.60±0.35 | 43.82±0.20 | 134.40±1.48 | 37.35±0.11 | 55.87±0.22 | 97.63±0.02 | 56.60±0.56 |
|
| 72 |
-
| pannuke_semantic | 3-fold | umamba | 3 | 49.40±0.51 | 40.01±0.51 | 142.36±1.82 | 42.08±0.67 | 50.81±0.59 | 97.74±0.08 | 53.87±0.41 |
|
| 73 |
-
| pannuke_semantic | 3-fold | unet | 3 | 49.85±0.33 | 40.50±0.35 | 140.39±1.84 | 40.59±0.81 | 50.72±0.24 | 98.00±0.02 | 53.64±0.56 |
|
| 74 |
-
| pannuke_semantic | 3-fold | unetpp | 3 | 50.01±0.13 | 40.65±0.20 | 140.91±2.40 | 40.58±0.36 | 50.79±0.46 | 97.98±0.04 | 54.27±0.67 |
|
| 75 |
-
| refuge2 | official | attention_unet | 3 | 75.49±4.01 | 63.91±3.95 | 23.03±10.16 | 8.58±5.22 | 78.22±6.52 | 99.87±0.04 | 79.57±0.70 |
|
| 76 |
-
| refuge2 | official | deeplabv3plus | 3 | 84.26±0.94 | 73.60±1.40 | 8.93±0.64 | 3.34±0.18 | 87.53±1.41 | 99.88±0.01 | 83.72±1.73 |
|
| 77 |
-
| refuge2 | official | nnunet | 3 | 85.55±0.23 | 75.57±0.31 | 6.36±1.11 | 2.51±0.08 | 90.46±0.32 | 99.87±0.00 | 82.64±0.20 |
|
| 78 |
-
| refuge2 | official | swinunet | 3 | 80.95±4.15 | 68.98±5.52 | 17.42±4.99 | 4.47±1.14 | 87.62±1.11 | 99.80±0.08 | 77.35±6.97 |
|
| 79 |
-
| refuge2 | official | transunet | 3 | 76.90±1.37 | 64.73±1.36 | 9.24±0.48 | 3.61±0.10 | 72.98±2.95 | 99.92±0.01 | 86.82±1.00 |
|
| 80 |
-
| refuge2 | official | umamba | 3 | 82.42±1.25 | 71.20±1.97 | 7.23±0.47 | 3.09±0.23 | 88.34±0.75 | 99.85±0.02 | 79.69±2.64 |
|
| 81 |
-
| refuge2 | official | unet | 3 | 84.76±0.89 | 74.31±1.24 | 17.13±1.77 | 4.72±0.76 | 91.06±0.81 | 99.84±0.04 | 80.96±1.86 |
|
| 82 |
-
| refuge2 | official | unetpp | 3 | 86.66±1.10 | 77.11±1.72 | 16.78±8.92 | 3.64±0.97 | 88.88±0.23 | 99.89±0.00 | 86.19±1.66 |
|
|
|
|
| 1 |
+
## Main results — Dice (mean±SD %, ↑)
|
| 2 |
+
|
| 3 |
+
_**Bold** = best or not significantly worse than best per dataset (paired Wilcoxon on per-image Dice, p≥0.05)._
|
| 4 |
+
|
| 5 |
+
| Method | CVC-ClinicDB | Kvasir-SEG | FIVES | BUSI | REFUGE2 | ACDC | IDRiD | PanNuke | ISIC2018 | KiTS19 | Avg |
|
| 6 |
+
|---|---|---|---|---|---|---|---|---|---|---|---|
|
| 7 |
+
| UNet | **94.49±0.14** | **88.41±0.54** | 86.81±0.08 | 72.76±2.47 | 84.76±0.89 | 77.78±0.39 | 49.75±0.65 | 49.85±0.33 | 90.08±0.12 | 74.59±5.62 | 76.9 |
|
| 8 |
+
| UNet++ | **93.92±0.51** | **87.88±0.19** | 86.77±0.80 | 74.67±0.68 | **86.66±1.10** | **79.75±0.57** | 50.52±2.11 | 50.01±0.13 | 89.92±0.06 | 72.19±3.00 | 77.2 |
|
| 9 |
+
| DeepLabV3+ | 93.83±0.42 | **90.39±0.47** | 80.97±0.30 | **76.12±1.20** | 84.26±0.94 | 78.33±0.49 | 49.34±0.48 | 52.35±0.35 | **90.68±0.10** | **78.70±1.34** | 77.5 |
|
| 10 |
+
| Attention-UNet | 91.73±0.33 | 87.58±0.11 | 85.64±0.20 | 65.98±1.11 | 75.49±4.01 | 74.57±0.15 | 44.65±0.61 | 45.87±0.39 | 88.57±0.25 | 64.74±1.44 | 72.5 |
|
| 11 |
+
| TransUNet | **94.29±0.31** | **90.76±0.37** | 73.10±0.84 | **76.53±1.65** | 76.90±1.37 | 79.46±0.44 | 25.66±3.11 | **53.60±0.35** | 90.83±0.27 | 76.82±0.93 | 73.8 |
|
| 12 |
+
| Swin-UNet | 92.72±0.33 | **90.15±0.62** | 68.78±0.18 | **76.00±0.94** | 80.95±4.15 | 71.26±1.36 | 20.95±15.57 | **54.34±0.42** | **91.04±0.14** | 63.42±2.92 | 71.0 |
|
| 13 |
+
| nnU-Net | **94.24±0.64** | **90.44±0.88** | **89.00±0.35** | **75.39±1.35** | 85.55±0.23 | 73.81±0.38 | **64.64±0.11** | 47.82±0.55 | **90.20±0.14** | 70.44±1.93 | 78.2 |
|
| 14 |
+
| U-Mamba | 92.98±0.55 | **91.23±0.14** | 82.68±1.21 | 73.73±0.35 | 82.42±1.25 | 68.68±0.89 | **64.64±0.10** | 49.40±0.51 | **90.22±0.21** | 72.41±1.03 | 76.8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
results/summary.tex
CHANGED
|
@@ -1,86 +1,17 @@
|
|
| 1 |
-
|
|
|
|
|
|
|
| 2 |
\toprule
|
| 3 |
-
|
| 4 |
\midrule
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
busi & single-split & deeplabv3plus & 3 & 76.12$\pm$1.20 & 67.48$\pm$1.21 & 53.29$\pm$0.90 & 17.36$\pm$0.79 & 77.79$\pm$1.07 & 98.29$\pm$0.19 & 80.23$\pm$2.16 \\
|
| 15 |
-
busi & single-split & nnunet & 3 & 75.39$\pm$1.35 & 67.68$\pm$1.22 & 49.83$\pm$1.37 & 15.63$\pm$0.67 & 77.32$\pm$1.17 & 98.11$\pm$0.15 & 77.75$\pm$1.08 \\
|
| 16 |
-
busi & single-split & swinunet & 3 & 76.00$\pm$0.94 & 67.46$\pm$0.68 & 51.91$\pm$2.96 & 17.56$\pm$0.21 & 79.00$\pm$0.64 & 97.89$\pm$0.41 & 78.71$\pm$2.19 \\
|
| 17 |
-
busi & single-split & transunet & 3 & 76.53$\pm$1.65 & 68.44$\pm$1.56 & 43.79$\pm$1.43 & 14.88$\pm$0.85 & 76.77$\pm$2.13 & 98.25$\pm$0.20 & 81.18$\pm$0.95 \\
|
| 18 |
-
busi & single-split & umamba & 3 & 73.73$\pm$0.35 & 65.57$\pm$0.50 & 60.19$\pm$3.74 & 20.37$\pm$1.68 & 76.05$\pm$0.47 & 97.89$\pm$0.08 & 76.75$\pm$0.65 \\
|
| 19 |
-
busi & single-split & unet & 3 & 72.76$\pm$2.47 & 64.44$\pm$2.32 & 70.02$\pm$7.49 & 24.70$\pm$4.36 & 77.53$\pm$1.43 & 97.64$\pm$0.70 & 74.59$\pm$5.01 \\
|
| 20 |
-
busi & single-split & unetpp & 3 & 74.67$\pm$0.68 & 66.19$\pm$0.61 & 62.67$\pm$0.86 & 18.90$\pm$1.26 & 76.45$\pm$1.52 & 98.25$\pm$0.25 & 78.73$\pm$0.53 \\
|
| 21 |
-
cvc_clinicdb & official & attention_unet & 3 & 91.73$\pm$0.33 & 86.04$\pm$0.51 & 45.21$\pm$6.77 & 9.76$\pm$1.90 & 91.61$\pm$0.58 & 99.30$\pm$0.07 & 93.39$\pm$0.29 \\
|
| 22 |
-
cvc_clinicdb & official & deeplabv3plus & 3 & 93.83$\pm$0.42 & 89.12$\pm$0.42 & 21.19$\pm$0.33 & 4.42$\pm$0.11 & 93.24$\pm$0.49 & 99.45$\pm$0.04 & 95.45$\pm$0.18 \\
|
| 23 |
-
cvc_clinicdb & official & nnunet & 3 & 94.24$\pm$0.64 & 89.69$\pm$0.75 & 22.37$\pm$1.75 & 5.23$\pm$0.60 & 93.83$\pm$0.55 & 99.53$\pm$0.02 & 95.29$\pm$0.44 \\
|
| 24 |
-
cvc_clinicdb & official & swinunet & 3 & 92.72$\pm$0.33 & 87.03$\pm$0.35 & 22.70$\pm$1.25 & 4.99$\pm$0.22 & 93.13$\pm$1.08 & 99.28$\pm$0.12 & 93.09$\pm$0.66 \\
|
| 25 |
-
cvc_clinicdb & official & transunet & 3 & 94.29$\pm$0.31 & 89.62$\pm$0.41 & 19.53$\pm$0.69 & 4.26$\pm$0.23 & 94.74$\pm$0.75 & 99.41$\pm$0.08 & 94.49$\pm$1.09 \\
|
| 26 |
-
cvc_clinicdb & official & umamba & 3 & 92.98$\pm$0.55 & 87.93$\pm$0.81 & 22.80$\pm$2.25 & 4.99$\pm$0.30 & 91.93$\pm$0.53 & 99.52$\pm$0.03 & 95.30$\pm$0.38 \\
|
| 27 |
-
cvc_clinicdb & official & unet & 3 & 94.49$\pm$0.14 & 89.91$\pm$0.20 & 19.46$\pm$0.53 & 4.05$\pm$0.04 & 93.84$\pm$0.18 & 99.46$\pm$0.02 & 95.75$\pm$0.01 \\
|
| 28 |
-
cvc_clinicdb & official & unetpp & 3 & 93.92$\pm$0.51 & 89.42$\pm$0.61 & 19.28$\pm$3.15 & 4.23$\pm$0.76 & 93.42$\pm$0.62 & 99.44$\pm$0.02 & 95.12$\pm$0.55 \\
|
| 29 |
-
fives & official & attention_unet & 3 & 85.64$\pm$0.20 & 76.20$\pm$0.22 & 13.82$\pm$2.13 & 2.84$\pm$0.27 & 84.98$\pm$0.29 & 98.14$\pm$0.04 & 88.02$\pm$0.39 \\
|
| 30 |
-
fives & official & deeplabv3plus & 3 & 80.97$\pm$0.30 & 69.44$\pm$0.34 & 17.02$\pm$0.93 & 3.82$\pm$0.33 & 81.56$\pm$0.18 & 96.91$\pm$0.45 & 82.82$\pm$0.47 \\
|
| 31 |
-
fives & official & nnunet & 3 & 89.00$\pm$0.35 & 82.66$\pm$0.21 & 14.76$\pm$1.05 & 3.31$\pm$0.11 & 89.65$\pm$0.59 & 97.81$\pm$0.43 & 90.81$\pm$0.72 \\
|
| 32 |
-
fives & official & swinunet & 3 & 68.78$\pm$0.18 & 53.20$\pm$0.10 & 29.64$\pm$2.19 & 5.26$\pm$0.71 & 70.22$\pm$0.92 & 96.24$\pm$0.42 & 69.31$\pm$1.44 \\
|
| 33 |
-
fives & official & transunet & 3 & 73.10$\pm$0.84 & 58.44$\pm$1.10 & 22.64$\pm$0.42 & 4.07$\pm$0.22 & 71.89$\pm$0.77 & 97.09$\pm$0.32 & 76.28$\pm$2.66 \\
|
| 34 |
-
fives & official & umamba & 3 & 82.68$\pm$1.21 & 74.13$\pm$1.87 & 28.66$\pm$1.08 & 5.12$\pm$0.23 & 89.24$\pm$0.19 & 97.12$\pm$0.19 & 80.56$\pm$2.18 \\
|
| 35 |
-
fives & official & unet & 3 & 86.81$\pm$0.08 & 78.13$\pm$0.07 & 12.21$\pm$0.68 & 2.79$\pm$0.35 & 85.48$\pm$0.10 & 98.29$\pm$0.01 & 89.69$\pm$0.27 \\
|
| 36 |
-
fives & official & unetpp & 3 & 86.77$\pm$0.80 & 77.97$\pm$1.27 & 11.60$\pm$0.43 & 2.61$\pm$0.10 & 85.32$\pm$0.79 & 98.28$\pm$0.08 & 89.89$\pm$0.67 \\
|
| 37 |
-
idridd_segmentation & official & attention_unet & 3 & 44.65$\pm$0.61 & 36.58$\pm$0.44 & 75.44$\pm$4.17 & 18.07$\pm$1.24 & 45.22$\pm$0.63 & 99.76$\pm$0.01 & 47.45$\pm$1.40 \\
|
| 38 |
-
idridd_segmentation & official & deeplabv3plus & 3 & 49.34$\pm$0.48 & 39.78$\pm$0.37 & 87.84$\pm$3.82 & 24.05$\pm$2.07 & 46.76$\pm$0.52 & 99.84$\pm$0.00 & 56.89$\pm$0.64 \\
|
| 39 |
-
idridd_segmentation & official & nnunet & 3 & 64.64$\pm$0.11 & 52.93$\pm$0.04 & 67.25$\pm$2.79 & 14.39$\pm$0.41 & 65.23$\pm$0.50 & 99.87$\pm$0.01 & 67.53$\pm$0.18 \\
|
| 40 |
-
idridd_segmentation & official & swinunet & 3 & 20.95$\pm$15.57 & 17.08$\pm$12.51 & 89.66$\pm$13.40 & 27.12$\pm$4.24 & 21.93$\pm$16.29 & 99.83$\pm$0.13 & 22.02$\pm$16.14 \\
|
| 41 |
-
idridd_segmentation & official & transunet & 3 & 25.66$\pm$3.11 & 22.79$\pm$2.25 & 86.98$\pm$29.21 & 31.60$\pm$9.41 & 26.27$\pm$2.73 & 99.89$\pm$0.02 & 27.52$\pm$4.62 \\
|
| 42 |
-
idridd_segmentation & official & umamba & 3 & 64.64$\pm$0.10 & 53.04$\pm$0.09 & 64.19$\pm$1.12 & 11.88$\pm$0.76 & 65.39$\pm$0.15 & 99.86$\pm$0.00 & 67.37$\pm$0.02 \\
|
| 43 |
-
idridd_segmentation & official & unet & 3 & 49.75$\pm$0.65 & 41.31$\pm$0.60 & 68.00$\pm$0.38 & 14.87$\pm$0.84 & 48.47$\pm$1.40 & 99.86$\pm$0.01 & 53.82$\pm$0.67 \\
|
| 44 |
-
idridd_segmentation & official & unetpp & 3 & 50.52$\pm$2.11 & 41.58$\pm$1.32 & 77.61$\pm$8.63 & 18.99$\pm$2.70 & 48.91$\pm$1.24 & 99.87$\pm$0.01 & 55.73$\pm$3.66 \\
|
| 45 |
-
kvasir_seg & official & attention_unet & 3 & 87.58$\pm$0.11 & 80.22$\pm$0.22 & 63.80$\pm$1.73 & 13.54$\pm$0.38 & 87.79$\pm$0.30 & 98.43$\pm$0.06 & 90.60$\pm$0.12 \\
|
| 46 |
-
kvasir_seg & official & deeplabv3plus & 3 & 90.39$\pm$0.47 & 84.62$\pm$0.60 & 38.27$\pm$3.50 & 9.24$\pm$0.59 & 90.26$\pm$0.31 & 99.04$\pm$0.17 & 93.38$\pm$0.91 \\
|
| 47 |
-
kvasir_seg & official & nnunet & 3 & 90.44$\pm$0.88 & 84.42$\pm$1.19 & 38.85$\pm$5.15 & 9.34$\pm$1.11 & 91.23$\pm$0.65 & 98.42$\pm$0.46 & 92.06$\pm$1.07 \\
|
| 48 |
-
kvasir_seg & official & swinunet & 3 & 90.15$\pm$0.62 & 84.10$\pm$0.69 & 34.84$\pm$0.81 & 9.03$\pm$0.74 & 89.69$\pm$0.38 & 98.92$\pm$0.12 & 93.15$\pm$0.43 \\
|
| 49 |
-
kvasir_seg & official & transunet & 3 & 90.76$\pm$0.37 & 85.28$\pm$0.29 & 31.81$\pm$1.27 & 8.13$\pm$0.45 & 90.93$\pm$0.58 & 98.93$\pm$0.06 & 92.63$\pm$0.36 \\
|
| 50 |
-
kvasir_seg & official & umamba & 3 & 91.23$\pm$0.14 & 85.29$\pm$0.14 & 37.78$\pm$1.17 & 8.85$\pm$0.16 & 91.53$\pm$0.04 & 98.76$\pm$0.10 & 92.84$\pm$0.24 \\
|
| 51 |
-
kvasir_seg & official & unet & 3 & 88.41$\pm$0.54 & 82.98$\pm$0.38 & 39.96$\pm$3.32 & 10.44$\pm$1.04 & 87.96$\pm$0.61 & 99.02$\pm$0.15 & 91.95$\pm$1.48 \\
|
| 52 |
-
kvasir_seg & official & unetpp & 3 & 87.88$\pm$0.19 & 82.32$\pm$0.25 & 41.23$\pm$2.76 & 10.75$\pm$0.76 & 87.27$\pm$0.34 & 99.07$\pm$0.14 & 92.14$\pm$0.90 \\
|
| 53 |
-
medsegdb_isic2018 & holdout & attention_unet & 3 & 88.57$\pm$0.25 & 81.64$\pm$0.30 & 46.32$\pm$2.81 & 15.07$\pm$0.79 & 89.45$\pm$0.32 & 97.23$\pm$0.22 & 90.98$\pm$0.63 \\
|
| 54 |
-
medsegdb_isic2018 & holdout & deeplabv3plus & 3 & 90.68$\pm$0.10 & 84.40$\pm$0.15 & 30.76$\pm$0.28 & 10.54$\pm$0.16 & 91.46$\pm$0.47 & 97.22$\pm$0.10 & 92.47$\pm$0.40 \\
|
| 55 |
-
medsegdb_isic2018 & holdout & nnunet & 3 & 90.20$\pm$0.14 & 83.97$\pm$0.18 & 30.38$\pm$0.42 & 11.62$\pm$0.16 & 92.34$\pm$0.12 & 95.92$\pm$0.14 & 91.29$\pm$0.29 \\
|
| 56 |
-
medsegdb_isic2018 & holdout & swinunet & 3 & 91.04$\pm$0.14 & 84.89$\pm$0.21 & 26.72$\pm$0.58 & 9.85$\pm$0.16 & 91.60$\pm$0.25 & 97.26$\pm$0.17 & 92.94$\pm$0.21 \\
|
| 57 |
-
medsegdb_isic2018 & holdout & transunet & 3 & 90.83$\pm$0.27 & 84.53$\pm$0.37 & 28.21$\pm$0.86 & 10.36$\pm$0.30 & 91.87$\pm$1.33 & 97.30$\pm$0.72 & 92.34$\pm$1.62 \\
|
| 58 |
-
medsegdb_isic2018 & holdout & umamba & 3 & 90.22$\pm$0.21 & 83.98$\pm$0.22 & 29.95$\pm$0.87 & 11.51$\pm$0.48 & 92.32$\pm$0.15 & 96.16$\pm$0.24 & 91.27$\pm$0.17 \\
|
| 59 |
-
medsegdb_isic2018 & holdout & unet & 3 & 90.08$\pm$0.12 & 83.65$\pm$0.10 & 34.82$\pm$1.57 & 11.64$\pm$0.26 & 91.23$\pm$0.39 & 97.11$\pm$0.12 & 91.72$\pm$0.28 \\
|
| 60 |
-
medsegdb_isic2018 & holdout & unetpp & 3 & 89.92$\pm$0.06 & 83.46$\pm$0.03 & 34.66$\pm$0.03 & 11.58$\pm$0.09 & 90.87$\pm$0.27 & 97.20$\pm$0.11 & 91.90$\pm$0.41 \\
|
| 61 |
-
medsegdb_kits19 & single-split & attention_unet & 3 & 64.74$\pm$1.44 & 56.30$\pm$2.10 & 50.10$\pm$0.65 & 16.36$\pm$0.51 & 64.87$\pm$2.73 & 99.86$\pm$0.02 & 74.88$\pm$1.60 \\
|
| 62 |
-
medsegdb_kits19 & single-split & deeplabv3plus & 3 & 78.70$\pm$1.34 & 70.91$\pm$1.74 & 36.29$\pm$1.75 & 14.49$\pm$0.75 & 79.33$\pm$1.99 & 99.86$\pm$0.01 & 82.33$\pm$0.20 \\
|
| 63 |
-
medsegdb_kits19 & single-split & nnunet & 3 & 70.44$\pm$1.93 & 63.29$\pm$1.50 & 39.19$\pm$0.93 & 18.90$\pm$1.27 & 68.80$\pm$1.89 & 99.91$\pm$0.00 & 75.57$\pm$1.49 \\
|
| 64 |
-
medsegdb_kits19 & single-split & swinunet & 3 & 63.42$\pm$2.92 & 55.87$\pm$2.86 & 52.42$\pm$1.11 & 27.15$\pm$1.89 & 65.11$\pm$4.13 & 99.83$\pm$0.03 & 66.14$\pm$1.56 \\
|
| 65 |
-
medsegdb_kits19 & single-split & transunet & 3 & 76.82$\pm$0.93 & 69.11$\pm$1.04 & 41.37$\pm$2.53 & 17.79$\pm$1.51 & 79.55$\pm$1.61 & 99.85$\pm$0.03 & 77.89$\pm$1.41 \\
|
| 66 |
-
medsegdb_kits19 & single-split & umamba & 3 & 72.41$\pm$1.03 & 65.00$\pm$1.11 & 38.55$\pm$2.43 & 20.21$\pm$2.64 & 70.16$\pm$1.49 & 99.90$\pm$0.03 & 78.36$\pm$0.33 \\
|
| 67 |
-
medsegdb_kits19 & single-split & unet & 3 & 74.59$\pm$5.62 & 67.10$\pm$5.84 & 39.79$\pm$6.37 & 12.45$\pm$2.46 & 76.36$\pm$4.84 & 99.84$\pm$0.01 & 78.34$\pm$4.37 \\
|
| 68 |
-
medsegdb_kits19 & single-split & unetpp & 3 & 72.19$\pm$3.00 & 64.12$\pm$3.25 & 46.19$\pm$1.36 & 13.69$\pm$0.81 & 73.91$\pm$3.85 & 99.85$\pm$0.02 & 77.43$\pm$1.77 \\
|
| 69 |
-
pannuke_semantic & 3-fold & attention_unet & 3 & 45.87$\pm$0.39 & 36.95$\pm$0.34 & 146.04$\pm$3.87 & 41.79$\pm$1.35 & 47.19$\pm$0.83 & 97.97$\pm$0.08 & 50.02$\pm$0.28 \\
|
| 70 |
-
pannuke_semantic & 3-fold & deeplabv3plus & 3 & 52.35$\pm$0.35 & 42.54$\pm$0.38 & 136.89$\pm$1.88 & 38.90$\pm$0.80 & 53.30$\pm$0.34 & 97.88$\pm$0.07 & 56.62$\pm$0.74 \\
|
| 71 |
-
pannuke_semantic & 3-fold & nnunet & 3 & 47.82$\pm$0.55 & 38.39$\pm$0.50 & 147.16$\pm$1.97 & 44.45$\pm$0.13 & 48.82$\pm$0.48 & 97.77$\pm$0.03 & 52.25$\pm$0.56 \\
|
| 72 |
-
pannuke_semantic & 3-fold & swinunet & 3 & 54.34$\pm$0.42 & 44.11$\pm$0.34 & 132.62$\pm$0.94 & 37.48$\pm$0.61 & 56.75$\pm$0.60 & 97.55$\pm$0.11 & 56.94$\pm$0.64 \\
|
| 73 |
-
pannuke_semantic & 3-fold & transunet & 3 & 53.60$\pm$0.35 & 43.82$\pm$0.20 & 134.40$\pm$1.48 & 37.35$\pm$0.11 & 55.87$\pm$0.22 & 97.63$\pm$0.02 & 56.60$\pm$0.56 \\
|
| 74 |
-
pannuke_semantic & 3-fold & umamba & 3 & 49.40$\pm$0.51 & 40.01$\pm$0.51 & 142.36$\pm$1.82 & 42.08$\pm$0.67 & 50.81$\pm$0.59 & 97.74$\pm$0.08 & 53.87$\pm$0.41 \\
|
| 75 |
-
pannuke_semantic & 3-fold & unet & 3 & 49.85$\pm$0.33 & 40.50$\pm$0.35 & 140.39$\pm$1.84 & 40.59$\pm$0.81 & 50.72$\pm$0.24 & 98.00$\pm$0.02 & 53.64$\pm$0.56 \\
|
| 76 |
-
pannuke_semantic & 3-fold & unetpp & 3 & 50.01$\pm$0.13 & 40.65$\pm$0.20 & 140.91$\pm$2.40 & 40.58$\pm$0.36 & 50.79$\pm$0.46 & 97.98$\pm$0.04 & 54.27$\pm$0.67 \\
|
| 77 |
-
refuge2 & official & attention_unet & 3 & 75.49$\pm$4.01 & 63.91$\pm$3.95 & 23.03$\pm$10.16 & 8.58$\pm$5.22 & 78.22$\pm$6.52 & 99.87$\pm$0.04 & 79.57$\pm$0.70 \\
|
| 78 |
-
refuge2 & official & deeplabv3plus & 3 & 84.26$\pm$0.94 & 73.60$\pm$1.40 & 8.93$\pm$0.64 & 3.34$\pm$0.18 & 87.53$\pm$1.41 & 99.88$\pm$0.01 & 83.72$\pm$1.73 \\
|
| 79 |
-
refuge2 & official & nnunet & 3 & 85.55$\pm$0.23 & 75.57$\pm$0.31 & 6.36$\pm$1.11 & 2.51$\pm$0.08 & 90.46$\pm$0.32 & 99.87$\pm$0.00 & 82.64$\pm$0.20 \\
|
| 80 |
-
refuge2 & official & swinunet & 3 & 80.95$\pm$4.15 & 68.98$\pm$5.52 & 17.42$\pm$4.99 & 4.47$\pm$1.14 & 87.62$\pm$1.11 & 99.80$\pm$0.08 & 77.35$\pm$6.97 \\
|
| 81 |
-
refuge2 & official & transunet & 3 & 76.90$\pm$1.37 & 64.73$\pm$1.36 & 9.24$\pm$0.48 & 3.61$\pm$0.10 & 72.98$\pm$2.95 & 99.92$\pm$0.01 & 86.82$\pm$1.00 \\
|
| 82 |
-
refuge2 & official & umamba & 3 & 82.42$\pm$1.25 & 71.20$\pm$1.97 & 7.23$\pm$0.47 & 3.09$\pm$0.23 & 88.34$\pm$0.75 & 99.85$\pm$0.02 & 79.69$\pm$2.64 \\
|
| 83 |
-
refuge2 & official & unet & 3 & 84.76$\pm$0.89 & 74.31$\pm$1.24 & 17.13$\pm$1.77 & 4.72$\pm$0.76 & 91.06$\pm$0.81 & 99.84$\pm$0.04 & 80.96$\pm$1.86 \\
|
| 84 |
-
refuge2 & official & unetpp & 3 & 86.66$\pm$1.10 & 77.11$\pm$1.72 & 16.78$\pm$8.92 & 3.64$\pm$0.97 & 88.88$\pm$0.23 & 99.89$\pm$0.00 & 86.19$\pm$1.66 \\
|
| 85 |
\bottomrule
|
| 86 |
\end{tabular}
|
|
|
|
| 1 |
+
% Main results: Dice (mean over seeds, %). Bold = best or not significantly
|
| 2 |
+
% worse than best per dataset (paired Wilcoxon on per-image Dice, p>=0.05).
|
| 3 |
+
\begin{tabular}{lccccccccccc}
|
| 4 |
\toprule
|
| 5 |
+
Method & CVC-ClinicDB & Kvasir-SEG & FIVES & BUSI & REFUGE2 & ACDC & IDRiD & PanNuke & ISIC2018 & KiTS19 & Avg \\
|
| 6 |
\midrule
|
| 7 |
+
UNet & \textbf{94.5} & \textbf{88.4} & 86.8 & 72.8 & 84.8 & 77.8 & 49.7 & 49.8 & 90.1 & 74.6 & 76.9 \\
|
| 8 |
+
UNet++ & \textbf{93.9} & \textbf{87.9} & 86.8 & 74.7 & \textbf{86.7} & \textbf{79.7} & 50.5 & 50.0 & 89.9 & 72.2 & 77.2 \\
|
| 9 |
+
DeepLabV3+ & 93.8 & \textbf{90.4} & 81.0 & \textbf{76.1} & 84.3 & 78.3 & 49.3 & 52.4 & \textbf{90.7} & \textbf{78.7} & 77.5 \\
|
| 10 |
+
Attention-UNet & 91.7 & 87.6 & 85.6 & 66.0 & 75.5 & 74.6 & 44.6 & 45.9 & 88.6 & 64.7 & 72.5 \\
|
| 11 |
+
\midrule
|
| 12 |
+
TransUNet & \textbf{94.3} & \textbf{90.8} & 73.1 & \textbf{76.5} & 76.9 & 79.5 & 25.7 & \textbf{53.6} & 90.8 & 76.8 & 73.8 \\
|
| 13 |
+
Swin-UNet & 92.7 & \textbf{90.1} & 68.8 & \textbf{76.0} & 80.9 & 71.3 & 21.0 & \textbf{54.3} & \textbf{91.0} & 63.4 & 71.0 \\
|
| 14 |
+
nnU-Net & \textbf{94.2} & \textbf{90.4} & \textbf{89.0} & \textbf{75.4} & 85.5 & 73.8 & \textbf{64.6} & 47.8 & \textbf{90.2} & 70.4 & \textbf{78.2} \\
|
| 15 |
+
U-Mamba & 93.0 & \textbf{91.2} & 82.7 & 73.7 & 82.4 & 68.7 & \textbf{64.6} & 49.4 & \textbf{90.2} & 72.4 & 76.8 \\
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
\bottomrule
|
| 17 |
\end{tabular}
|