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

()

Created at: 2022-08-10 22:36:44
Language: Jupyter Notebook
License: NOASSERTION

安定拡散

Stable Diffusion は、 Stability AIおよびRunwayとのコラボレーションのおかげで可能になり、以前の作業に基づいて構築されました。

潜在拡散モデルによる高解像度画像合成
Robin Rombach * 、 Andreas Blattmann *、 Dominik Lorenz Patrick Esser Björn Ommer
CVPR '22 口頭| GitHub | arXiv | プロジェクトページ

txt2img-stable2 Stable Diffusionは、潜在的なテキストから画像への拡散モデルです。Stability AIからの寛大なコンピューティング寄付とLAIONからのサポートのおかげで、 LAION-5Bデータベースのサブセットからの 512x512 画像で潜在拡散モデルをトレーニングすることができました。Google のImagenと同様に、このモデルは凍結された CLIP ViT-L/14 テキスト エンコーダーを使用して、テキスト プロンプトでモデルを調整します。860M UNet と 123M テキスト エンコーダーを備えたこのモデルは比較的軽量で、少なくとも 10GB の VRAM を搭載した GPU で実行されます。以下のこのセクションとモデル カードを参照してください。

要件

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

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

conda env create -f environment.yaml
conda activate ldm

を実行して、既存の潜在拡散環境を更新することもできます。

conda install pytorch torchvision -c pytorch
pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .

安定拡散 v1

Stable Diffusion v1 は、拡散モデルに 860M UNet および CLIP ViT-L/14 テキスト エンコーダーを備えたダウンサンプリング ファクター 8 オートエンコーダーを使用するモデル アーキテクチャの特定の構成を指します。モデルは 256x256 画像で事前トレーニングされてから、512x512 画像で微調整されました。

注: Stable Diffusion v1 は一般的なテキストから画像への拡散モデルであるため、トレーニング データに存在するバイアスや (誤解) 概念を反映しています。トレーニング手順とデータの詳細、およびモデルの使用目的は、対応するモデル カードに記載されています。

ウェイトは、Hugging Face の CompVis 組織を通じて、モデル カードによって通知される誤用や害を防止するための特定の使用ベースの制限を含むライセンスの下で入手できますが、それ以外は許容されます。商用利用はライセンスの条件の下で許可されていますが、追加の安全メカニズム考慮事項なしに提供されたウェイトをサービスまたは製品に使用することはお勧めしません。一般的なテキストから画像へのモデルは継続的な取り組みです。重みは研究成果物であり、そのように扱う必要があります。

CreativeML OpenRAIL M ライセンスは、責任ある AI ライセンスの分野でBigScienceRAIL イニシアチブが共同で行っている作業を基にしたOpen RAIL Mライセンスです。私たちのライセンスが基づいている BLOOM Open RAIL ライセンスに関する記事も参照してください。

ウェイト

現在、次のチェックポイントを提供しています。

  • sd-v1-1.ckpt
    : laion2B -en の
    256x256
    解像度で237k ステップ。laion -high resolution の解像度で194k ステップ(解像度の LAION-5B からの 170M の例)。
    512x512
    >= 1024x1024
  • sd-v1-2.ckpt
    : から再開
    sd-v1-1.ckpt
    laion -aesthetics v2 5+ の解像度
    512x512
    で515k ステップ(推定された美学スコアを持つ laion2B-en のサブセット、および元のサイズと推定された透かし確率 を持つ画像にさらにフィルター処理されます。透かしの推定値はLAION-5Bメタデータからのものです。美的スコアは、LAION-Aesthetics Predictor V2を使用して推定されます)。
    > 5.0
    >= 512x512
    < 0.5
  • sd-v1-3.ckpt
    : から再開
    sd-v1-2.ckpt
    512x512
    「laion-aesthetics v2 5+」の解像度で 195,000 ステップ、分類子を使用しないガイダンス サンプリングを改善するためのテキスト コンディショニングの 10% の削除。
  • sd-v1-4.ckpt
    : から再開
    sd-v1-2.ckpt
    512x512
    「laion-aesthetics v2 5+」の解像度で 225,000 ステップ、テキスト条件付けを 10% 削減して、分類器を使用しないガイダンス サンプリングを改善しました。

異なる分類子のないガイダンス スケール (1.5、2.0、3.0、4.0、5.0、6.0、7.0、8.0) と 50 PLMS サンプリング ステップでの評価は、チェックポイントの相対的な改善を示しています。 SD評価結果

安定した拡散によるテキストから画像へ

txt2img-stable2 txt2img-stable2

