| { | |
| "imports": [ | |
| "$import datetime", | |
| "$import numpy", | |
| "$import torch", | |
| "$import ignite", | |
| "$import scripts" | |
| ], | |
| "bundle_root": ".", | |
| "ckpt_path": "$@bundle_root + '/models/model.pt'", | |
| "device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')", | |
| "val_interval": 1, | |
| "num_iters": 400, | |
| "batch_size": 600, | |
| "num_epochs": 100, | |
| "num_substeps": 3, | |
| "learning_rate": 0.0001, | |
| "num_workers": 8, | |
| "dataset_dir": ".", | |
| "dataset_file": "$@dataset_dir + '/valvelandmarks.npz'", | |
| "output_dir": "$datetime.datetime.now().strftime('./results/output_%y%m%d_%H%M%S')", | |
| "network_def": { | |
| "_target_": "scripts.valve_landmarks.PointRegressor", | |
| "in_shape": [ | |
| 1, | |
| 256, | |
| 256 | |
| ], | |
| "out_shape": [ | |
| 2, | |
| 10 | |
| ], | |
| "channels": [ | |
| 8, | |
| 16, | |
| 32, | |
| 64, | |
| 128 | |
| ], | |
| "strides": [ | |
| 2, | |
| 2, | |
| 2, | |
| 2, | |
| 2 | |
| ] | |
| }, | |
| "network": "$@network_def.to(@device)", | |
| "im_shape": [ | |
| 1, | |
| 256, | |
| 256 | |
| ], | |
| "both_keys": [ | |
| "image", | |
| "label" | |
| ], | |
| "rand_prob": 0.5, | |
| "train_transforms": { | |
| "_target_": "Compose", | |
| "transforms": [ | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "@both_keys", | |
| "data_type": "numpy", | |
| "dtype": "$(numpy.float32, numpy.int32)" | |
| }, | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "@both_keys" | |
| }, | |
| { | |
| "_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_": "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_": "scripts.valve_landmarks.RandFourierDropoutd", | |
| "keys": "image", | |
| "prob": "@rand_prob" | |
| }, | |
| { | |
| "_target_": "scripts.valve_landmarks.RandImageLMDeformd", | |
| "prob": "@rand_prob", | |
| "spatial_size": [ | |
| 256, | |
| 256 | |
| ], | |
| "rand_size": [ | |
| 7, | |
| 7 | |
| ], | |
| "pad": 2, | |
| "field_mode": "$monai.utils.InterpolateMode.BICUBIC", | |
| "align_corners": true, | |
| "def_range": 0.05 | |
| }, | |
| { | |
| "_target_": "scripts.valve_landmarks.RandLMShiftd", | |
| "keys": "@both_keys", | |
| "prob": "@rand_prob", | |
| "spatial_size": [ | |
| 256, | |
| 256 | |
| ], | |
| "max_shift": 8 | |
| }, | |
| { | |
| "_target_": "Lambdad", | |
| "keys": "label", | |
| "func": "$scripts.valve_landmarks.convert_lm_image_t" | |
| } | |
| ] | |
| }, | |
| "eval_transforms": { | |
| "_target_": "Compose", | |
| "transforms": [ | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "@both_keys", | |
| "data_type": "numpy", | |
| "dtype": "$(numpy.float32, numpy.int32)" | |
| }, | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "@both_keys" | |
| }, | |
| { | |
| "_target_": "ScaleIntensityd", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "EnsureChannelFirstd", | |
| "keys": "@both_keys", | |
| "channel_dim": "no_channel" | |
| }, | |
| { | |
| "_target_": "Lambdad", | |
| "keys": "label", | |
| "func": "$scripts.valve_landmarks.convert_lm_image_t" | |
| } | |
| ] | |
| }, | |
| "train_dataset": { | |
| "_target_": "NPZDictItemDataset", | |
| "npzfile": "$@dataset_file", | |
| "keys": { | |
| "trainImgs": "image", | |
| "trainLMImgs": "label" | |
| }, | |
| "transform": "@train_transforms" | |
| }, | |
| "eval_dataset": { | |
| "_target_": "NPZDictItemDataset", | |
| "npzfile": "$@dataset_file", | |
| "keys": { | |
| "testImgs": "image", | |
| "testLMImgs": "label" | |
| }, | |
| "transform": "@eval_transforms" | |
| }, | |
| "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": "@num_workers", | |
| "sampler": "@sampler" | |
| }, | |
| "eval_dataloader": { | |
| "_target_": "DataLoader", | |
| "dataset": "@eval_dataset", | |
| "batch_size": "@batch_size", | |
| "num_workers": "@num_workers" | |
| }, | |
| "lossfn": { | |
| "_target_": "torch.nn.L1Loss" | |
| }, | |
| "optimizer": { | |
| "_target_": "torch.optim.Adam", | |
| "params": "$@network.parameters()", | |
| "lr": "@learning_rate" | |
| }, | |
| "evaluator": { | |
| "_target_": "SupervisedEvaluator", | |
| "device": "@device", | |
| "val_data_loader": "@eval_dataloader", | |
| "network": "@network", | |
| "key_val_metric": { | |
| "val_mean_dist": { | |
| "_target_": "ignite.metrics.MeanPairwiseDistance", | |
| "output_transform": "$scripts.valve_landmarks._output_lm_trans" | |
| } | |
| }, | |
| "metric_cmp_fn": "$lambda current, prev: prev < 0 or current < prev", | |
| "val_handlers": [ | |
| { | |
| "_target_": "StatsHandler", | |
| "output_transform": "$lambda x: None" | |
| } | |
| ] | |
| }, | |
| "handlers": [ | |
| { | |
| "_target_": "ValidationHandler", | |
| "validator": "@evaluator", | |
| "epoch_level": true, | |
| "interval": "@val_interval" | |
| }, | |
| { | |
| "_target_": "CheckpointSaver", | |
| "save_dir": "@output_dir", | |
| "save_dict": { | |
| "net": "@network" | |
| }, | |
| "save_interval": 1, | |
| "save_final": true, | |
| "epoch_level": true | |
| } | |
| ], | |
| "trainer": { | |
| "_target_": "SupervisedTrainer", | |
| "max_epochs": "@num_epochs", | |
| "device": "@device", | |
| "train_data_loader": "@train_dataloader", | |
| "network": "@network", | |
| "loss_function": "@lossfn", | |
| "optimizer": "@optimizer", | |
| "key_train_metric": null, | |
| "train_handlers": "@handlers" | |
| }, | |
| "training": [ | |
| "$@trainer.run()" | |
| ] | |
| } | |