1.DAAM:生成した画像のどの部分にどのプロンプトが効いているのかを可視化するまとめ
・「AIが何に基づいて動いているのかわからないので説明ができない」という問題は昔から指摘されていた
・「AIが画像のどこに注目したのか?」を視覚化するAttention Mapと呼ばれる技術があり、その応用がDAAM
・Stable Diffusionが概念を融合してしまう現象の原因を探ったところ、概念の重複があやしい事がわかった
2.Stable Diffusionのプロンプトを極めたい人向けの拡張機能DAAM
Stable Diffusion等のイラスト生成AIに入力として与える文をプロンプト(prompt)と言います。
プロンプトは生成したいイラストを言葉で表現したものですが、非常に長文、及び単語の羅列が含まれ、且つ、一見、イラストと無関係に見える単語が含まれる事があるため、日本語圏のイラスト生成界隈ですと「呪文」と呼ばれる事もあります。
実際、プロンプトを細かく見ていこうとするとおまじない的に使用されていて意味がなさそうに見える単語や、単体では効果が薄くとも複数の単語と組み合わさって何かの効果をイラストに与えているように見えるものなど、効果がはっきりとわからない事が多いです。
「AIが何に基づいて動いているのかわからないので説明ができない」
という問題は、イラスト生成AIだけに限った事ではなく、昔から指摘されてきた問題です。
特に医療分野などでは「説明可能なAI(xAI:eXplainable AI)」の重要性が指摘されています。例えば、AIがレントゲン画像を見て病気を発見したとしても、AIがどこに注目して病気だと判断したかがわからないと、人間の医師が患者さんに説明できないので、AIの有効活用が難しくなってしまうのです。
そのため
「AIが画像のどの部分に着目したのか?」
を視覚化するアテンションマップ(Attention Map)と呼ばれるテクニックが開発されており、それをStable Diffusionに応用したのがDAAM(Diffusion Attentive Attribution Maps)です。
DAAMをAUTOMATIC1111の拡張機能として開発してくれている方は複数人おられるのですが、最新版で完全に動作する実装を私が見つける事が出来ていません。
そのため、元の実装とSpaceへのリンクだけを末尾に張っておきます。
AUTOMATIC1111の拡張機能としての実装は、Stable diffusion 1.5にしか対応していない実装や、動かそうとする事によって他の拡張や本体の動作が不安定になってしまうものなどもあるようなので、ご自分で試してみたいと思った方は、導入前にバックアップを取る等の対策を行う事をお勧めします。
DAAMのサンプルを動かす
DAAMのサンプルプロンプトを動かしてみた結果は以下です。
「Monkey walking with hat.」
中々、良い結果に見えます。
しかし、シンプルな例だと非常にはっきりと出るのでわかりやすいのですが、複雑なプロンプトの場合は以下の理由により必ずしも再現性が確保できません。
・物体がスタイルに紐づいているケースがある
例:特定の物体をプロンプト内に入れる事で絵柄が大きく変る事がある
・シードによってプロンプトの効き具合が大きく異なる場合がある
例:全く同一プロンプトであっても全く異なる印象のイラストができる場合がある
・モデルによってプロンプトの記法、有効な単語がまるで違う場合がある
例:Waifu diffusion 1.4の品質修飾子
ですので、DAAMを使ってプロンプトの有効度合を探っていく作業は必ずしも万能ではなく、非常に地道な作業になりますが、プロンプトマスターを志す方は、知っておいた方が良い拡張と思っています。
テト仮面の謎に挑む
それでは本題です。
DAAMを使って本邦最大の謎、テト仮面の正体に迫ります。
テト仮面とは、すなわちDreamBoothで取り込んだテトが「テトの頭を持った人」になってしまう現象です。
テト仮面はいったい、誰なのか?
何の単語がイラストの何処に効いているのでしょうか?
プロンプトにナウシカもテトも含まれ、ナウシカとテトがイラスト化された場合
ナウシカ | テト | ミヤザキハヤオ |
---|---|---|
非常に綺麗に出ています。アーティスト「ミヤザキハヤオ」の影響がナウシカの顔の中央部分に集中しているのが興味深いところです。
プロンプトにナウシカもテトも含まれるが、ナウシカのみイラスト化された場合
ナウシカ | テト | ミヤザキハヤオ |
---|---|---|
テトは実際にはイラスト内に表示されていませんが、ナウシカの肩から髪の毛の部分に赤い反応が出ているのが興味深いところです。
プロンプトにナウシカもテトも含まれるが、テトのみイラスト化された場合
ナウシカ | テト | ミヤザキハヤオ |
---|---|---|
ナウシカは実際にはイラスト内に表示されていませんが、「テト」より「ナウシカ」の単語にテト全体が赤く反応が出ているのが興味深いところです。
プロンプトはナウシカもテトも含まれるが、テト仮面がイラスト化された場合
ナウシカ | テト | ミヤザキハヤオ |
---|---|---|
テト仮面は「テト」より「ナウシカ」の単語に強く反応しています。「テト」はテト仮面の顔面部分に集中しています。ミヤザキハヤオ感はあまりありません。
テト仮面の正体
この結果を見るに、以下の可能性が高いと思っています。
「テト仮面の正体はナウシカだった」
気付かなかった…、なんとも衝撃的な結果です。
今後の方向性
もう少し技術者目線で考えると、
・テトの概念にナウシカの髪の毛や首回りが含まれてしまっている
・ナウシカの概念にもテトが含まれてしまっている
そのため、テト仮面化は概念の重複が具現化したものではないかと推測しています。
今後の計画としてはDreamBooth/微調整をやりなおす事でテト仮面化をもう少し防止する事ができるのではないかと考えています。また、ミヤザキハヤオの重みを強くする事でもある程度制御できるかもしれません。
プロンプトエンジニアリングはとても奥が深いですね。
3.DAAM:生成した画像のどの部分にどのプロンプトが効いているのかを可視化する関連リンク
1)github.com
castorini / daam
2)huggingface.co
DAAM: Attention Maps for Interpreting Stable Diffusion