You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+57-45Lines changed: 57 additions & 45 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,17 +26,19 @@
26
26
Your algorithm receives the files under `features/` for each subject and must output a predicted CT volume as a NIfTI file in Hounsfield units (HU). Predictions are evaluated two ways:
27
27
28
28
1.**CT accuracy** — predicted CT is compared directly against the ground-truth CT
29
-
2.**PET accuracy** — predicted CT is fed into the reconstruction pipeline to produce an attenuation-corrected PET (ACPET) image, which is then compared against the ground-truth PET
29
+
2.**PET accuracy** — predicted CT is fed into the reconstruction pipeline to produce an attenuation-corrected PET image, which is then compared against the ground-truth PET
30
30
31
-
The dataset (100 subjects, Siemens Biograph Vision Quadra + MAGNETOM Vida) is split as follows:
31
+
Note that no PET reconstruction experience is needed to participate in the challenge, and the main purpose of the reconstruction is to enable clinically meaningful metrics.
32
+
33
+
The dataset comprises 99 subject-unique cases, with 20 reserved for testing and the remaining 79 available on huggingface and split as follows:
|`train/` (no recon) |68|`features/` + `ct-label/`|
38
+
|`train/` (no recon) |67|`features/` + `ct-label/`|
37
39
|`val/`| 4 |`features/` + `recon/`|
38
40
39
-
All train subjects have CT labels. The 8 fully-equipped subjects additionally include sinogram data and PET labels, enabling closed-loop local evaluation. Validation subjects have sinogram data but no labels — submit reconstructed PET to Codabench.
41
+
All train cases have CT labels, but due to the size of the sinograms, only 8 include the recon and pet-label folders needed for closedloop reconstruction. Validation subjects have sinogram data but no labels — submit predicted CTs and reconstructed PET to Codabench to get live leaderboard metrics throughout the challenge.
40
42
41
43
---
42
44
@@ -64,38 +66,34 @@ uv sync
64
66
---
65
67
66
68
## 🗂️ Data Format
67
-
69
+
All images are resampled to the label CT image (tensor size: 512x512x531, voxel size 1.52x1.52,2.00mm^3) and structured in four folders per case.
70
+
-`features/` All the files you can use as input to your generative CT model at inference.
71
+
-
68
72
```
73
+
74
+
69
75
train/
70
76
└── sub-000/
71
-
├── features/ # model inputs (all subjects)
72
-
│ ├── nacpet.nii.gz # non-attenuation-corrected PET
Converts a predicted pseudo-CT into a reconstructed ACPET image using [STIR](http://stir.sourceforge.net/) (Software for Tomographic Image Reconstruction). The pipeline:
125
123
126
124
1. Validates CT shape, affine, and HU range
127
-
2. Converts HU → linear attenuation coefficients (μ-map) at 511 keV using the Carney et al. (2006) bilinear model
128
-
3. Smooths the μ-map (4mm FWHM Gaussian)
129
-
4. Resamples the μ-map to STIR sinogram format
130
-
5. Computes the ACF (attenuation correction factor) sinogram
131
-
6. Applies ACF to multiplicative/additive sinograms
132
-
7. Reconstructs using OSEM (ordered subsets expectation maximisation)
133
-
8. Applies 4mm post-reconstruction filter
134
-
9. Converts to NIfTI with correct bed/gantry offset origin
125
+
2. Swaps face and scanner bed region back from ground-truth CT (to avoid evaluating face/bed prediction)
126
+
3. Converts HU → linear attenuation coefficients (μ-map) at 511 keV using the Carney et al. (2006) bilinear model
127
+
4. Smooths the μ-map (4mm FWHM Gaussian)
128
+
5. Resamples the μ-map to STIR format (ring spacing 3.29114 mm)
129
+
6. Computes the ACF (attenuation correction factor) sinogram
130
+
7. Applies ACF to the additive sinogram
131
+
8. Applies ACF to the multiplicative sinogram
132
+
9. Reconstructs using OSEM (ordered subsets expectation maximisation, with post-filter)
133
+
10. Converts to NIfTI with correct bed/gantry offset origin
135
134
136
135
### Option 1: Docker (recommended)
137
136
@@ -147,26 +146,29 @@ docker run --rm \
147
146
ghcr.io/bic-mac-challenge/recon:latest
148
147
```
149
148
150
-
The reconstructed PET is written to `/data/output/pet.nii.gz`.
149
+
The reconstructed PET is written to `/data/output/pet.nii.gz`. Intermediate files (mu-map, ACF sinogram, etc.) are written to `/data/output/intermediates/` and a full debug log to `/data/output/intermediates/recon.log`.
151
150
152
-
Optionally mount a local directory to `/data/intermediates` to persist intermediate files (mu-map, ACF sinogram, etc.). When mounted, the pipeline resumes from any existing intermediates rather than recomputing them; set `OVERWRITE=1` to forcefully restart from scratch instead.
151
+
The pipeline resumes from any existing intermediates automatically; set `OVERWRITE=1` to forcefully restart from scratch:
153
152
154
153
```bash
155
154
docker run --rm \
155
+
-e OVERWRITE=1 \
156
156
-v /path/to/sub-000/recon:/data/recon \
157
157
-v /path/to/ct_pred.nii.gz:/data/ct/ct.nii.gz \
158
158
-v /path/to/output:/data/output \
159
-
-v /path/to/intermediates:/data/intermediates \
160
159
ghcr.io/bic-mac-challenge/recon:latest
161
160
```
162
161
162
+
Set `VERBOSE=1` to stream STIR subprocess output to the terminal in addition to the log file.
`pet.nii.gz` and `intermediates/` are written inside `output_dir`. Use `-w`/`--overwrite` to rerun from scratch and `-v`/`--verbose` to stream STIR output to the terminal.
171
+
170
172
---
171
173
172
174
## 📊 Evaluation (`src/evaluation/`)
@@ -209,12 +211,22 @@ The exact command used to run your container is:
209
211
210
212
```bash
211
213
docker run --rm \
214
+
--memory 128g \
215
+
--network none \
212
216
-v /path/to/sub-XXX/features:/data/features:ro \
213
217
-v /path/to/output:/data/output \
214
218
<your-image>
215
219
```
216
220
217
-
No other files or directories are mounted. Your container must not require network access at inference time.
221
+
**Constraints enforced at evaluation time:**
222
+
223
+
| Resource | Limit |
224
+
|----------|-------|
225
+
| RAM | 128 GB |
226
+
| Wall-clock time | 5 minutes |
227
+
| Network access | None (`--network none`) |
228
+
229
+
No other files or directories are mounted. Make sure all model weights and dependencies are baked into your image — no downloads at inference time.
218
230
219
231
Submit your image name and tag via Codabench (see [website](https://bic-mac-challenge.github.io/) for registration and submission instructions).
0 commit comments