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.