Stable Diffusionって何? #1
画像生成でみなさんが使っているStable Diffusionについて調べながら解説してみます!
非常に沢山のトピックがあり、調べるにも記事にするにも時間がかかりそうなのでシリーズものとして腰を据えて取り組んでみます!
読者の想定と作成方針
AIイラスト作成に触れたことがある人を読者として、簡単な理解から積み上げるように説明していくことで誰でも理解できることを目指します。
※数式は使わず模式図でふわっと説明するので詳しい方は読むときに注意してください。
Stable Diffusionとは?
wikipediaによると以下です。
まとめると
Stable Diffusionは、テキストから画像を生成する生成AI(text-to-imageモデル)の一つであり、その原理には潜在拡散モデル(英: latent diffusion model)が使われています。
そして、テキストからの画像生成(text2image)以外にインペイント、アウトペイントなどテキストで指示した内容に応じた画像変換(image2image)も行うことができます。
Stable Diffusionの凄いところは生成される画像の品質が非常に高いこと、非常に多様なタスクを実行できること、実行時間も従来のDiffusion Modelと比べると早いことです。そして学習も安定しています。
Stable Diffusionでできること
皆さんもよくご存知だと思いますが、Stable Diffusionができることを振り返り模式図に落とし込んでみます。
まずはtext2image、例えば「赤目でバブルポニーで赤い着物を来た可愛らしい女の子」を作ってみるとこんな感じです。
これがまさにtext to imageモデルとしての振る舞いです。
ここに至るまでにも長い研究の歴史があり、最初はnoise to image(ノイズから画像を生成する)から始まりました。人物の顔だけの生成、人物の全身の生成、様々な物体の生成、そしてテキストによる操作へと進化してきました。本筋ではないですが希望があれば記事化します。
次にインペイント(黒いマスクの部分を補完する)、空に鳥を飛ばしたいと思ったので左上に鳥を出してみるとこんな感じです。
ここでさらっと「空に鳥を飛ばしたいと思ったので左上に鳥を出して」いますが、実はこれ、従来のインペイントモデルではできなかった凄いことです。
従来のインペイントは補完する内容をテキストで指示することができず、マスクの周りの情報からあり得そうな画像を埋めるだけでした。インペイントモデルもマスク領域を一意に補完、多様に補完、セグメントやラインに従って補完と進化してきたのはまた別のお話。
次にimage2imageです。赤い着物の女の子をベースにして青い目、青い着物にしてみましょう。
およその構図と雰囲気も保ったまま青くなりましたね!
これがさらっとできてしまうStable Diffusionは本当にすごいです。
今や古典的になってしまった従来のimage-to-imageモデルからすると、これだけ多様な物体に対してテキストの内容に整合性を取りながら高品質に画像変換ができることは革命的です。このに至るまでも先人の積み重ねの歴史があります。
なぜ一つのモデルで色々できるのか?
皆さんは不思議に思いませんか?上で紹介したタスクはそれぞれ性質が異なりますが、Stable Diffusionは一つのモデルでそれをこなしています。その謎に迫るためには拡散モデル(英:Diffusion Model)を説明する必要があります。
さて、上の3つのタスクを同時にこなすためには、少なくとも3つの物が入る共通のボックスが必要です。
このボックスの正体がノイズです。ノイズを画像として表現すると砂嵐のようなものになります。
拡散モデルとは、ノイズからデータを復元する過程を学習しているモデルです。
この復元過程はノイズというランダムなものから意味を持ったデータを復元するため非常に難しいですが、拡散モデルは非常に大規模な画像を学習することでその復元過程を実現しています。詳しくは次回説明します。
しかし、その逆である画像をノイズにする過程は簡単なプログラムで計算することができます。
このノイズは簡単に計算できるというのがミソです。
text2imageでは、ボックスに何も入力されていないように見えますが、皆さんご存知のSeedが入っています。Seedからプログラムによってノイズをサンプルすればよいのです。
インペイトも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モデルの変遷の歴史など希望があれば優先的に記事化していきます!
この記事が気に入ったらサポートをしてみませんか?