Stable Diffusionとは?Git HubからStable Diffusionを読み解く

GitHub - CompVis/stable-diffusion: A latent text-to-image diffusion model
A latent text-to-image diffusion model. Contribute to CompVis/stable-diffusion development by creating an account on GitHub.

Stable Diffusionは、Stability AIとRunwayとのコラボレーションによって実現しました。以下の先行研究に基づいています。

High-Resolution Image Synthesis with Latent Diffusion Models Robin Rombach*、Andreas Blattmann*、Dominik Lorenz、Patrick Esser、Björn Ommer CVPR ’22 Oral | GitHub | arXiv | Project page

Stable Diffusionは、潜在的なテキストから画像を生成するlatent text-to-image diffusionモデルです。Stability AIからのコンピュータの寄付と、LAIONの一部のデータベースから512×512の画像を使用してモデルを訓練することができました。GoogleのImagenと同様に、このモデルは凍結されたCLIP ViT-L/14テキストエンコーダ(open aiによって作成された画像と言語を紐づけて学習させたエンコーダ。精度高く数値ベクトルに変換。)を使用してモデルをテキストプロンプトで条件付けします。860MのUNetと123Mのテキストエンコーダを持つこのモデルは比較的軽量であり、少なくとも10GBのVRAMを備えたGPUで動作します。以下のセクションとモデルカードを参照してください。

Requirements

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 .

これらのコマンドは、Latent Diffusionモデルを実行するために必要なパッケージをインストールするためのものです。具体的には、PyTorch、Transformers、Diffusers、Invisible-Watermarkなどが含まれています。

最初のコマンドは、環境ファイルenvironment.yamlを使用して名前が「ldm」のconda環境を作成します。2番目のコマンドは、既存の環境を更新するために使用されます。

最後のコマンドは、プロジェクトのルートディレクトリで実行する必要があります。これにより、プロジェクトがpipでインストールされ、編集モードで実行されます。このコマンドは、開発者自身が開発したモジュールをインストールするために使用されます。

Stable Diffusion v1

Stable Diffusion v1は、下サンプリング率8のオートエンコーダーを使用し、860MのUNetとCLIP ViT-L/14テキストエンコーダーを持つ特定のモデルアーキテクチャの構成を指します。このモデルは、256×256の画像で事前にトレーニングされ、その後512×512の画像で微調整されました。

注意:Stable Diffusion v1は一般的なテキストから画像への拡散モデルであり、そのため、トレーニングデータに存在する偏見や誤解が反映されます。トレーニング手順やデータ、およびモデルの想定される使用方法に関する詳細は、対応するモデルカードに記載されています。

The wightは、Hugging FaceのCompVis組織でライセンス付きで提供されています。ライセンスには、モデルカードに基づいて誤用や害を防ぐための特定の使用に関する制限が含まれていますが、その他は寛容です。ライセンスの条項に従って商用利用することができますが、ウェイトには既知の制限や偏見が存在するため、追加の安全性の仕組みや考慮を必要とするサービスや製品に提供することはお勧めできません。一般的なテキストから画像へのモデルの安全で倫理的な展開に関する研究は進行中の取り組みです。ウェイトは研究資産であり、それに応じて扱われるべきです。

CreativeML OpenRAIL Mライセンスは、責任あるAIライセンスの分野でBigScienceとRAILイニシアチブが共同で進めている作業に基づいて適応されたOpen RAIL Mライセンスです。当社のライセンスは、BLOOM Open RAILライセンスに関する記事も参照してください。

モデルについて

各バージョンは、異なるデータセット、解像度、学習ステップに基づいてトレーニングされています。それぞれのバージョンには、異なる数の学習ステップ、解像度、トレーニングデータが含まれており、モデルの性能に影響を与えます。各バージョンのチェックポイントには、sd-v1-1.ckptからsd-v1-4.ckptまでの名称が付けられています。また、各バージョンには、異なるクラス分類器を使用したガイダンススケールの評価結果が含まれています。これらの情報を使用して、特定の用途に最適なモデルのチェックポイントを選択できます。

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

取得したら、それらをリンクします

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サンプラーの実装であるのガイダンス スケールを使用し、サイズ 512×512 (トレーニングに使用した) の画像を 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 がある場合とない場合の効果を調べたい場合は、両方のタイプの重みを含む「完全な」チェックポイントを提供します。これらについては、use_ema=FalseEMA 以外の重みをロードして使用します。

ディフューザーの統合

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 に近い値では、多くのバリエーションが可能になります。

 

予備知識

Hugging faceとは

Hugging Face Transformersは、自然言語処理タスクを簡単に実装できるPythonライブラリです。主にPyTorchとTensorFlowに対応しており、事前学習済みモデルやファインチューニング用のAPI、モデルの可視化、データの前処理など、様々な機能が提供されています。BERT、GPT-2、RoBERTa、T5、ELECTRA、BARTなど、現在最も有名な自然言語処理モデルの多くが含まれており、NLPの実装に必要な機能を簡単に利用できることから、研究や実業務に広く利用されています。

