From 7e3956ef74a6918f5eec3bfd08161166e5d0fb51 Mon Sep 17 00:00:00 2001
From: Justin <605492+justinpinkney@users.noreply.github.com>
Date: Sun, 4 Sep 2022 21:46:39 +0100
Subject: [PATCH] Img condition (#1)
* update reqs
* add image variations
* update readme
---
.gitignore | 7 +
README.md | 281 +-----------------
assets/img-vars.jpg | Bin 0 -> 453200 bytes
.../sd-image-condition-finetune.yaml | 134 +++++++++
ldm/models/diffusion/ddpm.py | 8 +-
ldm/modules/encoders/modules.py | 38 +++
main.py | 25 +-
requirements.txt | 9 +-
scripts/gradio_variations.py | 112 +++++++
scripts/image_variations.py | 122 ++++++++
10 files changed, 455 insertions(+), 281 deletions(-)
create mode 100644 .gitignore
create mode 100644 assets/img-vars.jpg
create mode 100644 configs/stable-diffusion/sd-image-condition-finetune.yaml
create mode 100644 scripts/gradio_variations.py
create mode 100644 scripts/image_variations.py
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5af5443
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+logs/
+dump/
+examples/
+outputs/
+flagged/
+*.egg-info
+__pycache__
\ No newline at end of file
diff --git a/README.md b/README.md
index 3738dde..5d9857c 100644
--- a/README.md
+++ b/README.md
@@ -1,278 +1,13 @@
-# Latent Diffusion Models
-[arXiv](https://arxiv.org/abs/2112.10752) | [BibTeX](#bibtex)
+# Experiments with Stable Diffusion
-
-
-
+## Image variations
+[![](assets/img-vars.jpg)](https://twitter.com/Buntworthy/status/1561703483316781057)
+_TODO describe in more detail_
-[**High-Resolution Image Synthesis with Latent Diffusion Models**](https://arxiv.org/abs/2112.10752)
-[Robin Rombach](https://github.com/rromb)\*,
-[Andreas Blattmann](https://github.com/ablattmann)\*,
-[Dominik Lorenz](https://github.com/qp-qp)\,
-[Patrick Esser](https://github.com/pesser),
-[BjΓΆrn Ommer](https://hci.iwr.uni-heidelberg.de/Staff/bommer)
-\* equal contribution
-
-
-
-
-
-## News
-### April 2022
-- Thanks to [Katherine Crowson](https://github.com/crowsonkb), classifier-free guidance received a ~2x speedup and the [PLMS sampler](https://arxiv.org/abs/2202.09778) is available. See also [this PR](https://github.com/CompVis/latent-diffusion/pull/51).
-
-- Our 1.45B [latent diffusion LAION model](#text-to-image) was integrated into [Huggingface Spaces π€](https://huggingface.co/spaces) using [Gradio](https://github.com/gradio-app/gradio). Try out the Web Demo: [![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue)](https://huggingface.co/spaces/multimodalart/latentdiffusion)
-
-- More pre-trained LDMs are available:
- - A 1.45B [model](#text-to-image) trained on the [LAION-400M](https://arxiv.org/abs/2111.02114) database.
- - A class-conditional model on ImageNet, achieving a FID of 3.6 when using [classifier-free guidance](https://openreview.net/pdf?id=qw8AKxfYbI) Available via a [colab notebook](https://colab.research.google.com/github/CompVis/latent-diffusion/blob/main/scripts/latent_imagenet_diffusion.ipynb) [![][colab]][colab-cin].
-
-## Requirements
-A suitable [conda](https://conda.io/) environment named `ldm` can be created
-and activated with:
-
-```
-conda env create -f environment.yaml
-conda activate ldm
-```
-
-# Pretrained Models
-A general list of all available checkpoints is available in via our [model zoo](#model-zoo).
-If you use any of these models in your work, we are always happy to receive a [citation](#bibtex).
-
-## Text-to-Image
-![text2img-figure](assets/txt2img-preview.png)
-
-
-Download the pre-trained weights (5.7GB)
-```
-mkdir -p models/ldm/text2img-large/
-wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt
-```
-and sample with
-```
-python scripts/txt2img.py --prompt "a virus monster is playing guitar, oil on canvas" --ddim_eta 0.0 --n_samples 4 --n_iter 4 --scale 5.0 --ddim_steps 50
-```
-This will save each sample individually as well as a grid of size `n_iter` x `n_samples` at the specified output location (default: `outputs/txt2img-samples`).
-Quality, sampling speed and diversity are best controlled via the `scale`, `ddim_steps` and `ddim_eta` arguments.
-As a rule of thumb, higher values of `scale` produce better samples at the cost of a reduced output diversity.
-Furthermore, increasing `ddim_steps` generally also gives higher quality samples, but returns are diminishing for values > 250.
-Fast sampling (i.e. low values of `ddim_steps`) while retaining good quality can be achieved by using `--ddim_eta 0.0`.
-Faster sampling (i.e. even lower values of `ddim_steps`) while retaining good quality can be achieved by using `--ddim_eta 0.0` and `--plms` (see [Pseudo Numerical Methods for Diffusion Models on Manifolds](https://arxiv.org/abs/2202.09778)).
-
-#### Beyond 256Β²
-
-For certain inputs, simply running the model in a convolutional fashion on larger features than it was trained on
-can sometimes result in interesting results. To try it out, tune the `H` and `W` arguments (which will be integer-divided
-by 8 in order to calculate the corresponding latent size), e.g. run
-
-```
-python scripts/txt2img.py --prompt "a sunset behind a mountain range, vector image" --ddim_eta 1.0 --n_samples 1 --n_iter 1 --H 384 --W 1024 --scale 5.0
-```
-to create a sample of size 384x1024. Note, however, that controllability is reduced compared to the 256x256 setting.
-
-The example below was generated using the above command.
-![text2img-figure-conv](assets/txt2img-convsample.png)
-
-
-
-## Inpainting
-![inpainting](assets/inpainting.png)
-
-Download the pre-trained weights
-```
-wget -O models/ldm/inpainting_big/last.ckpt https://heibox.uni-heidelberg.de/f/4d9ac7ea40c64582b7c9/?dl=1
-```
-
-and sample with
-```
-python scripts/inpaint.py --indir data/inpainting_examples/ --outdir outputs/inpainting_results
-```
-`indir` should contain images `*.png` and masks `_mask.png` like
-the examples provided in `data/inpainting_examples`.
-
-## Class-Conditional ImageNet
-
-Available via a [notebook](scripts/latent_imagenet_diffusion.ipynb) [![][colab]][colab-cin].
-![class-conditional](assets/birdhouse.png)
-
-[colab]:
-[colab-cin]:
-
-
-## Unconditional Models
-
-We also provide a script for sampling from unconditional LDMs (e.g. LSUN, FFHQ, ...). Start it via
-
-```shell script
-CUDA_VISIBLE_DEVICES= python scripts/sample_diffusion.py -r models/ldm//model.ckpt -l -n <\#samples> --batch_size -c <\#ddim steps> -e <\#eta>
-```
-
-# Train your own LDMs
-
-## Data preparation
-
-### Faces
-For downloading the CelebA-HQ and FFHQ datasets, proceed as described in the [taming-transformers](https://github.com/CompVis/taming-transformers#celeba-hq)
-repository.
-
-### LSUN
-
-The LSUN datasets can be conveniently downloaded via the script available [here](https://github.com/fyu/lsun).
-We performed a custom split into training and validation images, and provide the corresponding filenames
-at [https://ommer-lab.com/files/lsun.zip](https://ommer-lab.com/files/lsun.zip).
-After downloading, extract them to `./data/lsun`. The beds/cats/churches subsets should
-also be placed/symlinked at `./data/lsun/bedrooms`/`./data/lsun/cats`/`./data/lsun/churches`, respectively.
-
-### ImageNet
-The code will try to download (through [Academic
-Torrents](http://academictorrents.com/)) and prepare ImageNet the first time it
-is used. However, since ImageNet is quite large, this requires a lot of disk
-space and time. If you already have ImageNet on your disk, you can speed things
-up by putting the data into
-`${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/` (which defaults to
-`~/.cache/autoencoders/data/ILSVRC2012_{split}/data/`), where `{split}` is one
-of `train`/`validation`. It should have the following structure:
-
-```
-${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/
-βββ n01440764
-β βββ n01440764_10026.JPEG
-β βββ n01440764_10027.JPEG
-β βββ ...
-βββ n01443537
-β βββ n01443537_10007.JPEG
-β βββ n01443537_10014.JPEG
-β βββ ...
-βββ ...
-```
-
-If you haven't extracted the data, you can also place
-`ILSVRC2012_img_train.tar`/`ILSVRC2012_img_val.tar` (or symlinks to them) into
-`${XDG_CACHE}/autoencoders/data/ILSVRC2012_train/` /
-`${XDG_CACHE}/autoencoders/data/ILSVRC2012_validation/`, which will then be
-extracted into above structure without downloading it again. Note that this
-will only happen if neither a folder
-`${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/` nor a file
-`${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/.ready` exist. Remove them
-if you want to force running the dataset preparation again.
-
-
-## Model Training
-
-Logs and checkpoints for trained models are saved to `logs/_`.
-
-### Training autoencoder models
-
-Configs for training a KL-regularized autoencoder on ImageNet are provided at `configs/autoencoder`.
-Training can be started by running
-```
-CUDA_VISIBLE_DEVICES= python main.py --base configs/autoencoder/.yaml -t --gpus 0,
-```
-where `config_spec` is one of {`autoencoder_kl_8x8x64`(f=32, d=64), `autoencoder_kl_16x16x16`(f=16, d=16),
-`autoencoder_kl_32x32x4`(f=8, d=4), `autoencoder_kl_64x64x3`(f=4, d=3)}.
-
-For training VQ-regularized models, see the [taming-transformers](https://github.com/CompVis/taming-transformers)
-repository.
-
-### Training LDMs
-
-In ``configs/latent-diffusion/`` we provide configs for training LDMs on the LSUN-, CelebA-HQ, FFHQ and ImageNet datasets.
-Training can be started by running
-
-```shell script
-CUDA_VISIBLE_DEVICES= python main.py --base configs/latent-diffusion/.yaml -t --gpus 0,
-```
-
-where ```` is one of {`celebahq-ldm-vq-4`(f=4, VQ-reg. autoencoder, spatial size 64x64x3),`ffhq-ldm-vq-4`(f=4, VQ-reg. autoencoder, spatial size 64x64x3),
-`lsun_bedrooms-ldm-vq-4`(f=4, VQ-reg. autoencoder, spatial size 64x64x3),
-`lsun_churches-ldm-vq-4`(f=8, KL-reg. autoencoder, spatial size 32x32x4),`cin-ldm-vq-8`(f=8, VQ-reg. autoencoder, spatial size 32x32x4)}.
-
-# Model Zoo
-
-## Pretrained Autoencoding Models
-![rec2](assets/reconstruction2.png)
-
-All models were trained until convergence (no further substantial improvement in rFID).
-
-| Model | rFID vs val | train steps |PSNR | PSIM | Link | Comments
-|-------------------------|------------|----------------|----------------|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|
-| f=4, VQ (Z=8192, d=3) | 0.58 | 533066 | 27.43 +/- 4.26 | 0.53 +/- 0.21 | https://ommer-lab.com/files/latent-diffusion/vq-f4.zip | |
-| f=4, VQ (Z=8192, d=3) | 1.06 | 658131 | 25.21 +/- 4.17 | 0.72 +/- 0.26 | https://heibox.uni-heidelberg.de/f/9c6681f64bb94338a069/?dl=1 | no attention |
-| f=8, VQ (Z=16384, d=4) | 1.14 | 971043 | 23.07 +/- 3.99 | 1.17 +/- 0.36 | https://ommer-lab.com/files/latent-diffusion/vq-f8.zip | |
-| f=8, VQ (Z=256, d=4) | 1.49 | 1608649 | 22.35 +/- 3.81 | 1.26 +/- 0.37 | https://ommer-lab.com/files/latent-diffusion/vq-f8-n256.zip |
-| f=16, VQ (Z=16384, d=8) | 5.15 | 1101166 | 20.83 +/- 3.61 | 1.73 +/- 0.43 | https://heibox.uni-heidelberg.de/f/0e42b04e2e904890a9b6/?dl=1 | |
-| | | | | | | |
-| f=4, KL | 0.27 | 176991 | 27.53 +/- 4.54 | 0.55 +/- 0.24 | https://ommer-lab.com/files/latent-diffusion/kl-f4.zip | |
-| f=8, KL | 0.90 | 246803 | 24.19 +/- 4.19 | 1.02 +/- 0.35 | https://ommer-lab.com/files/latent-diffusion/kl-f8.zip | |
-| f=16, KL (d=16) | 0.87 | 442998 | 24.08 +/- 4.22 | 1.07 +/- 0.36 | https://ommer-lab.com/files/latent-diffusion/kl-f16.zip | |
- | f=32, KL (d=64) | 2.04 | 406763 | 22.27 +/- 3.93 | 1.41 +/- 0.40 | https://ommer-lab.com/files/latent-diffusion/kl-f32.zip | |
-
-### Get the models
-
-Running the following script downloads und extracts all available pretrained autoencoding models.
-```shell script
-bash scripts/download_first_stages.sh
-```
-
-The first stage models can then be found in `models/first_stage_models/`
-
-
-
-## Pretrained LDMs
-| Datset | Task | Model | FID | IS | Prec | Recall | Link | Comments
-|---------------------------------|------|--------------|---------------|-----------------|------|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
-| CelebA-HQ | Unconditional Image Synthesis | LDM-VQ-4 (200 DDIM steps, eta=0)| 5.11 (5.11) | 3.29 | 0.72 | 0.49 | https://ommer-lab.com/files/latent-diffusion/celeba.zip | |
-| FFHQ | Unconditional Image Synthesis | LDM-VQ-4 (200 DDIM steps, eta=1)| 4.98 (4.98) | 4.50 (4.50) | 0.73 | 0.50 | https://ommer-lab.com/files/latent-diffusion/ffhq.zip | |
-| LSUN-Churches | Unconditional Image Synthesis | LDM-KL-8 (400 DDIM steps, eta=0)| 4.02 (4.02) | 2.72 | 0.64 | 0.52 | https://ommer-lab.com/files/latent-diffusion/lsun_churches.zip | |
-| LSUN-Bedrooms | Unconditional Image Synthesis | LDM-VQ-4 (200 DDIM steps, eta=1)| 2.95 (3.0) | 2.22 (2.23)| 0.66 | 0.48 | https://ommer-lab.com/files/latent-diffusion/lsun_bedrooms.zip | |
-| ImageNet | Class-conditional Image Synthesis | LDM-VQ-8 (200 DDIM steps, eta=1) | 7.77(7.76)* /15.82** | 201.56(209.52)* /78.82** | 0.84* / 0.65** | 0.35* / 0.63** | https://ommer-lab.com/files/latent-diffusion/cin.zip | *: w/ guiding, classifier_scale 10 **: w/o guiding, scores in bracket calculated with script provided by [ADM](https://github.com/openai/guided-diffusion) |
-| Conceptual Captions | Text-conditional Image Synthesis | LDM-VQ-f4 (100 DDIM steps, eta=0) | 16.79 | 13.89 | N/A | N/A | https://ommer-lab.com/files/latent-diffusion/text2img.zip | finetuned from LAION |
-| OpenImages | Super-resolution | LDM-VQ-4 | N/A | N/A | N/A | N/A | https://ommer-lab.com/files/latent-diffusion/sr_bsr.zip | BSR image degradation |
-| OpenImages | Layout-to-Image Synthesis | LDM-VQ-4 (200 DDIM steps, eta=0) | 32.02 | 15.92 | N/A | N/A | https://ommer-lab.com/files/latent-diffusion/layout2img_model.zip | |
-| Landscapes | Semantic Image Synthesis | LDM-VQ-4 | N/A | N/A | N/A | N/A | https://ommer-lab.com/files/latent-diffusion/semantic_synthesis256.zip | |
-| Landscapes | Semantic Image Synthesis | LDM-VQ-4 | N/A | N/A | N/A | N/A | https://ommer-lab.com/files/latent-diffusion/semantic_synthesis.zip | finetuned on resolution 512x512 |
-
-
-### Get the models
-
-The LDMs listed above can jointly be downloaded and extracted via
-
-```shell script
-bash scripts/download_models.sh
-```
-
-The models can then be found in `models/ldm/`.
-
-
-
-## Coming Soon...
-
-* More inference scripts for conditional LDMs.
-* In the meantime, you can play with our colab notebook https://colab.research.google.com/drive/1xqzUi2iXQXDqXBHQGP9Mqt2YrYW6cx-J?usp=sharing
-
-## Comments
-
-- Our codebase for the diffusion models builds heavily on [OpenAI's ADM codebase](https://github.com/openai/guided-diffusion)
-and [https://github.com/lucidrains/denoising-diffusion-pytorch](https://github.com/lucidrains/denoising-diffusion-pytorch).
-Thanks for open-sourcing!
-
-- The implementation of the transformer encoder is from [x-transformers](https://github.com/lucidrains/x-transformers) by [lucidrains](https://github.com/lucidrains?tab=repositories).
-
-
-## BibTeX
-
-```
-@misc{rombach2021highresolution,
- title={High-Resolution Image Synthesis with Latent Diffusion Models},
- author={Robin Rombach and Andreas Blattmann and Dominik Lorenz and Patrick Esser and BjΓΆrn Ommer},
- year={2021},
- eprint={2112.10752},
- archivePrefix={arXiv},
- primaryClass={cs.CV}
-}
-```
-
+- Get model from huggingface hub [lambdalabs/stable-diffusion-image-conditioned](https://huggingface.co/lambdalabs/stable-diffusion-image-conditioned/blob/main/sd-clip-vit-l14-img-embed_ema_only.ckpt)
+- Put model in `models/ldm/stable-diffusion-v1/sd-clip-vit-l14-img-embed_ema_only.ckpt`
+- Run `scripts/image_variations.py` or `scripts/gradio_variations.py`
+Trained by [Justin Pinkney](https://www.justinpinkney.com) ([@Buntworthy](https://twitter.com/Buntworthy)) at [Lambda](https://lambdalabs.com/)
\ No newline at end of file
diff --git a/assets/img-vars.jpg b/assets/img-vars.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..80917114082254016c8a2f24b8c02d6ec299f8fc
GIT binary patch
literal 453200
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