report: drop cross-dataset average columns + overall-ranking table (heterogeneous modalities); per-dataset + significance only
Browse files- code/framework/report/aggregate.py +26 -69
- results/summary.html +32 -44
- results/summary.md +11 -11
- results/summary.tex +11 -10
code/framework/report/aggregate.py
CHANGED
|
@@ -125,18 +125,6 @@ def _grid(rows):
|
|
| 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)
|
|
@@ -224,11 +212,12 @@ def _dice_bold(a, d, cell, best, sig):
|
|
| 224 |
|
| 225 |
|
| 226 |
def to_markdown(rows, sig=None):
|
| 227 |
-
cell, datasets, methods,
|
| 228 |
-
head = ["Method"] + [_DS_DISP.get(d, d) for d in datasets]
|
| 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).
|
|
|
|
| 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}
|
|
@@ -240,21 +229,20 @@ def to_markdown(rows, sig=None):
|
|
| 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,
|
| 250 |
-
spec = "l" + "c" *
|
| 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) + "
|
| 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:
|
|
@@ -263,8 +251,6 @@ def to_latex(rows, sig=None):
|
|
| 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
|
|
@@ -348,21 +334,19 @@ hr{border:none;border-top:1px solid #e3e3e3;margin:24px 0}
|
|
| 348 |
|
| 349 |
|
| 350 |
def _metric_table(cell, datasets, methods, key, pct, hib, bold_sets=None):
|
| 351 |
-
"""Transposed table: methods (rows) × datasets (cols)
|
| 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 |
-
+ "<
|
| 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>"]
|
|
@@ -373,30 +357,6 @@ def _metric_table(cell, datasets, methods, key, pct, hib, bold_sets=None):
|
|
| 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)
|
|
@@ -462,7 +422,6 @@ 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>")
|
|
@@ -476,8 +435,10 @@ def to_html(rows, runs=None, title="SegGen benchmark", sig=None):
|
|
| 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).
|
| 480 |
-
"Horizontal rule separates CNNs (top) from Transformer / foundation models (bottom).
|
|
|
|
|
|
|
| 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>")
|
|
@@ -486,26 +447,22 @@ def to_html(rows, runs=None, title="SegGen benchmark", sig=None):
|
|
| 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>
|
| 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).
|
|
|
|
| 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
|
| 508 |
-
"
|
|
|
|
| 509 |
h.append(_setup_html())
|
| 510 |
h.append("</body></html>")
|
| 511 |
return "\n".join(h)
|
|
|
|
| 125 |
return cell, datasets, methods
|
| 126 |
|
| 127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
# ----------------------------------------------------------------------------- significance
|
| 129 |
def _per_image_dice_vec(runs_for_da):
|
| 130 |
by_proto = defaultdict(list)
|
|
|
|
| 212 |
|
| 213 |
|
| 214 |
def to_markdown(rows, sig=None):
|
| 215 |
+
cell, datasets, methods, _ = _dice_matrix(rows)
|
| 216 |
+
head = ["Method"] + [_DS_DISP.get(d, d) for d in datasets]
|
| 217 |
out = "## Main results — Dice (mean±SD %, ↑)\n\n"
|
| 218 |
out += ("_**Bold** = best or not significantly worse than best per dataset "
|
| 219 |
+
"(paired Wilcoxon on per-image Dice, p≥0.05). No cross-dataset average column — "
|
| 220 |
+
"the seven modalities are too heterogeneous for one number to be meaningful._\n\n")
|
| 221 |
out += "| " + " | ".join(head) + " |\n|" + "---|" * len(head) + "\n"
|
| 222 |
best = {d: max((cell[(d, a)]["dice_mean"] for a in methods if (d, a) in cell), default=np.nan)
|
| 223 |
for d in datasets}
|
|
|
|
| 229 |
cells.append(f"**{t}**" if _dice_bold(a, d, cell, best, sig) else t)
|
| 230 |
else:
|
| 231 |
cells.append("–")
|
|
|
|
| 232 |
out += "| " + " | ".join(cells) + " |\n"
|
| 233 |
return out
|
| 234 |
|
| 235 |
|
| 236 |
def to_latex(rows, sig=None):
|
| 237 |
+
cell, datasets, methods, _ = _dice_matrix(rows)
|
| 238 |
+
spec = "l" + "c" * len(datasets)
|
| 239 |
out = ("% Main results: Dice (mean over seeds, %). Bold = best or not significantly\n"
|
| 240 |
+
"% worse than best per dataset (paired Wilcoxon on per-image Dice, p>=0.05).\n"
|
| 241 |
+
"% No cross-dataset average column (modalities too heterogeneous).\n")
|
| 242 |
out += "\\begin{tabular}{" + spec + "}\n\\toprule\n"
|
| 243 |
+
out += "Method & " + " & ".join(_DS_DISP.get(d, d) for d in datasets) + " \\\\\n\\midrule\n"
|
| 244 |
best = {d: max((cell[(d, a)]["dice_mean"] for a in methods if (d, a) in cell), default=np.nan)
|
| 245 |
for d in datasets}
|
|
|
|
| 246 |
for a in methods:
|
| 247 |
cells = [_ARCH_DISP.get(a, a)]
|
| 248 |
for d in datasets:
|
|
|
|
| 251 |
cells.append(f"\\textbf{{{t}}}" if _dice_bold(a, d, cell, best, sig) else t)
|
| 252 |
else:
|
| 253 |
cells.append("--")
|
|
|
|
|
|
|
| 254 |
out += " & ".join(cells) + " \\\\\n"
|
| 255 |
if a == "attention_unet":
|
| 256 |
out += "\\midrule\n" # separate CNNs from transformers/foundation
|
|
|
|
| 334 |
|
| 335 |
|
| 336 |
def _metric_table(cell, datasets, methods, key, pct, hib, bold_sets=None):
|
| 337 |
+
"""Transposed table: methods (rows) × datasets (cols). bold_sets[ds] (set of archs)
|
| 338 |
+
if given (Dice significance), else bold the single best per column. Deliberately NO
|
| 339 |
+
cross-dataset summary column: the ten datasets span seven modalities with very
|
| 340 |
+
different difficulty, so a simple average is not meaningful (and would conflict with
|
| 341 |
+
the per-dataset ranking)."""
|
| 342 |
best = {}
|
| 343 |
for d in datasets:
|
| 344 |
vals = {a: cell[(d, a)][f"{key}_mean"] for a in methods
|
| 345 |
if (d, a) in cell and cell[(d, a)][f"{key}_mean"] == cell[(d, a)][f"{key}_mean"]}
|
| 346 |
best[d] = ((max if hib else min)(vals, key=vals.get) if vals else None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 347 |
h = ["<div class='tw'><table class='rt'><thead><tr><th class='m'>Method</th>"
|
| 348 |
+ "".join(f"<th>{_DS_DISP.get(d, d)}</th>" for d in datasets)
|
| 349 |
+
+ "</tr></thead><tbody>"]
|
| 350 |
for a in methods:
|
| 351 |
grp = " class='grp'" if a == "transunet" else ""
|
| 352 |
tds = [f"<td class='m'>{_ARCH_DISP.get(a, a)}</td>"]
|
|
|
|
| 357 |
tds.append(f"<td>{'<b>'+t+'</b>' if b else t}</td>")
|
| 358 |
else:
|
| 359 |
tds.append("<td>–</td>")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 360 |
h.append(f"<tr{grp}>" + "".join(tds) + "</tr>")
|
| 361 |
h.append("</tbody></table></div>")
|
| 362 |
return "\n".join(h)
|
|
|
|
| 422 |
cell, datasets, methods = _grid(rows)
|
| 423 |
if sig is None:
|
| 424 |
sig = _sig_tied_sets(runs) if runs else None
|
|
|
|
| 425 |
h = [f"<!doctype html><html><head><meta charset='utf-8'><title>{title}</title><style>{_CSS}</style>"
|
| 426 |
"</head><body>"]
|
| 427 |
h.append(f"<h1>{title}: 8 methods × 10 datasets (unified 512, resolution-fair)</h1>")
|
|
|
|
| 435 |
|
| 436 |
h.append("<h2>1. Main results — Dice (%) ↑</h2>")
|
| 437 |
h.append("<div class='cap'><b>Bold</b> = best, or not significantly different from the best per dataset "
|
| 438 |
+
"(paired Wilcoxon on per-image Dice, p≥0.05). "
|
| 439 |
+
"Horizontal rule separates CNNs (top) from Transformer / foundation models (bottom). "
|
| 440 |
+
"No cross-dataset average is reported — the seven modalities differ too much in difficulty "
|
| 441 |
+
"for a single number to be meaningful.</div>")
|
| 442 |
h.append(_metric_table(cell, datasets, methods, "dice", True, True, bold_sets=sig))
|
| 443 |
|
| 444 |
h.append("<h2>2. Boundary accuracy — HD95 (px) ↓</h2>")
|
|
|
|
| 447 |
h.append(_metric_table(cell, datasets, methods, "hd95", False, False))
|
| 448 |
|
| 449 |
h.append("<h2>3. Overlap — IoU (%) ↑</h2>")
|
| 450 |
+
h.append("<div class='cap'>Jaccard index, the stricter overlap measure (<b>bold</b> = best per dataset).</div>")
|
|
|
|
| 451 |
h.append(_metric_table(cell, datasets, methods, "iou", True, True))
|
| 452 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 453 |
if runs:
|
| 454 |
pcs = _perclass_section(runs)
|
| 455 |
if pcs.strip():
|
| 456 |
+
h.append("<h2>4. Per-class Dice (%) — multi-class datasets</h2>")
|
| 457 |
h.append("<div class='cap'>Mean per-class Dice over all test images/runs (0=background excluded; "
|
| 458 |
+
"<b>bold</b>=best per class). The <i>macro</i> column averages over a dataset's own "
|
| 459 |
+
"foreground classes (a within-dataset mean, not a cross-dataset one).</div>")
|
| 460 |
h.append(pcs)
|
| 461 |
|
| 462 |
h.append("<hr><h2>Appendix — Experimental setup</h2>")
|
| 463 |
+
h.append("<p class='cap'>Full per-(dataset,method) values for <b>every</b> metric "
|
| 464 |
+
"(IoU, HD95, ASSD, Sensitivity, Specificity, Precision, …) are in "
|
| 465 |
+
"<code>summary.csv</code>; the Dice table as LaTeX is in <code>summary.tex</code>.</p>")
|
| 466 |
h.append(_setup_html())
|
| 467 |
h.append("</body></html>")
|
| 468 |
return "\n".join(h)
|
results/summary.html
CHANGED
|
@@ -23,55 +23,43 @@ hr{border:none;border-top:1px solid #e3e3e3;margin:24px 0}
|
|
| 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).
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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).
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 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><
|
| 60 |
</tbody></table></div>
|
| 61 |
-
<h2>4.
|
| 62 |
-
<div class='cap'>
|
| 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>
|
|
@@ -117,7 +105,7 @@ hr{border:none;border-top:1px solid #e3e3e3;margin:24px 0}
|
|
| 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
|
| 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>
|
|
|
|
| 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). Horizontal rule separates CNNs (top) from Transformer / foundation models (bottom). No cross-dataset average is reported — the seven modalities differ too much in difficulty for a single number to be meaningful.</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></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></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></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></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></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></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></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></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></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></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></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></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></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></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></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></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></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></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).</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></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></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></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></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></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></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></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></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></tr>
|
| 60 |
</tbody></table></div>
|
| 61 |
+
<h2>4. Per-class Dice (%) — multi-class datasets</h2>
|
| 62 |
+
<div class='cap'>Mean per-class Dice over all test images/runs (0=background excluded; <b>bold</b>=best per class). The <i>macro</i> column averages over a dataset's own foreground classes (a within-dataset mean, not a cross-dataset one).</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
<h3>ACDC</h3>
|
| 64 |
<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>
|
| 65 |
<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>
|
|
|
|
| 105 |
<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>
|
| 106 |
</tbody></table></div>
|
| 107 |
<hr><h2>Appendix — Experimental setup</h2>
|
| 108 |
+
<p class='cap'>Full per-(dataset,method) values for <b>every</b> metric (IoU, HD95, ASSD, Sensitivity, Specificity, Precision, …) are in <code>summary.csv</code>; the Dice table as LaTeX is in <code>summary.tex</code>.</p>
|
| 109 |
<h2>A. Datasets</h2>
|
| 110 |
<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>
|
| 111 |
<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>
|
results/summary.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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** |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
|
|
|
| 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). No cross-dataset average column — the seven modalities are too heterogeneous for one number to be meaningful._
|
| 4 |
|
| 5 |
+
| Method | CVC-ClinicDB | Kvasir-SEG | FIVES | BUSI | REFUGE2 | ACDC | IDRiD | PanNuke | ISIC2018 | KiTS19 |
|
| 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 |
|
| 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 |
|
| 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** |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
results/summary.tex
CHANGED
|
@@ -1,17 +1,18 @@
|
|
| 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 |
-
|
|
|
|
| 4 |
\toprule
|
| 5 |
-
Method & CVC-ClinicDB & Kvasir-SEG & FIVES & BUSI & REFUGE2 & ACDC & IDRiD & PanNuke & ISIC2018 & KiTS19
|
| 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
|
| 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
|
| 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}
|
| 10 |
-
Attention-UNet & 91.7 & 87.6 & 85.6 & 66.0 & 75.5 & 74.6 & 44.6 & 45.9 & 88.6 & 64.7
|
| 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
|
| 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
|
| 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
|
| 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
|
| 16 |
\bottomrule
|
| 17 |
\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 |
+
% No cross-dataset average column (modalities too heterogeneous).
|
| 4 |
+
\begin{tabular}{lcccccccccc}
|
| 5 |
\toprule
|
| 6 |
+
Method & CVC-ClinicDB & Kvasir-SEG & FIVES & BUSI & REFUGE2 & ACDC & IDRiD & PanNuke & ISIC2018 & KiTS19 \\
|
| 7 |
\midrule
|
| 8 |
+
UNet & \textbf{94.5} & \textbf{88.4} & 86.8 & 72.8 & 84.8 & 77.8 & 49.7 & 49.8 & 90.1 & 74.6 \\
|
| 9 |
+
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 \\
|
| 10 |
+
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} \\
|
| 11 |
+
Attention-UNet & 91.7 & 87.6 & 85.6 & 66.0 & 75.5 & 74.6 & 44.6 & 45.9 & 88.6 & 64.7 \\
|
| 12 |
\midrule
|
| 13 |
+
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 \\
|
| 14 |
+
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 \\
|
| 15 |
+
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 \\
|
| 16 |
+
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 \\
|
| 17 |
\bottomrule
|
| 18 |
\end{tabular}
|