CTP Core / Penumbra Segmentation

3D nnU-Net  ·  admission 4D CT perfusion  ·  IEEE BHI 2026

arXiv Project page Code DOI License: MIT

Twelve consecutive axial slices. Predicted brain, penumbra and core are shown as grey, light-grey and white fills; the expert penumbra and core outlines are overlaid in blue and red.

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:

  1. 4D CTP motion-corrected by rigidly registering every frame to the first,
  2. temporally resampled to a uniform 1 fps, giving 40 frames,
  3. rigidly registered to the admission NCCT and resampled onto that grid,
  4. skull-stripped (SynthStrip),
  5. 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
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for yokko123/ctp-core-penumbra-nnunet