Skip to content

Commit 089338f

Browse files
authored
Merge pull request #1 from curtislisle/main
AutoSeg3D
2 parents 5704c29 + 9a3040b commit 089338f

16 files changed

+1725
-0
lines changed

models/a3ds-vertebrae/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# a3ds-vertebrae @ MHub.ai
2+
3+
For details on the model or how to run the end-to-end pipeline on your data in a single command, visit [mhub.ai/models/auto3dseg](https://mhub.ai/models/auto3dseg)
4+
5+
This model segments spinal vertebrae using a segresnet network pre-trained on the totalsegmenter v2.0 dataset. The model was trained by Andras Lasso and is also contained in the MONAIAuto3DSeg extension for 3D Slicer documented here: [https://github.com/lassoan/SlicerMONAIAuto3DSeg] (https://github.com/lassoan/SlicerMONAIAuto3DSeg)
6+
7+

models/a3ds-vertebrae/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"ContentCreatorName": "Andras Lasso", "ClinicalTrialSeriesID": "AutoSeg3D", "ClinicalTrialTimePointID": "1", "SeriesDescription": "Segmentation", "SeriesNumber": "300", "InstanceNumber": "1", "BodyPartExamined": "Spinal Vertebrae", "segmentAttributes": [[{"LabelID": 1, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "sacrum", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "54735007", "CodeMeaning": "Sacrum"}}, {"LabelID": 2, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_S1", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "65985001", "CodeMeaning": "S1 vertebra"}}, {"LabelID": 3, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_L5", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "49668003", "CodeMeaning": "L5 vertebra"}}, {"LabelID": 4, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_L4", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "11994002", "CodeMeaning": "L4 vertebra"}}, {"LabelID": 5, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_L3", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "36470004", "CodeMeaning": "L3 vertebra"}}, {"LabelID": 6, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_L2", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "14293000", "CodeMeaning": "L2 vertebra"}}, {"LabelID": 7, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_L1", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "66794005", "CodeMeaning": "L1 vertebra"}}, {"LabelID": 8, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T12", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "23215003", "CodeMeaning": "T12 vertebra"}}, {"LabelID": 9, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T11", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "12989004", "CodeMeaning": "T11 vertebra"}}, {"LabelID": 10, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T10", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "7610001", "CodeMeaning": "T10 vertebra"}}, {"LabelID": 11, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T9", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "82687006", "CodeMeaning": "T9 vertebra"}}, {"LabelID": 12, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T8", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "11068009", "CodeMeaning": "T8 vertebra"}}, {"LabelID": 13, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T7", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "62487009", "CodeMeaning": "T7 vertebra"}}, {"LabelID": 14, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T6", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "45296009", "CodeMeaning": "T6 vertebra"}}, {"LabelID": 15, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T5", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "56401006", "CodeMeaning": "T5 vertebra"}}, {"LabelID": 16, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T4", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "73071006", "CodeMeaning": "T4 vertebra"}}, {"LabelID": 17, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T3", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "1626008", "CodeMeaning": "T3 vertebra"}}, {"LabelID": 18, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T2", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "53733008", "CodeMeaning": "T2 vertebra"}}, {"LabelID": 19, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_T1", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "64864005", "CodeMeaning": "T1 vertebra"}}, {"LabelID": 20, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C7", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "87391001", "CodeMeaning": "C7 vertebra"}}, {"LabelID": 21, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C6", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "36054005", "CodeMeaning": "C6 vertebra"}}, {"LabelID": 22, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C5", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "36978003", "CodeMeaning": "C5 vertebra"}}, {"LabelID": 23, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C4", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "5329002", "CodeMeaning": "C4 vertebra"}}, {"LabelID": 24, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C3", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "113205007", "CodeMeaning": "C3 vertebra"}}, {"LabelID": 25, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C2", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "39976000", "CodeMeaning": "C2 vertebra"}}, {"LabelID": 26, "SegmentAlgorithmType": "AUTOMATIC", "SegmentAlgorithmName": "Auto3DSeg-segresnet", "SegmentDescription": "vertebrae_C1", "SegmentedPropertyCategoryCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "123037004", "CodeMeaning": "Anatomical Structure"}, "SegmentedPropertyTypeCodeSequence": {"CodingSchemeDesignator": "SCT", "CodeValue": "14806007", "CodeMeaning": "C1 vertebra"}}]]}
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
general:
2+
data_base_dir: /app/data
3+
version: 1.0
4+
description: "Default configuration for MONAIAuto3dSeg (dicom in, dicom out)"
5+
6+
execute:
7+
- DicomImporter
8+
- NiftiConverter
9+
- A3DS_Vertebrae_Runner
10+
- DsegConverter
11+
- DataOrganizer
12+
13+
modules:
14+
DicomImporter:
15+
source_dir: input_data
16+
import_dir: sorted_data
17+
sort_data: True
18+
meta:
19+
mod: '%Modality'
20+
21+
DsegConverter:
22+
model_name: a3ds-vertebrae
23+
body_part_examined: VERTEBRA
24+
source_segs: nifti:mod=seg
25+
json_config_path: /app/models/a3ds-vertebrae/config/auto-gen-auto3dseg.json
26+
27+
skip_empty_slices: True
28+
29+
DataOrganizer:
30+
targets:
31+
- dicomseg:mod=seg-->[i:sid]/a3ds-vertebrae.seg.dcm
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
general:
2+
data_base_dir: /app/data
3+
version: 1.0
4+
description: Auto3dSeg segmentation default (dicom to dicom)
5+
6+
execute:
7+
- FileStructureImporter
8+
- NrrdConverter
9+
- A3DS_Vertebrae_Runner
10+
- JsonSegExporter
11+
- DataOrganizer
12+
13+
modules:
14+
FileStructureImporter:
15+
structures:
16+
- image.nrrd@instance@nrrd:mod=ct
17+
18+
19+
JsonSegExporter:
20+
segment_id_meta_key: roi
21+
targets:
22+
- nrrd:mod=seg-->[basename]
23+
24+
DataOrganizer:
25+
targets:
26+
- nrrd:mod=seg-->[basename]
27+
- json:mod=seg-->segdef.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
FROM mhubai/base:latest
2+
3+
# load prerequisites
4+
RUN echo "loading prerequisite libraries"
5+
RUN pip3 install "monai-weekly[nibabel,tqdm]"
6+
7+
RUN echo 'model defined remotely again ....'
8+
9+
# Import the MHub model definiton
10+
# *** hardcoding for now
11+
ARG MHUB_MODELS_REPO="https://github.com/curtislisle/mhub_models"
12+
RUN buildutils/import_mhub_model.sh a3ds-vertebrae ${MHUB_MODELS_REPO}
13+
14+
# pull the weights for the segresnet model trained on the abdominal total
15+
# segmentator data model from the MONAIAuto3DSeg Slicer extension repository
16+
ENV WEIGHTS_DIR="/root/.cache/torch/hub/checkpoints/"
17+
ENV MODEL_NAME="vertebrae-3mm-v2.0.1.zip"
18+
ENV WEIGHTS_URL_PREFIX="https://github.com/lassoan/SlicerMONAIAuto3DSeg/releases/download/Models/"
19+
ENV WEIGHTS_URL=${WEIGHTS_URL_PREFIX}\/${MODEL_NAME}
20+
RUN echo "weights:" ${WEIGHTS_URL}
21+
22+
# download the weights
23+
# *** NOTE: this should be replaced with a call to buildutils/download_weights.sh
24+
RUN wget --directory-prefix ${WEIGHTS_DIR} ${WEIGHTS_URL}
25+
# the weights come bundled in a zip file, so unzip
26+
ENV WEIGHTS_ARCHIVE = ${WEIGHTS_DIR}\/${MODEL_NAME}
27+
ENV CURRENT_DIR=`pwd`
28+
WORKDIR ${WEIGHTS_DIR}
29+
RUN unzip ${MODEL_NAME}
30+
31+
32+
# Default run script
33+
#ENTRYPOINT ["python3", "-m", "mhubio.run"]
34+
#CMD ["--config", "/app/models/a3ds-vertebrae/config/default.yml"]
35+
ENTRYPOINT ["/bin/bash"]

0 commit comments

Comments
 (0)