CTP Core / Penumbra Segmentation
3D nnU-Net · admission 4D CT perfusion · IEEE BHI 2026
Twelve consecutive slices through one held-out case. Fills are the model's prediction, outlines are the expert annotation.
Segments the ischemic core and the penumbra from admission 4D CT perfusion. The 40 CTP timepoints go in as input channels, so the network sees the whole bolus passage rather than derived perfusion maps.
| Task | 4-class segmentation, background / brain / penumbra / core |
| Input | 40-channel CTP volume in NCCT space |
| Framework | nnU-Net v2, 3d_fullres, 5-fold ensemble |
| Trained on | 116 cases, Stavanger University Hospital |
| Dice | penumbra 0.71, core 0.30 (held-out, n = 33) |
Quick start
hf download yokko123/ctp-core-penumbra-nnunet --local-dir $nnUNet_results
nnUNetv2_predict \
-d Dataset1152_SUS_CTP_Reg_3DT \
-i INPUT_FOLDER -o OUTPUT_FOLDER \
-f 0 1 2 3 4 -tr nnUNetTrainer -c 3d_fullres -p nnUNetPlans
For a reproducible fetch, the code repository pins this model by commit sha in
models.yaml
and downloads it with python download_weights.py --model fe4_nnunet, which
also verifies every file against its expected size.
Optional connected-component postprocessing, with the rules nnU-Net chose on the cross-validation:
nnUNetv2_apply_postprocessing \
-i OUTPUT_FOLDER -o OUTPUT_FOLDER_PP \
-pp_pkl_file $nnUNet_results/Dataset1152_SUS_CTP_Reg_3DT/nnUNetTrainer__nnUNetPlans__3d_fullres/postprocessing.pkl \
-plans_json $nnUNet_results/Dataset1152_SUS_CTP_Reg_3DT/nnUNetTrainer__nnUNetPlans__3d_fullres/plans.json
Input contract
All 40 channels are declared NoNormalization, so the model expects exactly the
preprocessing it was trained on and will not behave sensibly on raw CTP:
- 4D CTP motion-corrected by rigidly registering every frame to the first,
- temporally resampled to a uniform 1 fps, giving 40 frames,
- rigidly registered to the admission NCCT and resampled onto that grid,
- skull-stripped (SynthStrip),
- windowed to [0, 100] HU and rescaled to an 8-bit grey range.
One case is 40 files, CASE_0000.nii.gz … CASE_0039.nii.gz, in timepoint
order. The full chain that produced these inputs is stage 01 of the
code repository.
Labels
| Value | Class |
|---|---|
| 0 | background |
| 1 | brain |
| 2 | penumbra |
| 3 | core |
Results
Five-fold cross-validation over the 116 development cases:
| Class | Dice | IoU |
|---|---|---|
| brain | 0.975 | 0.952 |
| penumbra | 0.602 | 0.488 |
| core | 0.297 | 0.207 |
| foreground mean | 0.624 |
Held-out test set, 33 cases, as reported in the paper:
| Class | Dice |
|---|---|
| penumbra | 0.71 ± 0.24 |
| core | 0.30 ± 0.28 |
Core is much harder than penumbra. Core regions are small, their CTP boundary is genuinely ambiguous, and a handful of voxels moves Dice a long way. Treat core output as approximate localisation, not a volume measurement.
Architecture
| Trainer / plans | nnUNetTrainer / nnUNetPlans |
| Network | PlainConvUNet, 7 stages, features 32 → 320 |
| Patch size | 20 × 320 × 256 |
| Batch size | 2 |
| Target spacing | 3.0 × 0.415 × 0.415 mm |
| Input channels | 40, all NoNormalization |
Trained with lr 5·10⁻³, weight decay 10⁻⁴, 250 train / 50 validation iterations per epoch, 85 % foreground oversampling and deep supervision, on a 500-epoch budget.
The checkpoint_final shipped per fold sits at epoch 328, 534, 430, 154 and 147
for folds 0 to 4, so the folds are not equally trained. The figures above were
computed from exactly these checkpoints and already reflect that.
Role in the paper
These are the FE4 weights in:
Bi-temporal Image-driven Acute Stroke Evolution Analysis Md Sazidur Rahman, Kjersti Engan, Kathinka Dæhli Kurz, Mahdieh Khanmohammadi IEEE-EMBS International Conference on Biomedical and Health Informatics (BHI), 2026 arXiv:2602.07535
The model does two jobs there: it produces the admission core and penumbra
labels for the ISLES'24 cohort, which has no manual T₁ annotation, and its
stage-3 encoder features are read out as a 256-D tissue descriptor. For the
feature read-out rather than the segmentation, use
02_features/fe4_nnunet/extract_3D_ensemble_features.py from the code
repository.
Training data
A retrospective Stavanger University Hospital (SUH) cohort: patients scanned between January 2014 and August 2020 with admission CTP and follow-up MRI, 149 in total, split 116 for development and 33 held out. Core and penumbra were annotated by expert neuroradiologists on the CTP-derived perfusion maps (CBF, CBV, Tmax) and MIP images.
The cohort is not public and is not distributed with these weights.
Citation
@inproceedings{rahman2026bitemporal,
title = {Bi-temporal Image-driven Acute Stroke Evolution Analysis},
author = {Rahman, Md Sazidur and Engan, Kjersti and
Kurz, Kathinka D{\ae}hli and Khanmohammadi, Mahdieh},
booktitle = {2026 IEEE-EMBS International Conference on Biomedical and Health Informatics (BHI)},
year = {2026},
eprint = {2602.07535},
archivePrefix= {arXiv},
primaryClass = {cs.CV},
note = {In press}
}
Built with nnU-Net (Isensee et al., 2021), which is Apache-2.0.
- Downloads last month
- 35