この記事では主に{安定拡散|安定拡散}の実現原理について説明します。
{安定拡散|安定拡散}とは
StabilityAI
{Stable Diffusion|Stable Diffusion} は、 、 、CompVis
およびのチームによって開発された一連の画像生成モデルで、RunwayML
当初は2022
で公開されました。その主な機能は、テキスト入力に基づいて美しく詳細な画像を生成することですが、画像の欠落部分の修復( inpainting
)、画像の拡張( outpainting
)、グラフの生成などの他のタスクも実行できます。
つまり、{Stable Diffusion|Stable Diffusion} はテキストから画像へのモデルです。テキストヒントを与えます。テキストと一致する画像が返されます。
{普及モデル|普及モデル}
{安定拡散|安定拡散}は、{拡散モデル|拡散モデル}と呼ばれる深層学習モデルのクラスに属します。これらは生成モデルです。つまり、トレーニング中に見たものと同様の新しいデータを生成するように設計されています。定常拡散の場合、データは画像となります。
なぜそれが {拡散モデル|拡散モデル} と呼ばれるのですか? なぜなら、その数学モデルは物理学における拡散プロセスに非常に似ているからです。
{前方拡散|前方拡散}
{順拡散|順拡散} プロセスはトレーニング画像にノイズを追加し、徐々に特徴のない画像に変えます噪声图像
。あらゆる画像をノイズのある画像に前向过程
変換します。猫或狗
最終的には、元が犬だったのか猫だったのか区別できなくなります。
まるで水の入ったグラスにインクを一滴落としたように。インクは水中で広がります。数分後、水中にランダムに分散されます。もともと中央に落ちたのか、それとも端近くに落ちたのか、もはやわかりません。
以下は、{順拡散|順拡散}を通過した画像の例です。猫の画像がランダムなノイズになります。
{逆拡散|逆拡散}
{逆拡散|逆拡散}はビデオを逆再生するようなものです。過去に戻ってください。インク滴が最初に追加された場所を見てみましょう。
1 から開始して
噪声、无意义的图像
、{逆拡散|逆拡散} プロセスにより猫または犬の画像を復元できます。
技術的には、すべての拡散プロセスには 2 つの部分があります。
- ドリフトとかオリエンテーリングとか
- ランダムな動き
{逆拡散|逆拡散} プロセスは猫または犬の画像の方向に移動しますが、中間状態はありません。だから結果は猫か犬しかないのです。
歴史の要約
{Stable Diffusion|Stable Diffusion} のアーキテクチャと仕組みに入る前に、画像生成の歴史と Stable Diffusion の進化を簡単に振り返ってみましょう。
2015
年: トロント大学による発表alignDRAW
。これはモデルです文本到图像
。このモデルはぼやけた画像しか生成できませんでしたが、テキスト入力からモデルに「見えない」画像を生成できる可能性を実証しました。2016
2010:Reed、Scott
et al. は、敵対的生成ネットワーク(ニューラル ネットワーク構造) を使用してGAN
画像を生成する方法を提案しました。彼らは、詳細なテキストの説明からリアルな鳥や花の画像を生成することに成功しました。この作品に続いて、 をベースにしたモデルがシリーズ化されましたGAN
。2021
年:アーキテクチャベース (別のニューラル ネットワーク アーキテクチャ)OpenAI
が公開され、注目を集めました。Transformer
DALL-E
2022
年:と競合してGoogle Brain
リリースされました。Imagen
OpenAI
DALL-E
2022
年:潜在空間拡散モデルの改良版として {Stable Diffusion|Stable Diffusion} が発表されました。そのオープンソースの性質により、これに基づいて多くの亜種と微調整されたモデルが作成され、幅広い注目とアプリケーションを集めました。2023
年: 多くの新しいモデルやアプリケーションが登場し、テキストから画像への範囲を超え、テキストからビデオやテキストから 3D などの分野にまで広がりました。
タイムラインからわかるように、テキストから画像への変換は実際にはかなり新しい分野です。{Stable Diffusion|Stable Diffusion} の出現は重要なマイルストーンであり、オープンソース モデルとして以前のモデルよりも必要なリソースが少なくなり、この分野の指数関数的な成長が促進されます。
{安定拡散|安定拡散}の成分
{Stable Diffusion|安定拡散}は単純な AI モデルではなく、神经网络
異なるものを組み合わせるプロセスです。{安定拡散|安定拡散}のテキストから画像への生成プロセス全体をさまざまなステップに分解し、これらのステップをステップごとに説明します。
テキストから画像への生成プロセスの概要から始めましょう。
- {画像エンコーダ | 画像エンコーダ}: さらなる処理のためにトレーニング画像を潜在空間内のベクトルに変換します。
- 潜在空間は、画像情報をベクトルとして表現できる数学的空間です
数字数组
。 - {テキスト エンコーダ|テキスト エンコーダ}: 機械学習モデルが理解できるように、テキストを高次元ベクトル(テキストの意味を表す数値の配列とみなすことができます) に変換します。
- {拡散モデル|拡散モデル}
文本
:条件付きで潜在空間に新しい画像を生成します。(つまり、入力テキストは潜在空間での画像の生成をガイドします)。 - {画像デコーダ | 画像デコーダ}:潜在空間の画像情報をピクセルで構成される実際の画像に変換します。
各ステップは独自のニューラル ネットワークを使用して実行されます。
{Text Encoder | Text Encoder} は、テキスト入力を埋め込みベクトルに変換します。
外国の芸術家に絵を描いてもらいたいが、彼らの言語がわからない場合は、Google 翻訳を使用するか、彼らに言いたいことを翻訳してくれる人を見つけるとよいでしょう。
同じことが画像生成モデルにも当てはまります。機械学習モデルはテキストを直接理解できないため、テキストの命令を理解できる数値に変換するために {Text Encoder|Text Encoder} が必要です。これらの数値は乱数ではなく、テキスト埋め込みと呼ばれ、テキストの意味論的な意味 (つまり、単語とそのコンテキストの関係) を捕捉する高次元ベクトルです。
テキストを嵌入向量
缶に変換するにはいくつかの方法があります。{Stable Diffusion|Stable Diffusion} は、Transformer
大規模な言語モデルを使用してこのタスクを実行します。言語モデルについて少しでも知っている人なら、Transformer
この用語に精通しているかもしれません。これはGPT
言語モデルの基本的なアーキテクチャです。ChatGPT
関連する原則について詳しく知りたい場合。ChatGPT: 知っておくべきことを参照してください。
実際には、開発されたモデルに基づいた{ Stable Diffusion|Stable Diffusion}v1
が使用されます。{Stable Diffusion|Stable Diffusion}のより大きなバージョンが使用されます。CLIP
OpenAI
GPT
V2
OpenClip
CLIP
これらのエンコーダー モデルは、画像を説明するために使用する単語やフレーズの意味を学習するために、数十億のテキストと画像のペアを含む大規模なデータセットでトレーニングされます。データセットは、Web 上の画像と、alt
それらの画像を説明するために使用する画像ラベル (ラベル) から取得されます。
{拡散モデル|拡散モデル}は拡散プロセスを通じて画像を描画します
{拡散モデル|拡散モデル} は、統合画像のコンポーネントである安定拡散のコアコンポーネントです。
拡散モデルをトレーニングするには、次の 2 つの手順があります。
- {順拡散|順拡散} プロセスはトレーニング サンプルを準備するために使用されます。
- {逆拡散|逆拡散}プロセスを使用して画像を生成します
{Stable Diffusion|Stable Diffusion}では、両方のプロセスが高速化のために潜在空間で実行されます。
{前方拡散|前方拡散} の間、モデルは徐々に画像に追加し
高斯噪声
、きれいな画像をノイズの多い画像に変えます。各ステップで少量のノイズが画像に追加され、このプロセスが複数のステップにわたって繰り返されます。
「拡散」という言葉が示すように、水の中にインクを一滴落とすのと同じで、インクが徐々に広がっていき、元のインク滴がどこにあったのかわからなくなるほどです。画像に追加されるノイズ パターンは、インク粒子が水粒子にランダムに拡散するのと同じようにランダムですが、ノイズの量は制御できます。このプロセスLAION
はデータセットの多くの画像に対して実行され、それぞれに異なる量のノイズが追加されて、{逆拡散|逆拡散} モデルをトレーニングするための多数のノイズを含むサンプルが作成されます。
{逆拡散|逆拡散}のプロセスでは、元の画像に追加されたノイズを予測するように{ノイズ予測器|ノイズ予測器}がトレーニングされるため、モデルはノイズの多い画像から予測されたノイズを除去し、より鮮明な画像を取得できます。(
潜在空间
で)。このプロセスは、水中で部分的に拡散したインク滴を観察し、それが以前どこにあったかを予測しようとするものと考えることができます。
ResNet
{ノイズ予測器|ノイズ予測器}は、バックボーン構造U-Net
(ニューラル ネットワーク アーキテクチャ)に基づいています。
{ノイズ プレディクター | ノイズ プレディクター} トレーニング プロセスは次のとおりです。
- トレーニング画像、たとえば猫の写真を選択します。
- ランダムなノイズの多い画像を生成します。
- このノイズの多い画像を特定のステップ数のトレーニング画像に追加することで、トレーニング画像を破損します。
- {Noise Predictor | Noise Predictor} 教授は、どの程度のノイズが追加されるかを教えてくれます。これは、
调整其权重
正しい答えを示すことで行われます。
トレーニング後、画像に追加されたノイズを推定できる {ノイズ プレディクター | ノイズ プレディクター} が完成しました。
これは、ノイズ除去された画像が元の画像にできるだけ近くなるように、できるだけ正確にノイズを推定することを目的として、{順拡散|順拡散} によって事前に準備されたトレーニング データセットでトレーニングされます。トレーニングが完了すると、その重みで画像表現を「記憶」し、ランダムな初期ノイズ画像テンソルから画像を「生成」するために使用できます。実際の画像と画質は、元の画像に戻そうとする元の画像データセットに大きく依存します。この逆拡散プロセスは複数のステップで段階的に進められ、ノイズが除去されます。ノイズ除去のステップを増やすと、画像はますます鮮明になります。
より鮮明な画像を取得する {逆拡散|逆拡散} プロセスにおいて、研究者はコンディショニングと呼ばれるプロセスを通じて画像の外観を制御したいと考えています。テキストを使用する場合、このプロセスはテキストコンディショニングと呼ばれます。これは、テキスト エンコード ステップを に文本嵌入
渡すことによって行われU-Net
、クロス アテンション メカニズムを通じて動作します。
交叉注意机制
基本的には文本嵌入
{逆拡散|逆拡散}の各ステップの結果とマージされます。たとえば、入力プロンプト「猫」がある場合、条件化
それを {Noise Predictor | Noise Predictor} に次のように指示していると解釈できます。「次のノイズ除去ステップでは、画像はより猫のように見えるはずです。次のステップに進みます。条件のヒューマライゼーションは、画像、セマンティック マップ、表現など、テキスト以外の他のモダリティによってガイドすることもできます。
{Image Decoder | Image Decoder} は、潜在空間からの画像をピクセルに変換します。
私たちが実行する扩散
合計は潜在空間条件化
で実行されるため、結果の画像を直接見ることはできません。潜像を表示可能なピクセルに変換し直す必要があります。この変換は、{Image Decoder | Image Decoder} によって行われます。
{Stable Diffusion|Stable Diffusion} では、この変換器は変分オートエンコーダ( VAE
) です。初期の {順拡散|順拡散} プロセスでは、VAE
エンコーダ部分を使用して元のトレーニング画像をピクセルから潜在空間に変換し、ノイズを追加しました。ここで、VAE
使用するデコーダ部分は、潜像をピクセルに変換し直します。
VAEとは
{変分オートエンコーダー|変分オートエンコーダー}( VAE
) ニューラル ネットワークは 2 つの部分で構成されます。
- エンコーダー: 画像を潜在空間内の低次元表現に圧縮します。
- デコーダー: 潜在空間から画像を復元する
{安定拡散|安定拡散} モデルの潜在空間は、4x64x64
画像ピクセル空間の 48 分の 1 です。すべての前方拡散と後方拡散は実際には潜在空間で起こります。
したがって、トレーニング中に、ノイズを含む画像を生成する代わりに、潜在空間にランダムな {tensor|Tensor} (潜在ノイズ) を生成します。ノイズで画像を破損するのではなく、潜在空間内の画像の表現を潜在ノイズで破損します。その理由は、潜在的な空間が小さいため高速になるためです。
ディープラーニングでは、
Tensor
実際には多次元配列になります。
目的は、高次元の行列とベクトルを作成Tensor
できるようにすることです。
{安定した拡散|安定した拡散} すべての処理、拡散、調整をピクセル空間ではなく潜在空間で行う理由は、潜在空間が小さいためです。こうすることで、多くのコンピューティング リソースを消費することなく、このプロセスをより高速に行うことができます。
{コンディションコントロール|コンディショニング}
{安定した拡散|安定した拡散}は、テキスト キューのないテキストから画像へのモデルではありません。猫や犬の写真を撮るだけで、それを制御する方法はありません。
これが、{条件付き制御|コンディショニング} が行うことです。
条件控制
の目的は、画像から予測されたノイズを差し引いた後、必要な結果が得られるようにノイズ予測器をガイドすることです。
テキストコンディショニング(テキストから画像へ)
以下は、テキスト キューがどのように処理され、ノイズ プレディクターに入力されるかについての概要です。
- まず、トークナイザーはヒント内の各単語を
token
トークン ( ) と呼ばれる数値に変換します。 - 次に、各トークンは {embedding|embedding} と呼ばれる 768 値に変換されます
向量
。これらの埋め込みベクトルはテキスト トランスフォーマーによって処理され、ノイズ プレディクターで使用できるようになります。
トークナイザー
テキスト ヒントは、まずCLIP
トークナイザーによってセグメント化されます。は、あらゆる画像のテキストによる説明を生成するために開発された深層学習モデルCLIP
です。OpenAI
{Stable Diffusion|Stable Diffusion} v1
で使用されるCLIP
トークナイザー。
単語のセグメンテーションは、コンピューターが単語を理解する方法です。私たち人間は単語を読むことができますが、コンピューターは数字しか読めません。そのため、テキスト プロンプト内の単語は最初に数値に変換されます。
トークナイザーは、トレーニング中に見た単語のみをトークン化できます。たとえば、CLIP
モデルには“dream”
と があります“beach”
が、 はありません“dreambeach”
。トークナイザーは“dreambeach”
単語を 2 つのトークン“dream”
とに分割します“beach”
。したがって、単語が必ずしもトークンに対応するとは限りません。
もう 1 つ注意すべき点は、スペース文字もマークアップの一部であることです。上記の場合、フレーズは“dream beach”
2 つのトークン“dream”
と" を生成します。これらのトークンは、生成されるトークンの合計“[space]beach
とは異なります(ビーチの前にスペースはありません)。“dreambeach”
“dream”
“beach”
{Stable Diffusion|Stable Diffusion} モデルは、テキスト ヒントで使用されるトークンの数を に制限します
75
。
{埋め込み|埋め込み}
{ Stable Diffusion|Stable Diffusion} v1
で使用されるモデル。{embedding|embedding} は、値を含む文字列です。各トークンには独自の一意の {embedding|embedding} ベクトルがあります。{embedding|embedding} はモデルによって修正され、トレーニング中に学習されます。OpenAI
ViT-L/14 CLIP
768
向量
CLIP
なぜ {embed|embedding} が必要なのでしょうか? これは、特定の単語が互いに密接に関連しているためです。この情報を活用したいと考えています。たとえば、man
(man)、gentleman
(gentleman)、およびguy
(guy) の埋め込みは、同じ意味で使用されるため、ほぼ同じです。
エンベディングをノイズ予測器にフィードする
埋め込みベクトルは、テキスト トランスフォーマーに入力される噪声预测器
前に、嵌入
テキスト トランスフォーマーによってさらに処理される必要があります。このトランスは、条件付き制御用のユニバーサル アダプターのようなものです。この場合、入力はテキスト埋め込みベクトルですが、クラス ラベル、画像、深度マップなど他のものにすることもできます。トランスフォーマーはデータをさらに処理するだけでなく、さまざまな条件付きモダリティを含めるメカニズムも提供します。
{クロスアテンション|クロスアテンション}
テキスト トランスフォーマーの出力は、U-Net
ノイズ プレディクターによって全体にわたって複数回使用されます。U-Net
{Cross-attention|Cross-attention} メカニズムを通じてこれを活用してください。ここはprompt
イメージとイメージが出会う場所です。
たとえば、「青い目の男」という手がかりを考えてみましょう。{Stable Diffusion|Stable Diffusion} は、「青」と「目」という単語 (プロンプト内の自己注意) を組み合わせて、青いシャツを着た男性の代わりに青い目をした男性を生成します。次に、この情報を使用して、{逆拡散|逆拡散}を青い目を含む画像に向けます。(prompt
画像間のクロスノートも)
{安定拡散|安定拡散}最適化処理
これまでのところ、{順拡散|順拡散} のトレーニング プロセスと、テキスト入力から {逆拡散|逆拡散} で画像が生成される方法について理解が深まりました。しかし、これはほんの始まりにすぎません。より興味深いのは、より高品質の画像を生成するために、このプロセスをニーズに合わせてどのように調整できるかということです。研究者や愛好家は、安定した拡散の結果を改善するためにさまざまな技術を提案してきました。
これらの手法のほとんどは、すでにトレーニング済みの安定した拡散モデルに基づいて構築されています。トレーニングされたモデルとは、モデルの重み (モデルの作業をガイドする数値) を使用して画像を生成する方法を理解し、学習したことを意味します。
{テキスト エンコーダ|テキスト エンコーダ}を最適化する
1 つのテクニック セットは、{Stable Diffusion|Stable Diffusion} の {Text Encoder|Text Encoder} 部分用であり、文本反演
や が含まれますDreamArtist
。
- テキスト反転は、生成したい新しいコンセプトやスタイルごとに新しいキーワード埋め込みを学習することによって機能します。テキスト反転は、翻訳者に「この新しいオブジェクトが『犬と猫』という名前であることを覚えておいてください。次に私が『犬と猫』と言ったら、このオブジェクトを描くようにアーティストに伝えるべきです」と伝えるものと考えることができます。
DreamArtist
ポジティブなキーワードとネガティブなキーワードを学習して、参照画像を説明します。それは翻訳者に「これに写真があります。それがどのようなものかを覚えておいて、それを最もよく表すと思う名前を付けてください」と言っているようなものです。
最適化U-Net
(ノイズ予測部)
別の一連のテクニックはU-Net
、 に焦点を当てており图像生成组件
、および をDreamBooth
含みます。LoRA
Hypernetworks
DreamBooth
新しい概念を理解するまで、新图像数据集
拡散モデルを使用して微調整します。LoRA
追加の重み交叉注意模型
の小さなセットを に追加し、それらの追加の重みのみをトレーニングします。Hypernetworks
補助ネットワークを使用して新しい重みを予測し、{ノイズ プレディクター | ノイズ プレディクター} のクロス アテンション パーツを使用して新しいスタイルを挿入します。
これらのメソッドは基本的にアーティストに、自分で ( DreamBooth
)、既存のスタイルを微調整する ( LoRA
)、または外部の助けを借りて ( Hypernetworks
) のいずれかで、新しい描画方法を学ぶように指示します。DreamBooth
非常に効率的ですが、より多くのストレージ スペースが必要で、安定した拡散モデル全体をトレーニングする必要がないため、LoRA
と のトレーニングは比較的高速です。Hypernetworks
ノイズを制御して生成された画像を改善する
もう 1 つの手法は、やなどのノイズを制御して画像を生成する方法を改善することです。DALL-E 2
Diffusion Dallying
DALL-E 2
DALL-E
ノイズを制御してより有益な画像を生成することにより、元のモデルを改良したものです。Diffusion Dallying
これは、{逆拡散|逆拡散} プロセスに追加の反復ステップを追加して、モデルがより多くの時間を学習してより高品質の画像を生成できるようにするためです。
これらの方法は、ノイズの導入と画像生成の反復プロセスをより適切に制御することにより、安定した拡散の結果を向上させます。
上記の方法に加えて、より大きなモデルの使用、トレーニング戦略の最適化、ハイパーパラメーターの調整など、安定した拡散の結果を改善するために使用できる他のテクニックもあります。これらのテクノロジーの目標は、個々のコンポーネントと安定した拡散のプロセスを継続的に改善することで、より高品質で予測可能な画像生成結果を達成することです。
全体として、
文本编码器
、U-Net
、噪声控制
およびその他の技術を改善することで、安定した拡散の結果を向上させることができます。これらの技術は、より良い画像生成効果を達成するために、特定のニーズに応じて選択して適用できます。
{拡散モデル|拡散モデル}の仕組み
先ほど、{拡散モデル|拡散モデル}の内部メカニズムを神の観点から見ましたが、それがどのように機能するかを理解するために、いくつかの具体的な例を見てみましょう。
テキストから画像へ
テキストから画像への変換では、{拡散モデル|拡散モデル} にテキスト キューを与えると、画像が返されます。
ステップ 1: {安定拡散|安定拡散} は潜在空間にランダムな {テンソル|テンソル} を生成します。
これは、乱数発生器のシードを設定することで制御できます张量
。シードを特定の値に設定すると、毎回同じランダムなテンソルが得られます。このテンソルは潜在空間内のイメージを表しますが、現時点では単なるノイズのパッチにすぎません。
2 番目のステップ: {ノイズ予測子 | ノイズ予測子} は、 と を入力としてU-Net
受け取り、(テンソル) 内のノイズを予測します。潜在噪声图像
文本提示
潜在空间
4x64x64
ステップ 3: そこ潜在图像
から潜在噪声
。これがあなたの新しい潜在的なイメージになります。
第 2 ステップと第 3 ステップでは、サンプリング ステップを一定の回数(たとえば 20 回) 繰り返します。
ステップ 4: 最後に、VAE
デコーダは潜像をピクセル空間に変換し直します。これは、{Stable Diffusion|Stable Diffusion} を実行した後に得られた画像です。
各サンプリング ステップで画像がどのように変化するかを次に示します。
ノイズスケジュール
画像がノイズからクリアになりました。本当の理由は、各サンプリング ステップで予想されるノイズを取得しようとするためです。これがノイズ スケジューリングです。
以下に例を示します。
騒音スケジュールは私たち自身が定義します。各ステップで同じ量のノイズを減算することを選択できます。または、上の例のように、最初にさらにノイズを差し引くこともできます。采样器
各ステップで十分なノイズが差し引かれ、次のステップで目的のノイズが得られます。これが上の画像にあるプロセスです。
グラフ
グラフ生成グラフは、SDEdit
Methods で初めて提案された手法です。SDEdit
あらゆる拡散モデルに適用できます。したがって、グラフ生成メソッドを使用してそれを行うことができます稳定扩散
。
グラフ生成グラフの入力には、入力画像とテキスト プロンプトが含まれます。結果として得られる画像は、入力画像とテキスト キューの両方によって制約されます。
たとえば、左側の単純な画像と {プロンプト|プロンプト} を「茎、水滴、ドラマチックな照明で完璧な青リンゴを撮影する」の入力として使用すると、Tushengtu はそれをプロの絵画に変えることができます。
以下に詳細なプロセスを示します。
ステップ 1: 入力画像 {encode|Encoder} を潜在空間に配置します。
ステップ 2:潜像にノイズを追加します。ノイズ除去の強さは、追加されるノイズの量を制御します。ノイズ除去強度が 0 の場合、ノイズは追加されません。ノイズ除去強度が 1 の場合、最大量のノイズが追加され、潜像が完全にランダムなテンソルに変わります。
ステップ 3: {ノイズ予測器 | ノイズ予測器} つまり、ノイズを含む可能性のある画像とテキスト キューを入力として U-Net
受け取り、潜在空間 (4x64x64
テンソル) 内のノイズを予測します。
ステップ 4: 潜像から潜像ノイズを減算します。これがあなたの新しい潜在的なイメージになります。
第3および第4のステップは、一定のサンプリングステップ数、例えば20回繰り返される。
ステップ 5: 最後に、VAE
デコーダは潜像をピクセル空間に変換し直します。これは、image-to-image を実行したときに取得されるイメージです。
グラフの意味: その主な役割は、初期の潜像にノイズと入力画像を追加することです。初期の潜像は完全にランダムなノイズであるため、ノイズ除去強度を 1 に設定することは、テキストから画像へのプロセス( )と同等です。
text-to-image
{修理|修復}
{FIX|Inpainting} は、実際にはInpaintingの特殊なケースにすぎません。画像の修復が必要な部分にノイズが追加されます。ノイズの量は、Denoise Strength によっても制御されます。
{画像に対する深度|画像に対する深度}
{Depth-to-image|Depth-to-image} は、画像生成イメージの拡張機能であり、深度画像を使用して追加の条件付き制約を生成し、新しい画像を生成します。
ステップ 1: 入力画像を {潜在状態 | 潜在状態} にエンコードします。
ステップ2。MiDaS
(AI 深度モデル) は入力画像から深度マップを推定します。
ステップ3。潜像にノイズを付加します。デノイズ強度は、追加されるノイズの量を制御します。ノイズ除去強度が 0 の場合、ノイズは追加されません。ノイズ除去強度が 1 の場合、最大のノイズを追加して、潜在イメージをランダム テンソルにします。
ステップ4。{ノイズ プレディクター | ノイズ プレディクター} テキスト キューと深度マップに基づいて潜在空間のノイズを推定します。
ステップ5。潜像から潜像ノイズを減算して、新しい潜像を取得します。
サンプリングステップでは、ステップ 4 と 5 が繰り返されます。
ステップ6。VAE
デコーダは潜像をデコードする。これで、深度から画像までの最終画像が完成しました。
CFG値
CFG は、{No Classifier Assistance|Classifier-Free Guide} の略称です。CFG とは何かを理解するには、まずその前身である を理解する必要があります分类器辅助
。
分類子補助
分类器辅助
は、 {拡散モデル|拡散モデル} で画像ラベルを考慮する方法です。タグを使用して拡散プロセスをガイドできます。たとえば、ラベル「猫」は、猫の写真を生成するように {逆拡散|逆拡散} プロセスを指示します。
分類子の補助スケールは、拡散プロセスがどの程度ラベルに従うかを制御するパラメーターです。
「猫」、「犬」、「人間」というラベルが付いた 3 セットの画像があるとします。拡散がガイドなしの場合、モデルは各グループの母集団からサンプルを抽出しますが、犬を撫でる少年の画像など、両方のラベルに適合する画像を生成する場合があります。
高分類器の助けを借りて、{拡散モデル|拡散モデル} は、極端な例または明示的な例に偏った画像を生成します。モデルに猫の画像を生成するように依頼すると、モデルは間違いなく猫であるだけの画像を返します。
分類子の補助スケールは、補助がどの程度厳密であるかを制御します。上の図では、右側のサンプルの分類器支援スケールが中央のサンプルよりも高くなります。実際には、このスケール値は、そのラベルを持つデータに対するドリフト項の乗算係数にすぎません。
CFG値
分類器フリーエイド (CFG) スケールは、テキスト キューが拡散プロセスに影響を与える程度を制御する値です。値を 0 に設定すると、イメージの生成は無条件になります (つまり、ヒントは無視されます)。値を大きくすると、拡散プロセスがヒントの方向に進みます。
安定した拡散 v1 と v2
機種の違い
Stable Diffusion v2
テキストの埋め込みに使用しOpenClip
、テキストの埋め込みにStable Diffusion v1
使用します。この変更の理由は次のとおりです。Open AI
CLIP ViT-L/14
OpenClip
のモデルはCLIP
モデルの 5 倍の大きさです。テキスト エンコーダ モデルを大きくすると、画質が向上します。Open AI
モデルCLIP
はオープンソースですが、これらのモデルは独自のデータを使用してトレーニングされています。モデルに切り替えることで、OpenClip
研究者はモデルの研究と最適化の際に透明性を高めることができ、長期的な開発にとって有益です。
トレーニング データの違い:
Stable Diffusion v1.4
次のデータセットでトレーニングされました。laion2B-en
データセットに対して 237,000 ステップが解像度 で実行されました256×256
。- ステップは、解像度 で
laion-high-resolution
データセットに対して実行されました。194,000
512×512
- 解像度 512×512 の「laion-aesthetics v2 5+」データセットに対して 225,000 ステップが実行され、テキスト条件の 10% が条件解除されます。
Stable Diffusion v2
次のデータセットでトレーニングされました。- 分類器 set 、美的スコア >= 4.5を使用してフィルタリングされた、解像度 256x256 のフィルタリングされたサブセット
LAION-5B
に対して 550,000 ステップが実行されました。LAION-NSFW
punsafe=0.1
- 解像度 512x512 の同じデータセットに対して 850,000 ステップが実行され、画像解像度 >= 512x512 に制限されました。
v-objective
同じデータセットに対して150,000 ステップが実行されました。- の
768x768
イメージに対して追加のステップが実行されます140,000
。
- 分類器 set 、美的スコア >= 4.5を使用してフィルタリングされた、解像度 256x256 のフィルタリングされたサブセット
Stable Diffusion v2.1
v2.0 に基づいて次のような微調整が行われています。- 同じデータセットに対して追加の 55,000 ステップ () が実行されました
punsafe=0.1
。 - さらに 155,000 の追加ステップ (
punsafe=0.98
) が実行され、最終的に NSFW フィルターがオフになりました。
- 同じデータセットに対して追加の 55,000 ステップ () が実行されました
まとめ
この記事では、安定拡散がどのように機能するかを簡単に説明してみます。いくつかの重要なポイントを次に示します。
- 安定拡散は、主にテキスト (テキストによって制約される) から画像を生成するモデルですが、画像/表現などの他の命令から画像を生成することもできます。
- 安定拡散のトレーニング プロセスは、画像にノイズを徐々に追加する (前方拡散) ことと、{ノイズ プレディクター | ノイズ プレディクター} をトレーニングして徐々にノイズを除去し、より鮮明な画像を生成する (後方拡散) ことで構成されます。
- 生成プロセス (逆拡散) は、潜在空間内のランダムなノイズの多いイメージ (テンソル) から始まり、キューに応じて徐々にクリーンなイメージに拡散します。
文本反演
安定した拡散の結果を改善するには、埋め込み層で実行される と DreamArtist 、拡散モデルで実行されるLoRA
、 、DreamBooth
および を含む、多くの手法がありますHypernetworks
。そして、これらのテクノロジーのリストは増え続けています。
追記
共有することは態度です。
参考文献: