{ "imports": [ "$import glob", "$import os", "$import scripts", "$import ignite", "$import copy" ], "bundle_root": ".", "ckpt_dir": "$@bundle_root + '/models'", "output_dir": "$@bundle_root + '/eval'", "data_list_file_path": "$@bundle_root + '/configs/msd_task09_spleen_folds.json'", "dataset_dir": "/data/Task09_Spleen", "use_tensorboard": true, "finetune": false, "finetune_model_path": "$@bundle_root + '/models/model.pt'", "early_stop": false, "use_mlflow": true, "mlflow_dir": "$@bundle_root + '/mlruns'", "fold": 0, "device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')", "epochs": 5, "val_interval": 1, "val_at_start": false, "sw_overlap": 0.625, "learning_rate": 0.0001, "num_patches_per_image": 1, "input_channels": 1, "output_classes": 2, "max_point": 5, "max_prompt": null, "max_backprompt": null, "max_foreprompt": null, "drop_label_prob": 0.25, "drop_point_prob": 0.25, "exclude_background": true, "label_set": null, "val_label_set": "@label_set", "amp": true, "train_datalist": "$monai.auto3dseg.utils.datafold_read(datalist=@data_list_file_path, basedir=@dataset_dir, fold=@fold)[0]", "val_datalist": "$monai.auto3dseg.utils.datafold_read(datalist=@data_list_file_path, basedir=@dataset_dir, fold=@fold)[1]", "patch_size": [ 128, 128, 128 ], "patch_size_valid": "$@patch_size", "network_def": "$monai.networks.nets.vista3d132(in_channels=@input_channels)", "network": "$@network_def.to(@device)", "loss": { "_target_": "DiceCELoss", "include_background": true, "sigmoid": true, "smooth_dr": 1e-05, "smooth_nr": 0, "squared_pred": true, "to_onehot_y": false }, "optimizer": { "_target_": "torch.optim.AdamW", "params": "$@network.parameters()", "lr": "@learning_rate", "weight_decay": 1e-05 }, "lr_schedule": { "activate": true, "lr_scheduler": { "_target_": "monai.optimizers.WarmupCosineSchedule", "optimizer": "@optimizer", "t_total": "$@epochs", "warmup_steps": 3, "warmup_multiplier": 0.1 } }, "resample_to_spacing": [ 1.5, 1.5, 1.5 ], "train": { "deterministic_transforms": [ { "_target_": "LoadImaged", "keys": [ "image", "label" ], "image_only": true, "ensure_channel_first": true }, { "_target_": "CropForegroundd", "keys": [ "image", "label" ], "source_key": "image", "margin": 10, "allow_smaller": true, "start_coord_key": null, "end_coord_key": null }, { "_target_": "ScaleIntensityRanged", "keys": "image", "a_min": -963.8247715525971, "a_max": 1053.678477684517, "b_min": 0.0, "b_max": 1.0, "clip": true }, { "_target_": "Orientationd", "keys": [ "image", "label" ], "axcodes": "RAS" }, { "_target_": "Spacingd", "keys": [ "image", "label" ], "pixdim": "$@resample_to_spacing", "mode": [ "bilinear", "nearest" ] }, { "_target_": "CastToTyped", "keys": [ "image", "label" ], "dtype": [ "$torch.float32", "$torch.uint8" ] }, { "_target_": "EnsureTyped", "keys": [ "image", "label" ], "track_meta": true }, { "_target_": "SpatialPadd", "keys": [ "image", "label" ], "spatial_size": "@patch_size", "mode": [ "constant", "constant" ] } ], "random_transforms": [ { "_target_": "RandCropByLabelClassesd", "keys": [ "image", "label" ], "label_key": "label", "num_classes": "@output_classes", "spatial_size": "@patch_size", "num_samples": "@num_patches_per_image", "warn": false }, { "_target_": "ResizeWithPadOrCropd", "keys": [ "image", "label" ], "spatial_size": "@patch_size" }, { "_target_": "RandScaleIntensityd", "keys": "image", "prob": 0.1, "factors": 0.1 }, { "_target_": "RandShiftIntensityd", "keys": "image", "prob": 0.1, "offsets": 0.1 } ], "inferer": { "_target_": "SimpleInferer" }, "preprocessing": { "_target_": "Compose", "transforms": "$@train#deterministic_transforms + @train#random_transforms" }, "dataset": { "_target_": "Dataset", "data": "@train_datalist", "transform": "@train#preprocessing" }, "dataloader": { "_target_": "DataLoader", "dataset": "@train#dataset", "batch_size": 1, "shuffle": true, "num_workers": 4, "pin_memory": true, "persistent_workers": true }, "handlers": [ { "_target_": "CheckpointLoader", "_disabled_": "$not @finetune", "load_path": "@finetune_model_path", "load_dict": { "model": "@network" } }, { "_target_": "LrScheduleHandler", "_disabled_": "$not @lr_schedule#activate", "lr_scheduler": "@lr_schedule#lr_scheduler", "print_lr": true }, { "_target_": "ValidationHandler", "validator": "@validate#evaluator", "epoch_level": true, "exec_at_start": "@val_at_start", "interval": "@val_interval" }, { "_target_": "TensorBoardStatsHandler", "_disabled_": "$not @use_tensorboard", "log_dir": "@output_dir", "tag_name": "train_loss", "output_transform": "$monai.handlers.from_engine(['loss'], first=True)" }, { "_target_": "StatsHandler", "tag_name": "train_loss", "name": "StatsHandler", "output_transform": "$monai.handlers.from_engine(['loss'], first=True)" }, { "_target_": "MLFlowHandler", "_disabled_": "$not @use_mlflow", "tracking_uri": "$os.path.abspath(@mlflow_dir)", "output_transform": "$monai.handlers.from_engine(['loss'], first=True)" } ], "key_metric": { "train_accuracy": { "_target_": "ignite.metrics.Accuracy", "output_transform": "$monai.handlers.from_engine(['pred', 'label'])" } }, "trainer": { "_target_": "scripts.trainer.Vista3dTrainer", "max_epochs": "@epochs", "device": "@device", "train_data_loader": "@train#dataloader", "network": "@network", "loss_function": "@loss", "optimizer": "@optimizer", "inferer": "@train#inferer", "key_train_metric": null, "train_handlers": "@train#handlers", "amp": "@amp", "hyper_kwargs": { "output_classes": "@output_classes", "max_point": "@max_point", "max_prompt": "@max_prompt", "max_backprompt": "@max_backprompt", "max_foreprompt": "@max_foreprompt", "drop_label_prob": "@drop_label_prob", "drop_point_prob": "@drop_point_prob", "exclude_background": "@exclude_background", "label_set": "@label_set", "patch_size": "@patch_size", "user_prompt": false } } }, "validate": { "preprocessing": { "_target_": "Compose", "transforms": "$@train#deterministic_transforms" }, "postprocessing": { "_target_": "Compose", "transforms": [ { "_target_": "AsDiscreted", "keys": "pred", "threshold": 0.0 } ] }, "dataset": { "_target_": "Dataset", "data": "$@val_datalist", "transform": "@validate#preprocessing" }, "dataloader": { "_target_": "DataLoader", "dataset": "@validate#dataset", "batch_size": 1, "shuffle": false, "num_workers": 4 }, "inferer": { "_target_": "scripts.inferer.Vista3dInferer", "roi_size": "@patch_size_valid", "overlap": "@sw_overlap" }, "handlers": [ { "_target_": "EarlyStopHandler", "_disabled_": "$not @early_stop", "trainer": null, "patience": 2, "score_function": "$scripts.score_function", "min_delta": 0.01 }, { "_target_": "TensorBoardStatsHandler", "_disabled_": "$not @use_tensorboard", "log_dir": "@output_dir", "iteration_log": false }, { "_target_": "StatsHandler", "iteration_log": false, "name": "StatsHandler" }, { "_target_": "CheckpointSaver", "save_dir": "@ckpt_dir", "save_dict": { "model": "@network" }, "save_key_metric": true, "key_metric_filename": "model.pt" }, { "_target_": "MLFlowHandler", "_disabled_": "$not @use_mlflow", "iteration_log": false, "tracking_uri": "$os.path.abspath(@mlflow_dir)" } ], "key_metric": { "val_mean_dice": { "_target_": "MeanDice", "include_background": false, "output_transform": "$monai.handlers.from_engine(['pred', 'label'])", "num_classes": "@output_classes" } }, "additional_metrics": { "val_accuracy": { "_target_": "ignite.metrics.Accuracy", "output_transform": "$monai.handlers.from_engine(['pred', 'label'])" } }, "evaluator": { "_target_": "scripts.evaluator.Vista3dEvaluator", "device": "@device", "val_data_loader": "@validate#dataloader", "network": "@network", "inferer": "@validate#inferer", "postprocessing": "@validate#postprocessing", "key_val_metric": "@validate#key_metric", "additional_metrics": null, "val_handlers": "@validate#handlers", "amp": true, "hyper_kwargs": { "output_classes": "@output_classes", "drop_label_prob": "@drop_label_prob", "drop_point_prob": "@drop_point_prob", "exclude_background": "@exclude_background", "label_set": "@label_set", "val_head": "auto", "user_prompt": false } } }, "initialize": [ "$monai.utils.set_determinism(seed=0)" ], "run": [ "$@validate#handlers#0.set_trainer(trainer=@train#trainer) if @early_stop else None", "$@train#trainer.add_event_handler(ignite.engine.Events.ITERATION_COMPLETED, ignite.handlers.TerminateOnNan())", "$@train#trainer.run()" ] }