2022年8月に無料で一般公開された画像生成AI「Stable Diffusion」は、NVIDIA製GPUを搭載したCPUあるいはGoogle Colaboratoryのようなオンライン実行環境を整えれば、任意の文字列や誰でも画像を生成することができます。そんなStable Diffusionがどのようにして画像を生成しているのかについて、AIについてTwitterで解説を行うAI Pubが説明しています。



Stable Diffusionがどのように画像を生成しているのかについては、以下の画像をクリックすると見ることができるGIFアニメーションを見ると、おおまかに理解できます。

そもそもStable Diffusionの「Diffusion」とは「拡散」という意味です。この拡散とは、画像にランダムで小さなノイズを繰り返し追加するプロセスのことで、以下の画像だと左から右に進める処理です。Stable Diffusionでは、さらにこの逆となる右から左、つまりノイズを画像に変換する処理も行います。



そして、このノイズを画像に変換する工程を、学習済みのニューラルネットワークが担当します。ニュートラルネットワークが学習するのは関数f(x,t)で、これはxのノイズをわずかに除去し、t-1回目でどのように見えるかを生成するものです。



純粋なノイズをキレイな画像に変化させるには、この関数を何度も適用すればいいというわけです。Stable Diffusionの処理はいわばf(f(f(f(....f(N, T), T-1), T-2)..., 2, 1)というように、関数の入れ子状態になっています。このNは純粋なノイズ、Tはステップ数になります。



もちろん一連の作業を512×512ピクセルで行うのは計算負荷が非常に高く、コストもかかります。



そのため、この計算負荷を下げるため、実際のピクセル空間を使うのではなく、より低い次元である潜在空間を利用します。具体的には、エンコーダーを使って画像Xを潜在空間表現であるz(x)に圧縮し、xではなくz(x)で拡散(Diffusion Process)とノイズ除去(Denoising U-Net)を実行する流れ。以下の図のεがエンコーダーで、Dがデコーダーです。



ニューラルネットワークがどのように画像を理解しているのかについては、以下の記事でも解説しています。

ニューラルネットワークはどのように画像を理解しているのか - GIGAZINE



Stable Diffusionは、さらに関数の変数として文字列(プロンプト)を入力できます。プロンプトを入力することで、ノイズ除去の方向がある程度定まることになります。



Stable Diffusionはプロンプトという「コンテクスト」を、ノイズ除去プロセスで行われる単純結合(Simple concatenation)とデコード直前のCross-attentionで介入させます。



また、コンテクストとして文字列のほかに画像を扱うことができるというのもStable Diffusionの大きな特徴です。Stable Diffusionは、画像データから画像修復と画像合成の同時を行います。



また、以下の記事でもStable Diffusionの仕組みについて詳しくまとめられています。

アーティストの権利侵害やポルノ生成などの問題も浮上する画像生成AI「Stable Diffusion」の仕組みとは? - GIGAZINE