| { | |
| "imports": [ | |
| "$from functools import partial", | |
| "$import numpy as np", | |
| "$import torch", | |
| "$from ignite.engine import Events" | |
| ], | |
| "bundle_root": ".", | |
| "val_interval": 1, | |
| "device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')", | |
| "ckpt_path": "$@bundle_root + '/models/model.pt'", | |
| "dataset_dir": ".", | |
| "dataset_file": "$@dataset_dir + '/allimages3label.npz'", | |
| "network_def": { | |
| "_target_": "UNet", | |
| "spatial_dims": 2, | |
| "in_channels": 1, | |
| "out_channels": 4, | |
| "channels": [ | |
| 16, | |
| 32, | |
| 64, | |
| 128, | |
| 256 | |
| ], | |
| "strides": [ | |
| 2, | |
| 2, | |
| 2, | |
| 2 | |
| ], | |
| "num_res_units": 2 | |
| }, | |
| "network": "$@network_def.to(@device)", | |
| "npz": { | |
| "_target_": "NPZDictItemDataset", | |
| "npzfile": "$@dataset_file", | |
| "keys": { | |
| "images": "image", | |
| "segs": "label" | |
| } | |
| }, | |
| "partitions": "$monai.data.partition_dataset(np.arange(len(@npz)),(8,2), shuffle=True)", | |
| "train_sub": "$torch.utils.data.Subset(@npz,@partitions[0])", | |
| "eval_sub": "$torch.utils.data.Subset(@npz,@partitions[1])", | |
| "im_shape": "$@train_sub[0]['image'].shape", | |
| "both_keys": [ | |
| "image", | |
| "label" | |
| ], | |
| "rand_prob": 0.5, | |
| "train_transforms": { | |
| "_target_": "Compose", | |
| "transforms": [ | |
| { | |
| "_target_": "CastToTyped", | |
| "keys": "@both_keys", | |
| "dtype": "$(np.float32, np.int32)" | |
| }, | |
| { | |
| "_target_": "ScaleIntensityd", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "EnsureChannelFirstd", | |
| "keys": "@both_keys", | |
| "channel_dim": "no_channel" | |
| }, | |
| { | |
| "_target_": "RandAxisFlipd", | |
| "keys": "@both_keys", | |
| "prob": "@rand_prob" | |
| }, | |
| { | |
| "_target_": "RandRotate90d", | |
| "keys": "@both_keys", | |
| "prob": "@rand_prob" | |
| }, | |
| { | |
| "_target_": "RandSmoothDeformd", | |
| "keys": "@both_keys", | |
| "prob": "@rand_prob", | |
| "spatial_size": "@im_shape", | |
| "rand_size": [ | |
| 3, | |
| 3 | |
| ], | |
| "pad": 2, | |
| "def_range": 0.1, | |
| "field_mode": "$monai.utils.InterpolateMode.BICUBIC", | |
| "grid_mode": "$(monai.utils.GridSampleMode.BICUBIC, monai.utils.GridSampleMode.NEAREST)", | |
| "align_corners": true | |
| }, | |
| { | |
| "_target_": "RandAffined", | |
| "keys": "@both_keys", | |
| "prob": "@rand_prob", | |
| "rotate_range": 0.5, | |
| "translate_range": 50, | |
| "scale_range": 0.25, | |
| "padding_mode": "$monai.utils.GridSamplePadMode.ZEROS", | |
| "mode": "$(monai.utils.GridSampleMode.BILINEAR,monai.utils.GridSampleMode.NEAREST)" | |
| }, | |
| { | |
| "_target_": "RandSmoothFieldAdjustContrastd", | |
| "keys": "image", | |
| "prob": "@rand_prob", | |
| "spatial_size": "@im_shape", | |
| "rand_size": [ | |
| 8, | |
| 8 | |
| ], | |
| "gamma": [ | |
| 0.25, | |
| 3 | |
| ], | |
| "mode": "$monai.utils.InterpolateMode.BICUBIC", | |
| "align_corners": true | |
| }, | |
| { | |
| "_target_": "RandSmoothFieldAdjustIntensityd", | |
| "keys": "image", | |
| "prob": "@rand_prob", | |
| "spatial_size": "@im_shape", | |
| "rand_size": [ | |
| 5, | |
| 5 | |
| ], | |
| "gamma": [ | |
| 0.1, | |
| 1 | |
| ], | |
| "mode": "$monai.utils.InterpolateMode.BICUBIC", | |
| "align_corners": true | |
| }, | |
| { | |
| "_target_": "RandGaussianNoised", | |
| "keys": "image", | |
| "prob": "@rand_prob", | |
| "std": 0.05 | |
| }, | |
| { | |
| "_target_": "ScaleIntensityd", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "CastToTyped", | |
| "keys": "@both_keys", | |
| "dtype": "$(np.float32, np.int32)" | |
| }, | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "@both_keys" | |
| } | |
| ] | |
| }, | |
| "eval_transforms": { | |
| "_target_": "Compose", | |
| "transforms": [ | |
| { | |
| "_target_": "CastToTyped", | |
| "keys": "@both_keys", | |
| "dtype": "$(np.float32, np.int32)" | |
| }, | |
| { | |
| "_target_": "ScaleIntensityd", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "EnsureChannelFirstd", | |
| "keys": "@both_keys", | |
| "channel_dim": "no_channel" | |
| }, | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "@both_keys" | |
| } | |
| ] | |
| }, | |
| "train_dataset": { | |
| "_target_": "CacheDataset", | |
| "data": "@train_sub", | |
| "transform": "@train_transforms" | |
| }, | |
| "eval_dataset": { | |
| "_target_": "CacheDataset", | |
| "data": "@eval_sub", | |
| "transform": "@eval_transforms" | |
| }, | |
| "train_no_aug_dataset": { | |
| "_target_": "CacheDataset", | |
| "data": "@train_sub", | |
| "transform": "@eval_transforms" | |
| }, | |
| "num_iters": 400, | |
| "batch_size": 200, | |
| "num_epochs": 50, | |
| "num_substeps": 5, | |
| "sampler": { | |
| "_target_": "torch.utils.data.WeightedRandomSampler", | |
| "weights": "$torch.ones(len(@train_dataset))", | |
| "replacement": true, | |
| "num_samples": "$@num_iters*@batch_size" | |
| }, | |
| "train_dataloader": { | |
| "_target_": "ThreadDataLoader", | |
| "dataset": "@train_dataset", | |
| "batch_size": "@batch_size", | |
| "repeats": "@num_substeps", | |
| "num_workers": 8, | |
| "sampler": "@sampler" | |
| }, | |
| "eval_dataloader": { | |
| "_target_": "DataLoader", | |
| "dataset": "@eval_dataset", | |
| "batch_size": "@batch_size", | |
| "num_workers": 4 | |
| }, | |
| "lossfn": { | |
| "_target_": "DiceLoss", | |
| "include_background": false, | |
| "to_onehot_y": true, | |
| "softmax": true | |
| }, | |
| "optimizer": { | |
| "_target_": "torch.optim.Adam", | |
| "params": "$@network.parameters()", | |
| "lr": 0.001 | |
| }, | |
| "post_transform": { | |
| "_target_": "Compose", | |
| "transforms": [ | |
| { | |
| "_target_": "Activationsd", | |
| "keys": "pred", | |
| "softmax": true | |
| }, | |
| { | |
| "_target_": "AsDiscreted", | |
| "keys": [ | |
| "pred", | |
| "label" | |
| ], | |
| "argmax": [ | |
| true, | |
| false | |
| ], | |
| "to_onehot": 4 | |
| } | |
| ] | |
| }, | |
| "evaluator": { | |
| "_target_": "SupervisedEvaluator", | |
| "device": "@device", | |
| "val_data_loader": "@eval_dataloader", | |
| "network": "@network", | |
| "postprocessing": "@post_transform", | |
| "key_val_metric": { | |
| "val_mean_dice": { | |
| "_target_": "MeanDice", | |
| "include_background": false, | |
| "output_transform": "$monai.handlers.from_engine(['pred', 'label'])" | |
| } | |
| }, | |
| "val_handlers": [ | |
| { | |
| "_target_": "StatsHandler", | |
| "output_transform": "$lambda x: None" | |
| } | |
| ] | |
| }, | |
| "handlers": [ | |
| { | |
| "_target_": "ValidationHandler", | |
| "validator": "@evaluator", | |
| "epoch_level": true, | |
| "interval": "@val_interval" | |
| }, | |
| { | |
| "_target_": "CheckpointSaver", | |
| "save_dir": "$@bundle_root + '/models'", | |
| "save_dict": { | |
| "model": "@network" | |
| }, | |
| "save_interval": 1, | |
| "save_final": true, | |
| "epoch_level": true | |
| }, | |
| { | |
| "_target_": "StatsHandler", | |
| "tag_name": "train_loss", | |
| "output_transform": "$monai.handlers.from_engine(['loss'], first=True)" | |
| } | |
| ], | |
| "trainer": { | |
| "_target_": "SupervisedTrainer", | |
| "max_epochs": "@num_epochs", | |
| "device": "@device", | |
| "train_data_loader": "@train_dataloader", | |
| "network": "@network", | |
| "loss_function": "@lossfn", | |
| "optimizer": "@optimizer", | |
| "postprocessing": "@post_transform", | |
| "key_train_metric": null, | |
| "train_handlers": "@handlers" | |
| }, | |
| "training": [ | |
| "$@trainer.run()" | |
| ] | |
| } | |