monai
medical
katielink's picture
complete the model package
5961189
metadata
tags:
  - monai
  - medical
library_name: monai
license: apache-2.0

Model Title

Renal structures CECT segmentation

Authors

Ivan Chernenkiy, Michael Chernenkiy, Dmitry Fiev, Evgeny Sirota, Center for Neural Network Technologies / Institute of Urology and Human Reproductive Systems / Sechenov First Moscow State Medical University

Tags

Segmentation, CT, CECT, Kidney, Renal, Supervised

Model Description

The model is the SegResNet architecture[1] for volumetric (3D) renal structures segmentation. Input is artery, vein, excretory phases after mutual registration and concatenated to 3 channel 3D tensor.

Data

DICOM data from 41 patients with kidney neoplasms were used [2]. The images and segmentation data are available under a CC BY-NC-SA 4.0 license. Data included all phases of contrast-enhanced multispiral computed tomography. We split the data: 32 observations for the training set and 9 – for the validation set. At the labeling stage, the arterial, venous, and excretory phases were taken, affine registration was performed to jointly match the location of the kidneys, and noise was removed using a median filter and a non-local means filter. Validation set ip published to Yandex.Disk. You can download via link or use following command:

python -m monai.bundle run download_data --meta_file configs/metadata.json --config_file "['configs/train.json', 'configs/evaluate.json']"

NB: underlying data is in LPS orientation. IF! you want to test model on your own data, reorient it from RAS to LPS with Orientation transform. You can see example of preprocessing pipeline in inference.json file of this bundle.

Preprocessing

Images are (1) croped to kidney region, all (artery,vein,excret) phases are (2) registered with affine transform, noise removed with (3) median and (4) non-local means filter. After that, images are (5) resampled to (0.8,0.8,0.8) density and intesities are (6) scaled from [-1000,1000] to [0,1] range.

Performance

On the validation subset, the values of the Dice score of the SegResNet architecture were: 0.89 for the normal parenchyma of the kidney, 0.58 for the kidney neoplasms, 0.86 for arteries, 0.80 for veins, 0.80 for ureters.

When compared with the nnU-Net model, which was trained on KiTS 21 dataset, the Dice score was greater for the kidney parenchyma in SegResNet – 0.89 compared to three model variants: lowres – 0.69, fullres – 0.70, cascade – 0.69. At the same time, for the neoplasms of the parenchyma of the kidney, the Dice score was comparable: for SegResNet – 0.58, for nnU-Net fullres – 0.59; lowres and cascade had lower Dice score of 0.37 and 0.45, respectively. To reproduce, visit - https://github.com/blacky-i/nephro-segmentation

Additional Usage Steps

Execute training:

python -m monai.bundle run training --meta_file configs/metadata.json --config_file configs/train.json

Expected result: finished, Training process started

Execute training with finetuning

python -m monai.bundle run training --dont_finetune false --meta_file configs/metadata.json --config_file configs/train.json

Expected result: finished, Training process started, model variables are restored

Execute validation:

Download validation data (described in Data section).

With provided model weights mean dice score is expected to be ~0.78446.

Run validation script:
python -m monai.bundle run evaluate --meta_file configs/metadata.json --config_file "['configs/train.json', 'configs/evaluate.json']"

Expected result: finished, Key metric: val_mean_dice best value: ... is printed.

System Configuration

The model was trained for 10000 epochs on 2 RTX2080Ti GPUs with SmartCacheDataset. This takes 1 days and 2 hours, with 4 images per GPU. Training progress is available on tensorboard.dev

To perform training in minimal settings, at least one 12GB-memory GPU is required. Actual Model Input: 96 x 96 x 96

Limitations

For developmental purposes only and cannot be used directly for clinical procedures.

Citation Info

@article{chernenkiy2023segmentation,
  title={Segmentation of renal structures based on contrast computed tomography scans using a convolutional neural network},
  author={Chernenkiy, IМ and Chernenkiy, MM and Fiev, DN and Sirota, ES},
  journal={Sechenov Medical Journal},
  volume={14},
  number={1},
  pages={39--49},
  year={2023}
}

References

[1] Myronenko, A. (2019). 3D MRI Brain Tumor Segmentation Using Autoencoder Regularization. In: Crimi, A., Bakas, S., Kuijf, H., Keyvan, F., Reyes, M., van Walsum, T. (eds) Brainlesion: Glioma, Multiple Sclerosis, Stroke and Traumatic Brain Injuries. BrainLes 2018. Lecture Notes in Computer Science(), vol 11384. Springer, Cham. https://doi.org/10.1007/978-3-030-11726-9_28

[2] Chernenkiy, I. М., et al. "Segmentation of renal structures based on contrast computed tomography scans using a convolutional neural network." Sechenov Medical Journal 14.1 (2023): 39-49.https://doi.org/10.47093/2218-7332.2023.14.1.39-49

Tests used for bundle checking

Checking with ci script file

python ci/verify_bundle.py -b renalStructures_CECT_segmentation -p models

Expected result: passed, model.pt file downloaded

Checking downloading validation data file

cd models/renalStructures_CECT_segmentation
python -m monai.bundle run download_data --meta_file configs/metadata.json --config_file "['configs/train.json', 'configs/evaluate.json']"

Expected result: finished, data/ folder is created and filled with images.

Checking evaluation script

python -m monai.bundle run evaluate --meta_file configs/metadata.json --config_file "['configs/train.json', 'configs/evaluate.json']"

Expected result: finished, Key metric: val_mean_dice best value: ... is printed.

Checking train script

python -m monai.bundle run training --meta_file configs/metadata.json --config_file configs/train.json

Expected result: finished, Training process started

Checking train script with finetuning

python -m monai.bundle run training --dont_finetune false --meta_file configs/metadata.json --config_file configs/train.json

Expected result: finished, Training process started, model variables are restored

Checking inference script

python -m monai.bundle run inference --meta_file configs/metadata.json --config_file configs/inference.json

Expected result: finished, in eval folder masks are created

Check unit test with script:

python ci/unit_tests/runner.py --b renalStructures_CECT_segmentation