BraTS 0.0.0.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- brats/__init__.py +16 -0
- brats/constants.py +268 -0
- brats/core/__init__.py +0 -0
- brats/core/brats_algorithm.py +264 -0
- brats/core/docker.py +474 -0
- brats/core/inpainting_algorithms.py +155 -0
- brats/core/missing_mri_algorithms.py +185 -0
- brats/core/segmentation_algorithms.py +491 -0
- brats/core/singularity.py +268 -0
- brats/data/meta/adult_glioma_pre_and_post_treatment.yml +123 -0
- brats/data/meta/adult_glioma_pre_treatment.yml +64 -0
- brats/data/meta/africa.yml +185 -0
- brats/data/meta/goat.yml +84 -0
- brats/data/meta/inpainting.yml +163 -0
- brats/data/meta/meningioma.yml +96 -0
- brats/data/meta/meningioma_rt.yml +113 -0
- brats/data/meta/metastases.yml +94 -0
- brats/data/meta/missing_mri.yml +125 -0
- brats/data/meta/pediatric.yml +168 -0
- brats/data/parameters/brats23_africa_sparkunn.yml +63 -0
- brats/data/parameters/brats23_inpainting_domaso.yml +44 -0
- brats/data/parameters/brats23_missing_mri_onembyte.yml +5 -0
- brats/data/parameters/brats24_adult_glioma_mist.yml +6 -0
- brats/data/parameters/brats24_inpainting_smint.yml +37 -0
- brats/data/parameters/brats24_missing_mri_cgv.yml +72 -0
- brats/data/parameters/dummy.yml +0 -0
- brats/preprocessing.py +435 -0
- brats/utils/__init__.py +0 -0
- brats/utils/algorithm_config.py +102 -0
- brats/utils/data_handling.py +116 -0
- brats/utils/exceptions.py +25 -0
- brats/utils/logging.py +73 -0
- brats/utils/zenodo.py +217 -0
- brats-0.0.0.dev0.dist-info/METADATA +581 -0
- brats-0.0.0.dev0.dist-info/RECORD +37 -0
- brats-0.0.0.dev0.dist-info/WHEEL +4 -0
- brats-0.0.0.dev0.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
from brats.utils.algorithm_config import AlgorithmData
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
import subprocess
|
|
5
|
+
from typing import Dict, List, Optional, Union
|
|
6
|
+
from brats.core.docker import (
|
|
7
|
+
_log_algorithm_info,
|
|
8
|
+
_sanity_check_output,
|
|
9
|
+
_get_additional_files_path,
|
|
10
|
+
_get_volume_mappings_mlcube,
|
|
11
|
+
_get_parameters_arg,
|
|
12
|
+
_handle_device_requests,
|
|
13
|
+
_get_volume_mappings_docker_only,
|
|
14
|
+
_ensure_image as _ensure_docker_image,
|
|
15
|
+
)
|
|
16
|
+
from brats.constants import PARAMETERS_DIR
|
|
17
|
+
from loguru import logger
|
|
18
|
+
import time
|
|
19
|
+
from spython.main import Client
|
|
20
|
+
import docker
|
|
21
|
+
import tempfile
|
|
22
|
+
import os
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
docker_client = docker.from_env()
|
|
26
|
+
except docker.errors.DockerException as e:
|
|
27
|
+
logger.debug(
|
|
28
|
+
"Could not connect to the Docker daemon. Docker functionality is disabled, so the Singularity container's working directory may not be set correctly."
|
|
29
|
+
)
|
|
30
|
+
docker_client = None
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _build_command_args(
|
|
34
|
+
algorithm: AlgorithmData,
|
|
35
|
+
) -> List[str]:
|
|
36
|
+
"""Build the command arguments for the singularity container.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
algorithm (AlgorithmData): The algorithm data
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
List[str]: The command arguments
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
command_args = ["--data_path=/mlcube_io0", "--output_path=/mlcube_io2"]
|
|
46
|
+
if algorithm.additional_files is not None:
|
|
47
|
+
for i, param in enumerate(algorithm.additional_files.param_name):
|
|
48
|
+
additional_files_arg = f"--{param}=/mlcube_io1"
|
|
49
|
+
if algorithm.additional_files.param_path:
|
|
50
|
+
additional_files_arg += f"/{algorithm.additional_files.param_path[i]}"
|
|
51
|
+
command_args.append(additional_files_arg)
|
|
52
|
+
|
|
53
|
+
# Add parameters file arg if required
|
|
54
|
+
params_arg = _get_parameters_arg(algorithm=algorithm)
|
|
55
|
+
if params_arg:
|
|
56
|
+
command_args.append(params_arg.strip())
|
|
57
|
+
|
|
58
|
+
return command_args
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _ensure_image(image: str) -> str:
|
|
62
|
+
"""
|
|
63
|
+
Ensure the Singularity image is present on the system. If not, pull it as a Sandbox.
|
|
64
|
+
This function checks if the specified Singularity image exists locally in the temporary directory.
|
|
65
|
+
If the image is not found, it pulls the image from Docker Hub, creates a Singularity Sandbox at the target location.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
image (str): The Docker image to pull and convert into a Singularity Sandbox.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
str: The path to the Singularity image Sandbox.
|
|
72
|
+
"""
|
|
73
|
+
persistent_dir = os.path.join(tempfile.gettempdir(), "brats_singularity_images")
|
|
74
|
+
os.makedirs(persistent_dir, exist_ok=True)
|
|
75
|
+
logger.debug(f"Persistent folder: {persistent_dir}")
|
|
76
|
+
temp_folder = Path(persistent_dir)
|
|
77
|
+
image_path = temp_folder.joinpath(image.replace(":", "_"))
|
|
78
|
+
if not image_path.exists():
|
|
79
|
+
image_path.parent.mkdir(parents=True, exist_ok=True)
|
|
80
|
+
logger.debug(
|
|
81
|
+
f"Pulling Singularity image {image} and creating a Sandbox at {image_path}"
|
|
82
|
+
)
|
|
83
|
+
subprocess.run(
|
|
84
|
+
[
|
|
85
|
+
"singularity",
|
|
86
|
+
"build",
|
|
87
|
+
"--sandbox",
|
|
88
|
+
"--fakeroot",
|
|
89
|
+
str(image_path),
|
|
90
|
+
f"docker://{image}",
|
|
91
|
+
],
|
|
92
|
+
check=True,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
return str(image_path)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _convert_volume_mappings_to_singularity_format(
|
|
99
|
+
volume_mappings: Dict[Union[Path, str], Dict[str, str]],
|
|
100
|
+
) -> List[str]:
|
|
101
|
+
"""Convert volume mappings from Docker format to Singularity format.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
volume_mappings (Dict[Path | str, Dict[str, str]]): The volume mappings in Docker format
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
List[str]: The volume mappings in Singularity format
|
|
108
|
+
"""
|
|
109
|
+
singularity_bindings = []
|
|
110
|
+
for host_path, val in volume_mappings.items():
|
|
111
|
+
container_path = val["bind"]
|
|
112
|
+
singularity_bindings.append(f"{str(host_path)}:{container_path}")
|
|
113
|
+
return singularity_bindings
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _get_docker_working_dir(image: str) -> Optional[Path]:
|
|
117
|
+
"""
|
|
118
|
+
Retrieve the working directory configured in the Docker image.
|
|
119
|
+
|
|
120
|
+
This is required to properly initialize the working directory for the Singularity container,
|
|
121
|
+
ensuring that the container starts in the correct location as defined by the Docker image.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
image (str): The Docker image name or ID.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
Path | None: The working directory specified in the Docker image configuration. None if docker client is not available.
|
|
128
|
+
"""
|
|
129
|
+
if docker_client is None:
|
|
130
|
+
return None
|
|
131
|
+
try:
|
|
132
|
+
logger.debug(f"Inspecting image {image}")
|
|
133
|
+
image_obj = docker_client.images.get(image)
|
|
134
|
+
except docker.errors.ImageNotFound:
|
|
135
|
+
logger.debug(f"Image {image} not found locally.")
|
|
136
|
+
_ensure_docker_image(image)
|
|
137
|
+
image_obj = docker_client.images.get(image)
|
|
138
|
+
workdir = image_obj.attrs["Config"].get("WorkingDir", None)
|
|
139
|
+
logger.debug(f"Working directory: {workdir}")
|
|
140
|
+
if workdir is None:
|
|
141
|
+
return None
|
|
142
|
+
else:
|
|
143
|
+
return Path(workdir)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def run_container(
|
|
147
|
+
algorithm: AlgorithmData,
|
|
148
|
+
data_path: Path,
|
|
149
|
+
output_path: Path,
|
|
150
|
+
cuda_devices: str,
|
|
151
|
+
force_cpu: bool,
|
|
152
|
+
internal_external_name_map: Optional[Dict[str, str]] = None,
|
|
153
|
+
overlay_size: int = 1024,
|
|
154
|
+
):
|
|
155
|
+
"""Run a Singularity container for the provided algorithm.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
algorithm (AlgorithmData): The data of the algorithm to run
|
|
159
|
+
data_path (Path | str): The path to the input data
|
|
160
|
+
output_path (Path | str): The path to save the output
|
|
161
|
+
cuda_devices (str): The CUDA devices to use
|
|
162
|
+
force_cpu (bool): Whether to force CPU execution
|
|
163
|
+
internal_external_name_map (Dict[str, str]): Dictionary mapping internal name (in standardized format) to external subject name provided by user (only used for batch inference)
|
|
164
|
+
overlay_size (int): The size of the overlay image in MB. Defaults to 1024.
|
|
165
|
+
"""
|
|
166
|
+
if overlay_size <= 0:
|
|
167
|
+
raise ValueError("Overlay size must be greater than 0.")
|
|
168
|
+
_log_algorithm_info(algorithm=algorithm)
|
|
169
|
+
# ensure image is present, if not pull it
|
|
170
|
+
image = _ensure_image(image=algorithm.run_args.docker_image)
|
|
171
|
+
|
|
172
|
+
additional_files_path = _get_additional_files_path(algorithm)
|
|
173
|
+
logger.debug(f"Additional files path: {additional_files_path}")
|
|
174
|
+
# ensure output folder exists
|
|
175
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
176
|
+
|
|
177
|
+
command_args = _build_command_args(algorithm=algorithm)
|
|
178
|
+
command_args_str = " ".join(command_args)
|
|
179
|
+
logger.debug(f"Command args: {command_args_str}")
|
|
180
|
+
if algorithm.meta.year <= 2024:
|
|
181
|
+
volume_mappings = _get_volume_mappings_mlcube(
|
|
182
|
+
data_path=data_path,
|
|
183
|
+
additional_files_path=additional_files_path,
|
|
184
|
+
output_path=output_path,
|
|
185
|
+
parameters_path=PARAMETERS_DIR,
|
|
186
|
+
)
|
|
187
|
+
args = ["infer", *command_args]
|
|
188
|
+
else:
|
|
189
|
+
volume_mappings = _get_volume_mappings_docker_only(
|
|
190
|
+
data_path=data_path,
|
|
191
|
+
output_path=output_path,
|
|
192
|
+
)
|
|
193
|
+
args = None
|
|
194
|
+
|
|
195
|
+
logger.debug(f"Volume mappings: {volume_mappings}")
|
|
196
|
+
|
|
197
|
+
# device setup
|
|
198
|
+
device_requests = _handle_device_requests(
|
|
199
|
+
algorithm=algorithm, cuda_devices=cuda_devices, force_cpu=force_cpu
|
|
200
|
+
)
|
|
201
|
+
logger.debug(f"GPU Device requests: {device_requests}")
|
|
202
|
+
|
|
203
|
+
# Run the container
|
|
204
|
+
logger.info("Starting inference")
|
|
205
|
+
start_time = time.time()
|
|
206
|
+
|
|
207
|
+
singularity_bindings = _convert_volume_mappings_to_singularity_format(
|
|
208
|
+
volume_mappings
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
options = []
|
|
212
|
+
|
|
213
|
+
if len(device_requests) > 0 and not force_cpu:
|
|
214
|
+
logger.info(f"Using CUDA devices: {cuda_devices}")
|
|
215
|
+
options.append("--nv") # Singularity uses --nv to enable GPU support
|
|
216
|
+
|
|
217
|
+
# TODO: The --fakeroot option may be required for certain algorithms that need root privileges inside the Singularity container.
|
|
218
|
+
docker_working_dir = _get_docker_working_dir(algorithm.run_args.docker_image)
|
|
219
|
+
if docker_working_dir is not None:
|
|
220
|
+
options.append("--cwd")
|
|
221
|
+
options.append(str(docker_working_dir))
|
|
222
|
+
else:
|
|
223
|
+
logger.warning(
|
|
224
|
+
"Docker working directory not found. Using default working directory."
|
|
225
|
+
)
|
|
226
|
+
overlay_path = Path(image).parent / (Path(image).name + "_overlay.img")
|
|
227
|
+
options.append("--overlay")
|
|
228
|
+
options.append(str(overlay_path))
|
|
229
|
+
|
|
230
|
+
overlay_created = False
|
|
231
|
+
if not overlay_path.exists():
|
|
232
|
+
subprocess.run(
|
|
233
|
+
[
|
|
234
|
+
"singularity",
|
|
235
|
+
"overlay",
|
|
236
|
+
"create",
|
|
237
|
+
"--size",
|
|
238
|
+
str(overlay_size),
|
|
239
|
+
str(overlay_path),
|
|
240
|
+
],
|
|
241
|
+
check=True,
|
|
242
|
+
)
|
|
243
|
+
overlay_created = True
|
|
244
|
+
try:
|
|
245
|
+
executor = Client.run(
|
|
246
|
+
image,
|
|
247
|
+
options=options,
|
|
248
|
+
args=args,
|
|
249
|
+
stream=True,
|
|
250
|
+
bind=singularity_bindings,
|
|
251
|
+
)
|
|
252
|
+
container_output = []
|
|
253
|
+
for line in executor:
|
|
254
|
+
container_output.append(line)
|
|
255
|
+
|
|
256
|
+
_sanity_check_output(
|
|
257
|
+
data_path=data_path,
|
|
258
|
+
output_path=output_path,
|
|
259
|
+
container_output="\n".join(container_output),
|
|
260
|
+
internal_external_name_map=internal_external_name_map,
|
|
261
|
+
)
|
|
262
|
+
finally:
|
|
263
|
+
try:
|
|
264
|
+
if overlay_created:
|
|
265
|
+
overlay_path.unlink()
|
|
266
|
+
except FileNotFoundError:
|
|
267
|
+
pass
|
|
268
|
+
logger.info(f"Finished inference in {time.time() - start_time:.2f} seconds")
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
constants:
|
|
2
|
+
input_name_schema: &input_name_schema "BraTS-GLI-{id:05d}-000"
|
|
3
|
+
challenge: &challenge "Adult Glioma Segmentation (Pre & Post Treatment)"
|
|
4
|
+
challenge_manuscript:
|
|
5
|
+
2025: &challenge_manuscript_2025 "https://arxiv.org/abs/2405.18368" # same as 2024
|
|
6
|
+
2024: &challenge_manuscript_2024 "https://arxiv.org/abs/2405.18368"
|
|
7
|
+
years:
|
|
8
|
+
2025: &year_2025 2025
|
|
9
|
+
2024: &year_2024 2024
|
|
10
|
+
ranks:
|
|
11
|
+
1st: &rank_1 1st
|
|
12
|
+
2nd: &rank_2 2nd
|
|
13
|
+
3rd: &rank_3 3rd
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
algorithms:
|
|
17
|
+
|
|
18
|
+
##### 2025 #####
|
|
19
|
+
BraTS25_1:
|
|
20
|
+
meta:
|
|
21
|
+
authors: Ishika Jain, et al.
|
|
22
|
+
paper: N/A
|
|
23
|
+
challenge: *challenge
|
|
24
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
25
|
+
rank: *rank_1
|
|
26
|
+
year: *year_2025
|
|
27
|
+
run_args:
|
|
28
|
+
docker_image: brainles/brats25_gli_aia-bots:latest
|
|
29
|
+
input_name_schema: *input_name_schema
|
|
30
|
+
requires_root: true
|
|
31
|
+
|
|
32
|
+
BraTS25_2:
|
|
33
|
+
meta:
|
|
34
|
+
authors: Qu Lin, et al.
|
|
35
|
+
paper: N/A
|
|
36
|
+
challenge: *challenge
|
|
37
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
38
|
+
rank: *rank_2
|
|
39
|
+
year: *year_2025
|
|
40
|
+
run_args:
|
|
41
|
+
docker_image: brainles/brats25_gli_ecnu:latest
|
|
42
|
+
input_name_schema: *input_name_schema
|
|
43
|
+
cpu_compatible: true # ~ 7 min/ subject
|
|
44
|
+
requires_root: true
|
|
45
|
+
|
|
46
|
+
BraTS25_3A:
|
|
47
|
+
meta:
|
|
48
|
+
authors: Liwei Jin, et al.
|
|
49
|
+
paper: N/A
|
|
50
|
+
challenge: *challenge
|
|
51
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
52
|
+
rank: *rank_3
|
|
53
|
+
year: *year_2025
|
|
54
|
+
run_args:
|
|
55
|
+
docker_image: brainles/brats25_gli_jinlw:latest
|
|
56
|
+
input_name_schema: *input_name_schema
|
|
57
|
+
cpu_compatible: true # ~150min / subject
|
|
58
|
+
|
|
59
|
+
BraTS25_3B:
|
|
60
|
+
meta:
|
|
61
|
+
authors: Adrian Celaya, et al.
|
|
62
|
+
paper: N/A
|
|
63
|
+
challenge: *challenge
|
|
64
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
65
|
+
rank: *rank_3
|
|
66
|
+
year: *year_2025
|
|
67
|
+
run_args:
|
|
68
|
+
docker_image: brainles/brats25_gli_mist:latest
|
|
69
|
+
input_name_schema: *input_name_schema
|
|
70
|
+
|
|
71
|
+
##### 2024 #####
|
|
72
|
+
BraTS24_1:
|
|
73
|
+
meta:
|
|
74
|
+
authors: André Ferreira, et al.
|
|
75
|
+
paper: N/A
|
|
76
|
+
challenge: *challenge
|
|
77
|
+
challenge_manuscript: *challenge_manuscript_2024
|
|
78
|
+
rank: *rank_1
|
|
79
|
+
year: *year_2024
|
|
80
|
+
run_args:
|
|
81
|
+
docker_image: brainles/brats24_adult_glioma_faking_it:latest
|
|
82
|
+
input_name_schema: *input_name_schema
|
|
83
|
+
requires_root: false
|
|
84
|
+
parameters_file: false
|
|
85
|
+
shm_size: "4gb"
|
|
86
|
+
|
|
87
|
+
BraTS24_2:
|
|
88
|
+
meta:
|
|
89
|
+
authors: Heejong Kim, et al.
|
|
90
|
+
paper: https://arxiv.org/abs/2409.08143
|
|
91
|
+
challenge: *challenge
|
|
92
|
+
challenge_manuscript: *challenge_manuscript_2024
|
|
93
|
+
rank: *rank_2
|
|
94
|
+
year: *year_2024
|
|
95
|
+
run_args:
|
|
96
|
+
docker_image: brainles/brats24_adult_glioma_kimbab:latest
|
|
97
|
+
input_name_schema: *input_name_schema
|
|
98
|
+
requires_root: false
|
|
99
|
+
parameters_file: false
|
|
100
|
+
shm_size: "2gb"
|
|
101
|
+
additional_files:
|
|
102
|
+
record_id: "14413387"
|
|
103
|
+
param_name: ["nnunet_env_path"]
|
|
104
|
+
|
|
105
|
+
BraTS24_3:
|
|
106
|
+
meta:
|
|
107
|
+
authors: Adrian Celaya
|
|
108
|
+
paper: N/A
|
|
109
|
+
challenge: *challenge
|
|
110
|
+
challenge_manuscript: *challenge_manuscript_2024
|
|
111
|
+
rank: *rank_3
|
|
112
|
+
year: *year_2024
|
|
113
|
+
run_args:
|
|
114
|
+
docker_image: brainles/brats24_adult_glioma_mist:latest
|
|
115
|
+
input_name_schema: *input_name_schema
|
|
116
|
+
requires_root: false
|
|
117
|
+
parameters_file: true
|
|
118
|
+
shm_size: "2gb"
|
|
119
|
+
cpu_compatible: true
|
|
120
|
+
additional_files:
|
|
121
|
+
record_id: "14411467"
|
|
122
|
+
param_name: ["mist_models", "mist_config", "mist_dataset"]
|
|
123
|
+
param_path: ["models", "config.json", "dataset.json"]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
constants:
|
|
2
|
+
input_name_schema: &input_name_schema "BraTS-GLI-{id:05d}-000"
|
|
3
|
+
challenge: &challenge "Adult Glioma Segmentation (Pre Treatment)"
|
|
4
|
+
challenge_manuscript:
|
|
5
|
+
2023: &challenge_manuscript_2023 "https://arxiv.org/abs/2107.02314"
|
|
6
|
+
years:
|
|
7
|
+
2023: &year_2023 2023
|
|
8
|
+
ranks:
|
|
9
|
+
1st: &rank_1 1st
|
|
10
|
+
2nd: &rank_2 2nd
|
|
11
|
+
3rd: &rank_3 3rd
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
algorithms:
|
|
15
|
+
|
|
16
|
+
##### 2023 #####
|
|
17
|
+
|
|
18
|
+
BraTS23_1:
|
|
19
|
+
meta:
|
|
20
|
+
authors: André Ferreira, et al.
|
|
21
|
+
paper: https://doi.org/10.1007/978-3-031-76163-8_8
|
|
22
|
+
challenge: *challenge
|
|
23
|
+
challenge_manuscript: *challenge_manuscript_2023
|
|
24
|
+
rank: *rank_1
|
|
25
|
+
year: *year_2023
|
|
26
|
+
run_args:
|
|
27
|
+
docker_image: brainles/brats23_faking_it:latest
|
|
28
|
+
input_name_schema: *input_name_schema
|
|
29
|
+
requires_root: true
|
|
30
|
+
parameters_file: false
|
|
31
|
+
shm_size: "2gb"
|
|
32
|
+
|
|
33
|
+
BraTS23_2:
|
|
34
|
+
meta:
|
|
35
|
+
authors: Andriy Myronenko, et al.
|
|
36
|
+
paper: N/A
|
|
37
|
+
challenge: *challenge
|
|
38
|
+
challenge_manuscript: *challenge_manuscript_2023
|
|
39
|
+
rank: *rank_2
|
|
40
|
+
year: *year_2023
|
|
41
|
+
run_args:
|
|
42
|
+
docker_image: brainles/brats23_nvauto:latest
|
|
43
|
+
input_name_schema: *input_name_schema
|
|
44
|
+
requires_root: true
|
|
45
|
+
parameters_file: true
|
|
46
|
+
shm_size: "32gb"
|
|
47
|
+
|
|
48
|
+
BraTS23_3:
|
|
49
|
+
meta:
|
|
50
|
+
authors: Fadillah Adamsyah Maani, et al.
|
|
51
|
+
paper: https://doi.org/10.1007/978-3-031-76163-8_24
|
|
52
|
+
challenge: *challenge
|
|
53
|
+
challenge_manuscript: *challenge_manuscript_2023
|
|
54
|
+
rank: *rank_3
|
|
55
|
+
year: *year_2023
|
|
56
|
+
run_args:
|
|
57
|
+
docker_image: brainles/brats23_biomedmbz:latest
|
|
58
|
+
input_name_schema: *input_name_schema
|
|
59
|
+
requires_root: false
|
|
60
|
+
parameters_file: true
|
|
61
|
+
shm_size: "2gb"
|
|
62
|
+
additional_files:
|
|
63
|
+
record_id: "11573315"
|
|
64
|
+
param_name: ["checkpoint_dir"]
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
constants:
|
|
2
|
+
input_name_schema: &input_name_schema "BraTS-SSA-{id:05d}-000"
|
|
3
|
+
challenge: &challenge "BraTS-Africa Segmentation"
|
|
4
|
+
dataset_manuscript: &dataset_manuscript "https://pubs.rsna.org/doi/full/10.1148/ryai.240528"
|
|
5
|
+
challenge_manuscript:
|
|
6
|
+
2025: &challenge_manuscript_2025 "https://arxiv.org/abs/2305.19369" # remained the same as 2023 & 2024
|
|
7
|
+
2024: &challenge_manuscript_2024 "https://arxiv.org/abs/2305.19369" # remained the same as 2023
|
|
8
|
+
2023: &challenge_manuscript_2023 "https://arxiv.org/abs/2305.19369"
|
|
9
|
+
years:
|
|
10
|
+
2025: &year_2025 2025
|
|
11
|
+
2024: &year_2024 2024
|
|
12
|
+
2023: &year_2023 2023
|
|
13
|
+
ranks:
|
|
14
|
+
1st: &rank_1 1st
|
|
15
|
+
2nd: &rank_2 2nd
|
|
16
|
+
3rd: &rank_3 3rd
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
algorithms:
|
|
20
|
+
|
|
21
|
+
##### 2025 #####
|
|
22
|
+
|
|
23
|
+
BraTS25_1:
|
|
24
|
+
meta:
|
|
25
|
+
authors: Claudia Takyi Ankomah, et al.
|
|
26
|
+
paper: N/A
|
|
27
|
+
challenge: *challenge
|
|
28
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
29
|
+
rank: *rank_1
|
|
30
|
+
year: *year_2025
|
|
31
|
+
dataset_manuscript: *dataset_manuscript
|
|
32
|
+
run_args:
|
|
33
|
+
docker_image: brainles/brats25_ssa_spark_neuro:latest
|
|
34
|
+
input_name_schema: *input_name_schema
|
|
35
|
+
requires_root: true
|
|
36
|
+
cpu_compatible: true # ~2 hours on CPU
|
|
37
|
+
|
|
38
|
+
BraTS25_2A:
|
|
39
|
+
meta:
|
|
40
|
+
authors: William Boonzaier, et al.
|
|
41
|
+
paper: N/A
|
|
42
|
+
challenge: *challenge
|
|
43
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
44
|
+
rank: *rank_2
|
|
45
|
+
year: *year_2025
|
|
46
|
+
dataset_manuscript: *dataset_manuscript
|
|
47
|
+
run_args:
|
|
48
|
+
docker_image: brainles/brats25_ssa_spark2025_team_sparkans:latest
|
|
49
|
+
input_name_schema: *input_name_schema
|
|
50
|
+
requires_root: true
|
|
51
|
+
|
|
52
|
+
BraTS25_2B:
|
|
53
|
+
meta:
|
|
54
|
+
authors: Mohtady Barakat, et al.
|
|
55
|
+
paper: N/A
|
|
56
|
+
challenge: *challenge
|
|
57
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
58
|
+
rank: *rank_2
|
|
59
|
+
year: *year_2025
|
|
60
|
+
dataset_manuscript: *dataset_manuscript
|
|
61
|
+
run_args:
|
|
62
|
+
docker_image: brainles/brats25_ssa_spark2025_team_wakanda:latest
|
|
63
|
+
input_name_schema: *input_name_schema
|
|
64
|
+
requires_root: true
|
|
65
|
+
|
|
66
|
+
BraTS25_3:
|
|
67
|
+
meta:
|
|
68
|
+
authors: Ahmed Jaheen, et al.
|
|
69
|
+
paper: N/A
|
|
70
|
+
challenge: *challenge
|
|
71
|
+
challenge_manuscript: *challenge_manuscript_2025
|
|
72
|
+
rank: *rank_3
|
|
73
|
+
year: *year_2025
|
|
74
|
+
dataset_manuscript: *dataset_manuscript
|
|
75
|
+
run_args:
|
|
76
|
+
docker_image: brainles/brats25_ssa_biomedia_mbzuai:latest
|
|
77
|
+
input_name_schema: *input_name_schema
|
|
78
|
+
requires_root: true
|
|
79
|
+
|
|
80
|
+
##### 2024 #####
|
|
81
|
+
|
|
82
|
+
BraTS24_1:
|
|
83
|
+
meta:
|
|
84
|
+
authors: Abhijeet Parida, et al.
|
|
85
|
+
paper: https://arxiv.org/abs/2412.04111
|
|
86
|
+
challenge: *challenge
|
|
87
|
+
challenge_manuscript: *challenge_manuscript_2024
|
|
88
|
+
rank: *rank_1
|
|
89
|
+
year: *year_2024
|
|
90
|
+
dataset_manuscript: *dataset_manuscript
|
|
91
|
+
run_args:
|
|
92
|
+
docker_image: brainles/brats24_africa_cnmc_pmi:latest
|
|
93
|
+
input_name_schema: *input_name_schema
|
|
94
|
+
requires_root: false
|
|
95
|
+
parameters_file: false
|
|
96
|
+
shm_size: "2gb"
|
|
97
|
+
|
|
98
|
+
BraTS24_2:
|
|
99
|
+
meta:
|
|
100
|
+
authors: Yanguang Zhao, et al.
|
|
101
|
+
paper: https://arxiv.org/abs/2410.18698
|
|
102
|
+
challenge: *challenge
|
|
103
|
+
challenge_manuscript: *challenge_manuscript_2024
|
|
104
|
+
rank: *rank_2
|
|
105
|
+
year: *year_2024
|
|
106
|
+
dataset_manuscript: *dataset_manuscript
|
|
107
|
+
run_args:
|
|
108
|
+
docker_image: brainles/brats24_africa_cuhk_rpai
|
|
109
|
+
input_name_schema: *input_name_schema
|
|
110
|
+
requires_root: false
|
|
111
|
+
parameters_file: true
|
|
112
|
+
shm_size: "2gb"
|
|
113
|
+
cpu_compatible: true
|
|
114
|
+
|
|
115
|
+
BraTS24_3:
|
|
116
|
+
meta:
|
|
117
|
+
authors: Sarim Hashmi, et al.
|
|
118
|
+
paper: https://arxiv.org/abs/2411.15872
|
|
119
|
+
challenge: *challenge
|
|
120
|
+
challenge_manuscript: *challenge_manuscript_2024
|
|
121
|
+
rank: *rank_3
|
|
122
|
+
year: *year_2024
|
|
123
|
+
dataset_manuscript: *dataset_manuscript
|
|
124
|
+
run_args:
|
|
125
|
+
docker_image: brainles/brats24_africa_biomedia-mbzu
|
|
126
|
+
input_name_schema: *input_name_schema
|
|
127
|
+
requires_root: false
|
|
128
|
+
parameters_file: true
|
|
129
|
+
shm_size: "2gb"
|
|
130
|
+
additional_files:
|
|
131
|
+
record_id: "14414932"
|
|
132
|
+
param_name: ["checkpoint_dir"]
|
|
133
|
+
|
|
134
|
+
##### 2023 #####
|
|
135
|
+
|
|
136
|
+
BraTS23_1:
|
|
137
|
+
meta:
|
|
138
|
+
authors: Andriy Myronenko, et al.
|
|
139
|
+
paper: N/A
|
|
140
|
+
challenge: *challenge
|
|
141
|
+
challenge_manuscript: *challenge_manuscript_2023
|
|
142
|
+
dataset_manuscript: *dataset_manuscript
|
|
143
|
+
rank: *rank_1
|
|
144
|
+
year: *year_2023
|
|
145
|
+
run_args:
|
|
146
|
+
docker_image: brainles/brats23_africa_nvauto:latest
|
|
147
|
+
input_name_schema: *input_name_schema
|
|
148
|
+
requires_root: true
|
|
149
|
+
parameters_file: true
|
|
150
|
+
shm_size: "32gb"
|
|
151
|
+
|
|
152
|
+
BraTS23_2:
|
|
153
|
+
meta:
|
|
154
|
+
authors: Alyssa R Amod, et al.
|
|
155
|
+
paper: https://doi.org/10.1007/978-3-031-76163-8_22
|
|
156
|
+
challenge: *challenge
|
|
157
|
+
challenge_manuscript: *challenge_manuscript_2023
|
|
158
|
+
dataset_manuscript: *dataset_manuscript
|
|
159
|
+
rank: *rank_2
|
|
160
|
+
year: *year_2023
|
|
161
|
+
run_args:
|
|
162
|
+
docker_image: brainles/brats23_africa_sparkunn:latest
|
|
163
|
+
input_name_schema: *input_name_schema
|
|
164
|
+
requires_root: false
|
|
165
|
+
parameters_file: true
|
|
166
|
+
additional_files:
|
|
167
|
+
record_id: "13373752"
|
|
168
|
+
param_name: ["ckpts_path"]
|
|
169
|
+
|
|
170
|
+
BraTS23_3:
|
|
171
|
+
meta:
|
|
172
|
+
authors: Ziyan Huang, et al.
|
|
173
|
+
paper: https://doi.org/10.1007/978-3-031-76163-8_13
|
|
174
|
+
challenge: *challenge
|
|
175
|
+
challenge_manuscript: *challenge_manuscript_2023
|
|
176
|
+
dataset_manuscript: *dataset_manuscript
|
|
177
|
+
rank: *rank_3
|
|
178
|
+
year: *year_2023
|
|
179
|
+
run_args:
|
|
180
|
+
docker_image: brainles/brats23_africa_blackbean:latest
|
|
181
|
+
input_name_schema: *input_name_schema
|
|
182
|
+
requires_root: true
|
|
183
|
+
parameters_file: true
|
|
184
|
+
cpu_compatible: true
|
|
185
|
+
|