| { | |
| "imports": [ | |
| "$import functools", | |
| "$import glob", | |
| "$import scripts" | |
| ], | |
| "bundle_root": ".", | |
| "device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')", | |
| "ckpt_dir": "$@bundle_root + '/models'", | |
| "tf_dir": "$@bundle_root + '/eval'", | |
| "dataset_dir": "/workspace/data/medical", | |
| "pretrained": false, | |
| "perceptual_loss_model_weights_path": null, | |
| "train_batch_size": 2, | |
| "lr": 1e-05, | |
| "train_patch_size": [ | |
| 112, | |
| 128, | |
| 80 | |
| ], | |
| "channel": 0, | |
| "spacing": [ | |
| 1.1, | |
| 1.1, | |
| 1.1 | |
| ], | |
| "spatial_dims": 3, | |
| "image_channels": 1, | |
| "latent_channels": 8, | |
| "discriminator_def": { | |
| "_target_": "generative.networks.nets.PatchDiscriminator", | |
| "spatial_dims": "@spatial_dims", | |
| "num_layers_d": 3, | |
| "num_channels": 32, | |
| "in_channels": 1, | |
| "out_channels": 1, | |
| "norm": "INSTANCE" | |
| }, | |
| "autoencoder_def": { | |
| "_target_": "generative.networks.nets.AutoencoderKL", | |
| "spatial_dims": "@spatial_dims", | |
| "in_channels": "@image_channels", | |
| "out_channels": "@image_channels", | |
| "latent_channels": "@latent_channels", | |
| "num_channels": [ | |
| 64, | |
| 128, | |
| 256 | |
| ], | |
| "num_res_blocks": 2, | |
| "norm_num_groups": 32, | |
| "norm_eps": 1e-06, | |
| "attention_levels": [ | |
| false, | |
| false, | |
| false | |
| ], | |
| "with_encoder_nonlocal_attn": false, | |
| "with_decoder_nonlocal_attn": false | |
| }, | |
| "perceptual_loss_def": { | |
| "_target_": "generative.losses.PerceptualLoss", | |
| "spatial_dims": "@spatial_dims", | |
| "network_type": "resnet50", | |
| "is_fake_3d": true, | |
| "fake_3d_ratio": 0.2, | |
| "pretrained": "@pretrained", | |
| "pretrained_path": "@perceptual_loss_model_weights_path", | |
| "pretrained_state_dict_key": "state_dict" | |
| }, | |
| "dnetwork": "$@discriminator_def.to(@device)", | |
| "gnetwork": "$@autoencoder_def.to(@device)", | |
| "loss_perceptual": "$@perceptual_loss_def.to(@device)", | |
| "doptimizer": { | |
| "_target_": "torch.optim.Adam", | |
| "params": "[email protected]()", | |
| "lr": "@lr" | |
| }, | |
| "goptimizer": { | |
| "_target_": "torch.optim.Adam", | |
| "params": "[email protected]()", | |
| "lr": "@lr" | |
| }, | |
| "preprocessing_transforms": [ | |
| { | |
| "_target_": "LoadImaged", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "EnsureChannelFirstd", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "Lambdad", | |
| "keys": "image", | |
| "func": "$lambda x: x[@channel, :, :, :]" | |
| }, | |
| { | |
| "_target_": "AddChanneld", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "EnsureTyped", | |
| "keys": "image" | |
| }, | |
| { | |
| "_target_": "Orientationd", | |
| "keys": "image", | |
| "axcodes": "RAS" | |
| }, | |
| { | |
| "_target_": "Spacingd", | |
| "keys": "image", | |
| "pixdim": "@spacing", | |
| "mode": "bilinear" | |
| } | |
| ], | |
| "final_transforms": [ | |
| { | |
| "_target_": "ScaleIntensityRangePercentilesd", | |
| "keys": "image", | |
| "lower": 0, | |
| "upper": 99.5, | |
| "b_min": 0, | |
| "b_max": 1 | |
| } | |
| ], | |
| "train": { | |
| "crop_transforms": [ | |
| { | |
| "_target_": "RandSpatialCropd", | |
| "keys": "image", | |
| "roi_size": "@train_patch_size", | |
| "random_size": false | |
| } | |
| ], | |
| "preprocessing": { | |
| "_target_": "Compose", | |
| "transforms": "$@preprocessing_transforms + @train#crop_transforms + @final_transforms" | |
| }, | |
| "dataset": { | |
| "_target_": "monai.apps.DecathlonDataset", | |
| "root_dir": "@dataset_dir", | |
| "task": "Task01_BrainTumour", | |
| "section": "training", | |
| "cache_rate": 1.0, | |
| "num_workers": 8, | |
| "download": false, | |
| "transform": "@train#preprocessing" | |
| }, | |
| "dataloader": { | |
| "_target_": "DataLoader", | |
| "dataset": "@train#dataset", | |
| "batch_size": "@train_batch_size", | |
| "shuffle": true, | |
| "num_workers": 0 | |
| }, | |
| "handlers": [ | |
| { | |
| "_target_": "CheckpointSaver", | |
| "save_dir": "@ckpt_dir", | |
| "save_dict": { | |
| "model": "@gnetwork" | |
| }, | |
| "save_interval": 0, | |
| "save_final": true, | |
| "epoch_level": true, | |
| "final_filename": "model_autoencoder.pt" | |
| }, | |
| { | |
| "_target_": "StatsHandler", | |
| "tag_name": "train_loss", | |
| "output_transform": "$lambda x: monai.handlers.from_engine(['g_loss'], first=True)(x)[0]" | |
| }, | |
| { | |
| "_target_": "TensorBoardStatsHandler", | |
| "log_dir": "@tf_dir", | |
| "tag_name": "train_loss", | |
| "output_transform": "$lambda x: monai.handlers.from_engine(['g_loss'], first=True)(x)[0]" | |
| } | |
| ], | |
| "trainer": { | |
| "_target_": "scripts.ldm_trainer.VaeGanTrainer", | |
| "device": "@device", | |
| "max_epochs": 1500, | |
| "train_data_loader": "@train#dataloader", | |
| "g_network": "@gnetwork", | |
| "g_optimizer": "@goptimizer", | |
| "g_loss_function": "$functools.partial(scripts.losses.generator_loss, disc_net=@dnetwork, loss_perceptual=@loss_perceptual)", | |
| "d_network": "@dnetwork", | |
| "d_optimizer": "@doptimizer", | |
| "d_loss_function": "$functools.partial(scripts.losses.discriminator_loss, disc_net=@dnetwork)", | |
| "d_train_steps": 5, | |
| "g_update_latents": true, | |
| "latent_shape": "@latent_channels", | |
| "key_train_metric": "$None", | |
| "train_handlers": "@train#handlers" | |
| } | |
| }, | |
| "initialize": [ | |
| "$monai.utils.set_determinism(seed=0)" | |
| ], | |
| "run": [ | |
| "$@train#trainer.run()" | |
| ] | |
| } | |

