Skip to content

Commit 0ded5a4

Browse files
authored
Merge pull request #27 from Project-MONAI/swin_unetr_btcv
add swin_unetr bundle
2 parents dfb14bd + 8c5ca0d commit 0ded5a4

File tree

10 files changed

+790
-0
lines changed

10 files changed

+790
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"validate#postprocessing": {
3+
"_target_": "Compose",
4+
"transforms": [
5+
{
6+
"_target_": "Activationsd",
7+
"keys": "pred",
8+
"softmax": true
9+
},
10+
{
11+
"_target_": "Invertd",
12+
"keys": [
13+
"pred",
14+
"label"
15+
],
16+
"transform": "@validate#preprocessing",
17+
"orig_keys": "image",
18+
"meta_key_postfix": "meta_dict",
19+
"nearest_interp": [
20+
false,
21+
true
22+
],
23+
"to_tensor": true
24+
},
25+
{
26+
"_target_": "AsDiscreted",
27+
"keys": [
28+
"pred",
29+
"label"
30+
],
31+
"argmax": [
32+
true,
33+
false
34+
],
35+
"to_onehot": 14
36+
},
37+
{
38+
"_target_": "SaveImaged",
39+
"keys": "pred",
40+
"meta_keys": "pred_meta_dict",
41+
"output_dir": "@output_dir",
42+
"resample": false,
43+
"squeeze_end_dims": true
44+
}
45+
]
46+
},
47+
"validate#handlers": [
48+
{
49+
"_target_": "CheckpointLoader",
50+
"load_path": "$@ckpt_dir + '/model.pt'",
51+
"load_dict": {
52+
"model": "@network"
53+
}
54+
},
55+
{
56+
"_target_": "StatsHandler",
57+
"iteration_log": false
58+
},
59+
{
60+
"_target_": "MetricsSaver",
61+
"save_dir": "@output_dir",
62+
"metrics": [
63+
"val_mean_dice",
64+
"val_acc"
65+
],
66+
"metric_details": [
67+
"val_mean_dice"
68+
],
69+
"batch_transform": "$monai.handlers.from_engine(['image_meta_dict'])",
70+
"summary_ops": "*"
71+
}
72+
],
73+
"evaluating": [
74+
"$setattr(torch.backends.cudnn, 'benchmark', True)",
75+
"$@validate#evaluator.run()"
76+
]
77+
}
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
{
2+
"imports": [
3+
"$import glob",
4+
"$import os"
5+
],
6+
"bundle_root": "/workspace/MONAI_Bundle/swin_unetr_btcv_segmentation/",
7+
"output_dir": "$@bundle_root + '/eval'",
8+
"dataset_dir": "/dataset/dataset0",
9+
"datalist": "$list(sorted(glob.glob(@dataset_dir + '/imagesTs/*.nii.gz')))",
10+
"device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')",
11+
"network_def": {
12+
"_target_": "SwinUNETR",
13+
"spatial_dims": 3,
14+
"img_size": 96,
15+
"in_channels": 1,
16+
"out_channels": 14,
17+
"feature_size": 48,
18+
"use_checkpoint": true
19+
},
20+
"network": "$@network_def.to(@device)",
21+
"preprocessing": {
22+
"_target_": "Compose",
23+
"transforms": [
24+
{
25+
"_target_": "LoadImaged",
26+
"keys": "image"
27+
},
28+
{
29+
"_target_": "EnsureChannelFirstd",
30+
"keys": "image"
31+
},
32+
{
33+
"_target_": "Orientationd",
34+
"keys": "image",
35+
"axcodes": "RAS"
36+
},
37+
{
38+
"_target_": "Spacingd",
39+
"keys": "image",
40+
"pixdim": [
41+
1.5,
42+
1.5,
43+
2.0
44+
],
45+
"mode": "bilinear"
46+
},
47+
{
48+
"_target_": "ScaleIntensityRanged",
49+
"keys": "image",
50+
"a_min": -175,
51+
"a_max": 250,
52+
"b_min": 0.0,
53+
"b_max": 1.0,
54+
"clip": true
55+
},
56+
{
57+
"_target_": "EnsureTyped",
58+
"keys": "image"
59+
}
60+
]
61+
},
62+
"dataset": {
63+
"_target_": "Dataset",
64+
"data": "$[{'image': i} for i in @datalist]",
65+
"transform": "@preprocessing"
66+
},
67+
"dataloader": {
68+
"_target_": "DataLoader",
69+
"dataset": "@dataset",
70+
"batch_size": 1,
71+
"shuffle": false,
72+
"num_workers": 4
73+
},
74+
"inferer": {
75+
"_target_": "SlidingWindowInferer",
76+
"roi_size": [
77+
96,
78+
96,
79+
96
80+
],
81+
"sw_batch_size": 4,
82+
"overlap": 0.5
83+
},
84+
"postprocessing": {
85+
"_target_": "Compose",
86+
"transforms": [
87+
{
88+
"_target_": "Activationsd",
89+
"keys": "pred",
90+
"softmax": true
91+
},
92+
{
93+
"_target_": "Invertd",
94+
"keys": "pred",
95+
"transform": "@preprocessing",
96+
"orig_keys": "image",
97+
"meta_key_postfix": "meta_dict",
98+
"nearest_interp": false,
99+
"to_tensor": true
100+
},
101+
{
102+
"_target_": "AsDiscreted",
103+
"keys": "pred",
104+
"argmax": true
105+
},
106+
{
107+
"_target_": "SaveImaged",
108+
"keys": "pred",
109+
"meta_keys": "pred_meta_dict",
110+
"output_dir": "@output_dir"
111+
}
112+
]
113+
},
114+
"handlers": [
115+
{
116+
"_target_": "CheckpointLoader",
117+
"load_path": "$@bundle_root + '/models/model.pt'",
118+
"load_dict": {
119+
"model": "@network"
120+
}
121+
},
122+
{
123+
"_target_": "StatsHandler",
124+
"iteration_log": false
125+
}
126+
],
127+
"evaluator": {
128+
"_target_": "SupervisedEvaluator",
129+
"device": "@device",
130+
"val_data_loader": "@dataloader",
131+
"network": "@network",
132+
"inferer": "@inferer",
133+
"postprocessing": "@postprocessing",
134+
"val_handlers": "@handlers",
135+
"amp": true
136+
},
137+
"evaluating": [
138+
"$setattr(torch.backends.cudnn, 'benchmark', True)",
139+
140+
]
141+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
{
2+
"schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json",
3+
"version": "0.1.0",
4+
"changelog": {
5+
"0.1.0": "complete the model package",
6+
"0.0.1": "initialize the model package structure"
7+
},
8+
"monai_version": "0.9.0rc1+19.g61a0dc35",
9+
"pytorch_version": "1.10.0",
10+
"numpy_version": "1.21.2",
11+
"optional_packages_version": {
12+
"nibabel": "3.2.1"
13+
},
14+
"task": "BTCV multi-organ segmentation",
15+
"description": "A pre-trained model for volumetric (3D) multi-organ segmentation from CT image",
16+
"authors": "MONAI team",
17+
"copyright": "Copyright (c) MONAI Consortium",
18+
"data_source": "RawData.zip from https://www.synapse.org/#!Synapse:syn3193805/wiki/217752/",
19+
"data_type": "nibabel",
20+
"image_classes": "single channel data, intensity scaled to [0, 1]",
21+
"label_classes": "multi-channel data,0:background,1:spleen, 2:Right Kidney, 3:Left Kideny, 4:Gallbladder, 5:Esophagus, 6:Liver, 7:Stomach, 8:Aorta, 9:IVC, 10:Portal and Splenic Veins, 11:Pancreas, 12:Right adrenal gland, 13:Left adrenal gland",
22+
"pred_classes": "14 channels OneHot data, 0:background,1:spleen, 2:Right Kidney, 3:Left Kideny, 4:Gallbladder, 5:Esophagus, 6:Liver, 7:Stomach, 8:Aorta, 9:IVC, 10:Portal and Splenic Veins, 11:Pancreas, 12:Right adrenal gland, 13:Left adrenal gland",
23+
"eval_metrics": {
24+
"mean_dice": 0.8283
25+
},
26+
"intended_use": "This is an example, not to be used for diagnostic purposes",
27+
"references": [
28+
"Hatamizadeh, Ali, et al. 'Swin UNETR: Swin Transformers for Semantic Segmentation of Brain Tumors in MRI Images. arXiv preprint arXiv:2201.01266 (2022). https://arxiv.org/abs/2201.01266.",
29+
"Tang, Yucheng, et al. 'Self-supervised pre-training of swin transformers for 3d medical image analysis. arXiv preprint arXiv:2111.14791 (2021). https://arxiv.org/abs/2111.14791."
30+
],
31+
"network_data_format": {
32+
"inputs": {
33+
"image": {
34+
"type": "image",
35+
"format": "hounsfield",
36+
"modality": "CT",
37+
"num_channels": 1,
38+
"spatial_shape": [
39+
96,
40+
96,
41+
96
42+
],
43+
"dtype": "float32",
44+
"value_range": [
45+
0,
46+
1
47+
],
48+
"is_patch_data": true,
49+
"channel_def": {
50+
"0": "image"
51+
}
52+
}
53+
},
54+
"outputs": {
55+
"pred": {
56+
"type": "image",
57+
"format": "segmentation",
58+
"num_channels": 14,
59+
"spatial_shape": [
60+
96,
61+
96,
62+
96
63+
],
64+
"dtype": "float32",
65+
"value_range": [
66+
0,
67+
1
68+
],
69+
"is_patch_data": true,
70+
"channel_def": {
71+
"0": "background",
72+
"1": "spleen",
73+
"2": "Right Kidney",
74+
"3": "Left Kideny",
75+
"4": "Gallbladder",
76+
"5": "Esophagus",
77+
"6": "Liver",
78+
"7": "Stomach",
79+
"8": "Aorta",
80+
"9": "IVC",
81+
"10": "Portal and Splenic Veins",
82+
"11": "Pancreas",
83+
"12": "Right adrenal gland",
84+
"13": "Left adrenal gland"
85+
}
86+
}
87+
}
88+
}
89+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"device": "$torch.device(f'cuda:{dist.get_rank()}')",
3+
"network": {
4+
"_target_": "torch.nn.parallel.DistributedDataParallel",
5+
"module": "$@network_def.to(@device)",
6+
"device_ids": [
7+
"@device"
8+
]
9+
},
10+
"train#sampler": {
11+
"_target_": "DistributedSampler",
12+
"dataset": "@train#dataset",
13+
"even_divisible": true,
14+
"shuffle": true
15+
},
16+
"train#dataloader#sampler": "@train#sampler",
17+
"train#dataloader#shuffle": false,
18+
"train#trainer#train_handlers": "$@train#handlers[: -2 if dist.get_rank() > 0 else None]",
19+
"validate#sampler": {
20+
"_target_": "DistributedSampler",
21+
"dataset": "@validate#dataset",
22+
"even_divisible": false,
23+
"shuffle": false
24+
},
25+
"validate#dataloader#sampler": "@validate#sampler",
26+
"validate#evaluator#val_handlers": "$None if dist.get_rank() > 0 else @validate#handlers",
27+
"training": [
28+
"$import torch.distributed as dist",
29+
"$dist.init_process_group(backend='nccl')",
30+
"$torch.cuda.set_device(@device)",
31+
"$monai.utils.set_determinism(seed=123)",
32+
"$setattr(torch.backends.cudnn, 'benchmark', True)",
33+
"$@train#trainer.run()",
34+
"$dist.destroy_process_group()"
35+
]
36+
}

0 commit comments

Comments
 (0)