mrokuss commited on
Commit
d3120af
·
verified ·
1 Parent(s): aa955f7

Initial GLOW-FDG release

Browse files
.gitattributes CHANGED
@@ -33,3 +33,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ GLOW-FDG/fold_0/progress.png filter=lfs diff=lfs merge=lfs -text
37
+ GLOW-FDG/fold_1/progress.png filter=lfs diff=lfs merge=lfs -text
38
+ GLOW-FDG/fold_2/progress.png filter=lfs diff=lfs merge=lfs -text
39
+ GLOW-FDG/fold_3/progress.png filter=lfs diff=lfs merge=lfs -text
40
+ GLOW-FDG/fold_4/progress.png filter=lfs diff=lfs merge=lfs -text
GLOW-FDG/dataset.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "channel_names": {
3
+ "0": "CT",
4
+ "1": "CT"
5
+ },
6
+ "labels": {
7
+ "background": 0,
8
+ "tumor": 1
9
+ },
10
+ "numTraining": 1563,
11
+ "file_ending": ".nii.gz",
12
+ "name": "GLOW-FDG-Dataset",
13
+ "converted_by": "Maximilian Rokuss"
14
+ }
GLOW-FDG/fold_0/checkpoint_final.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:947622aeb87829d9adc5c993b5151fd419f6dd995849987eddb80c2eacb81f3a
3
+ size 819730354
GLOW-FDG/fold_0/progress.png ADDED

Git LFS Details

  • SHA256: f4b9d54f569b7436321dd0baf0755884f80c88501e4a48382460c13cfc734837
  • Pointer size: 132 Bytes
  • Size of remote file: 1.24 MB
GLOW-FDG/fold_1/checkpoint_final.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aab8a3033565dd31babfe708bef565ea494a837f7bcac09cb3b09c5c5127853b
3
+ size 819730418
GLOW-FDG/fold_1/progress.png ADDED

Git LFS Details

  • SHA256: 284f35052219b78a47958304eec1b3cf3efa0e6d10b5d82fd812843751711259
  • Pointer size: 132 Bytes
  • Size of remote file: 1.28 MB
GLOW-FDG/fold_2/checkpoint_final.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:81e685eb0212811088d87e0892ac0144fa92562fd17131beca1864a41ca1e322
3
+ size 819730354
GLOW-FDG/fold_2/progress.png ADDED

Git LFS Details

  • SHA256: 96a51ccfa70b6f782ba160fc2beb1cd3773eae6e16906be47a9b11cd8f1098f3
  • Pointer size: 132 Bytes
  • Size of remote file: 1.25 MB
GLOW-FDG/fold_3/checkpoint_final.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6a194b0a45fc0d9c9c1e136939ed8e1b930123a7b741c2f6ef55d1b8ba04fcb5
3
+ size 819730354
GLOW-FDG/fold_3/progress.png ADDED

Git LFS Details

  • SHA256: 5e83b2218ca6aecdf8ad6cfec4aaf62a52f3c9b6c3922bac3c882bbf9acd42db
  • Pointer size: 131 Bytes
  • Size of remote file: 851 kB
GLOW-FDG/fold_4/checkpoint_final.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8be831064af91b597fc72e9071e828541d891954c98958e344e5baf17696aa06
3
+ size 819730418
GLOW-FDG/fold_4/progress.png ADDED

Git LFS Details

  • SHA256: 8c8bbf5eff17e40ecf1da996e4199765237d626f45223636bcb79d8ba1be3b61
  • Pointer size: 131 Bytes
  • Size of remote file: 862 kB
