Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BAMF Lung and FDG-Avid Tumor #86

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions models/bamf_pet_ct_lung_tumor/config/default.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
general:
data_base_dir: /app/data
version: 1.0
description: default configuration for Bamf NNUnet Lung and FDG-avid lesions in the lung from FDG PET/CT scans (dicom to dicom)

execute:
- FileStructureImporter
- NiftiConverter
- Registration
- NNUnetPETCTRunner
- LungSegmentatorRunner
- LungPostProcessor
- DsegConverter
- DataOrganizer

modules:
FileStructureImporter:
input_dir: 'input_data'
structures:
- $patientID@instance/ct@dicom:mod=ct
- $patientID/pt@dicom:mod=pt
import_id: patientID

NiftiConverter:
in_datas: dicom:mod=pt|ct
engine: dcm2niix
allow_multi_input: true

NNUnetPETCTRunner:
in_ct_data: nifti:mod=ct:registered=true
in_pt_data: nifti:mod=pt
nnunet_task: Task762_PET_CT_Breast
nnunet_model: 3d_fullres
roi: LIVER,KIDNEY,URINARY_BLADDER,SPLEEN,LUNG,BRAIN,HEART,SMALL_INTESTINE,LUNG+FDG_AVID_TUMOR

LungSegmentatorRunner:
in_data: nifti:mod=ct:registered=true
use_fast_mode: True

DsegConverter:
source_segs: nifti:mod=seg:processor=bamf
model_name: BAMF Lung and FDG Tumor Segmentation
target_dicom: dicom:mod=pt
skip_empty_slices: True

DataOrganizer:
targets:
- dicomseg-->[i:patientID]/bamf_pet_ct_lung_tumor.seg.dcm
32 changes: 32 additions & 0 deletions models/bamf_pet_ct_lung_tumor/dockerfiles/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
FROM mhubai/base:latest

# FIXME: set this environment variable as a shortcut to avoid nnunet crashing the build
# by pulling sklearn instead of scikit-learn
# N.B. this is a known issue:
# https://github.com/MIC-DKFZ/nnUNet/issues/1281
# https://github.com/MIC-DKFZ/nnUNet/pull/1209
ENV SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True

# Install nnunet and totalsegmentator
RUN pip3 install p_tqdm==1.4 TotalSegmentator==1.5.7 nnunet==1.6.6 --no-cache-dir

# Clone the main branch of MHubAI/models
ARG MHUB_MODELS_REPO
RUN buildutils/import_mhub_model.sh bamf_pet_ct_lung_tumor ${MHUB_MODELS_REPO}

# Pull nnUNet model weights into the container for Task777_CT_Nodules
ENV WEIGHTS_DIR=/root/.nnunet/nnUNet_models/nnUNet/
RUN mkdir -p $WEIGHTS_DIR
ENV TASK_NAME=Task762_PET_CT_Breast
ENV WEIGHTS_FN=$TASK_NAME.zip
ENV WEIGHTS_URL=https://zenodo.org/record/8290055/files/$WEIGHTS_FN
RUN wget --directory-prefix ${WEIGHTS_DIR} ${WEIGHTS_URL} --no-check-certificate
RUN unzip ${WEIGHTS_DIR}${WEIGHTS_FN} -d ${WEIGHTS_DIR}
RUN rm ${WEIGHTS_DIR}${WEIGHTS_FN}

# specify nnunet specific environment variables
ENV WEIGHTS_FOLDER=$WEIGHTS_DIR

