Upload segmentation_template version 0.0.3
Browse files- LICENSE +21 -0
- configs/inference.yaml +113 -0
- configs/logging.conf +21 -0
- configs/metadata.json +66 -0
- configs/multi_gpu_train.yaml +37 -0
- configs/test.yaml +125 -0
- configs/train.yaml +243 -0
- docs/README.md +75 -0
- docs/generate_data.ipynb +195 -0
- docs/inference.sh +18 -0
- docs/run_monailabel.sh +28 -0
- docs/test.sh +18 -0
- docs/train.sh +18 -0
- docs/train_multigpu.sh +34 -0
- docs/visualise_inference.ipynb +122 -0
- models/model.pt +3 -0
LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
MIT License
|
2 |
+
|
3 |
+
Copyright (c) 2023 MONAI Consortium
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
configs/inference.yaml
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This implements the workflow for applying the network to a directory of images and saving the predicted segmentations.
|
2 |
+
|
3 |
+
imports:
|
4 |
+
- $import os
|
5 |
+
- $import torch
|
6 |
+
- $import glob
|
7 |
+
|
8 |
+
# pull out some constants from MONAI
|
9 |
+
image: $monai.utils.CommonKeys.IMAGE
|
10 |
+
pred: $monai.utils.CommonKeys.PRED
|
11 |
+
|
12 |
+
# hyperparameters for you to modify on the command line
|
13 |
+
batch_size: 1 # number of images per batch
|
14 |
+
num_workers: 0 # number of workers to generate batches with
|
15 |
+
num_classes: 4 # number of classes in training data which network should predict
|
16 |
+
device: $torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
17 |
+
|
18 |
+
# define various paths
|
19 |
+
bundle_root: . # root directory of the bundle
|
20 |
+
ckpt_path: $@bundle_root + '/models/model.pt' # checkpoint to load before starting
|
21 |
+
dataset_dir: $@bundle_root + '/test_data' # where data is coming from
|
22 |
+
output_dir: './outputs' # directory to store images to
|
23 |
+
|
24 |
+
# network definition, this could be parameterised by pre-defined values or on the command line
|
25 |
+
network_def:
|
26 |
+
_target_: UNet
|
27 |
+
spatial_dims: 3
|
28 |
+
in_channels: 1
|
29 |
+
out_channels: '@num_classes'
|
30 |
+
channels: [8, 16, 32, 64]
|
31 |
+
strides: [2, 2, 2]
|
32 |
+
num_res_units: 2
|
33 |
+
network: $@network_def.to(@device)
|
34 |
+
|
35 |
+
# list all niftis in the input directory
|
36 |
+
file_pattern: '*.nii*'
|
37 |
+
data_list: '$list(sorted(glob.glob(os.path.join(@dataset_dir, @file_pattern))))'
|
38 |
+
# collect data dictionaries for all files
|
39 |
+
data_dicts: '$[{@image:i} for i in @data_list]'
|
40 |
+
|
41 |
+
# these transforms are used for inference to load and regularise inputs
|
42 |
+
transforms:
|
43 |
+
- _target_: LoadImaged
|
44 |
+
keys: '@image'
|
45 |
+
image_only: true
|
46 |
+
- _target_: EnsureChannelFirstd
|
47 |
+
keys: '@image'
|
48 |
+
- _target_: ScaleIntensityd
|
49 |
+
keys: '@image'
|
50 |
+
|
51 |
+
preprocessing:
|
52 |
+
_target_: Compose
|
53 |
+
transforms: $@transforms
|
54 |
+
|
55 |
+
dataset:
|
56 |
+
_target_: Dataset
|
57 |
+
data: '@data_dicts'
|
58 |
+
transform: '@preprocessing'
|
59 |
+
|
60 |
+
dataloader:
|
61 |
+
_target_: ThreadDataLoader # generate data ansynchronously from inference
|
62 |
+
dataset: '@dataset'
|
63 |
+
batch_size: '@batch_size'
|
64 |
+
num_workers: '@num_workers'
|
65 |
+
|
66 |
+
# should be replaced with other inferer types if training process is different for your network
|
67 |
+
inferer:
|
68 |
+
_target_: SimpleInferer
|
69 |
+
|
70 |
+
# transform to apply to data from network to be suitable for loss function and validation
|
71 |
+
postprocessing:
|
72 |
+
_target_: Compose
|
73 |
+
transforms:
|
74 |
+
- _target_: Activationsd
|
75 |
+
keys: '@pred'
|
76 |
+
softmax: true
|
77 |
+
- _target_: AsDiscreted
|
78 |
+
keys: '@pred'
|
79 |
+
argmax: true
|
80 |
+
- _target_: SaveImaged
|
81 |
+
keys: '@pred'
|
82 |
+
meta_keys: pred_meta_dict
|
83 |
+
data_root_dir: '@dataset_dir'
|
84 |
+
output_dir: '@output_dir'
|
85 |
+
dtype: $None
|
86 |
+
output_dtype: $None
|
87 |
+
output_postfix: ''
|
88 |
+
resample: false
|
89 |
+
separate_folder: true
|
90 |
+
|
91 |
+
# inference handlers to load checkpoint, gather statistics
|
92 |
+
handlers:
|
93 |
+
- _target_: CheckpointLoader
|
94 |
+
_disabled_: $not os.path.exists(@ckpt_path)
|
95 |
+
load_path: '@ckpt_path'
|
96 |
+
load_dict:
|
97 |
+
model: '@network'
|
98 |
+
- _target_: StatsHandler
|
99 |
+
name: null # use engine.logger as the Logger object to log to
|
100 |
+
output_transform: '$lambda x: None'
|
101 |
+
|
102 |
+
# engine for running inference, ties together objects defined above and has metric definitions
|
103 |
+
evaluator:
|
104 |
+
_target_: SupervisedEvaluator
|
105 |
+
device: '@device'
|
106 |
+
val_data_loader: '@dataloader'
|
107 |
+
network: '@network'
|
108 |
+
inferer: '@inferer'
|
109 |
+
postprocessing: '@postprocessing'
|
110 |
+
val_handlers: '@handlers'
|
111 |
+
|
112 |
+
run:
|
113 |
+
- [email protected]()
|
configs/logging.conf
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[loggers]
|
2 |
+
keys=root
|
3 |
+
|
4 |
+
[handlers]
|
5 |
+
keys=consoleHandler
|
6 |
+
|
7 |
+
[formatters]
|
8 |
+
keys=fullFormatter
|
9 |
+
|
10 |
+
[logger_root]
|
11 |
+
level=INFO
|
12 |
+
handlers=consoleHandler
|
13 |
+
|
14 |
+
[handler_consoleHandler]
|
15 |
+
class=StreamHandler
|
16 |
+
level=INFO
|
17 |
+
formatter=fullFormatter
|
18 |
+
args=(sys.stdout,)
|
19 |
+
|
20 |
+
[formatter_fullFormatter]
|
21 |
+
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
|
configs/metadata.json
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json",
|
3 |
+
"version": "0.0.3",
|
4 |
+
"changelog": {
|
5 |
+
"0.0.3": "update to huggingface hosting",
|
6 |
+
"0.0.2": "Minor train.yaml clarifications",
|
7 |
+
"0.0.1": "Initial version"
|
8 |
+
},
|
9 |
+
"monai_version": "1.4.0",
|
10 |
+
"pytorch_version": "2.4.0",
|
11 |
+
"numpy_version": "1.24.4",
|
12 |
+
"optional_packages_version": {
|
13 |
+
"nibabel": "5.2.1",
|
14 |
+
"pytorch-ignite": "0.4.11"
|
15 |
+
},
|
16 |
+
"name": "Segmentation Template",
|
17 |
+
"task": "Segmentation of randomly generated spheres in 3D images",
|
18 |
+
"description": "This is a template bundle for segmenting in 3D, take this as a basis for your own bundles.",
|
19 |
+
"authors": "Eric Kerfoot",
|
20 |
+
"copyright": "Copyright (c) 2023 MONAI Consortium",
|
21 |
+
"network_data_format": {
|
22 |
+
"inputs": {
|
23 |
+
"image": {
|
24 |
+
"type": "image",
|
25 |
+
"format": "magnitude",
|
26 |
+
"modality": "none",
|
27 |
+
"num_channels": 1,
|
28 |
+
"spatial_shape": [
|
29 |
+
128,
|
30 |
+
128,
|
31 |
+
128
|
32 |
+
],
|
33 |
+
"dtype": "float32",
|
34 |
+
"value_range": [],
|
35 |
+
"is_patch_data": false,
|
36 |
+
"channel_def": {
|
37 |
+
"0": "image"
|
38 |
+
}
|
39 |
+
}
|
40 |
+
},
|
41 |
+
"outputs": {
|
42 |
+
"pred": {
|
43 |
+
"type": "image",
|
44 |
+
"format": "segmentation",
|
45 |
+
"num_channels": 4,
|
46 |
+
"spatial_shape": [
|
47 |
+
128,
|
48 |
+
128,
|
49 |
+
128
|
50 |
+
],
|
51 |
+
"dtype": "float32",
|
52 |
+
"value_range": [
|
53 |
+
0,
|
54 |
+
3
|
55 |
+
],
|
56 |
+
"is_patch_data": false,
|
57 |
+
"channel_def": {
|
58 |
+
"0": "background",
|
59 |
+
"1": "category 1",
|
60 |
+
"2": "category 2",
|
61 |
+
"3": "category 3"
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
}
|
configs/multi_gpu_train.yaml
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This file contains the changes to implement DDP training with the train.yaml config.
|
2 |
+
|
3 |
+
is_dist: '$dist.is_initialized()'
|
4 |
+
rank: '$dist.get_rank() if @is_dist else 0'
|
5 |
+
device: '$torch.device(f"cuda:{@rank}" if torch.cuda.is_available() else "cpu")' # assumes GPU # matches rank #
|
6 |
+
|
7 |
+
# wrap the network in a DistributedDataParallel instance, moving it to the chosen device for this process
|
8 |
+
network:
|
9 |
+
_target_: torch.nn.parallel.DistributedDataParallel
|
10 |
+
module: $@network_def.to(@device)
|
11 |
+
device_ids: ['@device']
|
12 |
+
find_unused_parameters: true
|
13 |
+
|
14 |
+
train_sampler:
|
15 |
+
_target_: DistributedSampler
|
16 |
+
dataset: '@train_dataset'
|
17 |
+
even_divisible: true
|
18 |
+
shuffle: true
|
19 |
+
|
20 |
+
train_dataloader#sampler: '@train_sampler'
|
21 |
+
train_dataloader#shuffle: false
|
22 |
+
|
23 |
+
val_sampler:
|
24 |
+
_target_: DistributedSampler
|
25 |
+
dataset: '@val_dataset'
|
26 |
+
even_divisible: false
|
27 |
+
shuffle: false
|
28 |
+
|
29 |
+
val_dataloader#sampler: '@val_sampler'
|
30 |
+
|
31 |
+
run:
|
32 |
+
- $import torch.distributed as dist
|
33 |
+
- $dist.init_process_group(backend='nccl')
|
34 |
+
- $torch.cuda.set_device(@device)
|
35 |
+
- $monai.utils.set_determinism(seed=123) # may want to choose a different seed or not do this here
|
36 |
+
- [email protected]()
|
37 |
+
- $dist.destroy_process_group()
|
configs/test.yaml
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This implements the workflow for applying the network to a directory of images and measuring network performance with metrics.
|
2 |
+
|
3 |
+
imports:
|
4 |
+
- $import os
|
5 |
+
- $import datetime
|
6 |
+
- $import torch
|
7 |
+
- $import glob
|
8 |
+
|
9 |
+
# pull out some constants from MONAI
|
10 |
+
image: $monai.utils.CommonKeys.IMAGE
|
11 |
+
label: $monai.utils.CommonKeys.LABEL
|
12 |
+
pred: $monai.utils.CommonKeys.PRED
|
13 |
+
both_keys: ['@image', '@label']
|
14 |
+
|
15 |
+
# hyperparameters for you to modify on the command line
|
16 |
+
batch_size: 1 # number of images per batch
|
17 |
+
num_workers: 0 # number of workers to generate batches with
|
18 |
+
num_classes: 4 # number of classes in training data which network should predict
|
19 |
+
save_pred: false # whether to save prediction images or just run metric tests
|
20 |
+
device: $torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
21 |
+
|
22 |
+
# define various paths
|
23 |
+
bundle_root: . # root directory of the bundle
|
24 |
+
ckpt_path: $@bundle_root + '/models/model.pt' # checkpoint to load before starting
|
25 |
+
dataset_dir: $@bundle_root + '/test_data' # where data is coming from
|
26 |
+
output_dir: './outputs' # directory to store images to if save_pred is true
|
27 |
+
|
28 |
+
# network definition, this could be parameterised by pre-defined values or on the command line
|
29 |
+
network_def:
|
30 |
+
_target_: UNet
|
31 |
+
spatial_dims: 3
|
32 |
+
in_channels: 1
|
33 |
+
out_channels: '@num_classes'
|
34 |
+
channels: [8, 16, 32, 64]
|
35 |
+
strides: [2, 2, 2]
|
36 |
+
num_res_units: 2
|
37 |
+
network: $@network_def.to(@device)
|
38 |
+
|
39 |
+
# list all niftis in the input directory
|
40 |
+
file_pattern: '*.nii*'
|
41 |
+
data_list: '$list(sorted(glob.glob(os.path.join(@dataset_dir, @file_pattern))))'
|
42 |
+
# collect data dictionaries for all files
|
43 |
+
imgs: '$sorted(glob.glob(@dataset_dir+''/img*.nii.gz''))'
|
44 |
+
lbls: '$[i.replace(''img'',''lbl'') for i in @imgs]'
|
45 |
+
data_dicts: '$[{@image: i, @label: l} for i, l in zip(@imgs, @lbls)]'
|
46 |
+
|
47 |
+
# these transforms are used for inference to load and regularise inputs
|
48 |
+
transforms:
|
49 |
+
- _target_: LoadImaged
|
50 |
+
keys: '@both_keys'
|
51 |
+
image_only: true
|
52 |
+
- _target_: EnsureChannelFirstd
|
53 |
+
keys: '@both_keys'
|
54 |
+
- _target_: ScaleIntensityd
|
55 |
+
keys: '@image'
|
56 |
+
|
57 |
+
preprocessing:
|
58 |
+
_target_: Compose
|
59 |
+
transforms: $@transforms
|
60 |
+
|
61 |
+
dataset:
|
62 |
+
_target_: Dataset
|
63 |
+
data: '@data_dicts'
|
64 |
+
transform: '@preprocessing'
|
65 |
+
|
66 |
+
dataloader:
|
67 |
+
_target_: ThreadDataLoader # generate data ansynchronously from inference
|
68 |
+
dataset: '@dataset'
|
69 |
+
batch_size: '@batch_size'
|
70 |
+
num_workers: '@num_workers'
|
71 |
+
|
72 |
+
# should be replaced with other inferer types if training process is different for your network
|
73 |
+
inferer:
|
74 |
+
_target_: SimpleInferer
|
75 |
+
|
76 |
+
# transform to apply to data from network to be suitable for loss function and validation
|
77 |
+
postprocessing:
|
78 |
+
_target_: Compose
|
79 |
+
transforms:
|
80 |
+
- _target_: Activationsd
|
81 |
+
keys: '@pred'
|
82 |
+
softmax: true
|
83 |
+
- _target_: AsDiscreted
|
84 |
+
keys: '@pred'
|
85 |
+
argmax: true
|
86 |
+
- _target_: SaveImaged
|
87 |
+
_disabled_: '$not @save_pred'
|
88 |
+
keys: '@pred'
|
89 |
+
meta_keys: pred_meta_dict
|
90 |
+
data_root_dir: '@dataset_dir'
|
91 |
+
output_dir: '@output_dir'
|
92 |
+
dtype: $None
|
93 |
+
output_dtype: $None
|
94 |
+
output_postfix: ''
|
95 |
+
resample: false
|
96 |
+
separate_folder: true
|
97 |
+
|
98 |
+
# inference handlers to load checkpoint, gather statistics
|
99 |
+
handlers:
|
100 |
+
- _target_: CheckpointLoader
|
101 |
+
_disabled_: $not os.path.exists(@ckpt_path)
|
102 |
+
load_path: '@ckpt_path'
|
103 |
+
load_dict:
|
104 |
+
model: '@network'
|
105 |
+
- _target_: StatsHandler
|
106 |
+
name: null # use engine.logger as the Logger object to log to
|
107 |
+
output_transform: '$lambda x: None'
|
108 |
+
|
109 |
+
# engine for running inference, ties together objects defined above and has metric definitions
|
110 |
+
evaluator:
|
111 |
+
_target_: SupervisedEvaluator
|
112 |
+
device: '@device'
|
113 |
+
val_data_loader: '@dataloader'
|
114 |
+
network: '@network'
|
115 |
+
postprocessing: '@postprocessing'
|
116 |
+
key_val_metric:
|
117 |
+
val_mean_dice:
|
118 |
+
_target_: MeanDice
|
119 |
+
include_background: false
|
120 |
+
output_transform: $monai.handlers.from_engine([@pred, @label])
|
121 |
+
val_handlers: '@handlers'
|
122 |
+
|
123 |
+
run:
|
124 |
+
- [email protected]()
|
125 |
+
- '$print(''Per-image Dice:\n'',@evaluator.state.metric_details[''val_mean_dice''].cpu().numpy())'
|
configs/train.yaml
ADDED
@@ -0,0 +1,243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This config file implements the training workflow. It can be combined with multi_gpu_train.yaml to use DDP for
|
2 |
+
# multi-GPU runs. Many definitions in this file are duplicated across other files for compatibility with MONAI
|
3 |
+
# Label, eg. network_def, but ideally these would be in a common.yaml file used in conjunction with this one
|
4 |
+
# or the other config files for testing or inference.
|
5 |
+
|
6 |
+
imports:
|
7 |
+
- $import os
|
8 |
+
- $import datetime
|
9 |
+
- $import torch
|
10 |
+
- $import glob
|
11 |
+
|
12 |
+
# pull out some constants from MONAI
|
13 |
+
image: $monai.utils.CommonKeys.IMAGE
|
14 |
+
label: $monai.utils.CommonKeys.LABEL
|
15 |
+
pred: $monai.utils.CommonKeys.PRED
|
16 |
+
both_keys: ['@image', '@label']
|
17 |
+
|
18 |
+
# multi-gpu values, `rank` will be replaced in a separate script implementing multi-gpu changes
|
19 |
+
rank: 0 # without multi-gpu support consider the process as rank 0 anyway
|
20 |
+
is_not_rank0: '$@rank > 0' # true if not main process, used to disable handlers for other ranks
|
21 |
+
|
22 |
+
# hyperparameters for you to modify on the command line
|
23 |
+
val_interval: 1 # how often to perform validation after an epoch
|
24 |
+
ckpt_interval: 1 # how often to save a checkpoint after an epoch
|
25 |
+
rand_prob: 0.5 # probability a random transform is applied
|
26 |
+
batch_size: 5 # number of images per batch
|
27 |
+
num_epochs: 20 # number of epochs to train for
|
28 |
+
num_substeps: 1 # how many times to repeatly train with the same batch
|
29 |
+
num_workers: 4 # number of workers to generate batches with
|
30 |
+
learning_rate: 0.001 # initial learning rate
|
31 |
+
num_classes: 4 # number of classes in training data which network should predict
|
32 |
+
device: $torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
33 |
+
|
34 |
+
# define various paths
|
35 |
+
bundle_root: . # root directory of the bundle
|
36 |
+
ckpt_path: $@bundle_root + '/models/model.pt' # checkpoint to load before starting
|
37 |
+
dataset_dir: $@bundle_root + '/train_data' # where data is coming from
|
38 |
+
results_dir: $@bundle_root + '/results' # where results are being stored to
|
39 |
+
# a new output directory is chosen using a timestamp for every invocation
|
40 |
+
output_dir: '$datetime.datetime.now().strftime(@results_dir + ''/output_%y%m%d_%H%M%S'')'
|
41 |
+
|
42 |
+
# network definition, this could be parameterised by pre-defined values or on the command line
|
43 |
+
network_def:
|
44 |
+
_target_: UNet
|
45 |
+
spatial_dims: 3
|
46 |
+
in_channels: 1
|
47 |
+
out_channels: '@num_classes'
|
48 |
+
channels: [8, 16, 32, 64]
|
49 |
+
strides: [2, 2, 2]
|
50 |
+
num_res_units: 2
|
51 |
+
network: $@network_def.to(@device)
|
52 |
+
|
53 |
+
# dataset value, this assumes a directory filled with img##.nii.gz and lbl##.nii.gz files
|
54 |
+
imgs: '$sorted(glob.glob(@dataset_dir+''/img*.nii.gz''))'
|
55 |
+
lbls: '$[i.replace(''img'',''lbl'') for i in @imgs]'
|
56 |
+
all_pairs: '$[{@image: i, @label: l} for i, l in zip(@imgs, @lbls)]'
|
57 |
+
partitions: '$monai.data.partition_dataset(@all_pairs, (4, 1), shuffle=True, seed=0)'
|
58 |
+
train_sub: '$@partitions[0]' # train partition
|
59 |
+
val_sub: '$@partitions[1]' # validation partition
|
60 |
+
|
61 |
+
# these transforms are used for training and validation transform sequences
|
62 |
+
base_transforms:
|
63 |
+
- _target_: LoadImaged
|
64 |
+
keys: '@both_keys'
|
65 |
+
image_only: true
|
66 |
+
- _target_: EnsureChannelFirstd
|
67 |
+
keys: '@both_keys'
|
68 |
+
|
69 |
+
# these are the random and regularising transforms used only for training
|
70 |
+
train_transforms:
|
71 |
+
- _target_: RandAxisFlipd
|
72 |
+
keys: '@both_keys'
|
73 |
+
prob: '@rand_prob'
|
74 |
+
- _target_: RandRotate90d
|
75 |
+
keys: '@both_keys'
|
76 |
+
prob: '@rand_prob'
|
77 |
+
- _target_: RandGaussianNoised
|
78 |
+
keys: '@image'
|
79 |
+
prob: '@rand_prob'
|
80 |
+
std: 0.05
|
81 |
+
- _target_: ScaleIntensityd
|
82 |
+
keys: '@image'
|
83 |
+
|
84 |
+
# these are used for validation data so no randomness
|
85 |
+
val_transforms:
|
86 |
+
- _target_: ScaleIntensityd
|
87 |
+
keys: '@image'
|
88 |
+
|
89 |
+
# define the Compose objects for training and validation
|
90 |
+
|
91 |
+
preprocessing:
|
92 |
+
_target_: Compose
|
93 |
+
transforms: $@base_transforms + @train_transforms
|
94 |
+
|
95 |
+
val_preprocessing:
|
96 |
+
_target_: Compose
|
97 |
+
transforms: $@base_transforms + @val_transforms
|
98 |
+
|
99 |
+
# define the datasets for training and validation
|
100 |
+
|
101 |
+
train_dataset:
|
102 |
+
_target_: Dataset
|
103 |
+
data: '@train_sub'
|
104 |
+
transform: '@preprocessing'
|
105 |
+
|
106 |
+
val_dataset:
|
107 |
+
_target_: Dataset
|
108 |
+
data: '@val_sub'
|
109 |
+
transform: '@val_preprocessing'
|
110 |
+
|
111 |
+
# define the dataloaders for training and validation
|
112 |
+
|
113 |
+
train_dataloader:
|
114 |
+
_target_: ThreadDataLoader # generate data ansynchronously from training
|
115 |
+
dataset: '@train_dataset'
|
116 |
+
batch_size: '@batch_size'
|
117 |
+
repeats: '@num_substeps'
|
118 |
+
num_workers: '@num_workers'
|
119 |
+
|
120 |
+
val_dataloader:
|
121 |
+
_target_: DataLoader # faster transforms probably won't benefit from threading
|
122 |
+
dataset: '@val_dataset'
|
123 |
+
batch_size: '@batch_size'
|
124 |
+
num_workers: '@num_workers'
|
125 |
+
|
126 |
+
# Simple Dice loss configured for multi-class segmentation, for binary segmentation
|
127 |
+
# use include_background==True and sigmoid==True instead of these values
|
128 |
+
lossfn:
|
129 |
+
_target_: DiceLoss
|
130 |
+
include_background: true # if your segmentations are relatively small it might help for this to be false
|
131 |
+
to_onehot_y: true # convert ground truth to one-hot for training
|
132 |
+
softmax: true # softmax applied to prediction
|
133 |
+
|
134 |
+
# hyperparameters could be added for other arguments of this class
|
135 |
+
optimizer:
|
136 |
+
_target_: torch.optim.Adam
|
137 |
+
params: [email protected]()
|
138 |
+
lr: '@learning_rate'
|
139 |
+
|
140 |
+
# should be replaced with other inferer types if training process is different for your network
|
141 |
+
inferer:
|
142 |
+
_target_: SimpleInferer
|
143 |
+
|
144 |
+
# transform to apply to data from network to be suitable for validation
|
145 |
+
postprocessing:
|
146 |
+
_target_: Compose
|
147 |
+
transforms:
|
148 |
+
- _target_: Activationsd
|
149 |
+
keys: '@pred'
|
150 |
+
softmax: true
|
151 |
+
- _target_: AsDiscreted
|
152 |
+
keys: ['@pred', '@label']
|
153 |
+
argmax: [true, false]
|
154 |
+
to_onehot: '@num_classes'
|
155 |
+
|
156 |
+
# validation handlers to gather statistics, log these to a file, and save best checkpoint
|
157 |
+
val_handlers:
|
158 |
+
- _target_: StatsHandler
|
159 |
+
name: null # use engine.logger as the Logger object to log to
|
160 |
+
output_transform: '$lambda x: None'
|
161 |
+
- _target_: LogfileHandler # log outputs from the validation engine
|
162 |
+
output_dir: '@output_dir'
|
163 |
+
- _target_: CheckpointSaver
|
164 |
+
_disabled_: '@is_not_rank0' # only need rank 0 to save
|
165 |
+
save_dir: '@output_dir'
|
166 |
+
save_dict:
|
167 |
+
model: '@network'
|
168 |
+
save_interval: 0 # don't save iterations, just when the metric improves
|
169 |
+
save_final: false
|
170 |
+
epoch_level: false
|
171 |
+
save_key_metric: true
|
172 |
+
key_metric_name: val_mean_dice # save the checkpoint when this value improves
|
173 |
+
|
174 |
+
# engine for running validation, ties together objects defined above and has metric definitions
|
175 |
+
evaluator:
|
176 |
+
_target_: SupervisedEvaluator
|
177 |
+
device: '@device'
|
178 |
+
val_data_loader: '@val_dataloader'
|
179 |
+
network: '@network'
|
180 |
+
postprocessing: '@postprocessing'
|
181 |
+
key_val_metric:
|
182 |
+
val_mean_dice:
|
183 |
+
_target_: MeanDice
|
184 |
+
include_background: false
|
185 |
+
output_transform: $monai.handlers.from_engine([@pred, @label])
|
186 |
+
val_mean_iou:
|
187 |
+
_target_: MeanIoUHandler
|
188 |
+
include_background: false
|
189 |
+
output_transform: $monai.handlers.from_engine([@pred, @label])
|
190 |
+
additional_metrics:
|
191 |
+
val_mae: # can have other metrics, MAE not great for segmentation tasks so here just to demo
|
192 |
+
_target_: MeanAbsoluteError
|
193 |
+
output_transform: $monai.handlers.from_engine([@pred, @label])
|
194 |
+
val_handlers: '@val_handlers'
|
195 |
+
|
196 |
+
# gathers the loss and validation values for each iteration, referred to by CheckpointSaver so defined separately
|
197 |
+
metriclogger:
|
198 |
+
_target_: MetricLogger
|
199 |
+
evaluator: '@evaluator'
|
200 |
+
|
201 |
+
handlers:
|
202 |
+
- '@metriclogger'
|
203 |
+
- _target_: CheckpointLoader
|
204 |
+
_disabled_: $not os.path.exists(@ckpt_path)
|
205 |
+
load_path: '@ckpt_path'
|
206 |
+
load_dict:
|
207 |
+
model: '@network'
|
208 |
+
- _target_: ValidationHandler # run validation at the set interval, bridge between trainer and evaluator objects
|
209 |
+
validator: '@evaluator'
|
210 |
+
epoch_level: true
|
211 |
+
interval: '@val_interval'
|
212 |
+
- _target_: CheckpointSaver
|
213 |
+
_disabled_: '@is_not_rank0' # only need rank 0 to save
|
214 |
+
save_dir: '@output_dir'
|
215 |
+
save_dict: # every epoch checkpoint saves the network and the metric logger in a dictionary
|
216 |
+
model: '@network'
|
217 |
+
logger: '@metriclogger'
|
218 |
+
save_interval: '@ckpt_interval'
|
219 |
+
save_final: true
|
220 |
+
epoch_level: true
|
221 |
+
- _target_: StatsHandler
|
222 |
+
name: null # use engine.logger as the Logger object to log to
|
223 |
+
tag_name: train_loss
|
224 |
+
output_transform: $monai.handlers.from_engine(['loss'], first=True) # log loss value
|
225 |
+
- _target_: LogfileHandler # log outputs from the training engine
|
226 |
+
output_dir: '@output_dir'
|
227 |
+
|
228 |
+
# engine for training, ties values defined above together into the main engine for the training process
|
229 |
+
trainer:
|
230 |
+
_target_: SupervisedTrainer
|
231 |
+
max_epochs: '@num_epochs'
|
232 |
+
device: '@device'
|
233 |
+
train_data_loader: '@train_dataloader'
|
234 |
+
network: '@network'
|
235 |
+
inferer: '@inferer' # unnecessary since SimpleInferer is the default if this isn't provided
|
236 |
+
loss_function: '@lossfn'
|
237 |
+
optimizer: '@optimizer'
|
238 |
+
# postprocessing: '@postprocessing' # uncomment if you have train metrics that need post-processing
|
239 |
+
key_train_metric: null
|
240 |
+
train_handlers: '@handlers'
|
241 |
+
|
242 |
+
run:
|
243 |
+
- [email protected]()
|
docs/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
# Template Segmentation Bundle
|
3 |
+
|
4 |
+
This bundle is meant to be an example of segmentation in 3D which you can copy and modify to create your own bundle.
|
5 |
+
It is only roughly trained for the synthetic data you can generate with [this notebook](./generate_data.ipynb)
|
6 |
+
so doesn't do anything useful on its own. The purpose is to demonstrate the base line for segmentation network
|
7 |
+
bundles compatible with MONAILabel amongst other things.
|
8 |
+
|
9 |
+
To use this bundle, copy the contents of the whole directory and change the definitions for network, data, transforms,
|
10 |
+
or whatever else you want for your own new segmentation bundle. Some of the names are critical for MONAILable but
|
11 |
+
otherwise you're free to change just about whatever else is defined here to suit your network.
|
12 |
+
|
13 |
+
This bundle should also demonstrate good practice and design, however there is one caveat about definitions being
|
14 |
+
copied between config files. Ideally there should be a `common.yaml` file for all the definitions used by every other
|
15 |
+
config file which is then included with that file. MONAILabel doesn't support this yet so this bundle will be updated
|
16 |
+
once it does to exemplify this better practice.
|
17 |
+
|
18 |
+
## Generating Demo Data
|
19 |
+
|
20 |
+
Run all the cells of [this notebook](./generate_data.ipynb) to generate training and test data. These will be 3D
|
21 |
+
nifti files containing volumes with randomly generated spheres of varying intensities and some noise for fun. The
|
22 |
+
segmentation task is very easy so your network will train in minutes with the default configuration of values. A test
|
23 |
+
data directory will separately be created since the test and inference configs are configured to apply the network to
|
24 |
+
every nifti file in a given directory with a certain pattern.
|
25 |
+
|
26 |
+
## Training
|
27 |
+
|
28 |
+
To train a new network the `train.yaml` script can be used alone with no other arguments (assume `BUNDLE` is the root
|
29 |
+
directory of the bundle):
|
30 |
+
|
31 |
+
```sh
|
32 |
+
python -m monai.bundle run \
|
33 |
+
--meta_file "$BUNDLE/configs/metadata.json" \
|
34 |
+
--config_file "$BUNDLE/configs/train.yaml" \
|
35 |
+
--bundle_root "$BUNDLE"
|
36 |
+
```
|
37 |
+
|
38 |
+
A `train.sh` script is also provided in `docs` which implements this invocation with some helper commands. It
|
39 |
+
relies on a Conda environment called `monai` so comment or modify those lines if you're not using such an environment.
|
40 |
+
See MONAI installation information about what environment to create for the features you want.
|
41 |
+
|
42 |
+
The training config includes a number of hyperparameters like `learning_rate` and `num_workers`. These control aspects
|
43 |
+
of how training operates in terms of how many processes to use, when to perform validation, when to save checkpoints,
|
44 |
+
and other things. Other aspects of the script can be modified on the command line so these aren't exhaustive but are a
|
45 |
+
guide to the kind of parameterisation that make sense for a bundle.
|
46 |
+
|
47 |
+
## Testing and Inference
|
48 |
+
|
49 |
+
Two configs are provided (`test.yaml` and `inference.yaml`) for doing post-training inference with the model. The first
|
50 |
+
requires image and segmentation pairs which are used with network outputs to assess performance using metrics. This is
|
51 |
+
very similar to training validation but is done on separate images. This config can be set to save predicted segmentations
|
52 |
+
by setting `save_pred` to true but by default it will just run metrics and print their results.
|
53 |
+
|
54 |
+
The inference config is for generating new segmentations from images which don't have ground truths, so this is used for
|
55 |
+
actually applying the network in practice. This will apply the network to every image in an input directory matching a
|
56 |
+
pattern and save the predicted segmentations to an output directory.
|
57 |
+
|
58 |
+
Using inference on the command line is demonstrated in [this notebook](./visualise_inference.ipynb) with visualisation.
|
59 |
+
Some explanation of some command line choices are given in the notebook as well, similar command line invocations can
|
60 |
+
also be done with the included `inference.sh` script file.
|
61 |
+
|
62 |
+
## Other Considerations
|
63 |
+
|
64 |
+
There is no `scripts` directory containing a valid Python module to be imported in your configs. This wasn't necessary
|
65 |
+
for this bundle but if you want to include custom code in a bundle please follow the bundle tutorials on how to do this.
|
66 |
+
|
67 |
+
The `multi_gpu_train.yaml` config is defined as a "mixin" to implement DDP based multi-gpu training. The script
|
68 |
+
`train_multigpu.sh` illustrates an example of how to invoke these configs together with `torchrun`.
|
69 |
+
|
70 |
+
The `inference.yaml` config is compatible with MONAILabel such that you can load one of the synthetic images and perform
|
71 |
+
inference through a label server. This doesn't permit active learning however, that is a later enhancement for this
|
72 |
+
bundle. If you're changing definitions in the `inference.yaml` config file be careful about changing names and consult
|
73 |
+
the MONAILabel documentation about required definition names. An example script to start a server is given in
|
74 |
+
`run_monailabel.sh` which will download the bundle application and "install" this bundle using a symlink then start
|
75 |
+
the server. Future updates to MONAILabel will improve this process.
|
docs/generate_data.ipynb
ADDED
@@ -0,0 +1,195 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"id": "b1c9de9d-6777-4a1d-bb7c-c2413d01bd7d",
|
6 |
+
"metadata": {},
|
7 |
+
"source": [
|
8 |
+
"# Generate Data\n",
|
9 |
+
"\n",
|
10 |
+
"This bundle uses simple synthetic data for training and testing. Using `create_test_image_3d` we'll create images of spheres with labels for each divided into 3 classes distinguished by intensity. The network will be able to train very quickly on this of course but it's for demonstration purposes and your specialised bundle will by modified for your data and its layout. \n",
|
11 |
+
"\n",
|
12 |
+
"Assuming this notebook is being run from the `docs` directory it will create two new directories in the root of the bundle, `train_data` and `test_data`.\n",
|
13 |
+
"\n",
|
14 |
+
"First imports:"
|
15 |
+
]
|
16 |
+
},
|
17 |
+
{
|
18 |
+
"cell_type": "code",
|
19 |
+
"execution_count": 29,
|
20 |
+
"id": "1e7cb4a8-f91a-4f15-a8aa-3136c2b954d6",
|
21 |
+
"metadata": {
|
22 |
+
"tags": []
|
23 |
+
},
|
24 |
+
"outputs": [],
|
25 |
+
"source": [
|
26 |
+
"import os\n",
|
27 |
+
"\n",
|
28 |
+
"import matplotlib.pyplot as plt\n",
|
29 |
+
"import nibabel as nib\n",
|
30 |
+
"import numpy as np\n",
|
31 |
+
"from monai.data import create_test_image_3d\n",
|
32 |
+
"\n",
|
33 |
+
"plt.rcParams[\"image.interpolation\"] = \"none\""
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "markdown",
|
38 |
+
"id": "2b2c3de5-01e5-4578-832b-b24a75d095d5",
|
39 |
+
"metadata": {},
|
40 |
+
"source": [
|
41 |
+
"As shown here, the images are spheres in a 3D volume with associated labels:"
|
42 |
+
]
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"cell_type": "code",
|
46 |
+
"execution_count": 47,
|
47 |
+
"id": "775be24b-3400-4e28-9cce-3c47ee796517",
|
48 |
+
"metadata": {
|
49 |
+
"tags": []
|
50 |
+
},
|
51 |
+
"outputs": [
|
52 |
+
{
|
53 |
+
"name": "stdout",
|
54 |
+
"output_type": "stream",
|
55 |
+
"text": [
|
56 |
+
"(128, 128, 128) float32 (128, 128, 128) int32\n"
|
57 |
+
]
|
58 |
+
},
|
59 |
+
{
|
60 |
+
"data": {
|
61 |
+
"text/plain": [
|
62 |
+
"<matplotlib.image.AxesImage at 0x7fe2c5f74be0>"
|
63 |
+
]
|
64 |
+
},
|
65 |
+
"execution_count": 47,
|
66 |
+
"metadata": {},
|
67 |
+
"output_type": "execute_result"
|
68 |
+
},
|
69 |
+
{
|
70 |
+
"data": {
|
71 |
+
"image/png": "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",
|
72 |
+
"text/plain": [
|
73 |
+
"<Figure size 640x480 with 2 Axes>"
|
74 |
+
]
|
75 |
+
},
|
76 |
+
"metadata": {},
|
77 |
+
"output_type": "display_data"
|
78 |
+
}
|
79 |
+
],
|
80 |
+
"source": [
|
81 |
+
"img, lbl = create_test_image_3d(128, 128, 128, 4, num_seg_classes=3, noise_max=0.5)\n",
|
82 |
+
"\n",
|
83 |
+
"print(img.shape, img.dtype, lbl.shape, lbl.dtype)\n",
|
84 |
+
"\n",
|
85 |
+
"_, (ax0, ax1) = plt.subplots(1, 2)\n",
|
86 |
+
"ax0.imshow(np.average(img, 0), cmap=\"gray\")\n",
|
87 |
+
"ax1.imshow(np.max(lbl, 0), cmap=\"jet\")"
|
88 |
+
]
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"cell_type": "markdown",
|
92 |
+
"id": "8e08c4a1-6630-4ab3-832b-e53face81e35",
|
93 |
+
"metadata": {},
|
94 |
+
"source": [
|
95 |
+
"50 image/label pairs are now generated into the directory `../data`, assuming this notebook is run from the `docs` directory this will be in the bundle root:"
|
96 |
+
]
|
97 |
+
},
|
98 |
+
{
|
99 |
+
"cell_type": "code",
|
100 |
+
"execution_count": 52,
|
101 |
+
"id": "1c7e0188-e0a1-48fc-8249-d09a9cc466e3",
|
102 |
+
"metadata": {
|
103 |
+
"tags": []
|
104 |
+
},
|
105 |
+
"outputs": [],
|
106 |
+
"source": [
|
107 |
+
"num_images = 50\n",
|
108 |
+
"out_dir = os.path.abspath(\"../train_data\")\n",
|
109 |
+
"\n",
|
110 |
+
"os.makedirs(out_dir, exist_ok=True)\n",
|
111 |
+
"\n",
|
112 |
+
"for i in range(num_images):\n",
|
113 |
+
" img, lbl = create_test_image_3d(128, 128, 128, 4, num_seg_classes=3, noise_max=0.5)\n",
|
114 |
+
" n = nib.Nifti1Image(img, np.eye(4))\n",
|
115 |
+
" nib.save(n, os.path.join(out_dir, f\"img{i:02}.nii.gz\"))\n",
|
116 |
+
" n = nib.Nifti1Image(lbl, np.eye(4))\n",
|
117 |
+
" nib.save(n, os.path.join(out_dir, f\"lbl{i:02}.nii.gz\"))"
|
118 |
+
]
|
119 |
+
},
|
120 |
+
{
|
121 |
+
"cell_type": "markdown",
|
122 |
+
"id": "7fe344f7-d01d-49d5-adca-a7071939ca53",
|
123 |
+
"metadata": {},
|
124 |
+
"source": [
|
125 |
+
"We'll also generate some test data in a separate folder:"
|
126 |
+
]
|
127 |
+
},
|
128 |
+
{
|
129 |
+
"cell_type": "code",
|
130 |
+
"execution_count": 53,
|
131 |
+
"id": "c3b8d8f3-8d73-4657-98f3-5605d4b1bad9",
|
132 |
+
"metadata": {
|
133 |
+
"tags": []
|
134 |
+
},
|
135 |
+
"outputs": [],
|
136 |
+
"source": [
|
137 |
+
"num_images = 10\n",
|
138 |
+
"out_dir = os.path.abspath(\"../test_data\")\n",
|
139 |
+
"\n",
|
140 |
+
"os.makedirs(out_dir, exist_ok=True)\n",
|
141 |
+
"\n",
|
142 |
+
"for i in range(num_images):\n",
|
143 |
+
" img, lbl = create_test_image_3d(128, 128, 128, 4, num_seg_classes=3, noise_max=0.5)\n",
|
144 |
+
" n = nib.Nifti1Image(img, np.eye(4))\n",
|
145 |
+
" nib.save(n, os.path.join(out_dir, f\"img{i:02}.nii.gz\"))\n",
|
146 |
+
" n = nib.Nifti1Image(lbl, np.eye(4))\n",
|
147 |
+
" nib.save(n, os.path.join(out_dir, f\"lbl{i:02}.nii.gz\"))"
|
148 |
+
]
|
149 |
+
},
|
150 |
+
{
|
151 |
+
"cell_type": "code",
|
152 |
+
"execution_count": 54,
|
153 |
+
"id": "599cff25-4894-481b-aec3-6aedda327a09",
|
154 |
+
"metadata": {
|
155 |
+
"tags": []
|
156 |
+
},
|
157 |
+
"outputs": [
|
158 |
+
{
|
159 |
+
"name": "stdout",
|
160 |
+
"output_type": "stream",
|
161 |
+
"text": [
|
162 |
+
"img00.nii.gz img04.nii.gz img08.nii.gz lbl02.nii.gz\tlbl06.nii.gz\n",
|
163 |
+
"img01.nii.gz img05.nii.gz img09.nii.gz lbl03.nii.gz\tlbl07.nii.gz\n",
|
164 |
+
"img02.nii.gz img06.nii.gz lbl00.nii.gz lbl04.nii.gz\tlbl08.nii.gz\n",
|
165 |
+
"img03.nii.gz img07.nii.gz lbl01.nii.gz lbl05.nii.gz\tlbl09.nii.gz\n"
|
166 |
+
]
|
167 |
+
}
|
168 |
+
],
|
169 |
+
"source": [
|
170 |
+
"!ls {out_dir}"
|
171 |
+
]
|
172 |
+
}
|
173 |
+
],
|
174 |
+
"metadata": {
|
175 |
+
"kernelspec": {
|
176 |
+
"display_name": "Python [conda env:monai1]",
|
177 |
+
"language": "python",
|
178 |
+
"name": "conda-env-monai1-py"
|
179 |
+
},
|
180 |
+
"language_info": {
|
181 |
+
"codemirror_mode": {
|
182 |
+
"name": "ipython",
|
183 |
+
"version": 3
|
184 |
+
},
|
185 |
+
"file_extension": ".py",
|
186 |
+
"mimetype": "text/x-python",
|
187 |
+
"name": "python",
|
188 |
+
"nbconvert_exporter": "python",
|
189 |
+
"pygments_lexer": "ipython3",
|
190 |
+
"version": "3.9.18"
|
191 |
+
}
|
192 |
+
},
|
193 |
+
"nbformat": 4,
|
194 |
+
"nbformat_minor": 5
|
195 |
+
}
|
docs/inference.sh
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#! /bin/bash
|
2 |
+
|
3 |
+
eval "$(conda shell.bash hook)"
|
4 |
+
conda activate monai
|
5 |
+
|
6 |
+
homedir="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
7 |
+
|
8 |
+
BUNDLE="$(cd "$homedir/.." && pwd)"
|
9 |
+
|
10 |
+
echo "Bundle root: $BUNDLE"
|
11 |
+
|
12 |
+
export PYTHONPATH="$BUNDLE"
|
13 |
+
|
14 |
+
python -m monai.bundle run \
|
15 |
+
--meta_file "$BUNDLE/configs/metadata.json" \
|
16 |
+
--config_file "$BUNDLE/configs/inference.yaml" \
|
17 |
+
--bundle_root "$BUNDLE" \
|
18 |
+
$@
|
docs/run_monailabel.sh
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#! /bin/bash
|
2 |
+
|
3 |
+
eval "$(conda shell.bash hook)"
|
4 |
+
conda activate monailabel
|
5 |
+
|
6 |
+
export CUDA_VISIBLE_DEVICES=0
|
7 |
+
|
8 |
+
homedir="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
9 |
+
|
10 |
+
BUNDLE="$(cd "$homedir/.." && pwd)"
|
11 |
+
|
12 |
+
LABELDIR="$BUNDLE/monailabel"
|
13 |
+
|
14 |
+
BUNDLENAME=$(basename "$BUNDLE")
|
15 |
+
|
16 |
+
if [ ! -d "$LABELDIR" ]
|
17 |
+
then
|
18 |
+
mkdir "$LABELDIR"
|
19 |
+
mkdir "$LABELDIR/datasets"
|
20 |
+
cd "$LABELDIR"
|
21 |
+
monailabel apps --download --name monaibundle
|
22 |
+
mkdir "$LABELDIR/monaibundle/model"
|
23 |
+
cd "$LABELDIR/monaibundle/model"
|
24 |
+
ln -s "$BUNDLE" $BUNDLENAME
|
25 |
+
fi
|
26 |
+
|
27 |
+
cd "$LABELDIR"
|
28 |
+
monailabel start_server --app monaibundle --studies datasets --conf models $BUNDLENAME $*
|
docs/test.sh
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#! /bin/bash
|
2 |
+
|
3 |
+
eval "$(conda shell.bash hook)"
|
4 |
+
conda activate monai
|
5 |
+
|
6 |
+
homedir="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
7 |
+
|
8 |
+
BUNDLE="$(cd "$homedir/.." && pwd)"
|
9 |
+
|
10 |
+
echo "Bundle root: $BUNDLE"
|
11 |
+
|
12 |
+
export PYTHONPATH="$BUNDLE"
|
13 |
+
|
14 |
+
python -m monai.bundle run \
|
15 |
+
--meta_file "$BUNDLE/configs/metadata.json" \
|
16 |
+
--config_file "$BUNDLE/configs/test.yaml" \
|
17 |
+
--bundle_root "$BUNDLE" \
|
18 |
+
$@
|
docs/train.sh
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#! /bin/bash
|
2 |
+
|
3 |
+
eval "$(conda shell.bash hook)"
|
4 |
+
conda activate monai
|
5 |
+
|
6 |
+
homedir="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
7 |
+
|
8 |
+
BUNDLE="$(cd "$homedir/.." && pwd)"
|
9 |
+
|
10 |
+
echo "Bundle root: $BUNDLE"
|
11 |
+
|
12 |
+
export PYTHONPATH="$BUNDLE"
|
13 |
+
|
14 |
+
python -m monai.bundle run \
|
15 |
+
--meta_file "$BUNDLE/configs/metadata.json" \
|
16 |
+
--config_file "$BUNDLE/configs/train.yaml" \
|
17 |
+
--bundle_root "$BUNDLE" \
|
18 |
+
$@
|
docs/train_multigpu.sh
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#! /bin/bash
|
2 |
+
|
3 |
+
set -v
|
4 |
+
|
5 |
+
eval "$(conda shell.bash hook)"
|
6 |
+
conda activate monai
|
7 |
+
|
8 |
+
homedir="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
9 |
+
|
10 |
+
BUNDLE="$(cd "$homedir/.." && pwd)"
|
11 |
+
|
12 |
+
echo "Bundle root: $BUNDLE"
|
13 |
+
|
14 |
+
export PYTHONPATH="$BUNDLE"
|
15 |
+
|
16 |
+
# set this to something else to use different numbered GPUs on your system
|
17 |
+
export CUDA_VISIBLE_DEVICES="0,1"
|
18 |
+
|
19 |
+
# seems to resolve some multiprocessing issues with certain libraries
|
20 |
+
export OMP_NUM_THREADS=1
|
21 |
+
|
22 |
+
CKPT=none
|
23 |
+
|
24 |
+
# need to change this if you have multiple nodes or not 2 GPUs
|
25 |
+
PYTHON="torchrun --standalone --nnodes=1 --nproc_per_node=2"
|
26 |
+
|
27 |
+
CONFIG="['$BUNDLE/configs/train.yaml','$BUNDLE/configs/multi_gpu_train.yaml']"
|
28 |
+
|
29 |
+
$PYTHON -m monai.bundle run \
|
30 |
+
--meta_file $BUNDLE/configs/metadata.json \
|
31 |
+
--logging_file $BUNDLE/configs/logging.conf \
|
32 |
+
--config_file "$CONFIG" \
|
33 |
+
--bundle_root $BUNDLE \
|
34 |
+
$@
|
docs/visualise_inference.ipynb
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"id": "f11e0dff-f19c-4f49-a430-4a5fbf8f42e7",
|
6 |
+
"metadata": {},
|
7 |
+
"source": [
|
8 |
+
"# Visualising Results\n",
|
9 |
+
"\n",
|
10 |
+
"In this notebook we'll run inference with a trained instance of the network and look at the results. This assumes you have trained weights already or have downloaded those for the bundle. Below we run the command line to invoke inference and produce segmentation images in an output directory. This assumes a number of things:\n",
|
11 |
+
"\n",
|
12 |
+
"* The dataset directory `test_data` exists and contains images and their labels.\n",
|
13 |
+
"* We only want to run inference of the images and not the labels so the file pattern is set to match only those.\n",
|
14 |
+
"* The output directory is `output` and will have results in separate subdirectories.\n",
|
15 |
+
"* The checkpoint path is provided to a pre-trained weight file, if this is omitted `$BUNDLE/models/model.py` is used instead."
|
16 |
+
]
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"cell_type": "code",
|
20 |
+
"execution_count": null,
|
21 |
+
"id": "3a5cde0f-1305-4cd2-af5f-2be63809c073",
|
22 |
+
"metadata": {
|
23 |
+
"tags": []
|
24 |
+
},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"%%bash\n",
|
28 |
+
"\n",
|
29 |
+
"# assumes we're running in the docs directory\n",
|
30 |
+
"BUNDLE=\"$(cd .. && pwd)\"\n",
|
31 |
+
"# change this to your checkpoint file or omit to use saved weights that come with the bundle\n",
|
32 |
+
"CKPT=\"$BUNDLE/results/output_231005_205402/model_key_metric=0.9349.pt\"\n",
|
33 |
+
"\n",
|
34 |
+
"python -m monai.bundle run \\\n",
|
35 |
+
" --meta_file \"$BUNDLE/configs/metadata.json\" \\\n",
|
36 |
+
" --config_file \"$BUNDLE/configs/inference.yaml\" \\\n",
|
37 |
+
" --bundle_root \"$BUNDLE\" \\\n",
|
38 |
+
" --dataset_dir \"$BUNDLE/test_data\" \\\n",
|
39 |
+
" --output_dir \"$BUNDLE/output\" \\\n",
|
40 |
+
" --file_pattern 'img*.nii.gz' \\\n",
|
41 |
+
" --ckpt_path \"$CKPT\""
|
42 |
+
]
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"cell_type": "code",
|
46 |
+
"execution_count": 4,
|
47 |
+
"id": "308e8fd2-8fdc-4cb2-9b92-506f8b3b58a7",
|
48 |
+
"metadata": {
|
49 |
+
"tags": []
|
50 |
+
},
|
51 |
+
"outputs": [
|
52 |
+
{
|
53 |
+
"name": "stdout",
|
54 |
+
"output_type": "stream",
|
55 |
+
"text": [
|
56 |
+
"(128, 128, 128) (128, 128, 128) (128, 128, 128)\n"
|
57 |
+
]
|
58 |
+
},
|
59 |
+
{
|
60 |
+
"data": {
|
61 |
+
"text/plain": [
|
62 |
+
"<matplotlib.image.AxesImage at 0x7fb2d02e7130>"
|
63 |
+
]
|
64 |
+
},
|
65 |
+
"execution_count": 4,
|
66 |
+
"metadata": {},
|
67 |
+
"output_type": "execute_result"
|
68 |
+
},
|
69 |
+
{
|
70 |
+
"data": {
|
71 |
+
"image/png": "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",
|
72 |
+
"text/plain": [
|
73 |
+
"<Figure size 1000x1000 with 3 Axes>"
|
74 |
+
]
|
75 |
+
},
|
76 |
+
"metadata": {},
|
77 |
+
"output_type": "display_data"
|
78 |
+
}
|
79 |
+
],
|
80 |
+
"source": [
|
81 |
+
"import matplotlib.pyplot as plt\n",
|
82 |
+
"import numpy as np\n",
|
83 |
+
"import nibabel as nib\n",
|
84 |
+
"\n",
|
85 |
+
"plt.rcParams[\"image.interpolation\"] = \"none\"\n",
|
86 |
+
"\n",
|
87 |
+
"img_orig=nib.load(\"../test_data/img01.nii.gz\").get_fdata()\n",
|
88 |
+
"lbl_orig=nib.load(\"../test_data/lbl01.nii.gz\").get_fdata()\n",
|
89 |
+
"pred=nib.load(\"../output/img01/img01.nii.gz\").get_fdata()\n",
|
90 |
+
"\n",
|
91 |
+
"print(img_orig.shape,lbl_orig.shape, pred.shape)\n",
|
92 |
+
"\n",
|
93 |
+
"_,(ax0,ax1,ax2)=plt.subplots(1,3,figsize=(10,10))\n",
|
94 |
+
"\n",
|
95 |
+
"ax0.imshow(np.average(img_orig, 0), cmap=\"gray\")\n",
|
96 |
+
"ax1.imshow(np.max(lbl_orig, 0), cmap=\"jet\")\n",
|
97 |
+
"ax2.imshow(np.max(pred, 0), cmap=\"jet\")"
|
98 |
+
]
|
99 |
+
}
|
100 |
+
],
|
101 |
+
"metadata": {
|
102 |
+
"kernelspec": {
|
103 |
+
"display_name": "Python [conda env:monai1]",
|
104 |
+
"language": "python",
|
105 |
+
"name": "conda-env-monai1-py"
|
106 |
+
},
|
107 |
+
"language_info": {
|
108 |
+
"codemirror_mode": {
|
109 |
+
"name": "ipython",
|
110 |
+
"version": 3
|
111 |
+
},
|
112 |
+
"file_extension": ".py",
|
113 |
+
"mimetype": "text/x-python",
|
114 |
+
"name": "python",
|
115 |
+
"nbconvert_exporter": "python",
|
116 |
+
"pygments_lexer": "ipython3",
|
117 |
+
"version": "3.9.18"
|
118 |
+
}
|
119 |
+
},
|
120 |
+
"nbformat": 4,
|
121 |
+
"nbformat_minor": 5
|
122 |
+
}
|
models/model.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c8a904f1ae9f7f1ff2a7936e93ca546dda8e4fce692af53ab808652a390fbd21
|
3 |
+
size 1218370
|