stable-diffusion - 潜在的なテキストから画像への拡散

(Latent Text-to-Image Diffusion)

Created at: 2022-10-19 00:40:30
Language: Jupyter Notebook
License: NOASSERTION

安定した拡散

安定した拡散は、CompVisグループとの以前の研究に基づいています。

潜伏拡散モデル
を用いた高解像度画像合成 ロビン・ロンバッハ*,アンドレアス・ブラットマン*,ドミニク・ローレンツ,パトリック・エッサー,ビョルン・オマーCVPR
'22 口頭発表|GitHub |arXiv |プロジェクトページ

txt2img-stable2 安定拡散は、潜在的なテキストから画像への拡散モデルです。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

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

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

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

CreativeML OpenRAIL M ライセンスは Open RAIL M ライセンスであり、BigScienceRAIL Initiative が責任ある AI ライセンスの分野で共同で実施している作業から適応されています。当社のライセンスの基礎となるBLOOM Open RAILライセンスに関する記事も参照してください。

重み

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

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

安定した拡散を伴うテキストから画像へ

txt2img-stable2 txt2img-stable2

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

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

私たちは、参照サンプリングスクリプトを提供します, 組み込まれて

安定拡散-v1-*-元の重みを取得したら、それらをリンクします

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 

既定では、これは キャサリン クロウソンPLMS サンプラーの実装のガイダンス スケールを使用し、サイズ 512x512 (トレーニング対象) の画像を 50 ステップでレンダリングします。サポートされているすべての引数を以下に示します (タイプ)。

--scale 7.5
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: The inference config for all v1 versions is designed to be used with EMA-only checkpoints. For this reason

use_ema=False
is set in the configuration, otherwise the code will try to switch from non-EMA to EMA weights. If you want to examine the effect of EMA vs no EMA, we provide "full" checkpoints which contain both types of weights. For these,
use_ema=False
will load and use the non-EMA weights.

Diffusers Integration

A simple way to download and sample Stable Diffusion is by using the diffusers library:

from diffusers import StableDiffusionPipeline

model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, revision="fp16")
pipe = pipe.to(device)

prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
    
image.save("astronaut_rides_horse.png")

Image Modification with Stable Diffusion

By using a diffusion-denoising mechanism as first proposed by SDEdit, the model can be used for different tasks such as text-guided image-to-image translation and upscaling. Similar to the txt2img sampling script, we provide a script to perform image modification with Stable Diffusion.

The following describes an example where a rough sketch made in Pinta is converted into a detailed artwork.

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

Here, strength is a value between 0.0 and 1.0, that controls the amount of noise that is added to the input image. Values that approach 1.0 allow for lots of variations but will also produce images that are not semantically consistent with the input. See the following example.

Input

sketch-in

Outputs

out3 out2

This procedure can, for example, also be used to upscale samples from the base model.

Inpainting with Stable Diffusion

txt2img-stable2

We provide a checkpoint finetuned for inpainting to perform text-based erase & replace functionality.

Quick Start

After creating a suitable environment, download the checkpoint finetuned for inpainting and run

streamlit run scripts/inpaint_st.py -- configs/stable-diffusion/v1-inpainting-inference.yaml <path-to-checkpoint>

for a streamlit demo of the inpainting model. Details on the training procedure and data, as well as the intended use of the model can be found in the corresponding model card.

Diffusers Integration

Another simple way to use the inpainting model is via the diffusers library:

from diffusers import StableDiffusionInpaintPipeline

pipe = StableDiffusionInpaintPipeline.from_pretrained(
    "runwayml/stable-diffusion-inpainting",
    revision="fp16",
    torch_dtype=torch.float16,
)
prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
#image and mask_image should be PIL images.
#The mask structure is white for inpainting and black for keeping as is
image = pipe(prompt=prompt, image=image, mask_image=mask_image).images[0]
image.save("./yellow_cat_on_park_bench.png")

Evaluation

To assess the performance of the inpainting model, we used the same evaluation protocol as in our LDM paper. Since the Stable Diffusion Inpainting Model acccepts a text input, we simply used a fixed prompt of

photograph of a beautiful empty scene, highest quality settings
.

Model FID LPIPS
Stable Diffusion Inpainting 1.00 0.141 (+- 0.082)
Latent Diffusion Inpainting 1.50 0.137 (+- 0.080)
CoModGAN 1.82 0.15
LaMa 2.21 0.134 (+- 0.080)

Online Demo

If you want to try the model without setting things up locally, you can try the Erase & Replace tool at Runway:

https://user-images.githubusercontent.com/2175508/196499595-d8194abf-fec4-4927-bf14-af106fe4fa40.mp4

Comments

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