-
Notifications
You must be signed in to change notification settings - Fork 1
/
inference.py
93 lines (63 loc) · 2.38 KB
/
inference.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""
The following is a simple example algorithm.
It is meant to run within a container.
To run it locally, you can call the following bash script:
./test_run.sh
This will start the inference and reads from ./test/input and outputs to ./test/output
To save the container and prep it for upload to Grand-Challenge.org you can call:
./save.sh
Any container that shows the same behavior will do, this is purely an example of how one COULD do it.
Happy programming!
"""
from pathlib import Path
from glob import glob
import SimpleITK
import numpy
INPUT_PATH = Path("/input")
OUTPUT_PATH = Path("/output")
RESOURCE_PATH = Path("resources")
def run():
# Read the input
brain_microscopy_image = load_image_file_as_array(
location=INPUT_PATH / "images/3d-brain-microscopy",
)
# Process the inputs: any way you'd like
_show_torch_cuda_info()
with open(RESOURCE_PATH / "some_resource.txt", "r") as f:
print(f.read())
# For now, let us set make bogus predictions
biological_brain_structure = numpy.eye(4, 2)
# Save your output
write_array_as_image_file(
location=OUTPUT_PATH / "images/brain-structure",
array=biological_brain_structure,
)
return 0
def load_image_file_as_array(*, location):
# Use SimpleITK to read a file
input_files = glob(str(location / "*.tiff")) + glob(str(location / "*.mha"))
result = SimpleITK.ReadImage(input_files[0])
# Convert it to a Numpy array
return SimpleITK.GetArrayFromImage(result)
def write_array_as_image_file(*, location, array):
location.mkdir(parents=True, exist_ok=True)
# You may need to change the suffix to .tiff to match the expected output
suffix = ".mha"
image = SimpleITK.GetImageFromArray(array)
SimpleITK.WriteImage(
image,
location / f"output{suffix}",
useCompression=True,
)
def _show_torch_cuda_info():
import torch
print("=+=" * 10)
print("Collecting Torch CUDA information")
print(f"Torch CUDA is available: {(available := torch.cuda.is_available())}")
if available:
print(f"\tnumber of devices: {torch.cuda.device_count()}")
print(f"\tcurrent device: { (current_device := torch.cuda.current_device())}")
print(f"\tproperties: {torch.cuda.get_device_properties(current_device)}")
print("=+=" * 10)
if __name__ == "__main__":
raise SystemExit(run())