GLOW-FDG/logo.jpg ADDED
GLOW-FDG/plans.json ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset_name": "GLOW-FDG-Dataset",
3
+ "plans_name": "nnUNetResEncUNetLPlans",
4
+ "original_median_spacing_after_transp": [
5
+ 3.0,
6
+ 2.0364201068878174,
7
+ 2.0364201068878174
8
+ ],
9
+ "original_median_shape_after_transp": [
10
+ 326,
11
+ 400,
12
+ 400
13
+ ],
14
+ "image_reader_writer": "SimpleITKIO",
15
+ "transpose_forward": [
16
+ 0,
17
+ 1,
18
+ 2
19
+ ],
20
+ "transpose_backward": [
21
+ 0,
22
+ 1,
23
+ 2
24
+ ],
25
+ "configurations": {
26
+ "3d_fullres": {
27
+ "data_identifier": "nnUNetPlans_3d_fullres",
28
+ "preprocessor_name": "DefaultPreprocessor",
29
+ "batch_size": 2,
30
+ "patch_size": [
31
+ 192,
32
+ 192,
33
+ 192
34
+ ],
35
+ "median_image_size_in_voxels": [
36
+ 326.0,
37
+ 400.0,
38
+ 400.0
39
+ ],
40
+ "spacing": [
41
+ 3.0,
42
+ 2.0364201068878174,
43
+ 2.0364201068878174
44
+ ],
45
+ "normalization_schemes": [
46
+ "CTNormalization",
47
+ "CTNormalization"
48
+ ],
49
+ "use_mask_for_norm": [
50
+ false,
51
+ false
52
+ ],
53
+ "resampling_fn_data": "resample_data_or_seg_to_shape",
54
+ "resampling_fn_seg": "resample_data_or_seg_to_shape",
55
+ "resampling_fn_data_kwargs": {
56
+ "is_seg": false,
57
+ "order": 3,
58
+ "order_z": 0,
59
+ "force_separate_z": null
60
+ },
61
+ "resampling_fn_seg_kwargs": {
62
+ "is_seg": true,
63
+ "order": 1,
64
+ "order_z": 0,
65
+ "force_separate_z": null
66
+ },
67
+ "resampling_fn_probabilities": "resample_data_or_seg_to_shape",
68
+ "resampling_fn_probabilities_kwargs": {
69
+ "is_seg": false,
70
+ "order": 1,
71
+ "order_z": 0,
72
+ "force_separate_z": null
73
+ },
74
+ "architecture": {
75
+ "network_class_name": "dynamic_network_architectures.architectures.unet.ResidualEncoderUNet",
76
+ "arch_kwargs": {
77
+ "n_stages": 6,
78
+ "features_per_stage": [
79
+ 32,
80
+ 64,
81
+ 128,
82
+ 256,
83
+ 320,
84
+ 320
85
+ ],
86
+ "conv_op": "torch.nn.modules.conv.Conv3d",
87
+ "kernel_sizes": [
88
+ [
89
+ 3,
90
+ 3,
91
+ 3
92
+ ],
93
+ [
94
+ 3,
95
+ 3,
96
+ 3
97
+ ],
98
+ [
99
+ 3,
100
+ 3,
101
+ 3
102
+ ],
103
+ [
104
+ 3,
105
+ 3,
106
+ 3
107
+ ],
108
+ [
109
+ 3,
110
+ 3,
111
+ 3
112
+ ],
113
+ [
114
+ 3,
115
+ 3,
116
+ 3
117
+ ]
118
+ ],
119
+ "strides": [
120
+ [
121
+ 1,
122
+ 1,
123
+ 1
124
+ ],
125
+ [
126
+ 2,
127
+ 2,
128
+ 2
129
+ ],
130
+ [
131
+ 2,
132
+ 2,
133
+ 2
134
+ ],
135
+ [
136
+ 2,
137
+ 2,
138
+ 2
139
+ ],
140
+ [
141
+ 2,
142
+ 2,
143
+ 2
144
+ ],
145
+ [
146
+ 2,
147
+ 2,
148
+ 2
149
+ ]
150
+ ],
151
+ "n_blocks_per_stage": [
152
+ 1,
153
+ 3,
154
+ 4,
155
+ 6,
156
+ 6,
157
+ 6
158
+ ],
159
+ "n_conv_per_stage_decoder": [
160
+ 1,
161
+ 1,
162
+ 1,
163
+ 1,
164
+ 1
165
+ ],
166
+ "conv_bias": true,
167
+ "norm_op": "torch.nn.modules.instancenorm.InstanceNorm3d",
168
+ "norm_op_kwargs": {
169
+ "eps": 1e-05,
170
+ "affine": true
171
+ },
172
+ "dropout_op": null,
173
+ "dropout_op_kwargs": null,
174
+ "nonlin": "torch.nn.LeakyReLU",
175
+ "nonlin_kwargs": {
176
+ "inplace": true
177
+ }
178
+ },
179
+ "_kw_requires_import": [
180
+ "conv_op",
181
+ "norm_op",
182
+ "dropout_op",
183
+ "nonlin"
184
+ ]
185
+ },
186
+ "batch_dice": true
187
+ }
188
+ },
189
+ "experiment_planner_used": "nnUNetPlannerResEncL",
190
+ "label_manager": "LabelManager",
191
+ "foreground_intensity_properties_per_channel": {
192
+ "0": {
193
+ "max": 3337.0,
194
+ "mean": -26.70451815536975,
195
+ "median": 35.0,
196
+ "min": -1441.0,
197
+ "percentile_00_5": -884.0,
198
+ "percentile_99_5": 873.0,
199
+ "std": 253.43406337222342
200
+ },
201
+ "1": {
202
+ "max": 150.53126525878906,
203
+ "mean": 5.448611647106978,
204
+ "median": 4.054980278015137,
205
+ "min": 0.02562030777335167,
206
+ "percentile_00_5": 0.8588680624961853,
207
+ "percentile_99_5": 27.83453369140625,
208
+ "std": 4.639632304482312
209
+ }
210
+ }
211
+ }
README.md CHANGED
@@ -1,3 +1,166 @@
1
- ---
2
- license: cc-by-nc-sa-4.0
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: cc-by-nc-sa-4.0
3
+ tags:
4
+ - medical-imaging
5
+ - pet-ct
6
+ - segmentation
7
+ - oncology
8
+ - nnunet
9
+ - 3d-segmentation
10
+ library_name: nnunet
11
+ pipeline_tag: image-segmentation
12
+ ---
13
+
14
+ <p align="center">
15
+ <img src="GLOW-FDG/logo.jpg" alt="GLOW-FDG logo" width="240"/>
16
+ </p>
17
+
18
+ # GLOW-FDG
19
+
20
+ **G**eneralized cancer **L**esi**O**n **W**hole-body segmentation model for **<sup>18</sup>F-FDG PET/CT**.
21
+
22
+ GLOW-FDG is an open-source 3D segmentation model for automated whole-body cancer lesion delineation in <sup>18</sup>F-FDG PET/CT. It is built on the [nnU-Net](https://github.com/MIC-DKFZ/nnUNet) framework using the **ResEnc L** architecture and was trained on a curated, multi-institutional corpus of **1,563 FDG-PET/CT scans** spanning lung cancer, head and neck cancer, lymphoma, melanoma, soft tissue sarcoma, prostate cancer, and PET-negative controls. The model was evaluated on **185 external scans** from independent cohorts covering breast cancer, nonmetastatic and oligometastatic lung cancer, head and neck cancer, and metastatic melanoma.
23
+
24
+ The release contains the **5-fold cross-validation checkpoints** for ensembling.
25
+
26
+ ## Highlights
27
+
28
+ - Whole-body FDG-PET/CT cancer lesion segmentation across multiple cancer types
29
+ - Dual-head design: a primary lesion head and an auxiliary organ-supervision head (spleen, kidneys, liver, urinary bladder, lung, brain, heart, stomach, prostate, parotid and submandibular glands) to suppress physiologic-uptake false positives
30
+ - Large-scale multi-modal (CT / MR / PET) MultiTalent-style pretraining followed by task-specific finetuning
31
+ - PET/CT misalignment augmentation for robustness to patient motion and registration errors
32
+ - Outperforms publicly available FDG-PET/CT benchmarks on lesion detection and segmentation across five external cohorts; performance approaches inter-observer variability between expert radiation oncologists
33
+
34
+ ## Intended Use
35
+
36
+ GLOW-FDG is intended for **research use** in automated whole-body FDG-PET/CT cancer lesion segmentation and for the extraction of quantitative PET biomarkers such as total tumor burden (TTB) and total lesion glycolysis (TLG). It is **not** a certified medical device and must not be used as the sole basis for clinical decisions.
37
+
38
+ ### Out-of-scope / Limitations
39
+
40
+ - Trained on standard-dose FDG-PET/CT; behavior on ultra-low-dose acquisitions has not been validated.
41
+ - Trained only with FDG; not applicable to other tracers (e.g. PSMA, <sup>68</sup>Ga-DOTATATE).
42
+ - Lesions without clear PET visibility may not be reliably detected.
43
+ - Inputs must be a co-registered PET/CT pair with SUV-normalized PET.
44
+
45
+ ## Model Details
46
+
47
+ | | |
48
+ |---|---|
49
+ | Framework | nnU-Net (3d_fullres, ResEnc L preset) |
50
+ | Inputs | 2 channels: CT (HU) and PET (SUV<sub>BW</sub>) |
51
+ | Output | Binary lesion segmentation mask (auxiliary organ head used during training only) |
52
+ | Target spacing | 3.0 × 2.04 × 2.04 mm |
53
+ | Patch size | 192 × 192 × 192 |
54
+ | Training | 1,500 epochs, batch size 3, SGD with Nesterov momentum 0.99, LR 1e-2 with polynomial decay |
55
+ | Pretraining | MultiTalent-style multi-dataset pretraining on CT/MR/PET, 4,000 epochs, patch 192³, batch 24 |
56
+ | Folds | 5-fold cross-validation checkpoints (intended to be ensembled) |
57
+
58
+ ## Repository Contents
59
+
60
+ ```
61
+ GLOW-FDG/
62
+ dataset.json # nnU-Net dataset description
63
+ plans.json # nnU-Net plans (architecture, preprocessing, etc.)
64
+ fold_0/checkpoint_final.pth
65
+ fold_1/checkpoint_final.pth
66
+ fold_2/checkpoint_final.pth
67
+ fold_3/checkpoint_final.pth
68
+ fold_4/checkpoint_final.pth
69
+ ```
70
+
71
+ ## Usage
72
+
73
+ GLOW-FDG runs through the standard nnU-Net v2 inference API.
74
+
75
+ ### 1. Install nnU-Net
76
+
77
+ ```bash
78
+ pip install nnunetv2
79
+ ```
80
+
81
+ ### 2. Download the model
82
+
83
+ ```python
84
+ from huggingface_hub import snapshot_download
85
+
86
+ model_dir = snapshot_download(repo_id="<org>/GLOW-FDG")
87
+ # model_dir/GLOW-FDG/ now contains dataset.json, plans.json and fold_0..fold_4
88
+ ```
89
+
90
+ ### 3. Prepare your data
91
+
92
+ Each case must contain two co-registered channels following the nnU-Net naming convention:
93
+
94
+ ```
95
+ input_folder/
96
+ CASE001_0000.nii.gz # CT (HU)
97
+ CASE001_0001.nii.gz # PET (SUV body-weight normalized)
98
+ ```
99
+
100
+ PET intensities **must** be converted to body-weight SUV before inference.
101
+
102
+ ### 4. Run inference
103
+
104
+ ```python
105
+ import torch
106
+ from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor
107
+
108
+ predictor = nnUNetPredictor(
109
+ tile_step_size=0.5,
110
+ use_gaussian=True,
111
+ use_mirroring=True,
112
+ perform_everything_on_device=True,
113
+ device=torch.device("cuda"),
114
+ )
115
+
116
+ predictor.initialize_from_trained_model_folder(
117
+ f"{model_dir}/GLOW-FDG",
118
+ use_folds=(0, 1, 2, 3, 4),
119
+ checkpoint_name="checkpoint_final.pth",
120
+ )
121
+
122
+ predictor.predict_from_files(
123
+ list_of_lists_or_source_folder="input_folder",
124
+ output_folder_or_list_of_truncated_output_files="output_folder",
125
+ save_probabilities=False,
126
+ overwrite=True,
127
+ num_processes_preprocessing=2,
128
+ num_processes_segmentation_export=2,
129
+ )
130
+ ```
131
+
132
+ The output is a binary NIfTI mask per case where `1` denotes predicted FDG-avid cancer lesions.
133
+
134
+ ## Training Data
135
+
136
+ GLOW-FDG was trained on 1,563 FDG-PET/CT scans pooled from public and institutional sources, including AutoPET, HECKTOR, DEEP-PSMA, ACRIN-HNSCC, HN-PET-CT, NSCLC-RadGen, TCIA-STS, SAKK, and the SINERGIA melanoma cohort. All cases were manually reviewed to verify PET–mask correspondence, lesion completeness, and PET visibility. Organ labels for the auxiliary head were generated with [TotalSegmentator](https://github.com/wasserth/TotalSegmentator).
137
+
138
+ ## Citation
139
+
140
+ If you use GLOW-FDG in your research, please cite:
141
+
142
+ ```bibtex
143
+ @article{fritsak2026glowfdg,
144
+ title = {GLOW-FDG: Generalized cancer LesiOn Whole-body segmentation model for 18F-FDG-PET/CT},
145
+ author = {Fritsak, Maksym and Rokuss, Maximilian and Maier-Hein, Klaus},
146
+ year = {2026}
147
+ }
148
+
149
+ @misc{rokuss2024fdgpsmahitchhikersguide,
150
+ title={From FDG to PSMA: A Hitchhiker's Guide to Multitracer, Multicenter Lesion Segmentation in PET/CT Imaging},
151
+ author={Maximilian Rokuss and Balint Kovacs and Yannick Kirchhoff and Shuhan Xiao and Constantin Ulrich and Klaus H. Maier-Hein and Fabian Isensee},
152
+ year={2024},
153
+ eprint={2409.09478},
154
+ archivePrefix={arXiv},
155
+ primaryClass={eess.IV},
156
+ url={https://arxiv.org/abs/2409.09478},
157
+ }
158
+ ```
159
+
160
+ ## License
161
+
162
+ Released under the [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/) license. The model weights may be used, shared, and adapted for **non-commercial** purposes with attribution; derivative works must be distributed under the same license. Note that some of the underlying training datasets carry their own licenses and data use agreements that may impose additional restrictions.
163
+
164
+ ## Acknowledgments
165
+
166
+ Developed at the Division of Medical Image Computing, German Cancer Research Center (DKFZ), Heidelberg, in collaboration with University Hospital Zürich (USZ). Built on [nnU-Net](https://github.com/MIC-DKFZ/nnUNet); auxiliary organ labels generated with [TotalSegmentator](https://github.com/wasserth/TotalSegmentator).
config.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "description": "Dummy config to allow tracking HF downloads."
3
+ }