Stable Diffusionをカスタマイズする手法の1つであるTextual Inversionの最近の進化

入門/解説

1.Stable Diffusionをカスタマイズする手法の1つであるTextual Inversionの最近の進化まとめ

・Stable Diffusionを自分が持っている画像で学習させて独自モデルを作る手法は日々進化している
・比較的初期に発表されたDreamBoothとTextual Inversionも独自の方向に進化を遂げている
・DreamBoothで持ち込んだ概念を更にTextual Inversionで強化する手法に挑戦してみた

2.Stable Diffusionにおけるembeddingsとは?

アイキャッチ画像はstable diffusionをアニメ系のイラストで微調整した2023年1月1日公開のWaifu Diffusion 1.4 AnimeにdreamBoothで持ち込んだナウシカとテトに更にTextual Inversionのテトスタイル被せて生成したイラスト

Stable Diffusionを自分が持っている独自画像で学習させて独自モデルを作る手法は、現在も日々、様々な手法が考案されており、日進月歩の分野です。

私の知る限り初期に発表された手法は以下の2つで、初期の頃に両方の手法を使って概念を取りこんで描いて貰う事が可能なのかを評価した事があります。

(1)Textual Inversion
Stable Diffusionに天空の城ラピュタの飛行石の紋章を描いて貰う
stable diffusionに自分の好きなキャラクターを描いてもらう事は出来るのか?

(2)DreamBooth
DreamBooth:Stable Diffusionに自分の好きなキャラクターを描いてもらう事は可能

当時の感想ですと、Textual Inversionは必要メモリが少ないので比較的楽に学習できますが、スタイルのとりこみは出来ても概念の取り込みは中々難しかった印象です。DreamBoothは必要メモリが多いため学習させるのは手間がかかりますが、概念の取り込みも実現できる!と言った感じでした。

しかし、この2手法も発表当時と比べるとだいぶ進化しています。

(2)のDreamBoothは、複数の概念を同時に取り込めるようになっており、直近で私も以下のページで3概念混合パターンに挑戦して割と良い感じのイラストを描けています。
DreamBoothで鬼滅の刃の蟲柱の服をナウシカに着てもらう事は可能か?
DreamBoothで鬼滅の刃の隊服をナウシカに着てもらう事は妥協すれば可能

そして本題の(1)のTextual Inversionですが、モデルそのものに概念を取り込むのではなく、学習した結果をモデルとは別ファイルに保存する形に進化しました。これにより「モデルそのものを変更しないで済み、必要に応じて柔軟にスタイルをモデルに取り込んだり取り外したりする事ができる」という着脱可能な形式に進化しています。5Gバイト前後の巨大サイズになるDreamBoothで微調整したモデル本体と比べるとファイルサイズも数キロバイト程度で非常に小さいので取扱が容易です。

ただ、この進化の過程で用語の混乱が発生している事にちょっと注意が必要です。

まず「Textual Inversion(テキスト反転)」という単語はほぼ使われず「embeddings(埋め込み)」という単語で呼ばれる事が多くなりました。これは人気の高いブラウザインタフェースであるAUTOMATIC1111内の用語がembeddingsとなっているためです。

例えば「embeddingsを作る」とか「どのembeddingsを使ったんですか?」等の使われ方をします。

厳密にはTextual Inversionの手法を使って学習した結果が「embeddings」として保存されており、それが前述のファイルという事なのですが、突然、embeddingsが具体的な実体扱いされている場面に出くわすと機械学習系から入った人は少し混乱するかもしれません。

Stable Diffusionから入った人向けに説明すると「embeddings」とは元々は機械学習用語であって、もう少し広く汎用的に使われている概念なのです。

ちょっと変な例ですが、「ごはんが好き!」みたいな使われ方です。前後の文脈がないと
ごはん is 何? dinner? lunch? rice? bread? son-gohan?
的な、文脈を固定すればわかるけれども、ちょっと戸惑う人達もいるということですね。

ですので「embeddingsとは何ですか?」と聞かれたら「Stable Diffusionを動かす際に良く使われるAUTOMATIC1111の文脈では、Textual Inversionという手法でスタイルを学習させた結果のファイルをembeddingsと呼ぶことが多いです。このファイルは拡張子.ptを持ちます。AUTOMATIC1111のembeddingsディレクトリ内に保存し、プロンプト内でその拡張子を除いたファイル名を記述する事で使用できます。」がおそらくは望まれる回答になります。将来的にはTextual Inversion以外の手法で作成されたembeddingsも利用できるようになるのかもしれませんが、現時点では実体はTextual Inversionで作成したファイルの事です。

また、DreamBoothのような「特定の概念をモデル内に取りこむ手法」として使われるケースは減り「特定の描画スタイルをモデル内に持ち込む」事や「このembeddingsを使うと、イラスト内の静物がより明確に描かれるようになるよ!」等の描画補助ツール的な役割を持つembeddingsが公開されたりしているのも、進化の方向性として面白い所です。Negative prompt内から呼び出す前提のNegative embedファイルとセットで公開されている場合もあり、より明確にスタイルを適用できるように工夫されているケースもあります。

さて、本題ですが、直近、私がやっているDreamBoothを使ったイラスト生成では取り込んだ複数の概念を同時に表示させると一部の概念が他の影響を受けてしまう現象に悩まされています。具体的にはテトがリスっぽくなったり猫っぽくなってしてしまう現象ですね。

そこで、今回、DreamBoothで取り込んだテトにTextual Inversionで学習させたテトスタイルを更に被せる事でこの現象が予防できないかと考え、ようやく実現したのが本記事のアイキャッチ画像です!!

どうでしょう?凄いでしょう?エッヘン!

 

 

と、いう形で終わらせておけばかっこいいのですが、アイキャッチ画像が非常に綺麗に出来たのはナウシカがナウシカの概念からあまり離れておらず普通の服を着ているのが比較的綺麗に描けた原因と推測しています。

 

例えば、リアル系に寄せるとやっぱりこんな感じで謎生物になってしまいます。

リアル系に寄せなくても、ナウシカに着物を着て貰う事に成功するとやっぱり概念がやや崩れる傾向があります。

アイキャッチ画像で本当にやりたかった事は、昨日、Twitterで「千年女優」という、もう亡くなられた今敏監督という方が作成されたアニメ映画がトレンドになっていたので、その映画をイメージしたイラストにしたくて、桜の舞い散る中で着物を着て女優っぽい仕草をしているナウシカとテトにしたかったのです。

しかし、テトが綺麗に描けているイラストはアイキャッチ画像のようにナウシカが着物を着てないイラストになり、それっぽい感じになるとテトが出てこない、もしくはテトが崩れてしまうんですよね~。うーん、うーん、残念です。

以下、ちょっと色っぽすぎるんでアイキャッチ画像には載せない事にしましたけれども、今敏監督に敬意を表して題して千年女優ナウシカです。

タイトルとURLをコピーしました