This repository is based on openai/improved-diffusion, with modifications for classifier conditioning and architecture improvements.
Download pre-trained models
We have released checkpoints for the main models in the paper. Before using these models, please review the corresponding model card to understand the intended use and limitations of these models.
Here are the download links for each model checkpoint:
To sample from these models, you can use the classifier_sample.py, image_sample.py, and super_res_sample.py scripts.
Here, we provide flags for sampling from all of these models.
We assume that you have downloaded the relevant model checkpoints into a folder called models/.
For these examples, we will generate 100 samples with batch size 4. Feel free to change these values.
Note for these sampling runs that you can set --classifier_scale 0 to sample from the base diffusion model.
You may also use the image_sample.py script instead of classifier_sample.py in that case.
These models are class-unconditional and correspond to a single LSUN class. Here, we show how to sample from lsun_bedroom.pt, but the other two LSUN checkpoints should work as well:
This table summarizes our ImageNet results for pure guided diffusion models:
Dataset
FID
Precision
Recall
ImageNet 64x64
2.07
0.74
0.63
ImageNet 128x128
2.97
0.78
0.59
ImageNet 256x256
4.59
0.82
0.52
ImageNet 512x512
7.72
0.87
0.42
This table shows the best results for high resolutions when using upsampling and guidance together:
Dataset
FID
Precision
Recall
ImageNet 256x256
3.94
0.83
0.53
ImageNet 512x512
3.85
0.84
0.53
Finally, here are the unguided results on individual LSUN classes:
Dataset
FID
Precision
Recall
LSUN Bedroom
1.90
0.66
0.51
LSUN Cat
5.57
0.63
0.52
LSUN Horse
2.57
0.71
0.55
Training models
Training diffusion models is described in the parent repository. Training a classifier is similar. We assume you have put training hyperparameters into a TRAIN_FLAGS variable, and classifier hyperparameters into a CLASSIFIER_FLAGS variable. Then you can run:
mpiexec -n N python scripts/classifier_train.py --data_dir path/to/imagenet $TRAIN_FLAGS $CLASSIFIER_FLAGS
Make sure to divide the batch size in TRAIN_FLAGS by the number of MPI processes you are using.
Here are flags for training the 128x128 classifier. You can modify these for training classifiers at other resolutions:
To sample for 250 timesteps without DDIM, replace --timestep_respacing ddim25 to --timestep_respacing 250, and replace --use_ddim True with --use_ddim False.
guided-diffusion
This is the codebase for Diffusion Models Beat GANS on Image Synthesis.
This repository is based on openai/improved-diffusion, with modifications for classifier conditioning and architecture improvements.
Download pre-trained models
We have released checkpoints for the main models in the paper. Before using these models, please review the corresponding model card to understand the intended use and limitations of these models.
Here are the download links for each model checkpoint:
Sampling from pre-trained models
To sample from these models, you can use the
classifier_sample.py
,image_sample.py
, andsuper_res_sample.py
scripts. Here, we provide flags for sampling from all of these models. We assume that you have downloaded the relevant model checkpoints into a folder calledmodels/
.For these examples, we will generate 100 samples with batch size 4. Feel free to change these values.
Classifier guidance
Note for these sampling runs that you can set
--classifier_scale 0
to sample from the base diffusion model. You may also use theimage_sample.py
script instead ofclassifier_sample.py
in that case.Upsampling
For these runs, we assume you have some base samples in a file
64_samples.npz
or128_samples.npz
for the two respective models.LSUN models
These models are class-unconditional and correspond to a single LSUN class. Here, we show how to sample from
lsun_bedroom.pt
, but the other two LSUN checkpoints should work as well:You can sample from
lsun_horse_nodropout.pt
by changing the dropout flag:Note that for these models, the best samples result from using 1000 timesteps:
Results
This table summarizes our ImageNet results for pure guided diffusion models:
This table shows the best results for high resolutions when using upsampling and guidance together:
Finally, here are the unguided results on individual LSUN classes:
Training models
Training diffusion models is described in the parent repository. Training a classifier is similar. We assume you have put training hyperparameters into a
TRAIN_FLAGS
variable, and classifier hyperparameters into aCLASSIFIER_FLAGS
variable. Then you can run:Make sure to divide the batch size in
TRAIN_FLAGS
by the number of MPI processes you are using.Here are flags for training the 128x128 classifier. You can modify these for training classifiers at other resolutions:
For sampling from a 128x128 classifier-guided model, 25 step DDIM:
To sample for 250 timesteps without DDIM, replace
--timestep_respacing ddim25
to--timestep_respacing 250
, and replace--use_ddim True
with--use_ddim False
.