diff --git a/README.md b/README.md index fb2214df..3434d6e8 100644 --- a/README.md +++ b/README.md @@ -84,30 +84,30 @@ Re-run the analysis: [Launch processing](#launch-processing) ## Training -### create_training_joblib.py -The function creates a joblib that allocates data from the testing set of the SCT model to the testing set of the ivadomed model. The output (new_splits.joblib) needs to be assigned on the config.json in the field "split_dataset": {"fname_split": new_splits.joblib"}. -Multiple datasets (BIDS folders) can be used as input for the creation of the joblib. The same list should be assigned on the config.json file in the path_data field. - - -### compare_with_sct_model.py -The comparison is being done by running `sct_deepseg_sc` on every subject/contrast that was used in the testing set on ivadomed. - -One thing to note, is that the SCT scores have been marked after the usage of the function `sct_get_centerline` and cropping around this prior. -In order to make a fair comparison, the ivadomed model needs to be tested on a testing set that has the centerline precomputed. - -The function `compare_with_sct_model.py` prepares the dataset for this comparison by using `sct_get_centerline` on the images and using this prior on the TESTING set. +### config_generator.py +The script helps create joblibs that are going to represent splits of our dataset. It will create a joblibs folder containing the data split for each sub-experiment (i.e. hard_hard, soft_soft ...). The way we leverage the aforementioned python script is by running the bash script utils/create_joblibs.sh that will execute the following command for each sub-experiment: +``` +python config_generator.py --config config_templates/hard_hard.json \ + --datasets path/to/data + --ofolder path/to/joblib \ + --contrasts T1w T2w T2star rec-average_dwi \ + --seeds 15 +``` +in which one has to specify the config template for the sub-experiment, the dataset path, the joblibs output folder, the contrasts used for the experiment and the random generation seed(s) respectively. -The output folder will contain as many folders as inputs are given to `compare_with_sct_model.py`, with the suffix SCT. These folders "siumulate" output folders from ivadomed (they contain evaluation3dmetrics.csv files) in order to use violinpolots visualizations from the script `visualize_and_compare_testing_models.py` +### training_scripts +Once the joblibs describing how the data is split are generated, one can start training the different models within a sub-experiment. Notice that there are 3 folders in training_scripts, 2 of them are related to a specific MTS contrast and the last one is used to train models with the other contrasts. This flaw is due to the incompatibility of ivadomed's dataloader dealing with MTS contrasts properly, at the time of writing. We expect to address this problem in the next months so we can have a single bash script executing all the training experiments smoothly. +For clarity, we go over a few examples about how to use the current training scripts. +1. One wants to train MTS contrast-specific models. Then choose the right MTS contrast acq-MTon_MTS or acq-T1w_MTS and run the associated bash script. +2. One wants to train contrast-specific (without MTS) models AND generalist models (including MTS) then run the bash script in training_scripts/all/training_run.sh. +All training runs are using the ivadomed's framework and logging training metrics in a results folder (optionally with wandb). +### inference.sh +Once the models are trained, one can use the evaluation/inference.sh bash script to segment SC for tests participants and qualitatively analyze the results. Again like in all bash scripts mentioned in this project, one has to change a few parameters to adapt to one's environment (e.g. dataset path ...). -Problems with this approach: -1. _centerline.nii.gz derivatives for the testing set files are created in the database -2. The order that processes need to be done might confuse people a bit: - i. Joblib needs to be created - ii. The ivadomed model needs to be trained - iii. compare_with_sct_model script needs to run - iv. The ivadomed model needs to be tested +### Evaluation on spine-generic-multi-subject (MICCAI 2023) +Once the inference is done for all models and to reproduce the results presented in our paper, one would have to run the compute_evaluation_metrics.py after specifying the experiment folder paths inside that python script. A spine-generic-test-results folder will be created, in which a json file with the DICE and Relative Volume Difference (RVD) metrics for each experiments on the test set. To obtain the aggregated results **per_contrast** and **all_contrast**, run the miccai_results_models.py script. It generates aggregated results by the aforementioned category of models and the associated Latex table used in the paper. ## Compute CSA on prediction masks diff --git a/config/contrast-specific/seg_sc_all.json b/config/contrast-specific/seg_sc_all.json deleted file mode 100644 index 62edfe8d..00000000 --- a/config/contrast-specific/seg_sc_all.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "command": "train", - "gpu_ids": [0], - "path_output": "contrast_specific_seg_sc_all_output", - "model_name": "contrast_specific_seg_sc_all_model", - "debugging": true, - "object_detection_params": { - "object_detection_path": null, - "safety_factor": [1.0, 1.0, 1.0] - }, - "loader_parameters": { - "path_data": ["spine-generic-processed"], - "subject_selection": { - "n": [], - "metadata": [], - "value": [] - }, - "target_suffix": ["_seg-manual"], - "extensions": [".nii.gz"], - "roi_params": { - "suffix": null, - "slice_filter_roi": null - }, - "contrast_params": { - "training_validation": ["T1w", "T2w", "T2star"], - "testing": ["T1w", "T2w", "T2star"], - "balance": {} - }, - "patch_filter_params": { - "filter_empty_mask": true, - "filter_empty_input": true - }, - "slice_axis": "axial", - "multichannel": false, - "soft_gt": false - }, - "split_dataset": { - "fname_split": "super_duper_seg_sc_all_output/split_datasets.joblib", - "random_seed": 42, - "center_test": [], - "method": "per_patient", - "balance": null, - "train_fraction": 0.6, - "test_fraction": 0.2 - }, - "training_parameters": { - "batch_size": 2, - "loss": { - "name": "DiceLoss" - }, - "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, - "early_stopping_epsilon": 0.001 - }, - "scheduler": { - "initial_lr": 1e-3, - "lr_scheduler": { - "name": "CosineAnnealingLR", - "base_lr": 1e-5, - "max_lr": 1e-3 - } - }, - "balance_samples": { - "applied": false, - "type": "gt" - }, - "mixup_alpha": null, - "transfer_learning": { - "retrain_model": null, - "retrain_fraction": 1.0, - "reset": true - } - }, - "default_model": { - "name": "Unet", - "dropout_rate": 0.3, - "bn_momentum": 0.1, - "depth": 4, - "is_2d": false, - "final_activation": "sigmoid" - }, - "Modified3DUNet": { - "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], - "attention": false, - "n_filters": 8 - }, - "uncertainty": { - "epistemic": false, - "aleatoric": false, - "n_it": 0 - }, - "postprocessing": { - "binarize_prediction": {"thr": 0.5} - }, - "evaluation_parameters": {}, - "transformation": { - "Resample": { - "hspace": 1, - "wspace": 1, - "dspace": 1 - }, - "CenterCrop": { - "size": [224, 256, 320] - }, - "RandomAffine": { - "degrees": 10, - "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "ElasticTransform": { - "alpha_range": [25.0, 35.0], - "sigma_range": [3.5, 5.5], - "p": 0.5, - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "RandomGamma": { - "log_gamma_range": [-1.0, 1.0], - "p": 0.5, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBiasField": { - "coefficients": 0.5, - "order": 3, - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBlur": { - "sigma_range": [0.0, 2.0], - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "NumpyToTensor": {}, - "NormalizeInstance": { - "applied_to": ["im"] - } - } -} \ No newline at end of file diff --git a/config/contrast-specific/seg_sc_t2star.json b/config/contrast-specific/seg_sc_t2star.json deleted file mode 100644 index f130b70a..00000000 --- a/config/contrast-specific/seg_sc_t2star.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "command": "train", - "gpu_ids": [0], - "path_output": "contrast_specific_seg_sc_t2star_output", - "model_name": "contrast_specific_seg_sc_t2star_model", - "debugging": true, - "object_detection_params": { - "object_detection_path": null, - "safety_factor": [1.0, 1.0, 1.0] - }, - "loader_parameters": { - "path_data": ["spine-generic-processed"], - "subject_selection": { - "n": [], - "metadata": [], - "value": [] - }, - "target_suffix": ["_seg-manual"], - "extensions": [".nii.gz"], - "roi_params": { - "suffix": null, - "slice_filter_roi": null - }, - "contrast_params": { - "training_validation": ["T2star"], - "testing": ["T2star"], - "balance": {} - }, - "patch_filter_params": { - "filter_empty_mask": true, - "filter_empty_input": true - }, - "slice_axis": "axial", - "multichannel": false, - "soft_gt": false - }, - "split_dataset": { - "fname_split": "super_duper_seg_sc_t2star_output/split_datasets.joblib", - "random_seed": 42, - "center_test": [], - "method": "per_patient", - "balance": null, - "train_fraction": 0.6, - "test_fraction": 0.2 - }, - "training_parameters": { - "batch_size": 2, - "loss": { - "name": "DiceLoss" - }, - "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, - "early_stopping_epsilon": 0.001 - }, - "scheduler": { - "initial_lr": 1e-3, - "lr_scheduler": { - "name": "CosineAnnealingLR", - "base_lr": 1e-5, - "max_lr": 1e-3 - } - }, - "balance_samples": { - "applied": false, - "type": "gt" - }, - "mixup_alpha": null, - "transfer_learning": { - "retrain_model": null, - "retrain_fraction": 1.0, - "reset": true - } - }, - "default_model": { - "name": "Unet", - "dropout_rate": 0.3, - "bn_momentum": 0.1, - "depth": 4, - "is_2d": false, - "final_activation": "sigmoid" - }, - "Modified3DUNet": { - "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], - "attention": false, - "n_filters": 8 - }, - "uncertainty": { - "epistemic": false, - "aleatoric": false, - "n_it": 0 - }, - "postprocessing": { - "binarize_prediction": {"thr": 0.5} - }, - "evaluation_parameters": {}, - "transformation": { - "Resample": - { - "hspace": 1, - "wspace": 1, - "dspace": 1 - }, - "CenterCrop": { - "size": [224, 256, 320] - }, - "RandomAffine": { - "degrees": 10, - "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "ElasticTransform": { - "alpha_range": [25.0, 35.0], - "sigma_range": [3.5, 5.5], - "p": 0.5, - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "RandomGamma": { - "log_gamma_range": [-1.0, 1.0], - "p": 0.5, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBiasField": { - "coefficients": 0.5, - "order": 3, - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBlur": { - "sigma_range": [0.0, 2.0], - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "NumpyToTensor": {}, - "NormalizeInstance": { - "applied_to": ["im"] - } - } -} \ No newline at end of file diff --git a/config/contrast-specific/seg_sc_t2w.json b/config/contrast-specific/seg_sc_t2w.json deleted file mode 100644 index aa227486..00000000 --- a/config/contrast-specific/seg_sc_t2w.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "command": "train", - "gpu_ids": [0], - "path_output": "contrast_specific_seg_sc_t2w_output", - "model_name": "contrast_specific_seg_sc_t2w_model", - "debugging": true, - "object_detection_params": { - "object_detection_path": null, - "safety_factor": [1.0, 1.0, 1.0] - }, - "loader_parameters": { - "path_data": ["spine-generic-processed"], - "subject_selection": { - "n": [], - "metadata": [], - "value": [] - }, - "target_suffix": ["_seg-manual"], - "extensions": [".nii.gz"], - "roi_params": { - "suffix": null, - "slice_filter_roi": null - }, - "contrast_params": { - "training_validation": ["T2w"], - "testing": ["T2w"], - "balance": {} - }, - "patch_filter_params": { - "filter_empty_mask": true, - "filter_empty_input": true - }, - "slice_axis": "axial", - "multichannel": false, - "soft_gt": false - }, - "split_dataset": { - "fname_split": "super_duper_seg_sc_t2w_output/split_datasets.joblib", - "random_seed": 42, - "center_test": [], - "method": "per_patient", - "balance": null, - "train_fraction": 0.6, - "test_fraction": 0.2 - }, - "training_parameters": { - "batch_size": 2, - "loss": { - "name": "DiceLoss" - }, - "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, - "early_stopping_epsilon": 0.001 - }, - "scheduler": { - "initial_lr": 1e-3, - "lr_scheduler": { - "name": "CosineAnnealingLR", - "base_lr": 1e-5, - "max_lr": 1e-3 - } - }, - "balance_samples": { - "applied": false, - "type": "gt" - }, - "mixup_alpha": null, - "transfer_learning": { - "retrain_model": null, - "retrain_fraction": 1.0, - "reset": true - } - }, - "default_model": { - "name": "Unet", - "dropout_rate": 0.3, - "bn_momentum": 0.1, - "depth": 4, - "is_2d": false, - "final_activation": "sigmoid" - }, - "Modified3DUNet": { - "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], - "attention": false, - "n_filters": 8 - }, - "uncertainty": { - "epistemic": false, - "aleatoric": false, - "n_it": 0 - }, - "postprocessing": { - "binarize_prediction": {"thr": 0.5} - }, - "evaluation_parameters": {}, - "transformation": { - "Resample": - { - "hspace": 1, - "wspace": 1, - "dspace": 1 - }, - "CenterCrop": { - "size": [224, 256, 320] - }, - "RandomAffine": { - "degrees": 10, - "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "ElasticTransform": { - "alpha_range": [25.0, 35.0], - "sigma_range": [3.5, 5.5], - "p": 0.5, - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "RandomGamma": { - "log_gamma_range": [-1.0, 1.0], - "p": 0.5, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBiasField": { - "coefficients": 0.5, - "order": 3, - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBlur": { - "sigma_range": [0.0, 2.0], - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "NumpyToTensor": {}, - "NormalizeInstance": { - "applied_to": ["im"] - } - } -} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_T1w_seed=15.json b/config/miccai2023/hard_hard_T1w_seed=15.json new file mode 100644 index 00000000..9577f9e8 --- /dev/null +++ b/config/miccai2023/hard_hard_T1w_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_hard_T1w_seed=15", + "model_name": "hard_hard_T1w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_hard_T1w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w" + ], + "testing": [ + "T1w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T1w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_T2star_seed=15.json b/config/miccai2023/hard_hard_T2star_seed=15.json new file mode 100644 index 00000000..4a989238 --- /dev/null +++ b/config/miccai2023/hard_hard_T2star_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_hard_T2star_seed=15", + "model_name": "hard_hard_T2star_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_hard_T2star_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2star" + ], + "testing": [ + "T2star" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2star_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_T2w_seed=15.json b/config/miccai2023/hard_hard_T2w_seed=15.json new file mode 100644 index 00000000..20405275 --- /dev/null +++ b/config/miccai2023/hard_hard_T2w_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_hard_T2w_seed=15", + "model_name": "hard_hard_T2w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_hard_T2w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2w" + ], + "testing": [ + "T2w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_all_seed=15.json b/config/miccai2023/hard_hard_all_seed=15.json new file mode 100644 index 00000000..4b84c959 --- /dev/null +++ b/config/miccai2023/hard_hard_all_seed=15.json @@ -0,0 +1,243 @@ +{ + "command": "train", + "gpu_ids": [ + 2 + ], + "path_output": "hard_hard_all_seed=15", + "model_name": "hard_hard_all_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "hard_hard_all_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "testing": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/MTS/all/split_datasets_all_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_flip-1_mt-on_MTS_seed=15.json b/config/miccai2023/hard_hard_flip-1_mt-on_MTS_seed=15.json new file mode 100644 index 00000000..31b51565 --- /dev/null +++ b/config/miccai2023/hard_hard_flip-1_mt-on_MTS_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_hard_flip-1_mt-on_MTS_seed=15", + "model_name": "hard_hard_flip-1_mt-on_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "hard_hard_flip-1_mt-on_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_MTon_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/tests/split_datasets_flip-1_mt-on_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_flip-2_mt-off_MTS_seed=15.json b/config/miccai2023/hard_hard_flip-2_mt-off_MTS_seed=15.json new file mode 100644 index 00000000..ede03161 --- /dev/null +++ b/config/miccai2023/hard_hard_flip-2_mt-off_MTS_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 1 + ], + "path_output": "hard_hard_flip-2_mt-off_MTS_seed=15", + "model_name": "hard_hard_flip-2_mt-off_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "hard_hard_flip-2_mt-off_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_T1w_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/MTS/T1w_MTS/split_datasets_flip-2_mt-off_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_hard_rec-average_dwi_seed=15.json b/config/miccai2023/hard_hard_rec-average_dwi_seed=15.json new file mode 100644 index 00000000..e39286a5 --- /dev/null +++ b/config/miccai2023/hard_hard_rec-average_dwi_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_hard_rec-average_dwi_seed=15", + "model_name": "hard_hard_rec-average_dwi_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_hard_rec-average_dwi_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "dwi" + ], + "testing": [ + "dwi" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": false + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_rec-average_dwi_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_T1w_seed=15.json b/config/miccai2023/hard_soft_T1w_seed=15.json new file mode 100644 index 00000000..42807bf7 --- /dev/null +++ b/config/miccai2023/hard_soft_T1w_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_soft_T1w_seed=15", + "model_name": "hard_soft_T1w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_soft_T1w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w" + ], + "testing": [ + "T1w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T1w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_T2star_seed=15.json b/config/miccai2023/hard_soft_T2star_seed=15.json new file mode 100644 index 00000000..5d5aa7e7 --- /dev/null +++ b/config/miccai2023/hard_soft_T2star_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_soft_T2star_seed=15", + "model_name": "hard_soft_T2star_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_soft_T2star_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2star" + ], + "testing": [ + "T2star" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2star_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_T2w_seed=15.json b/config/miccai2023/hard_soft_T2w_seed=15.json new file mode 100644 index 00000000..af46d854 --- /dev/null +++ b/config/miccai2023/hard_soft_T2w_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_soft_T2w_seed=15", + "model_name": "hard_soft_T2w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_soft_T2w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2w" + ], + "testing": [ + "T2w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_all_seed=15.json b/config/miccai2023/hard_soft_all_seed=15.json new file mode 100644 index 00000000..507399ac --- /dev/null +++ b/config/miccai2023/hard_soft_all_seed=15.json @@ -0,0 +1,247 @@ +{ + "command": "train", + "gpu_ids": [ + 2 + ], + "path_output": "hard_soft_all_seed=15", + "model_name": "hard_soft_all_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "hard_soft_all_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "testing": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/MTS/all/split_datasets_all_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_flip-1_mt-on_MTS_seed=15.json b/config/miccai2023/hard_soft_flip-1_mt-on_MTS_seed=15.json new file mode 100644 index 00000000..50a0117c --- /dev/null +++ b/config/miccai2023/hard_soft_flip-1_mt-on_MTS_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_soft_flip-1_mt-on_MTS_seed=15", + "model_name": "hard_soft_flip-1_mt-on_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "hard_soft_flip-1_mt-on_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_MTon_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/tests/split_datasets_flip-1_mt-on_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_flip-2_mt-off_MTS_seed=15.json b/config/miccai2023/hard_soft_flip-2_mt-off_MTS_seed=15.json new file mode 100644 index 00000000..12e23c68 --- /dev/null +++ b/config/miccai2023/hard_soft_flip-2_mt-off_MTS_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 1 + ], + "path_output": "hard_soft_flip-2_mt-off_MTS_seed=15", + "model_name": "hard_soft_flip-2_mt-off_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "hard_soft_flip-2_mt-off_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_T1w_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/MTS/T1w_MTS/split_datasets_flip-2_mt-off_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/hard_soft_rec-average_dwi_seed=15.json b/config/miccai2023/hard_soft_rec-average_dwi_seed=15.json new file mode 100644 index 00000000..7ea045c4 --- /dev/null +++ b/config/miccai2023/hard_soft_rec-average_dwi_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "hard_soft_rec-average_dwi_seed=15", + "model_name": "hard_soft_rec-average_dwi_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_soft_rec-average_dwi_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_seg-manual" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "dwi" + ], + "testing": [ + "dwi" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_rec-average_dwi_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_T1w_seed=15.json b/config/miccai2023/meanGT_hard_T1w_seed=15.json new file mode 100644 index 00000000..4fe45096 --- /dev/null +++ b/config/miccai2023/meanGT_hard_T1w_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_hard_T1w_seed=15", + "model_name": "meanGT_hard_T1w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_hard_T1w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w" + ], + "testing": [ + "T1w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T1w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_T2star_seed=15.json b/config/miccai2023/meanGT_hard_T2star_seed=15.json new file mode 100644 index 00000000..fc29ce72 --- /dev/null +++ b/config/miccai2023/meanGT_hard_T2star_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_hard_T2star_seed=15", + "model_name": "meanGT_hard_T2star_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_hard_T2star_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2star" + ], + "testing": [ + "T2star" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2star_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_T2w_seed=15.json b/config/miccai2023/meanGT_hard_T2w_seed=15.json new file mode 100644 index 00000000..69399967 --- /dev/null +++ b/config/miccai2023/meanGT_hard_T2w_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_hard_T2w_seed=15", + "model_name": "meanGT_hard_T2w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_hard_T2w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2w" + ], + "testing": [ + "T2w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_all_seed=15.json b/config/miccai2023/meanGT_hard_all_seed=15.json new file mode 100644 index 00000000..0201892d --- /dev/null +++ b/config/miccai2023/meanGT_hard_all_seed=15.json @@ -0,0 +1,243 @@ +{ + "command": "train", + "gpu_ids": [ + 2 + ], + "path_output": "meanGT_hard_all_seed=15", + "model_name": "meanGT_hard_all_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_hard_all_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "testing": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/MTS/all/split_datasets_all_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_flip-1_mt-on_MTS_seed=15.json b/config/miccai2023/meanGT_hard_flip-1_mt-on_MTS_seed=15.json new file mode 100644 index 00000000..9116ab58 --- /dev/null +++ b/config/miccai2023/meanGT_hard_flip-1_mt-on_MTS_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_hard_flip-1_mt-on_MTS_seed=15", + "model_name": "meanGT_hard_flip-1_mt-on_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_hard_flip-1_mt-on_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_MTon_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/tests/split_datasets_flip-1_mt-on_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_flip-2_mt-off_MTS_seed=15.json b/config/miccai2023/meanGT_hard_flip-2_mt-off_MTS_seed=15.json new file mode 100644 index 00000000..01edfce6 --- /dev/null +++ b/config/miccai2023/meanGT_hard_flip-2_mt-off_MTS_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 1 + ], + "path_output": "meanGT_hard_flip-2_mt-off_MTS_seed=15", + "model_name": "meanGT_hard_flip-2_mt-off_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_hard_flip-2_mt-off_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_T1w_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/MTS/T1w_MTS/split_datasets_flip-2_mt-off_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_hard_rec-average_dwi_seed=15.json b/config/miccai2023/meanGT_hard_rec-average_dwi_seed=15.json new file mode 100644 index 00000000..89004f26 --- /dev/null +++ b/config/miccai2023/meanGT_hard_rec-average_dwi_seed=15.json @@ -0,0 +1,235 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_hard_rec-average_dwi_seed=15", + "model_name": "meanGT_hard_rec-average_dwi_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_hard_rec-average_dwi_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "dwi" + ], + "testing": [ + "dwi" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_rec-average_dwi_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "DiceLoss" + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "sigmoid" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": 0.5 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_T1w_seed=15.json b/config/miccai2023/meanGT_soft_T1w_seed=15.json new file mode 100644 index 00000000..3352f0b2 --- /dev/null +++ b/config/miccai2023/meanGT_soft_T1w_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_soft_T1w_seed=15", + "model_name": "meanGT_soft_T1w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_soft_T1w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w" + ], + "testing": [ + "T1w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T1w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_T2star_seed=15.json b/config/miccai2023/meanGT_soft_T2star_seed=15.json new file mode 100644 index 00000000..e48a1e14 --- /dev/null +++ b/config/miccai2023/meanGT_soft_T2star_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_soft_T2star_seed=15", + "model_name": "meanGT_soft_T2star_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_soft_T2star_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2star" + ], + "testing": [ + "T2star" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2star_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_T2w_seed=15.json b/config/miccai2023/meanGT_soft_T2w_seed=15.json new file mode 100644 index 00000000..1d51a075 --- /dev/null +++ b/config/miccai2023/meanGT_soft_T2w_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_soft_T2w_seed=15", + "model_name": "meanGT_soft_T2w_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_soft_T2w_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T2w" + ], + "testing": [ + "T2w" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_T2w_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_all_seed=15.json b/config/miccai2023/meanGT_soft_all_seed=15.json new file mode 100644 index 00000000..f5fc638c --- /dev/null +++ b/config/miccai2023/meanGT_soft_all_seed=15.json @@ -0,0 +1,247 @@ +{ + "command": "train", + "gpu_ids": [ + 2 + ], + "path_output": "meanGT_soft_all_seed=15", + "model_name": "meanGT_soft_all_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_soft_all_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "testing": [ + "T1w", + "T2w", + "T2star", + "dwi", + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/MTS/all/split_datasets_all_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_flip-1_mt-on_MTS_seed=15.json b/config/miccai2023/meanGT_soft_flip-1_mt-on_MTS_seed=15.json new file mode 100644 index 00000000..0153bb83 --- /dev/null +++ b/config/miccai2023/meanGT_soft_flip-1_mt-on_MTS_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_soft_flip-1_mt-on_MTS_seed=15", + "model_name": "meanGT_soft_flip-1_mt-on_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_soft_flip-1_mt-on_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_MTon_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/tests/split_datasets_flip-1_mt-on_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.0005, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_flip-2_mt-off_MTS_seed=15.json b/config/miccai2023/meanGT_soft_flip-2_mt-off_MTS_seed=15.json new file mode 100644 index 00000000..ef554c08 --- /dev/null +++ b/config/miccai2023/meanGT_soft_flip-2_mt-off_MTS_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 1 + ], + "path_output": "meanGT_soft_flip-2_mt-off_MTS_seed=15", + "model_name": "meanGT_soft_flip-2_mt-off_MTS_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_soft_flip-2_mt-off_MTS_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_T1w_MTS" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "MTS" + ], + "testing": [ + "MTS" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/MTS/T1w_MTS/split_datasets_flip-2_mt-off_MTS_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/miccai2023/meanGT_soft_rec-average_dwi_seed=15.json b/config/miccai2023/meanGT_soft_rec-average_dwi_seed=15.json new file mode 100644 index 00000000..bf9cdad3 --- /dev/null +++ b/config/miccai2023/meanGT_soft_rec-average_dwi_seed=15.json @@ -0,0 +1,239 @@ +{ + "command": "train", + "gpu_ids": [ + 0 + ], + "path_output": "meanGT_soft_rec-average_dwi_seed=15", + "model_name": "meanGT_soft_rec-average_dwi_seed=15", + "debugging": true, + "object_detection_params": { + "object_detection_path": null, + "safety_factor": [ + 1.0, + 1.0, + 1.0 + ] + }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_soft_rec-average_dwi_seed=15", + "log_grads_every": 10 + }, + "loader_parameters": { + "path_data": [ + "/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean" + ], + "subject_selection": { + "n": [], + "metadata": [], + "value": [] + }, + "target_suffix": [ + "_softseg" + ], + "extensions": [ + ".nii.gz" + ], + "roi_params": { + "suffix": null, + "slice_filter_roi": null + }, + "contrast_params": { + "training_validation": [ + "dwi" + ], + "testing": [ + "dwi" + ], + "balance": {} + }, + "patch_filter_params": { + "filter_empty_mask": true, + "filter_empty_input": true + }, + "slice_axis": "axial", + "multichannel": false, + "soft_gt": true + }, + "split_dataset": { + "fname_split": "joblibs/group-8/split_datasets_rec-average_dwi_seed=15.joblib", + "center_test": [], + "method": "per_patient", + "balance": null, + "train_fraction": 0.6, + "test_fraction": 0.2 + }, + "training_parameters": { + "batch_size": 8, + "loss": { + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 + }, + "training_time": { + "num_epochs": 200, + "early_stopping_patience": 50, + "early_stopping_epsilon": 0.001 + }, + "scheduler": { + "initial_lr": 0.001, + "lr_scheduler": { + "name": "CosineAnnealingLR", + "base_lr": 0.0001, + "max_lr": 0.001 + } + }, + "balance_samples": { + "applied": false, + "type": "gt" + }, + "mixup_alpha": null, + "transfer_learning": { + "retrain_model": null, + "retrain_fraction": 1.0, + "reset": true + } + }, + "default_model": { + "name": "Unet", + "dropout_rate": 0.3, + "bn_momentum": 0.1, + "depth": 4, + "is_2d": false, + "final_activation": "relu" + }, + "Modified3DUNet": { + "applied": true, + "length_3D": [ + 48, + 176, + 288 + ], + "stride_3D": [ + 48, + 176, + 288 + ], + "attention": false, + "n_filters": 8 + }, + "uncertainty": { + "epistemic": false, + "aleatoric": false, + "n_it": 0 + }, + "postprocessing": { + "binarize_prediction": { + "thr": -1 + }, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } + }, + "evaluation_parameters": {}, + "transformation": { + "Resample": { + "hspace": 1, + "wspace": 1, + "dspace": 1 + }, + "CenterCrop": { + "size": [ + 48, + 176, + 288 + ] + }, + "RandomAffine": { + "degrees": 20, + "scale": [ + 0.2, + 0.2, + 0.2 + ], + "translate": [ + 0.1, + 0.1, + 0.1 + ], + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "ElasticTransform": { + "alpha_range": [ + 25.0, + 35.0 + ], + "sigma_range": [ + 3.5, + 5.5 + ], + "p": 0.5, + "applied_to": [ + "im", + "gt" + ], + "dataset_type": [ + "training" + ] + }, + "RandomGamma": { + "log_gamma_range": [ + -1.0, + 1.0 + ], + "p": 0.5, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBiasField": { + "coefficients": 0.5, + "order": 3, + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "RandomBlur": { + "sigma_range": [ + 0.0, + 2.0 + ], + "p": 0.3, + "applied_to": [ + "im" + ], + "dataset_type": [ + "training" + ] + }, + "NumpyToTensor": {}, + "NormalizeInstance": { + "applied_to": [ + "im" + ] + } + } +} \ No newline at end of file diff --git a/config/super-duper/seg_sc_all.json b/config/super-duper/seg_sc_all.json deleted file mode 100644 index 6c7eaeb2..00000000 --- a/config/super-duper/seg_sc_all.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "command": "train", - "gpu_ids": [0], - "path_output": "super_duper_seg_sc_all_output", - "model_name": "super_duper_seg_sc_all_model", - "debugging": true, - "object_detection_params": { - "object_detection_path": null, - "safety_factor": [1.0, 1.0, 1.0] - }, - "loader_parameters": { - "path_data": ["spine-generic-processed"], - "subject_selection": { - "n": [], - "metadata": [], - "value": [] - }, - "target_suffix": ["_softseg"], - "extensions": [".nii.gz"], - "roi_params": { - "suffix": null, - "slice_filter_roi": null - }, - "contrast_params": { - "training_validation": ["T1w", "T2w", "T2star"], - "testing": ["T1w", "T2w", "T2star"], - "balance": {} - }, - "patch_filter_params": { - "filter_empty_mask": true, - "filter_empty_input": true - }, - "slice_axis": "axial", - "multichannel": false, - "soft_gt": true - }, - "split_dataset": { - "fname_split": null, - "random_seed": 42, - "center_test": [], - "method": "per_patient", - "balance": null, - "train_fraction": 0.6, - "test_fraction": 0.2 - }, - "training_parameters": { - "batch_size": 2, - "loss": { - "name": "DiceLoss" - }, - "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, - "early_stopping_epsilon": 0.001 - }, - "scheduler": { - "initial_lr": 1e-3, - "lr_scheduler": { - "name": "CosineAnnealingLR", - "base_lr": 1e-5, - "max_lr": 1e-3 - } - }, - "balance_samples": { - "applied": false, - "type": "gt" - }, - "mixup_alpha": null, - "transfer_learning": { - "retrain_model": null, - "retrain_fraction": 1.0, - "reset": true - } - }, - "default_model": { - "name": "Unet", - "dropout_rate": 0.3, - "bn_momentum": 0.1, - "depth": 4, - "is_2d": false, - "final_activation": "relu" - }, - "Modified3DUNet": { - "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], - "attention": false, - "n_filters": 8 - }, - "uncertainty": { - "epistemic": false, - "aleatoric": false, - "n_it": 0 - }, - "postprocessing": { - "binarize_prediction": {"thr": -1} - }, - "evaluation_parameters": {}, - "transformation": { - "Resample": { - "hspace": 1, - "wspace": 1, - "dspace": 1 - }, - "CenterCrop": { - "size": [224, 256, 320] - }, - "RandomAffine": { - "degrees": 10, - "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "ElasticTransform": { - "alpha_range": [25.0, 35.0], - "sigma_range": [3.5, 5.5], - "p": 0.5, - "applied_to": ["im", "gt"], - "dataset_type": ["training"] - }, - "RandomGamma": { - "log_gamma_range": [-1.0, 1.0], - "p": 0.5, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBiasField": { - "coefficients": 0.5, - "order": 3, - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "RandomBlur": { - "sigma_range": [0.0, 2.0], - "p": 0.3, - "applied_to": ["im"], - "dataset_type": ["training"] - }, - "NumpyToTensor": {}, - "NormalizeInstance": { - "applied_to": ["im"] - } - } -} \ No newline at end of file diff --git a/config/contrast-specific/seg_sc_t1w.json b/config_templates/hard_hard.json similarity index 72% rename from config/contrast-specific/seg_sc_t1w.json rename to config_templates/hard_hard.json index 2d82afe7..1388a4aa 100644 --- a/config/contrast-specific/seg_sc_t1w.json +++ b/config_templates/hard_hard.json @@ -1,15 +1,22 @@ { "command": "train", "gpu_ids": [0], - "path_output": "contrast_specific_seg_sc_t1w_output", - "model_name": "contrast_specific_seg_sc_t1w_model", + "path_output": "hard_hard__seed=", + "model_name": "hard_hard__seed=", "debugging": true, "object_detection_params": { "object_detection_path": null, "safety_factor": [1.0, 1.0, 1.0] }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_hard__seed=", + "log_grads_every": 10 + }, "loader_parameters": { - "path_data": ["spine-generic-processed"], + "path_data": ["/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean"], "subject_selection": { "n": [], "metadata": [], @@ -22,8 +29,8 @@ "slice_filter_roi": null }, "contrast_params": { - "training_validation": ["T1w"], - "testing": ["T1w"], + "training_validation": [""], + "testing": [""], "balance": {} }, "patch_filter_params": { @@ -35,8 +42,7 @@ "soft_gt": false }, "split_dataset": { - "fname_split": "super_duper_seg_sc_t1w_output/split_datasets.joblib", - "random_seed": 42, + "fname_split": "", "center_test": [], "method": "per_patient", "balance": null, @@ -44,20 +50,20 @@ "test_fraction": 0.2 }, "training_parameters": { - "batch_size": 2, + "batch_size": 8, "loss": { "name": "DiceLoss" }, "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, + "num_epochs": 200, + "early_stopping_patience": 50, "early_stopping_epsilon": 0.001 }, "scheduler": { "initial_lr": 1e-3, "lr_scheduler": { "name": "CosineAnnealingLR", - "base_lr": 1e-5, + "base_lr": 1e-4, "max_lr": 1e-3 } }, @@ -82,8 +88,8 @@ }, "Modified3DUNet": { "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], + "length_3D": [48, 176, 288], + "stride_3D": [48, 176, 288], "attention": false, "n_filters": 8 }, @@ -93,7 +99,16 @@ "n_it": 0 }, "postprocessing": { - "binarize_prediction": {"thr": 0.5} + "binarize_prediction": {"thr": 0.5}, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } }, "evaluation_parameters": {}, "transformation": { @@ -104,12 +119,12 @@ "dspace": 1 }, "CenterCrop": { - "size": [224, 256, 320] + "size": [48, 176, 288] }, "RandomAffine": { - "degrees": 10, + "degrees": 20, "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], + "translate": [0.1, 0.1, 0.1], "applied_to": ["im", "gt"], "dataset_type": ["training"] }, diff --git a/config/super-duper/seg_sc_t2w.json b/config_templates/hard_soft.json similarity index 68% rename from config/super-duper/seg_sc_t2w.json rename to config_templates/hard_soft.json index 7abb5d9a..95e38679 100644 --- a/config/super-duper/seg_sc_t2w.json +++ b/config_templates/hard_soft.json @@ -1,29 +1,36 @@ { "command": "train", "gpu_ids": [0], - "path_output": "super_duper_seg_sc_t2w_output", - "model_name": "super_duper_seg_sc_t2w_model", + "path_output": "hard_soft__seed=", + "model_name": "hard_soft__seed=", "debugging": true, "object_detection_params": { "object_detection_path": null, "safety_factor": [1.0, 1.0, 1.0] }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "hard_soft__seed=", + "log_grads_every": 10 + }, "loader_parameters": { - "path_data": ["spine-generic-processed"], + "path_data": ["/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean"], "subject_selection": { "n": [], "metadata": [], "value": [] }, - "target_suffix": ["_softseg"], + "target_suffix": ["_seg-manual"], "extensions": [".nii.gz"], "roi_params": { "suffix": null, "slice_filter_roi": null }, "contrast_params": { - "training_validation": ["T2w"], - "testing": ["T2w"], + "training_validation": [""], + "testing": [""], "balance": {} }, "patch_filter_params": { @@ -35,8 +42,7 @@ "soft_gt": true }, "split_dataset": { - "fname_split": null, - "random_seed": 42, + "fname_split": "", "center_test": [], "method": "per_patient", "balance": null, @@ -44,20 +50,24 @@ "test_fraction": 0.2 }, "training_parameters": { - "batch_size": 2, + "batch_size": 8, "loss": { - "name": "DiceLoss" + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 }, "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, + "num_epochs": 200, + "early_stopping_patience": 50, "early_stopping_epsilon": 0.001 }, "scheduler": { "initial_lr": 1e-3, "lr_scheduler": { "name": "CosineAnnealingLR", - "base_lr": 1e-5, + "base_lr": 1e-4, "max_lr": 1e-3 } }, @@ -82,8 +92,8 @@ }, "Modified3DUNet": { "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], + "length_3D": [48, 176, 288], + "stride_3D": [48, 176, 288], "attention": false, "n_filters": 8 }, @@ -93,7 +103,16 @@ "n_it": 0 }, "postprocessing": { - "binarize_prediction": {"thr": -1} + "binarize_prediction": {"thr": -1}, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } }, "evaluation_parameters": {}, "transformation": { @@ -104,12 +123,12 @@ "dspace": 1 }, "CenterCrop": { - "size": [224, 256, 320] + "size": [48, 176, 288] }, "RandomAffine": { - "degrees": 10, + "degrees": 20, "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], + "translate": [0.1, 0.1, 0.1], "applied_to": ["im", "gt"], "dataset_type": ["training"] }, diff --git a/config/super-duper/seg_sc_t1w.json b/config_templates/meanGT_hard.json similarity index 71% rename from config/super-duper/seg_sc_t1w.json rename to config_templates/meanGT_hard.json index 46df1c43..7ac47d35 100644 --- a/config/super-duper/seg_sc_t1w.json +++ b/config_templates/meanGT_hard.json @@ -1,15 +1,22 @@ { "command": "train", "gpu_ids": [0], - "path_output": "super_duper_seg_sc_t1w_output", - "model_name": "super_duper_seg_sc_t1w_model", + "path_output": "meanGT_hard__seed=", + "model_name": "meanGT_hard__seed=", "debugging": true, "object_detection_params": { "object_detection_path": null, "safety_factor": [1.0, 1.0, 1.0] }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-8", + "run_name": "meanGT_hard__seed=", + "log_grads_every": 10 + }, "loader_parameters": { - "path_data": ["spine-generic-processed"], + "path_data": ["/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean"], "subject_selection": { "n": [], "metadata": [], @@ -22,8 +29,8 @@ "slice_filter_roi": null }, "contrast_params": { - "training_validation": ["T1w"], - "testing": ["T1w"], + "training_validation": [""], + "testing": [""], "balance": {} }, "patch_filter_params": { @@ -35,8 +42,7 @@ "soft_gt": true }, "split_dataset": { - "fname_split": null, - "random_seed": 42, + "fname_split": "", "center_test": [], "method": "per_patient", "balance": null, @@ -44,20 +50,20 @@ "test_fraction": 0.2 }, "training_parameters": { - "batch_size": 2, + "batch_size": 8, "loss": { "name": "DiceLoss" }, "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, + "num_epochs": 200, + "early_stopping_patience": 50, "early_stopping_epsilon": 0.001 }, "scheduler": { "initial_lr": 1e-3, "lr_scheduler": { "name": "CosineAnnealingLR", - "base_lr": 1e-5, + "base_lr": 1e-4, "max_lr": 1e-3 } }, @@ -78,12 +84,12 @@ "bn_momentum": 0.1, "depth": 4, "is_2d": false, - "final_activation": "relu" + "final_activation": "sigmoid" }, "Modified3DUNet": { "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], + "length_3D": [48, 176, 288], + "stride_3D": [48, 176, 288], "attention": false, "n_filters": 8 }, @@ -93,7 +99,16 @@ "n_it": 0 }, "postprocessing": { - "binarize_prediction": {"thr": -1} + "binarize_prediction": {"thr": 0.5}, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } }, "evaluation_parameters": {}, "transformation": { @@ -104,12 +119,12 @@ "dspace": 1 }, "CenterCrop": { - "size": [224, 256, 320] + "size": [48, 176, 288] }, "RandomAffine": { - "degrees": 10, + "degrees": 20, "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], + "translate": [0.1, 0.1, 0.1], "applied_to": ["im", "gt"], "dataset_type": ["training"] }, diff --git a/config/super-duper/seg_sc_t2star.json b/config_templates/meanGT_soft.json similarity index 69% rename from config/super-duper/seg_sc_t2star.json rename to config_templates/meanGT_soft.json index 79c0cc9d..e7b09013 100644 --- a/config/super-duper/seg_sc_t2star.json +++ b/config_templates/meanGT_soft.json @@ -1,15 +1,22 @@ { "command": "train", "gpu_ids": [0], - "path_output": "super_duper_seg_sc_t2star_output", - "model_name": "super_duper_seg_sc_t2star_model", + "path_output": "meanGT_soft__seed=", + "model_name": "meanGT_soft__seed=", "debugging": true, "object_detection_params": { "object_detection_path": null, "safety_factor": [1.0, 1.0, 1.0] }, + "wandb": { + "wandb_api_key": "18bbcc09542538f6d67167d2bb62b6415d3ce12b", + "project_name": "contrast-agnostic-softseg-sc-project", + "group_name": "group-9", + "run_name": "meanGT_soft__seed=", + "log_grads_every": 10 + }, "loader_parameters": { - "path_data": ["spine-generic-processed"], + "path_data": ["/home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean"], "subject_selection": { "n": [], "metadata": [], @@ -22,8 +29,8 @@ "slice_filter_roi": null }, "contrast_params": { - "training_validation": ["T2star"], - "testing": ["T2star"], + "training_validation": [""], + "testing": [""], "balance": {} }, "patch_filter_params": { @@ -35,8 +42,7 @@ "soft_gt": true }, "split_dataset": { - "fname_split": null, - "random_seed": 42, + "fname_split": "", "center_test": [], "method": "per_patient", "balance": null, @@ -44,20 +50,24 @@ "test_fraction": 0.2 }, "training_parameters": { - "batch_size": 2, + "batch_size": 8, "loss": { - "name": "DiceLoss" + "name": "AdapWingLoss", + "epsilon": 1, + "theta": 0.5, + "omega": 8, + "alpha": 2.1 }, "training_time": { - "num_epochs": 100, - "early_stopping_patience": 25, + "num_epochs": 200, + "early_stopping_patience": 50, "early_stopping_epsilon": 0.001 }, "scheduler": { "initial_lr": 1e-3, "lr_scheduler": { "name": "CosineAnnealingLR", - "base_lr": 1e-5, + "base_lr": 1e-4, "max_lr": 1e-3 } }, @@ -82,8 +92,8 @@ }, "Modified3DUNet": { "applied": true, - "length_3D": [224, 256, 320], - "stride_3D": [224, 256, 320], + "length_3D": [48, 176, 288], + "stride_3D": [48, 176, 288], "attention": false, "n_filters": 8 }, @@ -93,7 +103,16 @@ "n_it": 0 }, "postprocessing": { - "binarize_prediction": {"thr": -1} + "binarize_prediction": {"thr": -1}, + "remove_noise": { + "thr": -1 + }, + "keep_largest": {}, + "fill_holes": {}, + "remove_small": { + "unit": "vox", + "thr": 3 + } }, "evaluation_parameters": {}, "transformation": { @@ -104,12 +123,12 @@ "dspace": 1 }, "CenterCrop": { - "size": [224, 256, 320] + "size": [48, 176, 288] }, "RandomAffine": { - "degrees": 10, + "degrees": 20, "scale": [0.2, 0.2, 0.2], - "translate": [0.0, 0.0, 0.0], + "translate": [0.1, 0.1, 0.1], "applied_to": ["im", "gt"], "dataset_type": ["training"] }, diff --git a/evaluation/compute_evaluation_metrics.py b/evaluation/compute_evaluation_metrics.py new file mode 100644 index 00000000..ca11e45d --- /dev/null +++ b/evaluation/compute_evaluation_metrics.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python +# -*- coding: utf-8 +# Computes mean dice coefficient across manual segmentations from candidates and ground truth segmentations. +# +# For usage, type: python compute_dice.py -h +# +# Authors: Sandrine Bédard & Adrian El Baz + +import argparse +import logging +import os +import sys +import numpy as np +import nibabel as nib +import csv +import pandas as pd +from scipy import spatial +from pathlib import Path + +# Initialize logging +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) # default: logging.DEBUG, logging.INFO +hdlr = logging.StreamHandler(sys.stdout) +logging.root.addHandler(hdlr) + + +def numeric_score(prediction, groundtruth): + """Computation of statistical numerical scores: + * FP = Soft False Positives + * FN = Soft False Negatives + * TP = Soft True Positives + * TN = Soft True Negatives + Robust to hard or soft input masks. For example:: + prediction=np.asarray([0, 0.5, 1]) + groundtruth=np.asarray([0, 1, 1]) + Leads to FP = 1.5 + Note: It assumes input values are between 0 and 1. + Args: + prediction (ndarray): Binary prediction. + groundtruth (ndarray): Binary groundtruth. + Returns: + float, float, float, float: FP, FN, TP, TN + """ + FP = float(np.sum(prediction * (1.0 - groundtruth))) + FN = float(np.sum((1.0 - prediction) * groundtruth)) + TP = float(np.sum(prediction * groundtruth)) + TN = float(np.sum((1.0 - prediction) * (1.0 - groundtruth))) + return FP, FN, TP, TN + + +def get_vol(data, remove_lastdim=False): + """Get volume.""" + ## Binarize + if remove_lastdim: + vol = np.sum(np.squeeze(np.where(np.asarray(data.get_fdata())>0.5, 1, 0), axis=3)) + else: + vol = np.sum(np.where(np.asarray(data.get_fdata())>0.5, 1, 0)) + #vol = np.sum(data.get_fdata()) + px, py, pz = data.header['pixdim'][1:4] + vol *= px * py * pz + return vol + + +def precision_score(prediction, groundtruth, err_value=0.0): + """Positive predictive value (PPV). + Precision equals the number of true positive voxels divided by the sum of true and false positive voxels. + True and false positives are computed on soft masks, see ``"numeric_score"``. + Args: + prediction (ndarray): First array. + groundtruth (ndarray): Second array. + err_value (float): Value returned in case of error. + Returns: + float: Precision score. + """ + FP, FN, TP, TN = numeric_score(prediction, groundtruth) + if (TP + FP) <= 0.0: + return err_value + + precision = np.divide(TP, TP + FP) + return precision + + +def recall_score(prediction, groundtruth, err_value=0.0): + """True positive rate (TPR). + Recall equals the number of true positive voxels divided by the sum of true positive and false negative voxels. + True positive and false negative values are computed on soft masks, see ``"numeric_score"``. + Args: + prediction (ndarray): First array. + groundtruth (ndarray): Second array. + err_value (float): Value returned in case of error. + Returns: + float: Recall score. + """ + FP, FN, TP, TN = numeric_score(prediction, groundtruth) + if (TP + FN) <= 0.0: + return err_value + TPR = np.divide(TP, TP + FN) + return TPR + + +def specificity_score(prediction, groundtruth, err_value=0.0): + """True negative rate (TNR). + Specificity equals the number of true negative voxels divided by the sum of true negative and false positive voxels. + True negative and false positive values are computed on soft masks, see ``"numeric_score"``. + Args: + prediction (ndarray): First array. + groundtruth (ndarray): Second array. + err_value (float): Value returned in case of error. + Returns: + float: Specificity score. + """ + FP, FN, TP, TN = numeric_score(prediction, groundtruth) + if (TN + FP) <= 0.0: + return err_value + TNR = np.divide(TN, TN + FP) + return TNR + + +def hausdorff_score(prediction, groundtruth): + """Compute the directed Hausdorff distance between two N-D arrays. + Args: + prediction (ndarray): First array. + groundtruth (ndarray): Second array. + Returns: + float: Hausdorff distance. + """ + if len(prediction.shape) == 4: + n_classes, height, depth, width = prediction.shape + # Reshape to have only 3 dimensions where prediction[:, idx, :] represents each 2D slice + prediction = prediction.reshape((height, n_classes * depth, width)) + groundtruth = groundtruth.reshape((height, n_classes * depth, width)) + + if len(prediction.shape) == 3: + mean_hansdorff = 0 + for idx in range(prediction.shape[1]): + pred = prediction[:, idx, :] + gt = groundtruth[:, idx, :] + mean_hansdorff += spatial.distance.directed_hausdorff(pred, gt)[0] + mean_hansdorff = mean_hansdorff / prediction.shape[1] + return mean_hansdorff + + return spatial.distance.directed_hausdorff(prediction, groundtruth)[0] + + +def accuracy_score(prediction, groundtruth, err_value=0.0): + """Accuracy. + Accuracy equals the number of true positive and true negative voxels divided by the total number of voxels. + True positive/negative and false positive/negative values are computed on soft masks, see ``"numeric_score"``. + Args: + prediction (ndarray): First array. + groundtruth (ndarray): Second array. + Returns: + float: Accuracy. + """ + FP, FN, TP, TN = numeric_score(prediction, groundtruth) + N = FP + FN + TP + TN + if N <= 0.0: + return err_value + accuracy = np.divide(TP + TN, N) + return accuracy + + +def mse(im1, im2): + """Compute the Mean Squared Error. + Compute the Mean Squared Error between the two images, i.e. sum of the squared difference. + Args: + im1 (ndarray): First array. + im2 (ndarray): Second array. + Returns: + float: Mean Squared Error. + """ + im1 = np.asarray(im1) + im2 = np.asarray(im2) + + if im1.shape != im2.shape: + raise ValueError("Shape mismatch: im1 and im2 must have the same shape.") + + err = np.sum((im1.astype("float") - im2.astype("float")) ** 2) + err /= float(im1.shape[0] * im1.shape[1]) + + return err + +def get_rvd(im1, im2): + """Relative volume difference. + The volume is here defined by the physical volume, in mm3, of the non-zero voxels of a given mask. + Relative volume difference equals the difference between the ground-truth and prediction volumes, divided by the + ground-truth volume. + Optimal value is zero. Negative value indicates over-segmentation, while positive value indicates + under-segmentation. + """ + vol_pred = get_vol(im1) + vol_gt = get_vol(im2, remove_lastdim=True) # Pred mask 4th dim removal + + if vol_gt == 0.0: + return np.nan + + rvd = (vol_gt - vol_pred) + rvd /= vol_gt + + return rvd + + +def get_avd(im1, im2): + """Absolute volume difference. + The volume is here defined by the physical volume, in mm3, of the non-zero voxels of a given mask. + Absolute volume difference equals the absolute value of the Relative Volume Difference. + Optimal value is zero. + """ + return abs(get_rvd(im1, im2)) + + +def compute_dice(im1, im2, empty_score=np.nan): + """Computes the Dice coefficient between im1 and im2. + Compute a soft Dice coefficient between im1 and im2, ie equals twice the sum of the two masks product, divided by + the sum of each mask sum. + If both images are empty, then it returns empty_score. + Args: + im1 (ndarray): First array. + im2 (ndarray): Second array. + empty_score (float): Returned value if both input array are empty. + Returns: + float: Dice coefficient. + """ + im1 = np.asarray(im1) + im2 = np.squeeze(np.asarray(im2), axis=3) # Fix pred mask 4th dim + # Binarization threshold + im1 = np.where(im1>0.5, 1, 0) + im2 = np.where(im2>0.5, 1, 0) + + if im1.shape != im2.shape: + raise ValueError("Shape mismatch: im1 and im2 must have the same shape.") + + im_sum = im1.sum() + im2.sum() + if im_sum == 0: + return empty_score + + intersection = (im1 * im2).sum() + return (2. * intersection) / im_sum + +def compute_folder_metrics(base_folder: str, exclude_list: list = []): + data_all_path = "../duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean" + data_MTon_MTS = "../duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_MTon_MTS" + data_T1w_MTS = "../duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean_T1w_MTS" + + exp_folders = next(os.walk(base_folder))[1] + if exclude_list: + exp_folders = [f for f in exp_folders for excl in exclude_list if excl not in f] + for exp in exp_folders: + pred_mask_paths = [os.path.join(dirpath,f) for (dirpath, dirnames, filenames) in os.walk(os.path.join(base_folder, exp, "pred_masks")) for f in filenames if f.endswith("pred.nii.gz")] + prefix_paths = [pth.split('/')[-1].split('_pred')[0] for pth in pred_mask_paths] + patients = [pth.split('_')[0] for pth in prefix_paths] + exp_result = {"Filename": [], "Dice": [], "RVD": []} + for (patient, prefix, pred_mask_path) in zip(patients, prefix_paths, pred_mask_paths): + if "flip-1" in prefix: # different MTS not currently recogizable + data_folder = data_MTon_MTS + elif "flip-2" in prefix: # different MTS not currently recogizable + data_folder = data_T1w_MTS + else: + data_folder= data_all_path + type_folder = "anat" if "dwi" not in prefix else "dwi" + ground_truth_path = os.path.join(data_folder, f"derivatives/labels_softseg/{patient}/{type_folder}/{prefix}_softseg.nii.gz" ) + im1 = nib.load(ground_truth_path) + im2 = nib.load(pred_mask_path) + + # Binarization occurs directly in metric computations + dice = compute_dice(im1.get_fdata(), im2.get_fdata()) + rvd = get_rvd(im1,im2) + exp_result["Filename"].append(pred_mask_path) + exp_result["Dice"].append(dice) + exp_result["RVD"].append(rvd) + + df = pd.DataFrame.from_dict(exp_result) + if not os.path.isdir(f"./spine-generic-test-results/{exp}/"): + Path(f"./spine-generic-test-results/{exp}/").mkdir(parents=True, exist_ok=True) + df.to_csv(f"./spine-generic-test-results/{exp}/evaluation_3Dmetrics.csv") + +def main(): + """2 Experiment folders were used. One for MTS contrasts and "all", the other + for the rest of the experiments. Replace the folder names by your own experiment + folders. + """ + + g9_base_folder = "../duke/temp/adrian/contrast-agnostic-seg-models/Group9_20-12-2022/" + g8_base_folder = "../duke/temp/adrian/contrast-agnostic-seg-models/Group8_01-12-2022/" + + compute_folder_metrics(g9_base_folder) + compute_folder_metrics(g8_base_folder, ["all"]) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/evaluation/inference.sh b/evaluation/inference.sh new file mode 100644 index 00000000..7ae10490 --- /dev/null +++ b/evaluation/inference.sh @@ -0,0 +1,17 @@ +seeds=(15) # seeds=(42 15 34 98 62) +config_types=("hard_hard" "hard_soft" "meanGT_soft" "meanGT_hard") +contrasts=("flip-1_mt-on_MTS" "flip-2_mt-off_MTS" "all") + +for seed in ${seeds[@]} +do + for config in ${config_types[@]} + do + for contrast in ${contrasts[@]} + do + sleep 5 + output_dir=../duke/temp/adrian/contrast-agnostic-seg-models/Group9_20-12-2022/"$config"_"$contrast"_seed="$seed"/ + echo $output_dir + CUDA_VISIBLE=0 ivadomed --test -c ../duke/temp/adrian/contrast-agnostic-seg-models/Group9_20-12-2022/"$config"_"$contrast"_seed="$seed"/config_file.json --path-output $output_dir + done + done +done diff --git a/evaluation/miccai_results_models.py b/evaluation/miccai_results_models.py new file mode 100644 index 00000000..7ee309e7 --- /dev/null +++ b/evaluation/miccai_results_models.py @@ -0,0 +1,109 @@ +import pandas as pd +import numpy as np +import scipy.stats +import os +import json + +def mean_confidence_interval(data, confidence=0.95): + a = 1.0 * np.array(data) + n = len(a) + m, se = np.mean(a), scipy.stats.sem(a) + h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1) + return m, h #m-h, m+h + +def mean_std(data): + a = 1.0 * np.array(data) + return np.mean(a), np.std(a) + + +def compute_metrics(data_paths): + """Stores DICE and Relative Difference Volume (RVD) of CSV segmentations + results in list_paths for each model.""" + results = {} + for dp in data_paths: + data_path = f"./spine-generic-test-results/{dp}/evaluation_3Dmetrics.csv" + df = pd.read_csv(data_path) + volume_diff = df["RVD"] + + avg_vol, conf_vol = mean_std(volume_diff) + avg_dice, conf_dice = mean_std(df["Dice"]) + print(f"Model {dp} | \n \t DICE : {avg_dice*100} ± {conf_dice*100} \n \t VOLUME : {avg_vol*100} ± {conf_vol*100}") + results[dp] = {"avg_vol": avg_vol * 100, "conf_vol": conf_vol * 100,"avg_dice": avg_dice * 100, "conf_dice": conf_dice * 100} + + return results + +def get_metric_values(list_paths): + """Accumulates DICE and Relative Difference Volume (RVD) of CSV segmentations + results in list_paths.""" + dices = [] + volume_diffs = [] + for dp in list_paths: + data_path = f"./spine-generic-test-results/{dp}/evaluation_3Dmetrics.csv" + df = pd.read_csv(data_path) + volume_diff = df["RVD"] + dice = df["Dice"] + dices = np.concatenate((dices, np.array(dice)), axis=None) + volume_diffs = np.concatenate((volume_diffs, np.array(volume_diff)), axis=None) + return *mean_std(dices), *mean_std(volume_diffs) + + +if __name__ == "__main__": + + contrasts = ["T1w", "T2w", "T2star", "rec-average_dwi", "flip-1_mt-on_MTS", "flip-2_mt-off_MTS", "all"] + spec_contrasts = [c for c in contrasts if c != "all"] + methods = ["meanGT", "hard"] + aug_methods = ["hard", "soft"] + results_path = "./temp_results" + list_paths = [f"{method}_{aug_method}_{contrast}_seed=15" for method in methods for aug_method in aug_methods for contrast in contrasts] + + ## Aggregated results (per_contrast and all_contrast) + aggregated_results = {} + for method in methods: + for aug_method in aug_methods: + for tp in ["percontrast", "allcontrast"]: + if tp == "percontrast": + avg_dice, conf_dice, avg_vol, conf_vol = get_metric_values([f"{method}_{aug_method}_{c}_seed=15" for c in spec_contrasts]) + + else: + avg_dice, conf_dice, avg_vol, conf_vol = get_metric_values([f"{method}_{aug_method}_all_seed=15"]) + aggregated_results[f"{method}_{aug_method}_{tp}"] = {"avg_vol": avg_vol * 100, "conf_vol": conf_vol * 100,"avg_dice": avg_dice * 100, "conf_dice": conf_dice * 100} + + with open("./spine-generic-test-results/miccai_aggregated_results.json", "w") as fp: + json.dump(aggregated_results, fp, indent=4) + with open("./spine-generic-test-results/miccai_aggregated_table_export.txt", "w") as fp: + for key, value in aggregated_results.items(): + line = "\\texttt" + "{" + f"{key}" + "}" + f"& {round(value['avg_dice'],2)} ± {round(value['conf_dice'],2)} & {round(value['avg_vol'],2)} ± {round(value['conf_vol'],2)} \\\\ \n" + fp.write(line) + + ## All 28 models results + key_paths = {} + for method in methods: + c_m = "soft\\_average" if method == "meanGT" else "hard" + for aug_method in aug_methods: + #ag_m = "soft" + for contrast in contrasts: + if "flip-1" in contrast : + c_con = "MTS-ON" + elif "flip-2" in contrast : + c_con = "MTS-OFF" + elif "all" in contrast: + c_con = "allcontrast" + elif "T2star" in contrast: + c_con = "T2star" + elif "dwi" in contrast: + c_con = "DWI" + else: + c_con = contrast + key_paths[f"{method}_{aug_method}_{contrast}_seed=15"] = ("DL\_" + f"{c_m}" + "\_" + f"{aug_method}" + "\_" + f"{c_con}" ) + + results = compute_metrics(list(key_paths.keys())) + with open ("./spine-generic-test-results/miccai_results.json", "w") as fp: + json.dump(results, fp, indent=4) + + with open("./spine-generic-test-results/miccai_table_export.txt", "w") as fp: + names = [] + for key, value in results.items(): + names.append(key + "\n") + line = "\\texttt" + "{" + f"{key_paths[key]}" + "}" + f"& {round(value['avg_dice'],2)} ± {round(value['conf_dice'],2)} & {round(value['avg_vol'],2)} ± {round(value['conf_vol'],2)} \\\\ \n" + fp.write(line) + \ No newline at end of file diff --git a/training_scripts/acq-MTon_MTS/training_run.sh b/training_scripts/acq-MTon_MTS/training_run.sh new file mode 100644 index 00000000..57909f9d --- /dev/null +++ b/training_scripts/acq-MTon_MTS/training_run.sh @@ -0,0 +1,19 @@ +####### Training Run ####### +seeds=(15) +config_types=("hard_hard" "hard_soft" "meanGT_soft" "meanGT_hard") +contrasts=("flip-1_mt-on_MTS") # We can't differentiate between variants of MTS + +for seed in ${seeds[@]} +do + for config in ${config_types[@]} + do + for contrast in ${contrasts[@]} + do + sleep 5 + output_dir=./results/miccai2023/"$config"_"$contrast"_seed="$seed" + echo $output_dir + mkdir $output_dir + CUDA_VISIBLE=0 ivadomed --train -c ./config/miccai2023/"$config"_"$contrast"_seed="$seed".json --path-output $output_dir + done + done +done \ No newline at end of file diff --git a/training_scripts/acq-T1w_MTS/training_run.sh b/training_scripts/acq-T1w_MTS/training_run.sh new file mode 100644 index 00000000..b365b2ec --- /dev/null +++ b/training_scripts/acq-T1w_MTS/training_run.sh @@ -0,0 +1,19 @@ +####### Training Run ####### +seeds=(15) +config_types=("hard_hard" "hard_soft" "meanGT_soft" "meanGT_hard") +contrasts=("flip-2_mt-off_MTS") # We can't differentiate between variants of MTS + +for seed in ${seeds[@]} +do + for config in ${config_types[@]} + do + for contrast in ${contrasts[@]} + do + sleep 5 + output_dir=./results/miccai2023/"$config"_"$contrast"_seed="$seed" + echo $output_dir + mkdir $output_dir + CUDA_VISIBLE=1 ivadomed --train -c ./config/miccai2023/"$config"_"$contrast"_seed="$seed".json --path-output $output_dir + done + done +done \ No newline at end of file diff --git a/training_scripts/all/training_run.sh b/training_scripts/all/training_run.sh new file mode 100644 index 00000000..785b4b39 --- /dev/null +++ b/training_scripts/all/training_run.sh @@ -0,0 +1,21 @@ +####### Training Run ####### +seeds=(15) +config_types=("hard_hard" "hard_soft" "meanGT_soft" "meanGT_hard") +contrasts=("T1w" "T2w" "T2star" "rec-average_dwi" "all") + +for seed in ${seeds[@]} +do + for config in ${config_types[@]} + do + for contrast in ${contrasts[@]} + do + sleep 5 + #echo ./batch_configs/"$config"_"$contrast"_seed="$seed".json + output_dir=./results/miccai2023/"$config"_"$contrast"_seed="$seed" + echo $output_dir + mkdir $output_dir + #echo ./batch_configs/"$config"_"$contrast"_seed="$seed".json + CUDA_VISIBLE=2 ivadomed --train -c ./config/miccai2023/"$config"_"$contrast"_seed="$seed".json --path-output $output_dir + done + done +done \ No newline at end of file diff --git a/utils/change_mts_filenames.py b/utils/change_mts_filenames.py new file mode 100644 index 00000000..b98570a3 --- /dev/null +++ b/utils/change_mts_filenames.py @@ -0,0 +1,55 @@ +""" +python config_generator.py --config config_templates/hard_hard.json \ + --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ + --ofolder joblibs/MTS/T1w \ + --contrasts T1w T2w T2star rec-average_dwi flip-2_mt-off_MTS flip-1_mt-on_MTS \ + --seeds 15 + +python config_generator.py --config config_templates/hard_soft.json \ + --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ + --ofolder joblibs/MTS/T1w \ + --contrasts T1w T2w T2star rec-average_dwi flip-2_mt-off_MTS flip-1_mt-on_MTS \ + --seeds 15 + +python config_generator.py --config config_templates/meanGT_soft.json \ + --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/temp/adrian/contrast-agnostic-seg-models/data_processed_clean \ + --ofolder joblibs/MTS/all \ + --contrasts T1w T2w T2star rec-average_dwi flip-1_mt-on_MTS flip-2_mt-off_MTS \ + --seeds 15 + +python config_generator.py --config config_templates/meanGT_hard.json \ + --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ + --ofolder joblibs/MTS/T1w \ + --contrasts T1w T2w T2star rec-average_dwi flip-2_mt-off_MTS flip-1_mt-on_MTS \ + --seeds 15 +""" +import os +from glob import glob + +if __name__ == "__main__": + user = "adelba" # POLYGRAMS + user_temp_folder = "adrian" # DUKE TEMP FOLDER NAME + dataset_type = "data_processed_clean" + + dir_base = f"/home/GRAMES.POLYMTL.CA/{user}/duke/temp/{user_temp_folder}/contrast-agnostic-seg-models/{dataset_type}/**/**/*" + dir_labels = f"/home/GRAMES.POLYMTL.CA/{user}/duke/temp/{user_temp_folder}/contrast-agnostic-seg-models/{dataset_type}/derivatives/labels/**/**/*" + dir_soft_labels = f"/home/GRAMES.POLYMTL.CA/{user}/duke/temp/{user_temp_folder}/contrast-agnostic-seg-models/{dataset_type}/derivatives/labels_softseg/**/**/*" + + files_base = [fn for fn in glob(dir_base) if os.path.isfile(fn)] + files_labels = [fn for fn in glob(dir_labels) if os.path.isfile(fn)] + files_soft_labels = [fn for fn in glob(dir_soft_labels) if os.path.isfile(fn)] + + for dr in [files_base, files_labels, files_soft_labels]: + for f in dr: + base_path = os.path.basename(f) + if "acq-MTon_MTS" in base_path: + new_filename = f.replace("acq-MTon_MTS", "flip-1_mt-on_MTS") + assert dataset_type != "data_processed_clean_T1w_MTS" + os.rename(f, new_filename) + elif "acq-T1w_MTS" in base_path: + new_filename = f.replace("acq-T1w_MTS", "flip-2_mt-off_MTS") + assert dataset_type != "data_processed_clean_MTon_MTS" + os.rename(f, new_filename) + else: + continue + print(f"Replaced : {base_path} --> {os.path.basename(new_filename)}") diff --git a/utils/config_generator.py b/utils/config_generator.py new file mode 100644 index 00000000..7effc2d9 --- /dev/null +++ b/utils/config_generator.py @@ -0,0 +1,169 @@ +""" +Script that takes as input an ivadomed config (JSON) & replaces the following dynamic string params: + - : The contrast name, you can name it however you like, e.g., T1w, T2w, T1wANDT2w + - : The contrast param name, has to match file suffix unlike + - : The .joblib file to use to split the dataset into train-val-test + - : The seed to use +This script creates several config files for different contrast and seed scenarios +Inputs: + --config: Path to the base ivadomed config (JSON) with dynamic string params + --datasets: List of BIDS dataset folders + --ofolder: Output folder for .joblib files + --contrasts: Replaces + --seeds: Replaces +Example usage: +python config_generator.py --config config/meanGT_soft.json \ + --datasets /home/GRAMES.POLYMTL.CA/uzmac/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-preprocess-all-2022-08-21-final/data_processed_clean \ + --ofolder joblibs \ + --contrasts T1w T2w T2star rec-average_dwi \ + --seeds 42 15 34 98 62 +""" + +import glob +import os +import json +import pandas as pd +import joblib +import random +import numpy as np +import argparse +from collections import defaultdict + +parser = argparse.ArgumentParser() +parser.add_argument("--config", type=str, required=True, help="Path to the ivadomed config (JSON)") +parser.add_argument("--datasets", required=True, nargs="*", help="List of BIDS dataset folders") +parser.add_argument("--ofolder", type=str, default="joblibs", help="Output folder for .joblib files") +parser.add_argument("--contrasts", required=True, nargs="*", help="Contrasts to generate .joblib files for and replace ") +parser.add_argument("--seeds", type=int, default=42, nargs="*", help="Seed for randomly distributing subjects into train, validation, and testing and replaces ") +args = parser.parse_args() + +# Check validity of user inputs +assert args.config.endswith('.json') +assert all([os.path.exists(dataset) for dataset in args.datasets]) + +# Create output directory if it doesn't exists +if not os.path.exists(args.ofolder): + os.makedirs(args.ofolder) + +for seed in args.seeds: + # Set random seeds for reproducibility + random.seed(seed) + np.random.seed(seed) + + # Merge multiple TSV files from multiple BIDS datasets (if applicable) into single data frame + df_merged = pd.read_table(os.path.join(args.datasets[0], 'participants.tsv'), encoding="ISO-8859-1") + # Convert to string to get rid of potential TypeError during merging within the same column + df_merged = df_merged.astype(str) + # Add the BIDS path to the data frame + df_merged['bids_path'] = [args.datasets[0]] * len(df_merged) + + for i in range(1, len(args.datasets)): + df_next = pd.read_table(os.path.join(args.datasets[i], 'participants.tsv'), encoding="ISO-8859-1") + df_next = df_next.astype(str) + df_next['bids_path'] = [args.datasets[i]] * len(df_next) + # Merge the .tsv files (This keeps also non-overlapping fields) + df_merged = pd.merge(left=df_merged, right=df_next, how='outer') + + print('Got following BIDS datasets: ', set(df_merged['bids_path'].values.tolist())) + print('Generating joblibs for following contrasts: ', args.contrasts) + + # Set train, validation, and test split percentages + pct_train, pct_validation, pct_test = 0.6, 0.2, 0.2 + assert pct_train + pct_validation + pct_test == 1.0 + + # Split subjects into train, validation, and test groups + subs = df_merged['participant_id'].values.tolist() + np.random.shuffle(subs) + train_subs = subs[:int(len(subs) * pct_train)] + validation_subs = subs[int(len(subs) * pct_train): int(len(subs) * (pct_train + pct_validation))] + test_subs = subs[int(len(subs) * (pct_train + pct_validation)):] + print('Got %d train, %d validation, and %d test subjects!' % (len(train_subs), len(validation_subs), len(test_subs))) + + jobdicts = [] + for contrast in args.contrasts: + train_subs_cur, validation_subs_cur, test_subs_cur = [], [], [] + for sub in train_subs: + bids_path = df_merged[df_merged['participant_id'] == sub]['bids_path'].values.tolist()[0] + files = glob.glob(os.path.join(bids_path, sub) + '/**/*%s.nii.gz' % contrast, recursive=True) + if len(files) != 0: + train_subs_cur.append('%s_%s.nii.gz' % (sub, contrast)) + for sub in validation_subs: + bids_path = df_merged[df_merged['participant_id'] == sub]['bids_path'].values.tolist()[0] + files = glob.glob(os.path.join(bids_path, sub) + '/**/*%s.nii.gz' % contrast, recursive=True) + if len(files) != 0: + validation_subs_cur.append('%s_%s.nii.gz' % (sub, contrast)) + for sub in test_subs: + bids_path = df_merged[df_merged['participant_id'] == sub]['bids_path'].values.tolist()[0] + files = glob.glob(os.path.join(bids_path, sub) + '/**/*%s.nii.gz' % contrast, recursive=True) + if len(files) != 0: + test_subs_cur.append('%s_%s.nii.gz' % (sub, contrast)) + + jobdict = {"train": train_subs_cur, "valid": validation_subs_cur, "test": test_subs_cur} + jobdicts.append(jobdict) + joblib.dump(jobdict, os.path.join(args.ofolder, "split_datasets_%s_seed=%s.joblib" % (contrast, seed))) + + # Generate one final joblib for all contrast training + jobdict_all = {"train": [], "valid": [], "test": []} + for i in range(len(jobdicts)): + jobdict = jobdicts[i] + for key, values in jobdict.items(): + for value in values: + jobdict_all[key].append(value) + joblib.dump(jobdict_all, os.path.join(args.ofolder, "split_datasets_all_seed=%s.joblib" % seed)) + +# Read config +config_dir, config_fname = os.path.dirname(args.config), os.path.basename(args.config) +config = json.load(open(args.config)) + +for seed in args.seeds: + seed = str(seed) + contrast_params = [] + for contrast in args.contrasts: + # Adjust contrast param for specific use cases + contrast_param = contrast + if contrast == 'rec-average_dwi': + contrast_param = 'dwi' + contrast_params.append(contrast_param) + + # Convert config to string and replace the supplied parameters + config_str = json.dumps(config).\ + replace('', contrast).\ + replace('', contrast_param).\ + replace('', os.path.join(args.ofolder, 'split_datasets_%s_seed=%s.joblib' % (contrast, seed))).\ + replace('', seed) + + # Get config back with replacements + config_filled = json.loads(config_str) + config_filled_path = os.path.join( + config_dir, + '%s_%s_seed=%s.json' % (os.path.splitext(config_fname)[0], contrast, seed) + ) + + # Write back the config + with open(config_filled_path, 'w', encoding='utf-8') as f: + json.dump(config_filled, f, ensure_ascii=False, indent=4) + print('Created config: %s' % config_filled_path) + + # Convert config to string and replace the supplied parameters + config_str = json.dumps(config). \ + replace('', 'all'). \ + replace('', ','.join(contrast_params)). \ + replace('', os.path.join(args.ofolder, 'split_datasets_all_seed=%s.joblib' % seed)). \ + replace('', seed) + + # Get config back with replacements + config_filled = json.loads(config_str) + + # Write combined contrasts in a list format + for key in ["training_validation", "testing"]: + config_filled["loader_parameters"]["contrast_params"][key] = config_filled["loader_parameters"]["contrast_params"][key][0].split(',') + + config_filled_path = os.path.join( + config_dir, + '%s_%s_seed=%s.json' % (os.path.splitext(config_fname)[0], 'all', seed) + ) + + # Write back the config + with open(config_filled_path, 'w', encoding='utf-8') as f: + json.dump(config_filled, f, ensure_ascii=False, indent=4) + print('Created config: %s' % config_filled_path) \ No newline at end of file diff --git a/utils/create_joblibs.sh b/utils/create_joblibs.sh new file mode 100644 index 00000000..c0b0ee8e --- /dev/null +++ b/utils/create_joblibs.sh @@ -0,0 +1,30 @@ +####### Config creation ####### +## Specific the contrasts you would like to consider during your experiments. +## You would need to create the config file for each one of your config +## template the following way: + + +#python config_generator.py --config config_templates/hard_hard.json \ +# --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ +# --ofolder joblibs/group-8 \ +# --contrasts T1w T2w T2star rec-average_dwi \ +# --seeds 15 +# +# +#python config_generator.py --config config_templates/hard_soft.json \ +# --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ +# --ofolder joblibs/group-8 \ +# --contrasts T1w T2w T2star rec-average_dwi \ +# --seeds 15 + +python config_generator.py --config config_templates/meanGT_soft.json \ + --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ + --ofolder joblibs/group-8 \ + --contrasts T1w T2w T2star rec-average_dwi \ + --seeds 15 + +#python config_generator.py --config config_templates/meanGT_hard.json \ +# --datasets /home/GRAMES.POLYMTL.CA/adelba/duke/projects/ivadomed/contrast-agnostic-seg/contrast-agnostic-centerofmass-preprocess-clean-all-2022-10-22/data_processed_clean \ +# --ofolder joblibs/group-8 \ +# --contrasts T1w T2w T2star rec-average_dwi \ +# --seeds 15