Federated Lymphoma Segmentation (FedLymphoma)#

Docker Pulls

This repository provides the necessary tools and instructions to run federated lymphoma segmentation, described in the paper MONet-FL: Extending nnU-Net with MONAI for Clinical Federated Learning.

The Federated training is performed following the tutorial MONet-FL.

In detail, the 2 Lymphoma datasets used in the study are:

  • AutoPET

  • IndolentLymphoma-KUH, private collection of PET-CT of lymphoma patients and corresponding annotations from Karolinska University Hospital, Stockholm, Sweden

Each dataset is assigned to a different site, and the federated training is performed using the MONet bundle.

FedLymphoma Inference on PET-CT [DICOM Version]#

The input folder should contain all the DICOM files of the study you want to process (with the CT and PT series), and the output folder will contain the lymphoma lesion predictions in DICOM SEG format, and an additional STL file with the 3D mesh of the lymphoma lesion segmentation.

docker run --rm -it --gpus=all --shm-size 2G -v $INPUT_STUDY_FOLDER:/var/holoscan/input -v $PREDICTIONS_FOLDER:/var/holoscan/output maiacloud/lymphoma-x64-workstation-dgpu-linux-amd64:1.0

FedLymphoma Inference on PET-CT [NIFTI Version]#

The input folder should contain all the NIfTI files of the study you want to process (one per modality, with the given suffix identifier), and the output folder will contain the predictions in NIfTI format. The suffix identifiers for the modalities are:

  • _ct.nii.gz for the CT modality

  • _pet.nii.gz for the PET modality

docker run --rm -it --gpus=all --shm-size 2G -v $INPUT_STUDY_FOLDER:/var/holoscan/input -v $PREDICTIONS_FOLDER:/var/holoscan/output maiacloud/lymphoma-x64-workstation-dgpu-linux-amd64:1.0-nifti

FedLymphoma Inference on PET-CT [XNAT Integration]#

To run the inference on a study stored in XNAT, using the XNAT Container Service Plugin you can use the following command:

{
    "name": "lymphoma-segmentation",
    "label": "lymphoma-segmentation",
    "description": "Runs Lymphoma Segmentation on a session derived PET-CT scan.",
    "version": "1.0",
    "schema-version": "1.0",
    "info-url": "https://github.com/rordenlab/dcm2niix",
    "image": "maiacloud/lymphoma-x64-workstation-dgpu-linux-amd64:1.0-xnat",
    "type": "docker",
    "command-line": "",
    "mounts": [
      {
        "name": "dicom-in-ct",
        "writable": true,
        "path": "/var/holoscan/input/ct"
      },
      {
        "name": "dicom-in-pt",
        "writable": true,
        "path": "/var/holoscan/input/pt"
      },
      {
        "name": "dicom-out",
        "writable": true,
        "path": "/var/holoscan/output"
      }
    ],
    "environment-variables": {
      "ORTHANC_URL": "orthancURL"
    },
    "ports": {},
    "inputs": [
      {
        "name": "orthanc-url",
        "description": "Orthanc URL",
        "type": "string",
        "required": true,
        "replacement-key": "orthancURL",
        "select-values": []
      }
    ],
    "outputs": [
      {
        "name": "dicom-seg",
        "description": "The output segmentation",
        "required": true,
        "mount": "dicom-out"
      }
    ],
    "xnat": [
      {
        "name": "lymphoma-segmentation",
        "label": "lymphoma-segmentation",
        "description": "Runs Lymphoma Segmentation on a session derived scan.",
        "contexts": [
          "xnat:imageSessionData"
        ],
        "external-inputs": [
          {
            "name": "session",
            "description": "Input session",
            "type": "Session",
            "matcher": "'DICOM' in @.scans[*].resources[*].label",
            "required": true,
            "load-children": true
          }
        ],
        "derived-inputs": [
          {
            "name": "ct-scan",
            "description": "Input CT scan",
            "type": "Scan",
            "matcher": "@.modality == 'CT'",
            "required": true,
            "load-children": true,
            "derived-from-wrapper-input": "session",
            "multiple": false
          },
          {
            "name": "ct-scan-dicoms",
            "description": "The CT dicom resource on the scan",
            "type": "Resource",
            "matcher": "@.label == 'DICOM'",
            "required": true,
            "provides-files-for-command-mount": "dicom-in-ct",
            "load-children": true,
            "derived-from-wrapper-input": "ct-scan",
            "multiple": false
          },
          {
            "name": "pt-scan",
            "description": "Input PET scan",
            "type": "Scan",
            "matcher": "@.modality == 'PT'",
            "required": true,
            "load-children": true,
            "derived-from-wrapper-input": "session",
            "multiple": false
          },
          {
            "name": "pt-scan-dicoms",
            "description": "The PET dicom resource on the scan",
            "type": "Resource",
            "matcher": "@.label == 'DICOM'",
            "required": true,
            "provides-files-for-command-mount": "dicom-in-pt",
            "load-children": true,
            "derived-from-wrapper-input": "pt-scan",
            "multiple": false
          }
        ],
        "output-handlers": [
          {
            "name": "dicom-seg-resource",
            "accepts-command-output": "dicom-seg",
            "as-a-child-of": "ct-scan",
            "type": "Resource",
            "label": "DICOM-SEG",
            "format": "DICOM",
            "tags": []
          }
        ]
      }
    ],
    "shm-size": 1073741824,
    "container-labels": {},
    "generic-resources": {
      "nvidia.com/gpu": "1"
    },
    "ulimits": {},
    "secrets": []
  }

