事前学習された拡散モデルを用いた画像合成
画像合成に事前学習された拡散モデルを使用
事前学習済みテキストから画像への拡散モデルによる生成画像の制御を向上させる技術
テキストから画像への拡散モデルは、自然言語の説明に基づいて写真のようなリアルな画像を生成することで驚異的な性能を発揮しています。Stable Diffusionなどのオープンソースの事前学習済みモデルのリリースにより、これらの技術の民主化が進んでいます。事前学習済みの拡散モデルを使用することで、計算リソースや長時間のトレーニングプロセスが必要なく、誰でも素晴らしい画像を作成することができます。
テキストによる画像生成のレベルの制御が提供されているにもかかわらず、所望の構成を持つ画像を得ることは、詳細なプロンプトを使用してもしばしば困難です。実際、標準的なテキストから画像への拡散モデルは、生成される画像のさまざまな要素をほとんど制御することができません。
本投稿では、論文「MultiDiffusion: Fusing Diffusion Paths for Controlled Image Generation」に基づく最近の手法について説明します。この手法を使用すると、テキストによる拡散モデルで生成された画像において、要素の配置により大きな制御を得ることができます。論文で紹介されているこの手法は、パノラマ画像の生成など他のアプリケーションにも適用可能ですが、ここでは領域ベースのテキストプロンプトを使用した画像の構成性の場合に限定して説明します。この手法の主な利点は、高価な再トレーニングや微調整なしで、既存の事前学習済みの拡散モデルと共に使用できることです。
この投稿にはコードを補完するために、この投稿で使用した画像を生成するために使用したコードの実装が含まれるシンプルなColabノートブックとGitHubリポジトリを用意しました。コードはHugging Faceのdiffusersライブラリに含まれるStable Diffusionのパイプラインに基づいていますが、機能に必要な部分のみを実装しているため、シンプルで読みやすくなっています。
- 事前学習済みの拡散モデルによる画像合成
- 「普及型生成AIの環境への影響」
- Apache Beamパイプラインの作成でのMap、Filter、およびCombinePerKeyトランスフォームの例を使用しています
拡散モデル
このセクションでは、拡散モデルについての基本的な事実を振り返ります。拡散モデルは、データ分布を等方性ガウス分布にマッピングする拡散プロセスを逆にすることで新しいデータを生成する生成モデルです。具体的には、画像が与えられた場合、拡散プロセスは各ステップでその画像に少量のガウスノイズを追加する一連のステップで構成されます。無限のステップ数において、ノイズの加えられた画像は等方性ガウス分布からサンプリングされた純粋なノイズと区別できなくなります。
拡散モデルの目標は、各時刻 t において拡散プロセスのステップ t-1 におけるノイズが加えられた画像を、ステップ t におけるノイズ画像から予測することです。たとえば、ノイズが加えられた画像からその時点で追加されるノイズを予測し、それをノイズ画像から差し引くことによって行うことができます。
このようなモデルを訓練した後は、等方性ガウス分布からノイズをサンプリングし、モデルを使用してノイズを徐々に削除することで新しい画像を生成することができます。
テキストから画像への拡散モデルは、テキストプロンプトの説明に対応する画像に到達するために拡散プロセスを逆転させようとします。これは通常、各時刻 t で、t-1 のステップでのノイズ画像を、t のステップでのノイズ画像に加えて、画像を再構築しようとしているテキストプロンプトを記述するテキストプロンプトに基づいて予測するニューラルネットワークによって行われます。
Stable Diffusionを含む多くの画像拡散モデルは、元の画像空間ではなく、より小さな学習された潜在空間で動作します。これにより、必要な計算リソースを最小限に抑えつつ、品質の損失を最小限に抑えることができます。潜在空間は通常、変分オートエンコーダを介して学習されます。潜在空間内の拡散プロセスは以前と同じように機能し、ガウスノイズから新しい潜在ベクトルを生成することができます。これらを使用して、変分オートエンコーダのデコーダを使用して新しく生成された画像を取得することができます。
MultiDiffusionを使用した画像合成
では、MultiDiffusionメソッドを使用して制御可能な画像合成をする方法について説明します。目標は、事前にトレーニングされたテキストから画像に変換するモデルを使用して生成された要素をより制御することです。具体的には、画像に対する一般的な説明(例:表紙画像のようなリビングルーム)が与えられた場合、テキストのプロンプトを使用して特定の場所に要素を配置することを望みます(例:中央に赤いソファ、左に観葉植物、右上に絵画)。これは、目的の要素を説明する一連のテキストのプロンプトと、要素を描写する必要のある領域を指定する領域ベースのバイナリマスクのセットを提供することによって実現できます。例えば、下の画像には、表紙画像の要素の境界ボックスが含まれています。
制御可能な画像生成のためのMultiDiffusionの核となるアイデアは、異なる指定されたプロンプトに関連する複数の拡散プロセスを組み合わせて、あらかじめ決定された領域で各プロンプトの内容を示す一貫性のある滑らかな画像を得ることです。各プロンプトに関連付けられた領域は、画像と同じ次元のバイナリマスクで指定されます。マスクのピクセルは、その場所にプロンプトを描写する必要がある場合は1に設定され、それ以外の場合は0に設定されます。
具体的には、tを潜在空間で動作する拡散プロセスの一般的なステップとします。時刻tでのノイズのある潜在ベクトルが与えられた場合、モデルは各指定されたテキストプロンプトのノイズを予測します。これらの予測されたノイズから、時刻t-1での各プロンプトに対応するノイズを前の時刻tでの潜在ベクトルから除去することにより、時刻t-1の一連の潜在ベクトルを得ます。次の拡散プロセスの時間ステップの入力を得るために、これらの異なるベクトルを組み合わせる必要があります。これは、各潜在ベクトルを対応するプロンプトマスクで乗算し、マスクで重み付けされたピクセルごとの平均を取ることで行うことができます。この手順に従うと、特定のマスクで指定された領域では、潜在ベクトルは対応するローカルプロンプトによってガイドされた拡散プロセスの経路をたどります。各ステップで潜在ベクトルを組み合わせてからノイズを予測することにより、生成された画像のグローバルな結束性と異なるマスクされた領域間の滑らかな遷移が保証されます。
MultiDiffusionは、厳密なマスクへの適合性を向上させるために、拡散プロセスの初期段階でのブートストラップフェーズを導入します。この初期段階では、異なるプロンプトに対応するノイズ除去された潜在ベクトルは組み合わせず、代わりに一定の色の背景に対応するノイズのある潜在ベクトルと組み合わせます。このようにすることで、レイアウトは拡散プロセスの早い段階で一般的に決定されるため、モデルは最初にマスクされた領域に焦点を当ててプロンプトを描写することができます。
例
このセクションでは、この方法のいくつかの応用例を示します。私はHuggingFaceがホストする事前学習済みの安定したDiffusion 2モデルを使用して、この投稿のすべての画像(表紙画像を含む)を作成しました。
前述のように、この方法の直感的な応用例は、事前定義された場所に要素が配置された画像を取得することです。
この方法では、描写される単一の要素のスタイルやその他の特性を指定することができます。これは、ぼかされた背景に鮮明な画像を作成するために使用することができます。
要素のスタイルも非常に異なることがあり、見た目にも驚くべき結果をもたらすことがあります。例えば、以下の画像は、高品質の写真スタイルと、ファン・ゴッホの絵画スタイルを組み合わせたものです。
結論
この記事では、テキスト条件付き拡散モデルによって生成される画像に対して、異なる拡散プロセスを組み合わせる方法を探求しました。この方法により、画像の要素が生成される場所をより制御することができ、異なるスタイルで描かれた要素をシームレスに組み合わせることも可能となります。
この手法の主な利点の一つは、一般的に高コストな手続きであるファインチューニングの必要なく、事前に訓練されたテキストから画像への拡散モデルと組み合わせて使用できることです。また、より複雑な条件付けよりも簡単に指定および処理できるバイナリマスクを使用して、制御可能な画像生成が可能となります。
この技術の主な欠点は、各拡散ステップごとに、対応するノイズを予測するためにプロンプトごとにニューラルネットワークのパスを通す必要があることです。幸いなことに、これらはバッチ処理で実行することで推論時間のオーバーヘッドを減らすことができますが、GPUメモリの使用量が増えるというコストがかかります。さらに、時にはいくつかのプロンプト(特に画像の一部にのみ指定されたプロンプト)が無視されるか、それに対応するマスクで指定された領域よりも広い範囲をカバーすることがあります。これはブートストラップステップで緩和することができますが、その数が過剰になると要素を調和させるためのステップが減少し、画像の全体的な品質がかなり低下する可能性があります。
異なる拡散プロセスを組み合わせるアイデアは、この記事で説明された内容に限定されるものではなく、制御された画像生成に関する論文「MultiDiffusion: Fusing Diffusion Paths for Controlled Image Generation」で説明されるような、パノラマ画像生成などのさらなる応用にも使用することができます。
この記事がお気に入りになったことを願っています。技術的な詳細について深く掘り下げたい場合は、このColabノートブックとコードの実装が含まれているGitHubリポジトリをご覧ください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles