COMP3888 pancreas segmentation checkpoints
This model repo is part of COMP3888 (Computer Science Capstone Project) at the University of Sydney. The group members are Adam Lukic, Joy Yan, Mitchell Cooper, Jordan Guyot, Dillon de Silva, Quinn Hannam, and Will Pennell.
This repo consists of nnU-Net v2 (3D full resolution) checkpoints for pancreas segmentation on CT and MRI. Each file is an nnU-Net checkpoint_best.pth renamed for this release. They are not Transformers models: AutoModel and from_pretrained cannot rebuild them.
Training used the COMP3888 capstone project's internal datasets, built by combining AMOS22, MSD Task07 Pancreas, and PanSegData. CT training reads ct_pancreas_70_tumour_inc; MRI training reads mri_pancreas_70_tumour_inc. The locked test split is 87 CT cases (45 AMOS22, 42 MSD) and 124 MRI cases (9 AMOS22, 58 PanSegData T1, 57 PanSegData T2).
All eight runs use nnUNetTrainer_P35, 150 epochs, fold 0, and seed 123. Dice stays at weight 1.0. The four loss recipes are:
| Recipe | Cross-entropy schedule |
|---|---|
| Boundary | Boundary-weighted CE, weight 1.0, peak 5, width 2 |
| Centre | Centre-weighted CE, weight 1.0, peak 5 |
| C2B | Centre-weighted CE 1.5 β 0 and boundary-weighted CE 0 β 1.5, crossfade over epochs 38β112 |
| C2B aggressive | Centre-weighted CE 1.5 β 0 and boundary-weighted CE 0 β 1.5, both with peak 5 (boundary width 2). Epochs 0β40 stay centre-heavy, the crossfade is a 10-epoch ramp over epochs 40β50, and epochs 50β150 stay boundary-heavy |
Configs for each run are under ct/configs/ and mri/configs/.
Results
Values are medians on the locked test split, except the aggressive IoU, sensitivity, specificity, and connected-component cells, which are means. A few failed cases pull mean HD95 and mean connected-component counts well above the typical case. Dice, IoU, sensitivity, and specificity are higher-is-better. HD95 and connected components are lower-is-better. F1 is omitted because it matches Dice on this binary task. Within each table, the best value in a column is bolded. Ties are bolded together.
Case-weighted is the median across every test scan. A source with more cases (MSD on CT; PanSeg T1 and T2 on MRI) therefore contributes more of the cases that the median is taken over.
Source-weighted is the unweighted average of the per-source medians. Each source dataset counts once, so the 9-case AMOS MRI subset counts as much as the 58-case PanSeg T1 subset. The evaluation reports call the same weighting source-balanced when it is applied to means.
Boundary, centre, and base C2B values are medians from the per-case evaluation files. Aggressive Dice and HD95 are medians from the run summaries. Those summaries only have means for IoU, sensitivity, specificity, and connected components, so those four aggressive cells are means and are marked (mean). They are not bolded against the medians in the same column. These are single-fold descriptive results.
Case-weighted
CT
| Checkpoint | Dice | IoU | Sensitivity | Specificity | HD95 (mm) | Components |
|---|---|---|---|---|---|---|
ct/ct_final_ckpt_standard_boundary_loss.pth |
0.8679 | 0.7666 | 0.9055 | 0.999801 | 5.48 | 1 |
ct/ct_final_ckpt_standard_center_loss.pth |
0.8477 | 0.7357 | 0.9129 | 0.999792 | 8.61 | 2 |
ct/ct_final_ckpt_c2b_annealing.pth |
0.8562 | 0.7486 | 0.9121 | 0.999794 | 6.06 | 1 |
ct/ct_final_ckpt_c2b_annealing_aggressive.pth |
0.8701 | 0.7241 (mean) | 0.8467 (mean) | 0.999757 (mean) | 5.71 | 1.99 (mean) |
MRI
| Checkpoint | Dice | IoU | Sensitivity | Specificity | HD95 (mm) | Components |
|---|---|---|---|---|---|---|
mri/mri_final_ckpt_standard_boundary_loss.pth |
0.8480 | 0.7361 | 0.8563 | 0.999466 | 6.00 | 1 |
mri/mri_final_ckpt_standard_center_loss.pth |
0.8410 | 0.7256 | 0.8564 | 0.999440 | 6.07 | 1 |
mri/mri_final_ckpt_c2b_annealing.pth |
0.8419 | 0.7270 | 0.8551 | 0.999462 | 6.00 | 1 |
mri/mri_final_ckpt_c2b_annealing_aggressive.pth |
0.8459 | 0.7120 (mean) | 0.8358 (mean) | 0.999330 (mean) | 6.00 | 1.28 (mean) |
Source-weighted
CT
| Checkpoint | Dice | IoU | Sensitivity | Specificity | HD95 (mm) | Components |
|---|---|---|---|---|---|---|
ct/ct_final_ckpt_standard_boundary_loss.pth |
0.8654 | 0.7634 | 0.8809 | 0.999813 | 5.35 | 1.50 |
ct/ct_final_ckpt_standard_center_loss.pth |
0.8557 | 0.7484 | 0.8837 | 0.999760 | 8.50 | 1.75 |
ct/ct_final_ckpt_c2b_annealing.pth |
0.8654 | 0.7635 | 0.8871 | 0.999804 | 5.68 | 1.50 |
ct/ct_final_ckpt_c2b_annealing_aggressive.pth |
0.8664 | 0.7233 (mean) | 0.8453 (mean) | 0.999755 (mean) | 5.74 | 1.98 (mean) |
MRI
| Checkpoint | Dice | IoU | Sensitivity | Specificity | HD95 (mm) | Components |
|---|---|---|---|---|---|---|
mri/mri_final_ckpt_standard_boundary_loss.pth |
0.8485 | 0.7373 | 0.8595 | 0.999529 | 5.96 | 1 |
mri/mri_final_ckpt_standard_center_loss.pth |
0.8493 | 0.7386 | 0.8572 | 0.999523 | 5.96 | 1 |
mri/mri_final_ckpt_c2b_annealing.pth |
0.8467 | 0.7348 | 0.8576 | 0.999528 | 6.12 | 1 |
mri/mri_final_ckpt_c2b_annealing_aggressive.pth |
0.8488 | 0.7220 (mean) | 0.8314 (mean) | 0.999448 (mean) | 5.91 | 1.30 (mean) |
Usage
Load a downloaded checkpoint from the COMP3888 project environment (uv sync --extra nnunet). NnUNetModel rebuilds the network from plans embedded in the .pth and stubs nnUNetTrainer_P35 when that trainer is not installed.
The filename argument is the path shown in the file list on the model page for dillondesilva/comp3888-capstone-panseg-models. Checkpoints live under ct/ and mri/. Set modality to match the folder.
from huggingface_hub import hf_hub_download
from panseg.models.nnunet import NnUNetModel
ckpt = hf_hub_download(
repo_id="dillondesilva/comp3888-capstone-panseg-models",
filename="ct/ct_final_ckpt_c2b_annealing.pth", # copy from the model repo file list
)
model = NnUNetModel(modality="ct", checkpoint_path=ckpt)
mask = model.run(volume, affine) # [D, H, W] or [1, D, H, W], plus a 4x4 affine