Stable Diffusion (テキスト-to-画像変換) : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 09/11/2022 (No releases published)
* 本ページは、Stable Diffusion の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
Stable Diffusion : 概要
Stable Diffusion was made possible thanks to a collaboration with Stability AI and Runway and builds upon our previous work:
- High-Resolution Image Synthesis with Latent Diffusion Models
Robin Rombach*, Andreas Blattmann*, Dominik Lorenz, Patrick Esser, Björn Ommer
Stable Diffusion は潜在的なテキスト-to-画像拡散モデルです。Stability AI の惜しみない compute donation (計算資源の寄付) と LAION のサポートのおかげで、LAION-5B データベースのサブセットからの 512×512 画像上の Latent Diffusion Model (潜在 (変数) 拡散モデル) を訓練することができました。Google の Imagen と同様に、このモデルはモデルをテキストプロンプト上で条件付けるために frozen CLIP ViT-L/14 テキストエンコーダを使用しています。860M UNet と 123M テキストエンコーダを装備し、このモデルは比較的軽量で少なくとも 10GB VRAM を持つ GPU 上で動作します。下の このセクション と モデルカード を見てください。
要件
ldm という名前の適切な conda 環境は以下で作成されて有効化されます :
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 .
Stable Diffusion v1
Stable Diffusion v1 はモデルアーキテクチャの特定の構成を指します、これは拡散モデルについて 860M UNet と CLIP ViT-L/14 テキストエンコーダを持つダウンサンプリング因子 8 のオートエンコーダを使用します。モデルは 256×256 画像で事前訓練されて 512×512 画像で再調整されました。
Note : Stable Diffusion v1 は一般的なテキスト-to-画像拡散モデルですので、従ってその訓練データに存在する偏りや (mis-) 概念を反映します。訓練手続きとデータ、そしてモデルの利用目的の詳細は対応する モデルカード で見つけられます。
その重みは、モデルカードで情報提供されている誤用や損害 (= harm) を防ぐために特定の利用方法ベースの制限を含みながら、しかしそれ以外は利用が許容されたままのライセンス のもとで、Hugging Face の CompVis organization を通して利用可能です。ライセンスの条項のもとで商用利用が許可されますが、追加の安全機構と熟慮 (= considerations) なしで提供されている重みを利用することは勧めません、何故ならば重みの 既知の制限・限界と偏り があり、一般的なテキスト-to-画像モデルの安全で倫理的な配備についての研究は現在進行形 (= an ongoing effort) であるからです。重みは研究アーティファクトでそのようなものとして扱われるべきです。
CreativeML OpenRAIL M ライセンス は Open RAIL M ライセンス で、BigScience と RAIL Initiative が信頼できる (= responsible) AI ライセンシングの領域で共同で進めているワークから適応されました。私たちのライセンスのベースとなった BLOOM Open RAIL ライセンスについての記事 も見てください。
重み
私たちは現在以下のチェックポイントを提供しています :
- sd-v1-1.ckpt : laion2B-en の解像度 256×256 で 237k ステップ。laion-high-resolution の解像度 512×512 で 194k ステップ (解像度 >= 1024×1024 を持つ LAION-5B からの 170M サンプル)。
- sd-v1-2.ckpt : sd-v1-1.ckpt から再開されました (= resumed)。laion-aesthetics v2 5+ の解像度 512×512 で 515k ステップ (laion2B-en のサブセットで、推定審美度 (= aesthetics) スコア > 5.0 を持ち、更にオリジナルサイズ >= 512×512 と推定透かし (= watermark) 確率 < 0.5 を持つ画像にフィルタリングされています。透かし推定値は LAION-5B メタデータから、審美度スコアは LAION-Aesthetics Predictor V2 を使用して推定されています)。
- sd-v1-3.ckpt : sd-v1-2.ckpt から再開されました。”laion-aesthetics v2 5+” の解像度 512×512 で 195k ステップ、そして 分類器フリーなガイダンス・サンプリング を改良するために text-conditioning の 10% をドロップ。
- sd-v1-4.ckpt: sd-v1-2.ckpt から再開されました。”laion-aesthetics v2 5+” の解像度 512×512 で 225k ステップ、そして 分類器フリーなガイダンス・サンプリング を改良するために text-conditioning の 10% をドロップ。
分類器フリーなガイダンス・スケール (1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0) と 50 PLMS サンプリング・ステップによる評価はチェック・ポイントの相対的な改良を示します :
Stable Diffusion によるテキスト-to-画像
Stable Diffusion は、CLIP ViT-L/14 テキストエンコーダの (非プール化) テキスト埋め込みで条件付けられた 潜在拡散モデル です。私たちは サンプリングのためのリファレンス・スクリプト を提供していますが、diffusers 統合 もまた存在し、これに対してはコミュニティによるより活発な開発を見ることを期待しています。
リファレンス・サンプリング・スクリプト
リファレンス・サンプリング・スクリプトを提供しています、これは以下を組み込んでいます :
- 安全チェッカーモジュール、露骨な (= explicit) 出力の確率を減少させます。
- 出力の 不可視な透かし、これは視聴者が 画像を機械生成されたものと識別する のに役立ちます。
stable-diffusion-v1-*-original 重みを取得 した後、それらをリンクし :
mkdir -p models/ldm/stable-diffusion-v1/
ln -s models/ldm/stable-diffusion-v1/model.ckpt
そして次でサンプリングします :
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
デフォルトでは、これは –scale 7.5 のガイダンス・スケール、PLMS サンプラーの Katherine Crowson の実装 を使用し、そして 50 ステップでサイズ 512×512 (その上で訓練されました) の画像をレンダリングします。総てのサポートされる引数は下でリストされます (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
Note : 総ての v1 バージョンに対する推論 config は EMA-only チェックポイントで使用されるように設計されています。そのため、configuration で use_ema=False が設定されなければ、コードは非-EMA から EMA 重みに切り替えようとします。EMA vs 非 EMA の効果を調べることを望む場合、両者のタイプの重みを含む「完全な (= full)」チェックポイントを提供します。それらのために、use_ema=False は非 EMA 重みをロードして使用します。
Diffusers 統合
Stable Diffusion をダウンロードしてサンプリングする単純な方法は diffusers ライブラリ を使用することです :
# 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")
Stable Diffusion による画像修正
SDEdit で最初に提案されたように拡散ノイズ除去メカニズムを使用して、モデルは text-guided 画像-to-画像変換とアップスケーリングのような様々なタスクに対して利用できます。txt2img サンプリング・スクリプトと同様に、Stable Diffusion により画像修正を実行するスクリプトを提供しています。
以下は、Pinta で作成されたラフスケッチが詳細なアートワークに変換されるサンプルを描写しています。
python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img --strength 0.8
ここで、strength は 0.0 と 1.0 の間の値で、入力画像に追加されるノイズの総量を制御します。1.0 に近い値は多くのバリエーションを可能にしますが、入力とは意味的に一貫していない画像も生成されます。次のサンプルを見てください。
入力
出力
この手順はまた、例えば、ベースモデルからサンプルをアップスケールするためにも利用できます。
コメント
- 拡散モデルの私たちのコードベースは OpenAI の ADM コードベース と https://github.com/lucidrains/denoising-diffusion-pytorch を大きな足場にしています。Thanks for open-sourcing!
- transformer エンコーダの実装は lucidrains の x-transformers から引用しています。
BibTeX
(訳注: 原文 参照)
以上