潜在拡散モデル (Latent Diffusion Models) : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 09/10/2022 (No releases published)
* 本ページは、Latent Diffusion Models の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
潜在拡散モデル (Latent Diffusion Models) : 概要
- High-Resolution Image Synthesis with Latent Diffusion Models
Robin Rombach*, Andreas Blattmann*, Dominik Lorenz, Patrick Esser, Björn Ommer
* equal contribution
要件
ldm という名前の適切な conda 環境は以下で作成されて有効化されます :
conda env create -f environment.yaml
conda activate ldm
事前訓練済みモデル
総ての利用可能なチェックポイントの一般的なリストは私たちの モデル zoo を通して利用可能です。これらのモデルのどれでも貴方のワークで利用する場合、引用 を受け取ることは常にハッピーです。
検索増強 (= Retrieval Augmented) 拡散モデル
https://arxiv.org/abs/2204.11824 で記述されているように、retrieval-augmented 拡散モデル (RDMs) を実行するための推論コードを含めています。
始めるために、追加で必要な 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
そして訓練済み重みをダウンロードします (preliminary チェックポイント) :
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"
テキスト-to-画像検索による 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
近傍の最大サポート数は 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 データセットベースは比較的小さいサイズなので、より抽象的なコンセンプトを作成するのに最も向いていますが、詳細なテキスト制御に対しては上手く動作しません。
Coming Soon
- より良いモデル
- より多くの解像度
- 画像-to-画像検索
テキスト-to-画像
事前訓練済み重み (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
これは指定された出力場所 (デフォルト: outputs/txt2img-samples) に各サンプルを個別にサイズ n_iter x n_samples のグリッドとともにセーブします。品質、サンプリング速度と多様性は scale, ddim_steps と ddim_eta 引数を通して最善に制御されます。経験則では、scale のより高い値は低下した出力多様性と引き換えに、より良いサンプルを生成します。更に、ddim_steps の増加も一般により高い品質のサンプルを与えますが、値 > 250 に対してはリターンは減少します。–ddim_eta 0.0 の使用により、良い品質を維持しながら高速なサンプリング (i.e. ddim_steps の低い値) が実現できます。–ddim_eta 0.0 と –plms (Pseudo Numerical Methods for Diffusion Models on Manifolds 参照) の使用は、良い品質を維持しながら高速なサンプリングを実現できます。
Beyond 256²
ある入力に対して、畳込み流儀のモデルを (それが訓練されたもの) より大きな特徴量で単純に実行すると時に興味深い結果になります。それを試すには、H と W 引数を調整します (これらは対応する latent サイズを計算するために 8 で整数除算されます)、例えば 384×1024 のサンプルを作成するために次を実行します :
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
けれども 256×256 設定に比べて制御性は低下することに注意してください。
下のサンプルは上のコマンドを使用して生成されました。
インペインティング
事前訓練済み重みをダウンロードして :
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
data/inpainting_example で提供されるサンプルのように、indir は画像 *.png とマスク <image_fname>_mask.png を含む必要があります。
Class-Conditional ImageNet
Available via a notebook
条件なしモデル
条件なし LDM (e.g. 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 に解凍します。beds/cats/churches サブセットはそれぞれ ./data/lsun/bedrooms/./data/lsun/cats/./data/lsun/churches に配置/シンボリックリンクする必要があります。
ImageNet
コードは ImageNet を最初に利用されるとき (Academic Torrents を通して) ダウンロードして準備しようとします。しかし、ImageNet は非常に巨大なので、これは多くのディスク容量と時間を必要とします。ディスクに既に ImageNet を持つのであれば、データを ${XDG_CACHE}/autoencoders/data/ILSVRC2012_{split}/data/ (そのデフォルトは ~/.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 (or それらへのシンボリックリンク) を ${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-正則化オートエンコーダの訓練用の config は configs/autoencoder で提供されています。訓練は次を実行することで開始できます :
CUDA_VISIBLE_DEVICES=<GPU_ID> python main.py --base configs/autoencoder/<config_spec>.yaml -t --gpus 0,
ここで config_spec は {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)} の一つです。
VQ-正則化モデルの訓練については、taming-transformers レポジトリを参照してください。
LDM の訓練
configs/latent-diffusion/ では、LSUN-, CelebA-HQ, FFHQ と ImageNet データセットで LDM を訓練するための config を提供しています。訓練は次を実行することで開始されます :
CUDA_VISIBLE_DEVICES= python main.py --base configs/latent-diffusion/<config_spec>.yaml -t --gpus 0,
ここで <config_spec> は {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)} の一つです。
モデル Zoo
事前訓練済みオートエンコーダ・モデル
総てのモデルは収束するまで訓練されました (rFID の更なる実質上の改良はありません)。
(訳注: モデルリスト は原文参照)
モデルの取得
次のスクリプトの実行は総ての利用可能な事前訓練済みオートエンコーダ・モデルをダウンロードして解凍します。
bash scripts/download_first_stages.sh
そして最初のステージのモデルは models/first_stage_models/<model_spec> で見つけられます。
事前訓練済み LDM
(訳注: モデルリスト は原文参照)
モデルの取得
上でリストされた LDM は次により一緒にダウンロードして解凍できます :
bash scripts/download_models.sh
そしてモデルは models/ldm/<model_spec> で見つけられます。
Coming Soon…
- 条件付き LDM 用のより多くの推論スクリプト。
- それまでの間、colab ノートブックで遊ぶことができます :
https://colab.research.google.com/drive/1xqzUi2iXQXDqXBHQGP9Mqt2YrYW6cx-J?usp=sharing
コメント
- 拡散モデルの私たちのコードベースは OpenAI の ADM コードベース と https://github.com/lucidrains/denoising-diffusion-pytorch を大きな足場にしています。Thanks for open-sourcing!
- transformer エンコーダの実装は lucidrains の x-transformers から引用しています。
BibTeX
(訳注: 原文 参照)
以上