latent-diffusion - 潜在拡散モデルによる高解像度画像合成

(High-Resolution Image Synthesis with Latent Diffusion Models)

Created at: 2021-12-21 00:56:18
Language: Jupyter Notebook
License: MIT

潜在拡散モデル

arXiv | ビブテックス

潜在拡散モデルによる高解像度画像合成
Robin Rombach * 、 Andreas Blattmann *、 Dominik Lorenz Patrick Esser Björn Ommer
* 同等の貢献

ニュース

2022年7月

2022年4月

要件

という名前の適切なconda環境

ldm
を作成し、次の方法でアクティブ化できます。

conda env create -f environment.yaml
conda activate ldm

事前トレーニング済みモデル

利用可能なすべてのチェックポイントの一般的なリストは、モデル Zooから入手できます。これらのモデルのいずれかを作品に使用している場合は、いつでも喜んで引用を受け取ります。

検索拡張拡散モデル

rdm図https://arxiv.org/abs/2204.11824 で説明されているように、検索拡張拡散モデル (RDM) を実行するための推論コードが含まれています。

開始するには、追加で必要な python パッケージを

ldm
環境にインストールします。

pip install transformers==4.19.2 scann kornia==0.6.4 torchmetrics==0.6.0
pip install git+https://github.com/arogozhnikov/einops.git

トレーニング済みの重み (予備チェックポイント) をダウンロードします。

mkdir -p models/rdm/rdm768x768/
wget -O models/rdm/rdm768x768/model.ckpt https://ommer-lab.com/files/rdm/model.ckpt

これらのモデルは一連の CLIP 画像埋め込みに基づいて調整されているため、RDM は以下で説明するさまざまな推論モードをサポートしています。

テキストプロンプトのみの RDM (明示的な取得は不要)

CLIP は共有画像/テキスト機能空間を提供し、RDM はトレーニング中に特定の例の近傍をカバーすることを学習するため、特定のプロンプトと条件の CLIP テキスト埋め込みを直接取得できます。経由でこのモードを実行します

python scripts/knn2img.py  --prompt "a happy bear reading a newspaper, oil on canvas"

テキストから画像への検索を備えた RDM

テキスト プロンプトを条件として RDM を実行し、さらにこのプロンプトから取得した画像を実行できるようにするには、対応する取得データベースもダウンロードする必要があります。Openimages-およびArtBench-データセットから抽出された 2 つの異なるデータベースを提供します。データベースを交換すると、以下に示すようにモデルの機能が異なりますが、学習した重みはどちらの場合も同じです。

CLIP 画像埋め込みに圧縮された検索データセット ( Openimages (~11GB) およびArtBench (~82MB))を含む検索データベースをダウンロードします。

mkdir -p data/rdm/retrieval_databases
wget -O data/rdm/retrieval_databases/artbench.zip https://ommer-lab.com/files/rdm/artbench_databases.zip
wget -O data/rdm/retrieval_databases/openimages.zip https://ommer-lab.com/files/rdm/openimages_database.zip
unzip data/rdm/retrieval_databases/artbench.zip -d data/rdm/retrieval_databases/
unzip data/rdm/retrieval_databases/openimages.zip -d data/rdm/retrieval_databases/

また、ArtBench 用のトレーニング済み ScaNN検索インデックスも提供しています。ダウンロードして解凍する

mkdir -p data/rdm/searchers
wget -O data/rdm/searchers/artbench.zip https://ommer-lab.com/files/rdm/artbench_searchers.zip
unzip data/rdm/searchers/artbench.zip -d data/rdm/searchers

OpenImages のインデックスは大きいため (~21 GB)、サンプリング中に使用できるようにインデックスを作成して保存するスクリプトを提供しています。ただし、このインデックスがないと、OpenImages データベースでのサンプリングはできないことに注意してください。スクリプトを実行します

python scripts/train_searcher.py

視覚的最近傍を使用した検索ベースのテキストガイド付きサンプリングは、次の方法で開始できます

python scripts/knn2img.py  --prompt "a happy pineapple" --use_neighbors --knn <number_of_neighbors> 

サポートされているネイバーの最大数は 20 であることに注意してください。データベースは、cmd パラメータ

--database
を使用して変更できます
[openimages, artbench-art_nouveau, artbench-baroque, artbench-expressionism, artbench-impressionism, artbench-post_impressionism, artbench-realism, artbench-renaissance, artbench-romanticism, artbench-surrealism, artbench-ukiyo_e]
。を使用する
--database openimages
には、上記のスクリプト (
scripts/train_searcher.py
) を事前に実行する必要があります。artbench データセットベースはサイズが比較的小さいため、より抽象的な概念を作成するのに最適であり、詳細なテキスト コントロールには適していません。

