--- title: Medfusion App emoji: 🔬 colorFrom: pink colorTo: gray sdk: streamlit sdk_version: 1.15.2 app_file: streamlit/welcome.py pinned: false license: mit --- Medfusion - Medical Denoising Diffusion Probabilistic Model ============= Paper ======= Please see: [**Diffusion Probabilistic Models beat GANs on Medical 2D Images**]() ![](media/Medfusion.png) *Figure: Medfusion* ![](media/animation_eye.gif) ![](media/animation_histo.gif) ![](media/animation_chest.gif)\ *Figure: Eye fundus, chest X-ray and colon histology images generated with Medfusion (Warning color quality limited by .gif)* Demo ============= [Link]() to streamlit app. Install ============= Create virtual environment and install packages: \ `python -m venv venv` \ `source venv/bin/activate`\ `pip install -e .` Get Started ============= 1 Prepare Data ------------- * Go to [medical_diffusion/data/datasets/dataset_simple_2d.py](medical_diffusion/data/datasets/dataset_simple_2d.py) and create a new `SimpleDataset2D` or write your own Dataset. 2 Train Autoencoder ---------------- * Go to [scripts/train_latent_embedder_2d.py](scripts/train_latent_embedder_2d.py) and import your Dataset. * Load your dataset with eg. `SimpleDataModule` * Customize `VAE` to your needs * (Optional): Train a `VAEGAN` instead or load a pre-trained `VAE` and set `start_gan_train_step=-1` to start training of GAN immediately. 2.1 Evaluate Autoencoder ---------------- * Use [scripts/evaluate_latent_embedder.py](scripts/evaluate_latent_embedder.py) to evaluate the performance of the Autoencoder. 3 Train Diffusion ---------------- * Go to [scripts/train_diffusion.py](scripts/train_diffusion.py) and import/load your Dataset as before. * Load your pre-trained VAE or VAEGAN with `latent_embedder_checkpoint=...` * Use `cond_embedder = LabelEmbedder` for conditional training, otherwise `cond_embedder = None` 3.1 Evaluate Diffusion ---------------- * Go to [scripts/sample.py](scripts/sample.py) to sample a test image. * Go to [scripts/helpers/sample_dataset.py](scripts/helpers/sample_dataset.py) to sample a more reprensative sample size. * Use [scripts/evaluate_images.py](scripts/evaluate_images.py) to evaluate performance of sample (FID, Precision, Recall) Acknowledgment ============= * Code builds upon https://github.com/lucidrains/denoising-diffusion-pytorch