## Denoising Diffusion Probabilistic Model, in Pytorch Implementation of Denoising Diffusion Probabilistic Model in Pytorch. It is a new approach to generative modeling that may have the potential to rival GANs. It uses denoising score matching to estimate the gradient of the data distribution, followed by Langevin sampling to sample from the true distribution. This implementation was transcribed from the official Tensorflow version here and then modified to use ConvNext blocks instead of Resnets. [![PyPI version](https://badge.fury.io/py/denoising-diffusion-pytorch.svg)](https://badge.fury.io/py/denoising-diffusion-pytorch) ## Install ```bash $ pip install denoising_diffusion_pytorch ``` ## Usage ```python import torch from denoising_diffusion_pytorch import Unet, GaussianDiffusion model = Unet( dim = 64, dim_mults = (1, 2, 4, 8) ) diffusion = GaussianDiffusion( model, image_size = 128, timesteps = 1000, # number of steps loss_type = 'l1' # L1 or L2 ) training_images = torch.randn(8, 3, 128, 128) loss = diffusion(training_images) loss.backward() # after a lot of training sampled_images = diffusion.sample(batch_size = 4) sampled_images.shape # (4, 3, 128, 128) ``` Or, if you simply want to pass in a folder name and the desired image dimensions, you can use the `Trainer` class to easily train a model. ```python from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer model = Unet( dim = 64, dim_mults = (1, 2, 4, 8) ).cuda() diffusion = GaussianDiffusion( model, image_size = 128, timesteps = 1000, # number of steps loss_type = 'l1' # L1 or L2 ).cuda() trainer = Trainer( diffusion, 'path/to/your/images', train_batch_size = 32, train_lr = 2e-5, train_num_steps = 700000, # total training steps gradient_accumulate_every = 2, # gradient accumulation steps ema_decay = 0.995, # exponential moving average decay amp = True # turn on mixed precision ) trainer.train() ``` Samples and model checkpoints will be logged to `./results` periodically ## Citations ```bibtex @misc{ho2020denoising, title = {Denoising Diffusion Probabilistic Models}, author = {Jonathan Ho and Ajay Jain and Pieter Abbeel}, year = {2020}, eprint = {2006.11239}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } ``` ```bibtex @inproceedings{anonymous2021improved, title = {Improved Denoising Diffusion Probabilistic Models}, author = {Anonymous}, booktitle = {Submitted to International Conference on Learning Representations}, year = {2021}, url = {https://openreview.net/forum?id=-NEXDKk8gZ}, note = {under review} } ``` ```bibtex @misc{liu2022convnet, title = {A ConvNet for the 2020s}, author = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie}, year = {2022}, eprint = {2201.03545}, archivePrefix = {arXiv}, primaryClass = {cs.CV} } ```