近日公開

  • より良いモデル
  • より多くの解像度
  • 画像から画像への検索

テキストから画像へ

text2img-フィギュア

事前トレーニング済みの重みをダウンロード (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

とサンプル

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

これにより、各サンプルが個別に保存され、サイズ

n_iter
xのグリッドが
n_samples
指定された出力場所 (デフォルト:
outputs/txt2img-samples
) に保存されます。品質、サンプリング速度、および多様性は、、および引数を使用して最適に制御
scale
でき
ddim_steps
ます
ddim_eta
。経験則として、 の値が大きいほど、
scale
出力の多様性が低下しますが、より良いサンプルが生成されます。
さらに、
ddim_steps
一般に、値を大きくするとサンプルの品質も向上しますが、値が 250 を超えるとリターンが減少し
ddim_steps
ます
--ddim_eta 0.0
。と(を
参照
ddim_steps
--ddim_eta 0.0
--plms
多様体上の拡散モデルの疑似数値法)。

256²を超えて

特定の入力については、トレーニングされたものよりも大きな機能で畳み込み方式でモデルを実行するだけで、興味深い結果が得られる場合があります。試してみるには、

H
および
W
引数 (対応する潜在サイズを計算するために 8 で整数分割されます) を調整します。たとえば、次のように実行します。

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  

サイズ 384x1024 のサンプルを作成します。ただし、256x256 の設定に比べて制御性は低下します。

以下の例は、上記のコマンドを使用して生成されました。 text2img-図-conv

修復

修復

事前トレーニング済みの重みをダウンロードする

wget -O models/ldm/inpainting_big/last.ckpt https://heibox.uni-heidelberg.de/f/4d9ac7ea40c64582b7c9/?dl=1

とサンプル

python scripts/inpaint.py --indir data/inpainting_examples/ --outdir outputs/inpainting_results

indir
で提供されている例のようなイメージ
*.png
とマスクを含める必要があります。
<image_fname>_mask.png
data/inpainting_examples

クラス条件付き ImageNet

ノート から入手できます。 クラス条件付き

無条件モデル

また、無条件の LDM (LSUN、FFHQ など) からサンプリングするためのスクリプトも提供しています。経由で開始する

CUDA_VISIBLE_DEVICES=<GPU_ID> python scripts/sample_diffusion.py -r models/ldm/<model_spec>/model.ckpt -l <logdir> -n <\#samples> --batch_size <batch_size> -c <\#ddim steps> -e <\#eta> 

独自の LDM をトレーニングする

データ準備

CelebA-HQ および FFHQ データセットをダウンロードするには、taming -transformers リポジトリの説明に従ってください。

LSUN

LSUN データセットは、こちらで入手できるスクリプトを使用して簡単にダウンロードできます。トレーニング イメージと検証イメージへのカスタム分割を実行し、対応するファイル名をhttps://ommer-lab.com/files/lsun.zipで提供します。ダウンロード後、解凍して

./data/lsun
ください。ベッド/猫/教会のサブセットも、それぞれ
./data/lsun/bedrooms
/
./data/lsun/cats
/に配置/シンボリック リンクする必要があり
./data/lsun/churches
ます。

ImageNet

コードは ( Academic Torrentsを介して) ダウンロードを試み、初めて使用するときに ImageNet を準備します。ただし、ImageNet は非常に大きいため、多くのディスク容量と時間が必要です。

${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/
ディスクに既に ImageNet がある場合は、データを(デフォルト では
~/.cache/autoencoders/data/ILSVRC2012_{split}/data/
) に入れることで速度を上げることができます 。ここで、
{split}
train
/のいずれかです
validation
。次の構造を持つ必要があります。

${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/
├── n01440764
│   ├── n01440764_10026.JPEG
│   ├── n01440764_10027.JPEG
│   ├── ...
├── n01443537
│   ├── n01443537_10007.JPEG
│   ├── n01443537_10014.JPEG
│   ├── ...
├── ...

データを抽出していない場合は、

ILSVRC2012_img_train.tar
/
ILSVRC2012_img_val.tar
(またはそれらへのシンボリックリンク) を
${XDG_CACHE}/autoencoders/data/ILSVRC2012_train/
/
${XDG_CACHE}/autoencoders/data/ILSVRC2012_validation/
に配置することもできます。これにより、再度ダウンロードせずに上記の構造に抽出されます。
${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/
これは、フォルダーもファイルも 存在しない場合にのみ発生することに注意してください
${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/.ready
。データセットの準備を強制的に再度実行する場合は、それらを削除してください。

モデルトレーニング

トレーニング済みモデルのログとチェックポイントは に保存され

logs/<START_DATE_AND_TIME>_<config_spec>
ます。

オートエンコーダ モデルのトレーニング

ImageNet で KL 正則化オートエンコーダーをトレーニングするための構成は、 で提供されてい

configs/autoencoder
ます。トレーニングは実行することで開始できます

CUDA_VISIBLE_DEVICES=<GPU_ID> python main.py --base configs/autoencoder/<config_spec>.yaml -t --gpus 0,    

config_spec
{ ( f
autoencoder_kl_8x8x64
=32, d=64),
autoencoder_kl_16x16x16
(f=16, d=16),
autoencoder_kl_32x32x4
(f=8, d=4),
autoencoder_kl_64x64x3
(f=4, d=3)} のいずれかです。

VQ 正規化モデルのトレーニングについては、taming-transformers リポジトリを参照してください。

LDM のトレーニング

LSUN-

configs/latent-diffusion/
、CelebA-HQ、FFHQ、および ImageNet データセットで LDM をトレーニングするための構成を提供します。トレーニングは実行することで開始できます

CUDA_VISIBLE_DEVICES=<GPU_ID> python main.py --base configs/latent-diffusion/<config_spec>.yaml -t --gpus 0,

where

<config_spec>
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

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.

bash scripts/download_first_stages.sh

The first stage models can then be found in

models/first_stage_models/<model_spec>

Pretrained LDMs

Datset Task Model FID IS Prec Recall リンク コメント
セレブA-HQ 無条件の画像合成 LDM-VQ-4 (200 DDIM ステップ、eta=0) 5.11 (5.11) 3.29 0.72 0.49 https://ommer-lab.com/files/latent-diffusion/celeba.zip
FFHQ 無条件の画像合成 LDM-VQ-4 (200 DDIM ステップ、eta=1) 4.98 (4.98) 4.50 (4.50) 0.73 0.50 https://ommer-lab.com/files/latent-diffusion/ffhq.zip
LSUN-教会 無条件の画像合成 LDM-KL-8 (400 DDIM ステップ、eta=0) 4.02 (4.02) 2.72 0.64 0.52 https://ommer-lab.com/files/latent-diffusion/lsun_churches.zip
LSUN-ベッドルーム 無条件の画像合成 LDM-VQ-4 (200 DDIM ステップ、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 クラス条件付き画像合成 LDM-VQ-8 (200 DDIM ステップ、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 *: ガイドあり、classifier_scale 10 **: ガイドなし、括弧内のスコアはADM提供のスクリプトで計算
概念的なキャプション テキスト条件付き画像合成 LDM-VQ-f4 (100 DDIM ステップ、eta=0) 16.79 13.89 なし なし https://ommer-lab.com/files/latent-diffusion/text2img.zip LAIONから微調整
OpenImages 超解像 LDM-VQ-4 なし なし なし なし https://ommer-lab.com/files/latent-diffusion/sr_bsr.zip BSR画像の劣化
OpenImages レイアウトから画像への合成 LDM-VQ-4 (200 DDIM ステップ、eta=0) 32.02 15.92 なし なし https://ommer-lab.com/files/latent-diffusion/layout2img_model.zip
風景 セマンティック画像合成 LDM-VQ-4 なし なし なし なし https://ommer-lab.com/files/latent-diffusion/semantic_synthesis256.zip
風景 セマンティック画像合成 LDM-VQ-4 なし なし なし なし https://ommer-lab.com/files/latent-diffusion/semantic_synthesis.zip 解像度 512x512 で微調整

モデルを入手する

上記の LDM は、次の方法でまとめてダウンロードおよび抽出できます。

bash scripts/download_models.sh

モデルは で見つけることができます

models/ldm/<model_spec>

近日公開...

コメント

ビブテックス

@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}
}

@misc{https://doi.org/10.48550/arxiv.2204.11824,
  doi = {10.48550/ARXIV.2204.11824},
  url = {https://arxiv.org/abs/2204.11824},
  author = {Blattmann, Andreas and Rombach, Robin and Oktay, Kaan and Ommer, Björn},
  keywords = {Computer Vision and Pattern Recognition (cs.CV), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title = {Retrieval-Augmented Diffusion Models},
  publisher = {arXiv},
  year = {2022},  
  copyright = {arXiv.org perpetual, non-exclusive license}
}