Downsampling-factor 8 autoencoder

入力画像の解像度を 1/8 にダウンサンプリングするオートエンコーダーのことです。このオートエンコーダーは、画像をエンコードして抽出した特徴量をデコードすることで、入力画像を再現します。これにより、エンコードされた特徴量はより低次元であり、計算コストを削減できます。Stable Diffusion v1では、ダウンサンプリングファクター 8 が使用され、512×512の画像が入力された場合、64×64の特徴量マップが生成されます。この特徴量マップは、生成器である 860M UNet の入力として使用されます。

ViT-L/14

ViT-L/14とは、Vision Transformer-Large/14と呼ばれる、Transformerアーキテクチャを採用した大規模なビジョンモデルのことです。ViT-L/14は、画像分類や物体検出などのタスクにおいて、非常に高い精度を示しています。CLIPでは、ViT-L/14を事前学習済みのテキストエンコーダーとして使用しています。ViT-L/14は、14層のTransformerエンコーダーから構成され、パラメータ数は3.5億個以上にも及びます。

transformer

Transformerアーキテクチャは、自然言語処理タスクにおいて高い性能を発揮するニューラルネットワークの一つです。元々は言語翻訳タスクのために提案されたもので、Attention機構を中心に構成されています。Transformerは、従来のRNN(Recurrent Neural Network)を用いたニューラルネットワークと比較して、長期的な文脈を扱いやすいという利点があります。

Transformerは、エンコーダーとデコーダーという2つの部分で構成されています。エンコーダーは、入力された文の各単語を数値化し、それらの単語間の関係性を表すベクトルを生成します。デコーダーは、エンコーダーが出力したベクトルをもとに、翻訳結果の文を生成します。

Transformerでは、Attention機構を使用して、入力された文全体の単語を、それぞれの単語がどの程度重要かを判断することができます。このAttention機構により、長期的な文脈を考慮した翻訳結果を得ることができます。また、エンコーダーとデコーダーが直接つながっているため、デコーダーが生成した単語が、エンコーダーが出力したベクトルにどのように影響を与えるかを効率的に計算することができます。

 

以下の表は、Transformerの構成要素とそれらの役割を簡単にまとめたものです。

構成要素 役割
Self-Attention 同一文内の単語間の関係性を捉える
Multi-Head Attention 異なる文同士の単語間の関係性を捉える
Encoder 入力文をベクトル表現に変換する
Decoder 出力文を生成する
Positional Encoding 単語の位置情報を表現する
Feedforward Layer 活性化関数を用いた全結合層

以下にRNNとTransformerの主な違いを表にまとめました。

RNN Transformer
構造 一方向(前方向) 双方向(エンコーダー・デコーダー)
メモリ 隠れ状態 セル・アテンション・出力
長期依存関係 扱いにくい 扱いやすい
パラレル処理 難しい 容易に可能
処理速度 遅い 速い
応用例 テキスト生成、音声合成 テキスト生成、画像生成、音声合成

uNet

UNetは、畳み込みニューラルネットワークの一種で、画像生成に使用されるエンコーダとデコーダから構成されるアーキテクチャです。エンコーダは入力画像を低次元の特徴空間に変換し、デコーダはその特徴空間を使用して、元の画像に近い画像を生成します。Stable Diffusionの場合、860MのUNetは、512×512サイズの画像を生成するために使用されます。

テキストエンコーダ

一方、テキストエンコーダは、自然言語処理のタスクで一般的に使用されるエンコーダの一種です。Stable Diffusionの場合、123Mのテキストエンコーダは、テキストプロンプトを数値表現に変換するために使用されます。これにより、生成される画像は、テキストプロンプトに基づいて条件付けされます。

LAION

LAION は、 Large-scale Artificial Intelligence Open Network の頭字語です。
大規模な機械学習モデル、データセット、および関連コードを一般に提供する非営利団体です。
LAION はLAION-5Bと呼ばれるデータセットをリリースしました。このデータセットには、AI トレーニング用に 50 億を超える画像とテキストのペアが含まれています。
LAION は、オープンな公教育を奨励し、機械学習の研究を促進することを目指しています

StabilityAI

Stability AIは、カリフォルニア州ベイエリアに拠点を置く、AIの安定性と信頼性に特化したスタートアップ企業です。同社は、機械学習やディープラーニングにおいて、モデルの品質と信頼性を高めるためのさまざまなツールやソリューションを提供しています。Stable Diffusion v2など、自社の研究開発成果をオープンソースで公開することも行っています。また、同社は、安定性に関する専門的なコンサルティングや、モデルの評価やバグ検出、品質保証などのサービスも提供しています。

コメント

タイトルとURLをコピーしました