From 9c7085320e62dc7c53ece8f8cb813459f3e2c740 Mon Sep 17 00:00:00 2001 From: Rafael Garcia-Dias Date: Thu, 6 Feb 2025 12:47:24 +0000 Subject: [PATCH] Migrate Brain Image Synthesis Latent Diffusion from GenerativeModels to model-zoo (#722) Fixes # **No issue assigned** ### Description This is part of the effort on deprecating GenerativeModels and having all models available in the model-zoo instead. ### Status **Ready** ### Please ensure all the checkboxes: - [x] Codeformat tests passed locally by running `./runtests.sh --codeformat`. - [ ] In-line docstrings updated. - [ ] Update `version` and `changelog` in `metadata.json` if changing an existing bundle. - [ ] Please ensure the naming rules in config files meet our requirements (please refer to: `CONTRIBUTING.md`). - [x] Ensure versions of packages such as `monai`, `pytorch` and `numpy` are correct in `metadata.json`. - [ ] Descriptions should be consistent with the content, such as `eval_metrics` of the provided weights and TorchScript modules. - [x] Files larger than 25MB are excluded and replaced by providing download links in `large_file.yml`. - [x] Avoid using path that contains personal information within config files (such as use `/home/your_name/` for `"bundle_root"`). --------- Signed-off-by: Virginia Signed-off-by: Rafael Garcia-Dias Signed-off-by: Eric Kerfoot <17726042+ericspod@users.noreply.github.com> Signed-off-by: Eric Kerfoot Co-authored-by: Virginia Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Virginia Fernandez <61539159+virginiafdez@users.noreply.github.com> Co-authored-by: Eric Kerfoot <17726042+ericspod@users.noreply.github.com> Co-authored-by: Eric Kerfoot --- .gitignore | 2 + ci/bundle_custom_data.py | 2 + ..._image_synthesis_latent_diffusion_model.py | 47 ++++ ci/verify_bundle.py | 2 + .../LICENSE | 201 ++++++++++++++++++ .../configs/inference.json | 112 ++++++++++ .../configs/logging.conf | 21 ++ .../configs/metadata.json | 77 +++++++ .../docs/README.md | 75 +++++++ .../docs/figure_1.png | Bin 0 -> 112567 bytes .../large_files.yml | 9 + .../scripts/__init__.py | 0 .../scripts/sampler.py | 45 ++++ 13 files changed, 593 insertions(+) create mode 100644 ci/unit_tests/test_brain_image_synthesis_latent_diffusion_model.py create mode 100644 models/brain_image_synthesis_latent_diffusion_model/LICENSE create mode 100644 models/brain_image_synthesis_latent_diffusion_model/configs/inference.json create mode 100644 models/brain_image_synthesis_latent_diffusion_model/configs/logging.conf create mode 100644 models/brain_image_synthesis_latent_diffusion_model/configs/metadata.json create mode 100644 models/brain_image_synthesis_latent_diffusion_model/docs/README.md create mode 100644 models/brain_image_synthesis_latent_diffusion_model/docs/figure_1.png create mode 100644 models/brain_image_synthesis_latent_diffusion_model/large_files.yml create mode 100644 models/brain_image_synthesis_latent_diffusion_model/scripts/__init__.py create mode 100644 models/brain_image_synthesis_latent_diffusion_model/scripts/sampler.py diff --git a/.gitignore b/.gitignore index fedd499d..351e54b8 100644 --- a/.gitignore +++ b/.gitignore @@ -129,3 +129,5 @@ temp/ # VSCode .vscode/ *.zip +models/*/models/* +models/*/output/* diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index 0ac2bdef..6f20d112 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -22,6 +22,7 @@ "brats_mri_axial_slices_generative_diffusion", "maisi_ct_generative", "cxr_image_synthesis_latent_diffusion_model", + "brain_image_synthesis_latent_diffusion_model", ] # This list is used for our CI tests to determine whether a bundle contains the preferred files. @@ -45,6 +46,7 @@ "vista2d", "mednist_ddpm", "cxr_image_synthesis_latent_diffusion_model", + "brain_image_synthesis_latent_diffusion_model", ] # This list is used for our CI tests to determine whether a bundle needs to be tested after downloading diff --git a/ci/unit_tests/test_brain_image_synthesis_latent_diffusion_model.py b/ci/unit_tests/test_brain_image_synthesis_latent_diffusion_model.py new file mode 100644 index 00000000..93fa0c40 --- /dev/null +++ b/ci/unit_tests/test_brain_image_synthesis_latent_diffusion_model.py @@ -0,0 +1,47 @@ +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import unittest + +from monai.bundle import ConfigWorkflow +from parameterized import parameterized +from utils import check_workflow + +TEST_CASE_1 = [ # inference + { + "bundle_root": "models/brain_image_synthesis_latent_diffusion_model", + "gender": 1.0, + "age": 0.7, + "ventricular_vol": 0.7, + "brain_vol": 0.5, + } +] + + +class BrainImageSynthesisLatentDiffusionModel(unittest.TestCase): + @parameterized.expand([TEST_CASE_1]) + def test_inference(self, params): + bundle_root = params["bundle_root"] + inference_file = os.path.join(bundle_root, "configs/inference.json") + trainer = ConfigWorkflow( + workflow_type="inference", + config_file=inference_file, + logging_file=os.path.join(bundle_root, "configs/logging.conf"), + meta_file=os.path.join(bundle_root, "configs/metadata.json"), + **params, + ) + check_workflow(trainer, check_properties=True) + + +if __name__ == "__main__": + loader = unittest.TestLoader() + unittest.main(testLoader=loader) diff --git a/ci/verify_bundle.py b/ci/verify_bundle.py index 7beca3e5..283c09b1 100644 --- a/ci/verify_bundle.py +++ b/ci/verify_bundle.py @@ -54,6 +54,8 @@ def _get_weights_names(bundle: str): if bundle == "pediatric_abdominal_ct_segmentation": # skip test for this bundle's ts file return "dynunet_FT.pt", None + if bundle == "brain_image_synthesis_latent_diffusion": + return "autoencoder.pt", "model.pt" if bundle == "cxr_image_synthesis_latent_diffusion_model": return "autoencoder.pt", None return "model.pt", "model.ts" diff --git a/models/brain_image_synthesis_latent_diffusion_model/LICENSE b/models/brain_image_synthesis_latent_diffusion_model/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/models/brain_image_synthesis_latent_diffusion_model/configs/inference.json b/models/brain_image_synthesis_latent_diffusion_model/configs/inference.json new file mode 100644 index 00000000..206d1130 --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/configs/inference.json @@ -0,0 +1,112 @@ +{ + "imports": [ + "$import torch", + "$from datetime import datetime", + "$from pathlib import Path" + ], + "bundle_root": ".", + "dataset_dir": "", + "dataset": "", + "evaluator": "", + "inferer": "", + "load_old": 1, + "model_dir": "$@bundle_root + '/models'", + "output_dir": "$@bundle_root + '/output'", + "create_output_dir": "$Path(@output_dir).mkdir(exist_ok=True)", + "gender": 0.0, + "age": 0.1, + "ventricular_vol": 0.2, + "brain_vol": 0.4, + "device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')", + "conditioning": "$torch.tensor([[@gender, @age, @ventricular_vol, @brain_vol]]).to(@device).unsqueeze(1)", + "out_file": "$datetime.now().strftime('sample_%H%M%S_%d%m%Y') + '_' + str(@gender) + '_' + str(@age) + '_' + str(@ventricular_vol) + '_' + str(@brain_vol)", + "autoencoder_def": { + "_target_": "monai.networks.nets.AutoencoderKL", + "spatial_dims": 3, + "in_channels": 1, + "out_channels": 1, + "latent_channels": 3, + "channels": [ + 64, + 128, + 128, + 128 + ], + "num_res_blocks": 2, + "norm_num_groups": 32, + "norm_eps": 1e-06, + "attention_levels": [ + false, + false, + false, + false + ], + "with_encoder_nonlocal_attn": false, + "with_decoder_nonlocal_attn": false + }, + "network_def": "@autoencoder_def", + "load_autoencoder_path": "$@model_dir + '/autoencoder.pt'", + "load_autoencoder_func": "$@autoencoder_def.load_old_state_dict if bool(@load_old) else @autoencoder_def.load_state_dict", + "load_autoencoder": "$@load_autoencoder_func(torch.load(@load_autoencoder_path))", + "autoencoder": "$@autoencoder_def.to(@device)", + "diffusion_def": { + "_target_": "monai.networks.nets.DiffusionModelUNet", + "spatial_dims": 3, + "in_channels": 7, + "out_channels": 3, + "channels": [ + 256, + 512, + 768 + ], + "num_res_blocks": 2, + "attention_levels": [ + false, + true, + true + ], + "norm_num_groups": 32, + "norm_eps": 1e-06, + "resblock_updown": true, + "num_head_channels": [ + 0, + 512, + 768 + ], + "with_conditioning": true, + "transformer_num_layers": 1, + "cross_attention_dim": 4, + "upcast_attention": true, + "use_flash_attention": false + }, + "load_diffusion_path": "$@model_dir + '/model.pt'", + "load_diffusion_func": "$@diffusion_def.load_old_state_dict if bool(@load_old) else @diffusion_def.load_state_dict", + "load_diffusion": "$@load_diffusion_func(torch.load(@load_diffusion_path))", + "diffusion": "$@diffusion_def.to(@device)", + "scheduler": { + "_target_": "monai.networks.schedulers.DDIMScheduler", + "_requires_": [ + "@load_diffusion", + "@load_autoencoder" + ], + "beta_start": 0.0015, + "beta_end": 0.0205, + "num_train_timesteps": 1000, + "schedule": "scaled_linear_beta", + "clip_sample": false + }, + "noise": "$torch.randn((1, 3, 20, 28, 20)).to(@device)", + "set_timesteps": "$@scheduler.set_timesteps(num_inference_steps=50)", + "sampler": { + "_target_": "scripts.sampler.Sampler", + "_requires_": "@set_timesteps" + }, + "sample": "$@sampler.sampling_fn(@noise, @autoencoder, @diffusion, @scheduler, @conditioning)", + "saver": { + "_target_": "SaveImage", + "_requires_": "@create_output_dir", + "output_dir": "@output_dir", + "output_postfix": "@out_file" + }, + "run": "$@saver(@sample[0][0])" +} diff --git a/models/brain_image_synthesis_latent_diffusion_model/configs/logging.conf b/models/brain_image_synthesis_latent_diffusion_model/configs/logging.conf new file mode 100644 index 00000000..91c1a21c --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/configs/logging.conf @@ -0,0 +1,21 @@ +[loggers] +keys=root + +[handlers] +keys=consoleHandler + +[formatters] +keys=fullFormatter + +[logger_root] +level=INFO +handlers=consoleHandler + +[handler_consoleHandler] +class=StreamHandler +level=INFO +formatter=fullFormatter +args=(sys.stdout,) + +[formatter_fullFormatter] +format=%(asctime)s - %(name)s - %(levelname)s - %(message)s diff --git a/models/brain_image_synthesis_latent_diffusion_model/configs/metadata.json b/models/brain_image_synthesis_latent_diffusion_model/configs/metadata.json new file mode 100644 index 00000000..40da5460 --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/configs/metadata.json @@ -0,0 +1,77 @@ +{ + "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20240725.json", + "version": "1.0.0", + "changelog": { + "1.0.0": "Initial release" + }, + "monai_version": "1.4.0", + "pytorch_version": "2.5.1", + "numpy_version": "1.26.4", + "required_packages_version": { + "nibabel": "5.3.2" + }, + "task": "Brain image synthesis", + "description": "A generative model for creating high-resolution 3D brain MRI based on UK Biobank", + "authors": "Walter H. L. Pinaya, Petru-Daniel Tudosiu, Jessica Dafflon, Pedro F Da Costa, Virginia Fernandez, Parashkev Nachev, Sebastien Ourselin, and M. Jorge Cardoso", + "copyright": "Copyright (c) MONAI Consortium", + "data_source": "https://www.ukbiobank.ac.uk/", + "data_type": "nibabel", + "image_classes": "T1w head MRI with 1x1x1 mm voxel size", + "eval_metrics": { + "fid": 0.0076, + "msssim": 0.6555, + "4gmsssim": 0.3883 + }, + "intended_use": "This is a research tool/prototype and not to be used clinically", + "references": [ + "Pinaya, Walter HL, et al. \"Brain imaging generation with latent diffusion models.\" MICCAI Workshop on Deep Generative Models. Springer, Cham, 2022." + ], + "network_data_format": { + "inputs": { + "image": { + "type": "tabular", + "num_channels": 1, + "dtype": "float32", + "value_range": [ + 0, + 1 + ], + "format": "nii", + "spatial_shape": [ + 160, + 224, + 160 + ], + "is_patch_data": false, + "channel_def": { + "0": "Gender", + "1": "Age", + "2": "Ventricular volume", + "3": "Brain volume" + } + } + }, + "outputs": { + "pred": { + "type": "image", + "format": "image", + "num_channels": 1, + "spatial_shape": [ + 160, + 224, + 160 + ], + "dtype": "float32", + "value_range": [ + 0, + 1 + ], + "modality": "MR", + "is_patch_data": false, + "channel_def": { + "0": "T1w" + } + } + } + } +} diff --git a/models/brain_image_synthesis_latent_diffusion_model/docs/README.md b/models/brain_image_synthesis_latent_diffusion_model/docs/README.md new file mode 100644 index 00000000..3d80474b --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/docs/README.md @@ -0,0 +1,75 @@ +# Brain Imaging Generation with Latent Diffusion Models + +### **Authors** + +Walter H. L. Pinaya, Petru-Daniel Tudosiu, Jessica Dafflon, Pedro F Da Costa, Virginia Fernandez, Parashkev Nachev, +Sebastien Ourselin, and M. Jorge Cardoso + +### **Tags** +Synthetic data, Latent Diffusion Model, Generative model, Brain Imaging + +## **Model Description** +This model is trained using the Latent Diffusion Model architecture [1] and is used for the synthesis of conditioned 3D +brain MRI data. The model is divided into two parts: an autoencoder with a KL-regularisation model that compresses data +into a latent space and a diffusion model that learns to generate conditioned synthetic latent representations. This +model is conditioned on age, sex, the volume of ventricular cerebrospinal fluid, and brain volume normalised for head size. + +![](./figure_1.png)
+

+Figure 1 - Synthetic image from the model.

+ + +## **Data** +The model was trained on brain data from 31,740 participants from the UK Biobank [2]. We used high-resolution 3D T1w MRI with voxel size of 1mm3, resulting in volumes with 160 x 224 x 160 voxels + +#### **Preprocessing** +We used UniRes [3] to perform a rigid body registration to a common MNI space for image pre-processing. The voxel intensity was normalised to be between [0, 1]. + +## **Performance** +This model achieves the following results on UK Biobank: an FID of 0.0076, an MS-SSIM of 0.6555, and a 4-G-R-SSIM of 0.3883. + +Please, check Table 1 of the original paper for more details regarding evaluation results. + + +## **commands example** + +Execute sampling: + +```shell +python -m monai.bundle run --config_file configs/inference.json --gender 1.0 --age 0.7 --ventricular_vol 0.7 --brain_vol 0.5 +``` + +All conditioning are expected to have values between 0 and 1 + +## Using a new version of the model + +If you want to use the checkpoints from a newly fine-tuned model, you need to set parameter load_old to 0 when you run inference, +to avoid the function load_old_state_dict being called instead of load_state_dict to be called, currently default, as it is +required to load the checkpoint from the original GenerativeModels repository. + +```shell +python -m monai.bundle run --config_file configs/inference.json --gender 1.0 --age 0.7 --ventricular_vol 0.7 --brain_vol 0.5 --load_old 0 +``` + +## **Citation Info** + +```bibtex +@inproceedings{pinaya2022brain, + title={Brain imaging generation with latent diffusion models}, + author={Pinaya, Walter HL and Tudosiu, Petru-Daniel and Dafflon, Jessica and Da Costa, Pedro F and Fernandez, Virginia and Nachev, Parashkev and Ourselin, Sebastien and Cardoso, M Jorge}, + booktitle={MICCAI Workshop on Deep Generative Models}, + pages={117--126}, + year={2022}, + organization={Springer} +} +``` + +## **References** + +Example: + +[1] Pinaya, Walter HL, et al. "Brain imaging generation with latent diffusion models." MICCAI Workshop on Deep Generative Models. Springer, Cham, 2022. + +[2] Sudlow, Cathie, et al. "UK biobank: an open access resource for identifying the causes of a wide range of complex diseases of middle and old age." PLoS medicine 12.3 (2015): e1001779. + +[3] Brudfors, Mikael, et al. "MRI super-resolution using multi-channel total variation." Annual Conference on Medical Image Understanding and Analysis. Springer, Cham, 2018. diff --git a/models/brain_image_synthesis_latent_diffusion_model/docs/figure_1.png b/models/brain_image_synthesis_latent_diffusion_model/docs/figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bed96a2184c96a4170de448fc57c0596ace9ed GIT binary patch literal 112567 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 EAMnCB^Z)<= literal 0 HcmV?d00001 diff --git a/models/brain_image_synthesis_latent_diffusion_model/large_files.yml b/models/brain_image_synthesis_latent_diffusion_model/large_files.yml new file mode 100644 index 00000000..5dbed08f --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/large_files.yml @@ -0,0 +1,9 @@ +large_files: + - path: "models/autoencoder.pt" + url: "https://drive.google.com/uc?export=download&id=1CZHwxHJWybOsDavipD0EorDPOo_mzNeX" + hash_val: "329e97b3085643ff235f11f049856242" + hash_type: "md5" + - path: "models/model.pt" + url: "https://drive.google.com/uc?export=download&id=1XO-ak93ZuOcGTCpgRtqgIeZq3dG5ExN6" + hash_val: "21c3047556fb671caf0556f1cce6ef22" + hash_type: "md5" diff --git a/models/brain_image_synthesis_latent_diffusion_model/scripts/__init__.py b/models/brain_image_synthesis_latent_diffusion_model/scripts/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/models/brain_image_synthesis_latent_diffusion_model/scripts/sampler.py b/models/brain_image_synthesis_latent_diffusion_model/scripts/sampler.py new file mode 100644 index 00000000..3058c470 --- /dev/null +++ b/models/brain_image_synthesis_latent_diffusion_model/scripts/sampler.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +import torch +import torch.nn as nn +from monai.utils import optional_import +from torch.cuda.amp import autocast + +tqdm, has_tqdm = optional_import("tqdm", name="tqdm") + + +class Sampler: + def __init__(self) -> None: + super().__init__() + + @torch.no_grad() + def sampling_fn( + self, + input_noise: torch.Tensor, + autoencoder_model: nn.Module, + diffusion_model: nn.Module, + scheduler: nn.Module, + conditioning: torch.Tensor, + ) -> torch.Tensor: + if has_tqdm: + progress_bar = tqdm(scheduler.timesteps) + else: + progress_bar = iter(scheduler.timesteps) + + image = input_noise + cond_concat = conditioning.squeeze(1).unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) + cond_concat = cond_concat.expand(list(cond_concat.shape[0:2]) + list(input_noise.shape[2:])) + for t in progress_bar: + with torch.no_grad(): + model_output = diffusion_model( + torch.cat((image, cond_concat), dim=1), + timesteps=torch.Tensor((t,)).to(input_noise.device).long(), + context=conditioning, + ) + image, _ = scheduler.step(model_output, t, image) + + with torch.no_grad(): + with autocast(): + sample = autoencoder_model.decode_stage_2_outputs(image) + + return sample