The additional environment variable ORTHANC_URL should be set to the URL of the Orthanc server where to send the DICOM SEG files produced by the inference.

Results#

Dataset - Label

Experiment

DSC

ASD [mm]

AutoPET (n=27) - Lesion

Cross-Site IL1

0.445 ± 0.270

50.19 ± 95.19

Cross-Site IL2

0.587 ± 0.251

40.06 ± 89.72

MONet-FL

0.694 ± 0.279

10.80 ± 24.61

LymphoFusion

0.756 ± 0.244

19.27 ± 39.78

nnU-Net-Baseline

0.758 ± 0.252

38.50 ± 133.01

IL1 (n=16) - Lesion

Cross-Site AutoPET

0.317 ± 0.255

99.46 ± 147.08

Cross-Site IL2

0.297 ± 0.230

111.11 ± 172.99

MONet-FL

0.453 ± 0.252

70.91 ± 127.18

LymphoFusion

0.421 ± 0.223

90.29 ± 143.43

nnU-Net-Baseline

0.512 ± 0.215

12.95 ± 11.69

IL2 (n=31) - Lesion

Cross-Site AutoPET

0.534 ± 0.265

39.34 ± 71.36

Cross-Site IL1

0.391 ± 0.247

40.03 ± 79.63

MONet-FL

0.610 ± 0.234

25.03 ± 64.44

LymphoFusion

0.665 ± 0.242

23.07 ± 70.48

nnU-Net-Baseline

0.671 ± 0.275

24.09 ± 72.41

Table 1: Dice Similarity Coefficient (DSC) and Average Surface Distance (ASD) for each Lymphoma experiment across the three datasets (over the validation set): AutoPET, Indolent Lymphoma 1 (IL1) and Indolent Lymphoma 2 (IL2).

References#

[1] Ingrisch, M., Dexl, J., Jeblick, K., Cyran, C., Gatidis, S., & Kuestner, T. (2024). Automated Lesion Segmentation in Whole-Body PET/CT - Multitracer Multicenter generalization. 27th International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI 2024). Zenodo. https://doi.org/10.5281/zenodo.10990932
[2] Gatidis S, Kuestner T. (2022) A whole-body FDG-PET/CT dataset with manually annotated tumor lesions (FDG-PET-CT-Lesions) [Dataset]. The Cancer Imaging Archive. DOI: 10.7937/gkr0-xv29