見出し画像

Stable Diffusionって何? #1

画像生成でみなさんが使っているStable Diffusionについて調べながら解説してみます!
非常に沢山のトピックがあり、調べるにも記事にするにも時間がかかりそうなのでシリーズものとして腰を据えて取り組んでみます!

読者の想定と作成方針
AIイラスト作成に触れたことがある人を読者として、簡単な理解から積み上げるように説明していくことで誰でも理解できることを目指します。
※数式は使わず模式図でふわっと説明するので詳しい方は読むときに注意してください。

Stable Diffusionとは?

wikipediaによると以下です。

Stable Diffusion(ステイブル・ディフュージョン)は、2022年に公開されたディープラーニング(深層学習)のtext-to-imageモデル英語版)である。主にテキスト入力に基づく画像生成(text-to-image)に使用されるが、他にもインペインティング英語版)(: inpainting)、アウトペインティング(: outpainting)、テキストプロンプトによって誘導される画像に基づく画像生成(image-to-image)にも使用される[3]
Stable Diffusionは、ミュンヘン大学のCompVisグループが開発した潜在拡散モデル(: latent diffusion model)であり、深層生成ニューラルネットワーク: deep generative neural network)の一種である[4]。このモデルは、EleutherAIとLAION英語版)の支援を受け、Stability AI、CompVis LMU、Runwayの三者が共同で公開した[5][1][6]。2022年10月、Stability AIは、Lightspeed Venture Partners英語版)とCoatue Management英語版)が主導するラウンドで1億100万米ドルを調達した[7]

https://ja.wikipedia.org/wiki/Stable_Diffusion

まとめると
Stable Diffusionは、テキストから画像を生成する生成AI(text-to-imageモデル)の一つであり、その原理には潜在拡散モデル(: latent diffusion model)が使われています。
そして、テキストからの画像生成(text2image)以外にインペイント、アウトペイントなどテキストで指示した内容に応じた画像変換(image2image)も行うことができます。

Stable Diffusionの凄いところは生成される画像の品質が非常に高いこと、非常に多様なタスクを実行できること、実行時間も従来のDiffusion Modelと比べると早いことです。そして学習も安定しています。

Stable Diffusionでできること

皆さんもよくご存知だと思いますが、Stable Diffusionができることを振り返り模式図に落とし込んでみます。

まずはtext2image、例えば「赤目でバブルポニーで赤い着物を来た可愛らしい女の子」を作ってみるとこんな感じです。

text2imageの模式図

これがまさにtext to imageモデルとしての振る舞いです。
ここに至るまでにも長い研究の歴史があり、最初はnoise to image(ノイズから画像を生成する)から始まりました。人物の顔だけの生成、人物の全身の生成、様々な物体の生成、そしてテキストによる操作へと進化してきました。
本筋ではないですが希望があれば記事化します。

次にインペイント(黒いマスクの部分を補完する)、空に鳥を飛ばしたいと思ったので左上に鳥を出してみるとこんな感じです。

インペイトの模式図

ここでさらっと「空に鳥を飛ばしたいと思ったので左上に鳥を出して」いますが、実はこれ、従来のインペイントモデルではできなかった凄いことです。
従来のインペイントは補完する内容をテキストで指示することができず、マスクの周りの情報からあり得そうな画像を埋めるだけでした。インペイントモデルもマスク領域を一意に補完、多様に補完、セグメントやラインに従って補完と進化してきたのはまた別のお話。

次にimage2imageです。赤い着物の女の子をベースにして青い目、青い着物にしてみましょう。

image2imageの最も単純な理解

およその構図と雰囲気も保ったまま青くなりましたね!
これがさらっとできてしまうStable Diffusionは本当にすごいです。
今や古典的になってしまった従来のimage-to-imageモデルからすると、これだけ多様な物体に対してテキストの内容に整合性を取りながら高品質に画像変換ができることは革命的です。このに至るまでも先人の積み重ねの歴史があります。

なぜ一つのモデルで色々できるのか?

皆さんは不思議に思いませんか?上で紹介したタスクはそれぞれ性質が異なりますが、Stable Diffusionは一つのモデルでそれをこなしています。その謎に迫るためには拡散モデル(英:Diffusion Model)を説明する必要があります。

さて、上の3つのタスクを同時にこなすためには、少なくとも3つの物が入る共通のボックスが必要です。

3つのタスクを受け取る共通のボックス

このボックスの正体がノイズです。ノイズを画像として表現すると砂嵐のようなものになります。

256×256のカラーノイズ画像

拡散モデルとは、ノイズからデータを復元する過程を学習しているモデルです。

拡散モデルの模式図

この復元過程はノイズというランダムなものから意味を持ったデータを復元するため非常に難しいですが、拡散モデルは非常に大規模な画像を学習することでその復元過程を実現しています。詳しくは次回説明します。
しかし、その逆である画像をノイズにする過程は簡単なプログラムで計算することができます。

このノイズは簡単に計算できるというのがミソです。
text2imageでは、ボックスに何も入力されていないように見えますが、皆さんご存知のSeedが入っています。Seedからプログラムによってノイズをサンプルすればよいのです。

text2imageのときの処理フロー図

インペイトもimage2imageも画像を入力しているのでその画像からプログラムで計算すればノイズを求めることができます。下の図では完全にランダムなノイズですが、ノイズの計算方法を調整することで元の画像の特徴を残すことができます。詳しくは次回です。

インペイトとimage2imageのときの処理フロー図

これが拡散モデルが様々なタスクを実行できる仕組みです。タスクに応じて、入力される情報(Seedや画像など)からノイズを計算するプログラムがあれば、あとは拡散モデルがノイズをデータに復元してくれます。

一般化した拡散モデルの処理フロー図

先人達の努力によってタスクに応じて適切にノイズを計算するプログラムがあるからこそStable DiffusionのWebUIで簡単に様々なタスクが実行できます。そして、これは現在も発展中で今後より多様なタスクが実行できるようになっていくでしょう。
この記事は読む方はSNSでAIイラスト界隈のコミュニティに属している人が多いと思います。皆さんによるオープンコミュニティのエンジニアへの支援とこういう機能が欲しいというニーズの共有が発展を助けるはずなのでぜひ支援していただけると幸いです。

次の記事に向けて

今回は、Stable Diffusionがなぜこんなに多様なタスクが実行できるのかについて拡散モデルを取り上げて解説しました。

しかし、まだStable Diffusionの10%も説明できていません。

wikipediaをまとめたこちらの文を思い出してください。

Stable Diffusionは、テキストから画像を生成する生成AI(text-to-imageモデル)の一つであり、その原理には潜在拡散モデル(: latent diffusion model)が使われています。 

この内まだだったのdiffusion modelの触りだけです。

次回は、潜在拡散モデル(: latent diffusion model)とは何か?を取り上げます。
次回の記事を読めば皆さんがWebUIで見たことがあるはずのVAE、Sampling method, Sampling steps, Denoising strengthが何であるのかがわかってくるはずです。

赤枠内が次回でわかってくる要素

それでは次回をお楽しみに!

是非コメントで解説して欲しい要素を書いてください。人が少ない今のうちがチャンスです。
記事中にちょくちょく書けるネタに触れているので、text to imageモデルやインペイントモデルやimage to imageモデルの変遷の歴史など希望があれば優先的に記事化していきます!

この記事が気に入ったらサポートをしてみませんか?