Stable Diffusion は、CLIP ViT-L/14 テキスト エンコーダーの (プールされていない) テキスト埋め込みを条件とする潜在拡散モデルです。サンプリング用のリファレンス スクリプトを提供していますが、ディフューザーの統合も存在します。これにより、より活発なコミュニティの開発が期待されます。

リファレンス サンプリング スクリプト

リファレンス サンプリング スクリプトを提供します。

重み取得し

stable-diffusion-v1-*-original
たら、それらをリンクします

mkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/model.ckpt> models/ldm/stable-diffusion-v1/model.ckpt 

とサンプル

python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 

デフォルトでは、これは

--scale 7.5
、 Katherine Crowson による PLMSサンプラーの実装であるのガイダンス スケールを使用し、サイズ 512x512 (トレーニングに使用した) の画像を 50 ステップでレンダリングします。サポートされているすべての引数を以下に示します ( type )。
python scripts/txt2img.py --help

usage: txt2img.py [-h] [--prompt [PROMPT]] [--outdir [OUTDIR]] [--skip_grid] [--skip_save] [--ddim_steps DDIM_STEPS] [--plms] [--laion400m] [--fixed_code] [--ddim_eta DDIM_ETA]
                  [--n_iter N_ITER] [--H H] [--W W] [--C C] [--f F] [--n_samples N_SAMPLES] [--n_rows N_ROWS] [--scale SCALE] [--from-file FROM_FILE] [--config CONFIG] [--ckpt CKPT]
                  [--seed SEED] [--precision {full,autocast}]

optional arguments:
  -h, --help            show this help message and exit
  --prompt [PROMPT]     the prompt to render
  --outdir [OUTDIR]     dir to write results to
  --skip_grid           do not save a grid, only individual samples. Helpful when evaluating lots of samples
  --skip_save           do not save individual samples. For speed measurements.
  --ddim_steps DDIM_STEPS
                        number of ddim sampling steps
  --plms                use plms sampling
  --laion400m           uses the LAION400M model
  --fixed_code          if enabled, uses the same starting code across samples
  --ddim_eta DDIM_ETA   ddim eta (eta=0.0 corresponds to deterministic sampling
  --n_iter N_ITER       sample this often
  --H H                 image height, in pixel space
  --W W                 image width, in pixel space
  --C C                 latent channels
  --f F                 downsampling factor
  --n_samples N_SAMPLES
                        how many samples to produce for each given prompt. A.k.a. batch size
  --n_rows N_ROWS       rows in the grid (default: n_samples)
  --scale SCALE         unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
  --from-file FROM_FILE
                        if specified, load prompts from this file
  --config CONFIG       path to config which constructs model
  --ckpt CKPT           path to checkpoint of model
  --seed SEED           the seed (for reproducible sampling)
  --precision {full,autocast}
                        evaluate at this precision

注: すべての v1 バージョンの推論構成は、EMA のみのチェックポイントで使用するように設計されています。 このため

use_ema=False
、構成で設定されています。そうでない場合、コードはからの切り替えを試みます。 非 EMA から EMA への重み。EMA の効果と EMA なしの効果を調べたい場合は、「完全な」チェックポイントを提供します。 両方のタイプの重みが含まれています。これらについては、
use_ema=False
EMA 以外の重みをロードして使用します。

ディフューザーの統合

Stable Diffusion をダウンロードしてサンプルする簡単な方法は、ディフューザー ライブラリを使用することです。

# make sure you're logged in with `huggingface-cli login`
from torch import autocast
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
	"CompVis/stable-diffusion-v1-4", 
	use_auth_token=True
).to("cuda")

prompt = "a photo of an astronaut riding a horse on mars"
with autocast("cuda"):
    image = pipe(prompt)["sample"][0]  
    
image.save("astronaut_rides_horse.png")

安定拡散による画像修正

SDEditによって最初に提案された拡散ノイズ除去メカニズムを使用することにより、モデルをさまざまな用途に使用できます。 テキストガイドによる画像から画像への変換やアップスケーリングなどのタスク。txt2img サンプリング スクリプトと同様に、 Stable Diffusion で画像修正を実行するためのスクリプトを提供します。

Pintaで作成したラフスケッチを詳細なアートワークに変換する例を次に示します。

python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img <path-to-img.jpg> --strength 0.8

ここで、strength は 0.0 と 1.0 の間の値で、入力画像に追加されるノイズの量を制御します。 1.0 に近い値では、多くのバリエーションが可能になりますが、入力と意味的に一致しない画像も生成されます。次の例を参照してください。

入力

スケッチイン

出力

out3 out2

この手順は、たとえば、基本モデルからサンプルをアップスケールするためにも使用できます。

コメント

ビブテックス

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