日々画像を作っている皆様こんにちは。
機械学習に慣れていないので論文を解説して自分で学習するという趣味を持つものです。
今回はこちらの論文です。エヌビディア社が提供している拡散モデルの論文となります。
eDiff-I: Text-to-Image Diffusion Models with an Ensemble of Expert Denoisers
Yogesh Balaji, Seungjun Nah, Xun Huang, Arash Vahdat, Jiaming Song, Qinsheng Zhang, Karsten Kreis, Miika Aittala, Timo Aila, Samuli Laine, Bryan Catanzaro, Tero Karras, Ming-Yu Liu
https://arxiv.org/abs/2211.01324
解説記事は、
NVIDIAが発表した最高性能の画像生成AI「eDiffi」の仕組みと機能
https://note.com/it_navi/n/ne743564d9ced
NVIDIAが高精度な画像生成AI「eDiffi」を発表、従来の「Stable diffusion」や「DALL・E2」よりテキストに忠実な画像生成が可能
https://gigazine.net/news/20221109-nvidia-ediffi-diffusion-models/
Nvidia's eDiffi is an impressive alternative to DALL-E 2 or Stable Diffusion
https://the-decoder.com/nvidias-ediffi-is-an-impressive-alternative-to-dall-e-or-stable-diffusion/
最初に解説記事で簡単に概要を掴んで、実際に論文を見てみたいと思います。新しいモデルかと思ったら一年前のモデルだったので、結構比較対象が古かったです。業界に参入して間もないので、業界地図がわからなくてまだ困ってます。
めちゃくちゃざっくりいうと拡散モデルで画像を復元する際のノイズ除去に関して、ステップごとに異なるノイズ除去を利用してより制御を細かく行うことができるということみたいです。
テキストのエンコーダーにはT5というGoogleのモデル。
https://github.com/google-research/text-to-text-transfer-transformer
そして、CLIPというOpenAIのモデルが利用されているようです。その中のText Encoderが利用されているみたいです。
https://openai.com/research/clip
あとはオプションとして利用する際には、上記のCLIPのImage Encoderが利用されているそうです。とりあえず拡散モデルでは、エンコーダーにテキストエンコーダーを利用するのか、イメージエンコーダーを利用するかによって変わるみたいなので、その辺りの選択が肝になりそうですね。
論文を見てみます。アブストラクトで注目すべきポイントは、
「サンプリングの初期において、生成はテキストプロンプトに強く依存してテキストに沿ったコンテンツを生成しますが、後になるとテキスト条件付けはほとんど無視され、タスクは高い視覚的忠実度の出力を生成することに変わります。」
ということで、拡散モデルのサンプリングの初期状態から最終状態へ移行するにつれて、テキストプロンプトの条件付けが効かなくなるということで、よりイメージの条件付けが強くなるというのがまずは基本にあるようです。ということで、T5やCLIPをサンプリングの状況に合わせて使い分けるということでしょうか。
特にテキストプロンプトの条件付けについて後半効かなくなるということで、Fig3,Fig4が紹介されていました。
Fig3論文より引用
左から右へとノイズ除去のステップが進むにつれて、上部はセルフアテンションの参照された頻度を表すヒートマップ、その下がT5/CLIPのテキストトークンがどの程度利用されたかのクロスアテンションヒートマップということで、ノイズが多い初期ではテキストが参照される一方で、画像は帯域的に全体が参照され、後になるほどテキストのトークンが軽視され、逆に画像は構図が決まり、特徴量が強調されているのがわかる。
なので、この考察を通じてステップごとにノイズ除去のアルゴリズムを変更しようということになるかと。利用されるのは先ほど書いた通りT5のテキストエンコーダーとCLIPのテキスト・画像エンコーダーのようです。
今回の論文のポイントをChatGPT先生に翻訳してもらいました:
1. テキストから画像への拡散モデルが異なるノイズレベルで異なる挙動を示すという観察に基づき、我々は専門家デノイザーのアンサンブル設計を提案しています。これは、同じ推論計算コストを維持しながら生成品質を向上させます。専門家デノイザーは、訓練コストを削減するために慎重に設計された微調整スキームを通じて訓練されます。
2. 拡散モデルへの入力情報を提供するために、エンコーダーのアンサンブルを使用することを提案します。これにはT5テキストエンコーダー、CLIPテキストエンコーダー、CLIP画像エンコーダーが含まれます。テキストエンコーダーが異なる画像形成を支持し、CLIP画像エンコーダーがスタイル参照写真を使用してテキストから画像への出力に影響を与える有用なスタイル転送能力を提供することを示します。
3. クロスアテンション変調スキームを通じて「言葉でペイント」機能を可能にするトレーニングフリーの拡張を考案しました。これにより、ユーザーはテキストから画像への出力に対する追加の空間的制御を行うことができます。
ということです。言葉でペイント機能については興味がないので飛ばします。
ちょっと一般的な類似研究についても触れられています。初心者なので手法としてちょっと注目すべきところがあれば見てみたいと思います。
「テキストから画像への拡散モデル 高品質なテキストから画像への生成モデルの中には、拡散モデルに基づくものがあります。これらのモデルは、画像空間または別の潜在空間で、テキストプロンプトに条件付けられたデノイジングタスクを行うことを学習します。計算効率のために、拡散モデルはしばしば低解像度の画像や潜在変数で訓練され、その後、超解像度拡散モデルや潜在から画像へのデコーダーによって高解像度の画像に変換されます。」
ということで、一般的には拡散モデルでは、低解像度の画像を最初に作成してから超解像で拡張するようです。この論文の後半にもそういう話が出てきそうでした。
「最近のディープラーニングの成功は、主にますます大きなモデルとデータセットによって推進されています。モデルのパラメータとデータサイズを単純にスケーリングアップすることが、様々なタスクで大幅なパフォーマンス向上をもたらすことが示されています。しかし、これらの高容量モデルは、トレーニングと推論の際に計算コストとエネルギーコストが増加するという問題も抱えています。」
ということです。よく聞かれる論調ですね。我々も仕事が増えてきた一因です。次は多少の数理です。この分野はあまり詳しくないので数理がフォローされているのは大変助かります。
めんどくさいので翻訳しました。
「訓練:
デノイジングモデルは、様々なスケールのガウスノイズを加えることによって生成された、汚染されたバージョンからクリーンな画像を回復するように訓練されます。KarrasらのEDM定式化と彼らが提案した汚染スケジュールに従って、訓練の目的を次のように記述できます:
ここで \( pdata(x_{clean}, e) \) は、トレーニングの画像テキストペアを生成するトレーニングデータの分布を表し、\( p(\epsilon) = N (0, I) \) は標準正規分布、\( p(\sigma) \) はノイズレベルがサンプリングされる分布、\( \lambda(\sigma) \) は損失重み付けファクターです。」
ということで、分布や各種のパラメータが記述された式に準じて学習が進むようです。
デノイザーは、
上記のように定式化され、具体的なパラメータ類にも言及がありました。詳しいパラメータについては原論文をご覧ください。
サンプリング
拡散モデルで画像を生成するには、特定の事前分布から初期画像を生成し、その後、生成する通常の微分方程式(ODE)を解くことによって行います。
∇x log p(x|e, σ)は、ノイズレベルσにおける汚染されたデータのスコア関数を表し、これはデノイジングモデルから得られるそうです。この辺りの処理に関しては今後実際にpythonの実装を通じてみてみたいところですが、今回は式を見るだけにします。
基本的に低解像度の画像生成からスタートし、超解像を通じて大規模かするみたいですが、テキスト条件付き超解像度拡散モデルの訓練は、上述のテキスト条件付き拡散モデルの訓練に大きく従っていて違いは、超解像度デノイジングモデルが低解像度画像も条件付け入力として受け取り処理をしているとのことです。この辺りは実装も見てみないとなんとも言えませんがそういうことらしいです。
エキスパートデノイザーのアンサンブルについてはChatGPTの翻訳がめちゃくちゃわかりやすかったです。
「前のセクションで議論したように、テキストから画像への拡散モデルは、事前ガウス分布からのサンプルを入力テキストプロンプトに基づいて条件付けされた画像に変換するためにデノイジングモデルに依存しています。形式的には、(2)で示された生成ODEは、D(x; e, σ)を使用してサンプルを徐々に入力条件付けに整合した画像へと導きます。各ノイズレベルσでのデノイジングモデルDは、デノイジングのために2つの情報源に依存しています:現在のノイズの多い入力画像xと入力テキストプロンプトeです。私たちの重要な観察は、テキストから画像への拡散モデルが、これら2つの情報源に依存しながら独特の時間的ダイナミクスを示すということです。生成の始まりでは、σが大きい時、入力画像xには主にノイズが含まれています。したがって、入力ビジュアルコンテンツから直接デノイジングすることは、難しく曖昧なタスクです。この段階では、Dは主に入力テキストの埋め込みに依存して、テキストに整合した画像への方向を推測します。しかし、生成の終わりに向かってσが小さくなるにつれて、ほとんどの粗いレベルのコンテンツはデノイジングモデルによって描かれます。この段階では、Dはテキストの埋め込みをほとんど無視して、細かいディテールを加えるためにビジュアル機能を使用します。」
入力として画像とテキストをもらうけど、初期状態のノイズが多い画像から得られる情報が少ないのでテキストに依存するということだと思います。
エキスパートデノイザーの学習のポイントについても言及がありました。かなりマニアックでしたので、あまり触れませんが、結局はいろんなアルゴリズムを検証して分岐アルゴリズムから派生して、3つのエキスパートデノイザーからなるアンサンブルを構成しているようです。低ノイズレベル向けのエキスパートデノイザー、高ノイズレベルのエキスパートデノイザー、すべての中間ノイズ間隔を学習するための単一のエキスパートデノイザーを組み合わせてるようです。
複数の条件付き入力
最終的にイメージをサンプリングする際には、GoogleのT5とOpenAIのCLIPを利用しているようです。64×64解像度の画像を生成できるベースモデルと、それぞれ256×256および1024×1024解像度まで画像を段階的にアップサンプルできる2つの超解像拡散モデルがあり、内部の具体的な実装としては、U-netアーキテクチャの変更版を使用しているとのことです。
あとはパフォーマンスなどが載っています。細かい制御ができるようになっていて、最近のDALL-E3にも通じるところがあります。最近は拡散モデルの細かい実装なども見始めているので、もちょい論文を読んだら会社で実装をもっと進めたいですね。大体の流れが確認できました。