AIGC: ヴィンセント グラフ モデルの安定拡散

1 安定拡散の概要

Stable Diffusion は、CompVis、Stability AI、LAION が共同開発したテキストから画像へのモデルです。LAION-5B サブセットの多数の 512x512 グラフィック モデルを通じてトレーニングされています。テキストを 1 つ入力するだけで済みます。安定拡散により素早く画像に変換でき、写真や動画を配置してテキストで加工することも可能です。

Stable Diffusion のリリースは、AI 画像生成開発におけるマイルストーンであり、一般に公開される高性能モデルを提供することに相当し、生成される画像の品質が非常に高いだけでなく、動作速度も速く、リソースも高速です。メモリ要件も低くなります。生成された画像を以下に示します。

安定拡散デモ:デモ

1.1 安定拡散の構成

安定拡散は一枚岩のモデルではなく、いくつかのコンポーネントとモデルで構成されています。

  • テキスト理解コンポーネント: テキスト情報をデジタル表現に変換してテキスト内のアイデアを捉えるテキスト理解コンポーネント。
  • 画像生成器:画像生成器、画像生成器は、画像情報生成器(Image information Creator)と画像デコーダ(Image Decoder)の2つのステップを含む。

画像情報作成コンポーネントは複数のステップを実行してオブジェクトを生成します。これは安定した拡散インターフェイスおよびライブラリのステップ サイズ パラメーターであり、通常はデフォルトで 50 または 100 になります。画像情報作成者は完全に画像情報空間 (隠れ空間) で作業し、ピクセル空間で作業する拡散モデルよりも高速です。

画像デコーダは、画像情報作成者から得た情報に基づいて画像を描画し、最終的な画像生成の最後に一度だけ実行されます。

 上の図は安定拡散のフローチャートです。これには上記の 3 つのコンポーネントが含まれており、それぞれに対応するニューラル ネットワークがあります。

  • テキスト理解コンポーネント: Clip Text はテキスト エンコーダーです。77 個のトークンを入力として受け取ると、出力は 77 個のトークン埋め込みベクトルとなり、各ベクトルは 768 次元を持ちます。
  • Image Information Creator: UNet+Scheduler。潜在空間で拡散情報を段階的に処理します。テキスト埋め込みベクトルとノイズの開始多次元配列を入力として受け取り、処理された情報配列を出力します。
  • 画像デコーダ: **自動エンコードとデコード。処理された情報配列を使用して最終画像を描画します。次元 4 × 64 × 64 4 \times 64 \times 64 4×64×64 の処理済み情報配列を入力として取得すると、出力次元は 3 × 512 × 512 3 \times 512 \times 512 3x512x512 画像になります。

1.2 拡散とは

上で、「画像情報クリエーター」コンポーネントの機能について説明しました。このコンポーネントは、テキスト埋め込みベクトルとノイズからなる開始多次元入力を出力として受け取り、画像デコーダーが最終画像を描画するために使用する情報の配列を出力します。拡散は、下の図のピンク色の「Image Information Creator」コンポーネント内で行われるプロセスです。

 

 拡散は段階的なプロセスであり、各ステップでより関連性の高い情報が追加されます。拡散は複数のステップで発生し、各ステップが入力潜在配列に作用して、入力テキストと、モデルがトレーニング済みモデル内のすべての画像から取得したすべての視覚情報によりよく似た別の潜在配列を生成します。以下の図は、各ステップで生成された潜在配列を画像デコーダの入力として使用し、各ステップでどのような情報が追加されるかを視覚化しています。以下の図の拡散は 50 回反復されており、反復回数が増加するにつれて、潜在配列によってデコードされた画像はますます鮮明になります。

1.3 拡散の仕組み 

画像を生成する拡散モデルの主なアイデアは、業界の既存の強力なコンピューター ビジョン モデルに基づいています。データセットが十分に大きい限り、モデルはより複雑なロジックを学習できます。

ランダムに生成されたノイズを含む写真があり、この画像に追加するノイズをランダムに選択して、トレーニング サンプルを形成するとします。同様に、多数のトレーニング サンプルを生成してトレーニング セットを形成し、このトレーニング データ セットを使用してノイズ プレディクター (UNet) をトレーニングすることができます。トレーニング後は、特定の構成で実行すると画像を作成する高性能ノイズ予測器が生成されます。

1.4 ノイズを除去して画像を描画する

上記で構築されたノイズ トレーニング セットに基づいて、ノイズ予測器をトレーニングできます。ノイズ予測器はノイズ画像を生成できます。この生成されたノイズ画像を画像から差し引くと、モデルのトレーニング サンプルにできるだけ近い画像を取得できます. 、この近さは、空は通常青い、人間には目が 2 つあるなど、分布の近さを指します。生成される画像のスタイルは、トレーニング サンプルが存在するスタイルになる傾向があります。

 

1.5 画像ジェネレータにテキスト情報を追加する