# Default run script
ENTRYPOINT ["mhub.run"]
CMD ["--config", "/app/models/bamf_pet_ct_lung_tumor/config/default.yml"]
185 changes: 185 additions & 0 deletions models/bamf_pet_ct_lung_tumor/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
{
"id": "",
"name": "bamf_pet_ct_lung_tumor",
"title": "FDG PET/CT Lung and Lung Tumor Annotation",
"summary": {
"description": "An nnU-Net based model to segment Lung and FDG-avid lesions in the lung from FDG PET/CT scans",
"inputs": [
{
"label": "Input Image",
"description": "The CT scan of a patient.",
"format": "DICOM",
"modality": "CT",
"bodypartexamined": "Lung",
"slicethickness": "5mm",
"non-contrast": true,
"contrast": false
},
{
"label": "Input Image",
"description": "The PET scan of a patient.",
"format": "DICOM",
"modality": "PT",
"bodypartexamined": "Lung",
"slicethickness": "4mm",
"non-contrast": false,
"contrast": false
}
],
"outputs": [
{
"label": "Segmentation",
"type": "Segmentation",
"description": "Segmentation Lung and tumor",
"classes": [
"LUNG",
"LUNG+FDG_AVID_TUMOR"
]
}
],
"model": {
"architecture": "U-net",
"training": "supervised",
"cmpapproach": "3D"
},
"data": {
"training": {
"vol_samples": 1014
},
"evaluation": {
"vol_samples": 77
},
"public": true,
"external": true
}
},
"details": {
"name": "AIMI PET CT Lung",
"version": "1.0.0",
"devteam": "BAMF Health",
"authors": [
"Soni, Rahul",
"McCrumb, Diana",
"Murugesan, Gowtham Krishnan",
"Van Oss, Jeff"
],
"type": "nnU-Net (U-Net structure, optimized by data-driven heuristics)",
"date": {
"code": "17.10.2023",
"weights": "28.08.2023",
"pub": "23.10.2023"
},
"cite": "Murugesan, Gowtham Krishnan, Diana McCrumb, Mariam Aboian, Tej Verma, Rahul Soni, Fatima Memon, and Jeff Van Oss. The AIMI Initiative: AI-Generated Annotations for Imaging Data Commons Collections. arXiv preprint arXiv:2310.14897 (2023).",
"license": {
"code": "MIT",
"weights": "CC BY-NC 4.0"
},
"publications": [
{
"title": "The AIMI Initiative: AI-Generated Annotations in IDC Collections",
"uri": "https://arxiv.org/abs/2310.14897"
}
],
"github": "https://github.com/bamf-health/aimi-lung-pet-ct"
},
"info": {
"use": {
"title": "Intended Use",
"text": "This model is intended to perform lung and tumor segmentation in FDG PET CT scans. The model has been trained and tested on scans acquired during clinical care of patients, so it might not be suited for a healthy population. The generalization capabilities of the model on a range of ages, genders, and ethnicities are unknown. For detailed information on the training set design, please refer to reference section in the training section"
},
"analyses": {
"title": "Quantitative Analyses",
"text": "Label-wise metrics (mean (standard deviation)) between AI derived and manual corrected FDG PET/CT lungs and tumor annotations.",
"tables": [
{
"label": "Segmentation Metric Expert",
"entries": {
"Lung DSC": "1.00 (0.00) ",
"Tumor DSC": "0.97 (0.11) ",
"Lung 95% Hausdorff (mm)": "0.10 (0.58)",
"Tumor 95% Hausdorff (mm)": "5.83 (19.42) "
}
},
{
"label": "Segmentation Metric Tumor - Non-Expert",
"entries": {
"Lung DSC": "0.99 (0.04)",
"Tumor DSC": "0.92 (0.20)",
"Lung 95% Hausdorff (mm)": "1.97 (10.50)",
"Tumor 95% Hausdorff (mm)": "10.00 (26.34)"
}
},
{
"label": "Detection Accuracy",
"entries": {
"Sensitivity": "0.91",
"False negative rate": "0.09",
"F1 score": "0.94"
}
}
],
"references": [
{
"label": "The AIMI Initiative: AI-Generated Annotations for Imaging Data Commons Collections",
"uri": "https://arxiv.org/abs/2310.14897"
}
]
},
"evaluation": {
"title": "Evaluation Data",
"text": "The model was used to segment cases from the IDC [1] collection of ACRIN-NSCLC-FDG-PET [2], Anti-PD-1-Lung [3], LUNG-PET-CT-Dx[4], NSCLC Radiogenomics[5], RIDER Lung PET-CT[6], TCGA-LUAD[7], TCGA-LUSC[8] . Approximately 20% of those cases were randomly selected to be reviewed and corrected by a board-certified radiologist. The model predictions, and radiologist corrections are published on zenodo [9]",
"references": [
{
"label": "Imaging Data Collections (IDC)",
"uri": "https://datacommons.cancer.gov/repository/imaging-data-commons"
},
{
"label": "ACRIN-NSCLC-FDG-PET",
"uri": "https://www.cancerimagingarchive.net/collection/acrin-nsclc-fdg-pet/"
},
{
"label": "Anti-PD-1-Lung",
"uri": "https://www.cancerimagingarchive.net/collection/anti-pd-1_lung/"
},
{
"label": "LUNG-PET-CT-Dx",
"uri": "https://www.cancerimagingarchive.net/collection/lung-pet-ct-dx/"
},
{
"label": "NSCLC Radiogenomics",
"uri": "https://www.cancerimagingarchive.net/collection/nsclc-radiogenomics/"
},
{
"label": "RIDER Lung PET-CT",
"uri": "https://wiki.cancerimagingarchive.net/display/Public/RIDER+Collections"
},
{
"label": "TCGA-LUAD",
"uri": "https://www.cancerimagingarchive.net/collection/tcga-luad/"
},
{
"label": "TCGA-LUSC",
"uri": "https://www.cancerimagingarchive.net/collection/tcga-lusc/"
},
{
"label": "Image segmentations produced by the AIMI Annotations initiative",
"uri": "https://zenodo.org/records/10009368"
}
]
},
"training": {
"title": "Training Data",
"text": "The AutoPET Challenge 2023 dataset is comprised of whole-body FDG-PET/CT data from 900 patients, encompassing 1014 studies with tumor annotations. This dataset was augmented by adding labels for the bladder, kidneys, liver, stomach, spleen, lungs, and heart generated by the TotalSegmentator model. A multi-task AI model was trained using the augmented datasets",
"references": [
{
"label": "AutoPET Challenge 2023 dataset",
"uri": "https://doi.org/10.7937/gkr0-xv29"
},
{
"label": "Total Segmentator",
"uri": "https://doi.org/10.48550/arXiv.2208.05868"
}
]
}
}
}
3 changes: 3 additions & 0 deletions models/bamf_pet_ct_lung_tumor/mhub.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

[model.deployment]
test = "https://zenodo.org/records/13880663/files/bamf_pet_ct_lung_tumor.test.zip?download=1"
Loading
Loading