インターネット上で人気を博したグラフィックのトランスフォーマーをまだ覚えていますか?
最近、この大物ブロガー Jay Alammar も人気の安定拡散モデルに関する図をブログに書きました。これにより、モデルを完全にゼロから構築できるようになります。画像生成モデルの原理、超詳しい動画解説付き!
記事リンク: https://jalammar.github.io/illustrated-stable-diffusion/
#ビデオリンク: https://www.youtube.com/watch?v=MXmacOUJUaw安定拡散の図
Stable Diffusion のリリースは、AI 画像生成開発におけるマイルストーンであり、一般に使用可能な高性能モデルを提供することに相当します。速度は非常に高いですが、実行速度も非常に高く、高速であり、リソースとメモリの要件が低くなります。
AI 画像生成を試したことのある人は、その仕組みを知りたいと思うと思いますが、この記事では、安定拡散がどのように機能するのかについての謎を明らかにします。
Stable Diffusion には、機能に関して主に 2 つの側面が含まれます。 1) その中心的な機能は、入力としてのテキスト プロンプトのみに基づいて画像を生成することです (text2img) ); 2) テキストの説明に基づいて画像を変更するために使用することもできます (つまり、テキスト画像として入力)。
安定拡散のコンポーネント、それらがどのように相互作用するか、画像生成オプションとその意味を説明するために、以下の図を使用します。パラメーター。
安定拡散コンポーネント
安定拡散は、単一のモデルではなく、複数のコンポーネントとモデルで構成されるシステムです。モデル全体の観点からモデルの内部を観察すると、セマンティックを捉えるためにテキスト情報を数値表現 (数値表現) に変換するためのテキスト理解コンポーネントが含まれていることがわかります。テキスト内の情報。
モデルはまだマクロの観点から分析されており、モデルの詳細については後ほど説明しますが、このテキスト エンコーダーは大まかに推測することもできます。特別な Transformer 言語モデル (特に CLIP モデルのテキスト エンコーダー)。
モデルの入力はテキスト文字列で、出力はテキスト内の各単語/トークンを表すために使用される数値のリストです。つまり、各トークンは、ベクター。
この情報は、内部に複数のコンポーネントを含むイメージ ジェネレーター (イメージ ジェネレーター) に送信されます。
画像生成は主に 2 つの段階で構成されます:
1. 画像情報作成者
このコンポーネントは安定拡散の独自の秘伝レシピであり、以前のモデルと比較して、そのパフォーマンスの多くの向上がここで達成されます。このコンポーネントは複数のステップを実行して画像情報を生成します。ステップは安定拡散インターフェイスおよびライブラリのパラメーターでもあり、通常はデフォルトで 50 または 100 になります。 #画像情報クリエーターは、完全に画像情報空間 (または潜在空間) で動作します。この機能により、ピクセル空間で動作する他の機能よりも優れています。拡散モデルはより高速に実行されます。技術的には、このコンポーネントは UNet ニューラル ネットワークとスケジューリング アルゴリズムで構成されています。 拡散という言葉は、このコンポーネントの内部動作中に何が起こるかを表しています。つまり、情報が段階的に処理され、最終的に次のコンポーネント (画像デコーダー) によって使用されます。高品質の画像。 2. 画像デコーダ 画像デコーダは、画像情報作成者から得た情報をもとに描画を行います。ペイントでは、プロセス全体が 1 回だけ実行されて、最終的なピクセル イメージが生成されます。 ご覧のとおり、安定拡散には合計 3 つの主要コンポーネントが含まれており、それぞれに独立したニューラル ネットワークがあります。 1) Clip Text はテキストのエンコードに使用されます。 出力: 77 個のトークン埋め込みベクトル (それぞれに 768 次元が含まれます) 2) UNet Scheduler 情報(潜在)空間内で情報を段階的に処理/拡散します。 出力: 処理された情報配列 3) Autoencoder Decoder(Autoencoder Decoder)、処理された情報行列を使用します。デコーダが最終イメージを描画するために使用します。 出力: 結果画像、各次元は ( 3, 512, 512)、つまり (赤/緑/青、幅、高さ)
拡散とは何ですか?
実行プロセス全体は段階的に行われ、各段階でより関連性の高い情報が追加されます。 プロセス全体をより直観的に感じるために、ランダム潜在行列を途中で表示し、それが視覚的なノイズにどのように変換されるかを観察できます。そこでは、画像デコーダーによる視覚的な検査が進行中です。 。
拡散プロセス全体には複数のステップが含まれており、各ステップは入力潜在行列に基づいて動作し、「入力」間でより適切に適合する別の潜在行列を生成します。モデル画像セットから得られる「テキスト情報」と「視覚情報」。
これらの潜在力を視覚化すると、この情報が各ステップでどのように加算されるかを確認できます。 #プロセス全体がゼロから行われるため、非常にエキサイティングに見えます。 ステップ 2 と 4 の間のプロセスの移行は、まるでノイズから絵の輪郭が浮かび上がるかのように、特に興味深いものに見えます。 拡散モデルを使用して画像を生成するという中心的な考え方は、依然として既存の強力なコンピューター ビジョン モデルに基づいています。十分なデータセットが入力されると、これらのモデルは任意の複雑な操作を学習できます。 すでに画像があり、ノイズを生成して画像に追加すると、その画像をトレーニング サンプルとみなすことができるとします。 同じ操作を使用して、画像生成モデルのコア コンポーネントをトレーニングするための多数のトレーニング サンプルを生成できます。 したがって、このプロセスを数十のステップに分散し、データセット内の画像ごとに数十のトレーニング サンプルを生成できます。
#上記のデータセットに基づいて、優れたパフォーマンスを備えたノイズ予測器をトレーニングできます。各トレーニング ステップは他のモデルのトレーニングと同様です。 。特定の構成で実行すると、ノイズ プレディクターはイメージを生成できます。 #ノイズを除去して画像を描画するトレーニングされたノイズ予測子は、追加されたノイズ (追加されたノイズの量) を含む画像のノイズを除去できます。も予測できます。
#サンプルのノイズは予測可能なため、画像からノイズを差し引くと、最終的な画像はモデルのトレーニング済み画像に近くなります。 。
#取得された画像は、正確な元の画像ではなく、ワールド内のピクセルの配置、つまり分布です。空は通常青で、人には目が 2 つあり、猫には耳が尖っています。生成される特定の画像スタイルは、トレーニング データ セットに完全に依存します。 Stable Diffusion だけでなく、DALL-E 2 や Google の Imagen モデルもノイズ除去を通じて画像を生成します。 次のセクションでは、モデルによって生成される画像の種類を制御するプロセスに条件付きテキストを組み込む方法について説明します。 画像生成プロセスを高速化するために、安定拡散はピクセル画像自体に対して拡散プロセスを実行することを選択しません。しかし、論文では「潜在空間への出発」とも呼ばれる、画像の圧縮バージョンで実行することを選択します。 後続の画像の解凍と描画を含む圧縮プロセス全体は、画像を潜在空間に圧縮するオートエンコーダを通じて完了し、デコーダを使用して圧縮された情報のみを使用します。再構築すること。 前方拡散プロセスは、潜在を圧縮するときに完了します。ノイズ スライスは、ピクセル イメージではなく、潜在に適用されるノイズです。そのため、ノイズ プレディクターは実際には圧縮表現 (潜在空間) 内のノイズを予測するように訓練されています。 前方プロセス、つまり、オートエンコーダー内のエンコーダーを使用してノイズ予測子をトレーニングします。トレーニングが完了すると、逆のプロセス (オートエンコーダー内のデコーダー) を実行することで画像を生成できます。 #前方プロセスと後方プロセスを以下に示します。この図には、モデルが生成する画像のテキスト プロンプトを記述する条件付けコンポーネントも含まれています. . モデル内の言語理解コンポーネントは、Transformer 言語モデルを使用します。入力テキスト プロンプトは、トークン埋め込みベクトルに変換されます。リリースされている安定拡散モデルは ClipText (GPT ベースのモデル) を使用していますが、この記事では便宜上 BERT モデルを選択します。 Imagen 論文の実験では、より大きな言語モデルを使用すると、より大きな画像生成コンポーネントを選択するよりも多くの画像が生成される可能性があり、品質が向上することが示されています。 初期の Stable Diffusion モデルでは、OpenAI によってリリースされた事前トレーニング済み ClipText モデルが使用されていましたが、Stable Diffusion V2 では、新しくリリースされたより大きな CLIP モデル バリアントに切り替わりました。 CLIP はどのようにトレーニングされますか? #CLIP が必要とするデータは画像とそのタイトルであり、データセットには約 4 億枚の画像と説明が含まれています。 データセットは、インターネットから取得した画像と、対応する「alt」タグのテキストから収集されます。 CLIP は、画像エンコーダーとテキスト エンコーダーを組み合わせたもので、そのトレーニング プロセスは、画像とテキストの説明を取得し、2 つのエンコーダーを使用してデータを個別にエンコードするように簡素化できます。 次に、コサイン距離を使用して結果の埋め込みを比較します。最初にトレーニングを開始するときは、たとえテキストの説明と画像が一致していても、間の類似性は彼ら それは間違いなく非常に低いです。 モデルが継続的に更新されると、後続の段階で、エンコーダーが画像とテキストをエンコードすることによって得られる埋め込みは、徐々に似てきます。 このプロセスをデータセット全体で繰り返し、大きなバッチ サイズのエンコーダーを使用することで、最終的には、次のような埋め込みベクトルを生成できます。犬の画像 「犬の画像」という文に似ています。 word2vec と同様に、トレーニング プロセスにも、不一致の画像とキャプションのネガティブ サンプルを含める必要があり、モデルはそれらに低い類似性スコアを割り当てる必要があります。 テキスト条件を画像生成プロセスの一部として組み込むには、ノイズ予測器の入力を調整する必要がありますテキストになること。
Unet でテキスト トークンがどのように使用されるかをより深く理解するには、まず Unet モデルを理解する必要があります。
ノイズ予測器のネット層 (テキストなし)
モデル内では次のことがわかります: 2. 各レイヤーは前のレイヤーの出力に基づいて動作します; 3. 特定の出力 (残留接続経由) は、ネットワークの背後の処理に供給されます 4. タイム ステップをタイム ステップ埋め込みベクトルに変換し、レイヤーで使用できます。
Unet ノイズ プレディクターのレイヤー (テキスト付き)
#主な変更部分は、テキスト入力 (用語: テキスト コンディショニング) のサポートを追加することです。つまり、ResNet ブロック間にアテンション レイヤーを追加します。 。
ResNet ブロックはテキスト コンテンツを直接参照するのではなく、アテンション レイヤーを通じて潜在的なテキストの表現をマージすることに注意してください。 、次の ResNet はこのプロセスで上記のテキスト情報を利用できます。 加速: 圧縮データ上の拡散
以上がジェイ・アラマー氏がまたしても新作「安定拡散の超高画質イラスト」を公開 読めば「画像生成」の原理が丸わかりの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。