上で説明した拡散生成画像にはテキスト画像が含まれていませんが、画像ジェネレータへの入力にはテキスト埋め込みベクトルとノイズの開始多次元配列が含まれるため、ノイズジェネレータはテキストに適合するように調整されます。このようにして、大量の訓練データに基づいて訓練後に画像生成器を得ることができる。選択されたテキスト エンコーダーとトレーニングされた画像ジェネレーターに基づいて、全体の安定した拡散モデルが形成されます。いくつかの説明文を与えることができ、安定した拡散モデル全体が対応する絵画を生成できます。

 

2 実行環境を構築する

2.1 conda環境のインストール

conda 環境の準備については、annoconda を参照してください。

2.2 動作環境の準備

git clone https://github.com/CompVis/stable-diffusion.git

cd stable-diffusion

conda env create -f environment.yaml

conda activate ldm

pip install diffusers==0.12.1

2.3 モデルのダウンロード

(1) モデルファイル「sd-v1-4.ckpt」をダウンロードします。

モデルアドレス:モデル

完了したら次のコマンドを実行します

mkdir -p models/ldm/stable-diffusion-v1/

mv sd-v1-4.ckpt model.ckpt

mv model.ckpt models/ldm/stable-diffusion-v1/

(2) Checkpoint_liberty_with_aug.pth モデルをダウンロードする

モデルアドレス:モデル

ダウンロードが完了すると、モデルはキャッシュ フォルダーに配置されます。

mv checkpoint_liberty_with_aug.pth ~/.cache/torch/hub/checkpoints/

(3) Clip-vit-large-patch14 モデルをダウンロードする

モデルアドレス:モデル

ダウンロードする必要があるモデルファイルは次のとおりです。

 モデルの保存ディレクトリを作成する

mkdir -p openai/clip-vit-large-patch14

ダウンロードが完了したら、ダウンロードしたファイルを上記ディレクトリに移動します。

(4) safety_checker モデルをダウンロードする

モデルアドレス:モデル

ダウンロードする必要があるモデルファイルは次のとおりです。

モデルファイルの保存ディレクトリを作成する

mkdir -p CompVis/stable-diffusion-safety-checker

ダウンロードが完了したら、ダウンロードしたファイルを上記のディレクトリに移動します

(3) の preprocessor_config.json を現在のモデル ディレクトリに移動します。

mv openai/clip-vit-large-patch14/preprocessor_config.json CompVis/stable-diffusion-safety-checker/

3 操作効果表示

3.1 Vincent 図の実行

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

ランニング効果表示

txt2img.pyパラメータ

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

3.2 画像変換の実行

次のようにコマンドを実行します。

python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img assets/stable-samples/img2img/mountains-1.png --strength 0.8

4 問題解決

4.1 SAFE_WEIGHTS_NAME の問題が解決されました

txt2img を実行すると、次のエラーが発生します。

(ldm) [root@localhost stable-diffusion]# python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
Traceback (most recent call last):
  File "scripts/txt2img.py", line 22, in <module>
    from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/__init__.py", line 29, in <module>
    from .pipelines import OnnxRuntimeModel
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/__init__.py", line 19, in <module>
    from .dance_diffusion import DanceDiffusionPipeline
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/dance_diffusion/__init__.py", line 1, in <module>
    from .pipeline_dance_diffusion import DanceDiffusionPipeline
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/dance_diffusion/pipeline_dance_diffusion.py", line 21, in <module>
    from ..pipeline_utils import AudioPipelineOutput, DiffusionPipeline
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/pipeline_utils.py", line 67, in <module>
    from transformers.utils import SAFE_WEIGHTS_NAME as TRANSFORMERS_SAFE_WEIGHTS_NAME
ImportError: cannot import name 'SAFE_WEIGHTS_NAME' from 'transformers.utils' (/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/utils/__init__.py)

コンポーネントのディフューザーのバージョンを変更することで解決できます。コマンドは次のとおりです。

pip install diffusers==0.12.1

4.2 ハグフェイス.co に接続できない場合の解決策

 python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
Traceback (most recent call last):
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/feature_extraction_utils.py", line 403, in get_feature_extractor_dict
    resolved_feature_extractor_file = cached_path(
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/utils/hub.py", line 282, in cached_path
    output_path = get_from_cache(
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/utils/hub.py", line 545, in get_from_cache
    raise ValueError(
ValueError: Connection error, and we cannot find the requested files in the cached path. Please try again or make sure your Internet connection is on.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "scripts/txt2img.py", line 28, in <module>
    safety_feature_extractor = AutoFeatureExtractor.from_pretrained(safety_model_id)
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/models/auto/feature_extraction_auto.py", line 270, in from_pretrained
    config_dict, _ = FeatureExtractionMixin.get_feature_extractor_dict(pretrained_model_name_or_path, **kwargs)
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/feature_extraction_utils.py", line 436, in get_feature_extractor_dict
    raise EnvironmentError(
OSError: We couldn't connect to 'https://huggingface.co' to load this model, couldn't find it in the cached files and it looks like CompVis/stable-diffusion-safety-checker is not the path to a directory containing a preprocessor_config.json file.
Checkout your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transformers/installation#offline-mode'.

解決:

モデルをローカルにダウンロードします。プロセスは 2.3 で説明されています。

おすすめ

転載: blog.csdn.net/lsb2002/article/details/131534772