DAAMを使って単語の影響範囲を可視化する

いきなりDAAMってなんだ?
みなさんはDAAMを知っていますか?
DAAMとは、Stable DiffusionのExtensionsで「Diffusion Attentive Attribution Maps」の略です。
これは簡潔に言うと、
「プロンプトが出力画像のどこに影響を及ぼしているか可視化できる」ということです!
今回は、私がよく使っている汎用プロンプトの影響範囲を確認して
そこから見えてくる傾向の考察をしていきたいと思います。
汎用プロンプトを検証してみる
早速、DAAMを用いて汎用プロンプトが画像にどのように作用しているかを見ていきたいと思います。
今回使うプロンプトはこちら↓
(1girl wearing school uniform:1.0) (illustrations:1.0) (best quality:1.0) (official concept art:1.0) (outline:1.0) (dynamic pose angle:1.0) (looking at viewer:1.0) (4K wallpaper:1.0) (limited tone:1.0) (schematic:1.0) (synesthesia:1.0) (cinematic light:1.0) (CG:1.0) (all intricate:1.0) (flat color:1.0) /, /, /, /, /, /, /, /, /, /, /, /, /, /, /, /, /, /, /, / (beautiful detailed eyes:1.0) (smile:1.0) (night bar background:1.2) (romantic outing:1.0) (couple’s activity:1.0) (blurred background:1.0) (shallow depth of field:1.0) (illumination:1.0)
1girl
“1girl”が影響している範囲は下図のように「ヒートマップ」によって着色されます。
サーモグラフィ画像のような感じです。
顔周辺への影響が大きいようですが、画像全体にも影響を及ぼしています。
illustrations
こちらも顔+絵全体に影響を及ぼしています。
best quality
こちらは、人物に的を絞っているようです。
ただ、このDAAMの色味が何を示しているのかは明確ではありません。
そのメカニズムを把握するにはStable Diffusionの仕組み(Text EncoderやImage Generator)を
詳しく知る必要がありますが、このDAAMについて私自身そこまで深く調べていないので
あくまでも、「赤くなっているところの方がより影響を受けている」という傾向だけ話していきます。
つまり、“1girl”よりも”best quality”の方が「人物に与える絶対的な影響度は大きい」と断言することはできないということです!(その可能性は十分にありますが。)
この話は後の考察を思いつくにあたっての疑問の種となりました。
official concept art
これは、絵全体に影響を及ぼすタイプですね。
やはり、「全体に影響するタイプ」と「特定箇所にのみ影響するタイプ」があるようです。
(某博士:「そりゃそうじゃ」)
outline
こちらは「特定タイプ」ですね。
dynamic pose and angle
これはきちんと服装のあたりのみ効いています。
構図に作用させたいプロンプトなので、非常に効果があるように感じます。
ちなみに”and”の有無ですが、あってもなくても良いと思います。
私はtoken削減をしたいときだけ無くすようにしています。
looking at viewer
こちらも視線の方向(=顔の向き)を指定したいプロンプトのため、効果が期待できます!
「特定タイプ」ですね。
(こんなに頻出するならちゃんと名前つければよかったと後悔してます。笑)
4K wallpaper
こちらは「全体タイプ」です。
ちなみに”K”を大文字で打っていますが、Stable Diffusion上では大文字と小文字の区別はありません。可読性だけです。
limited tone
これは全体に影響するのかなと思っていたのですが、まさかの顔周辺への「特定タイプ」でした。
こういう発見ができるのがDAAMの強みですね。
一般的には「意味があるか」よりも「意味がないか」を判別するツールとしての価値が高そうです。
cinematic light
こちらも「全体タイプ」です。
CG
“CG”は髪の毛あたりに大きく影響しているんですね!
これは意外でした。てっきり顔周辺だけだと思っていたのでDAAMによって新たに判明してことでした。
flat color
人物に影響を及ぼして、あまり背景にはかかっていない印象です。
all intricate
右目~~~
なんで?分かりません。笑
語順によってどう変化するか
ここで先述した内容から私の中で疑問が生じます。
「語順を変えたらどう影響範囲は変わるのか?」
ちなみに、語順によって単語の影響度が変わる話は以前の記事を参考にしてください。
例えば、”1girl”です。
仮に”1girl”を一番初め(1token目)に置いた場合、ヒートマップは次のようになります。
先ほどと同様に顔周辺へ影響を大きく与えるようです。
一応、絵全体にも影響は出ているようですね。
これは特徴量の生成のされ方からおそらく「人物の影響によって背景が変化した」というよりは、「背景にも単語自体が影響を与えている」ものだと思います。
ただし、具体的な検証をしたわけではないので、考察のレベルではあります。
次に、”1girl”をプロンプトの最後(75token目)に置いてみます。
影響範囲が大きくなっています!
やはり、語順によって影響度合いが小さくなるのは正しいようです。
ここで”1girl”が持つ影響範囲は「顔周辺」だということが分かりました。
なので、その役割が弱くなったことで「体全体に作用した」ということになります。
しかし、我々は”1girl”を人物全体にかけるために採用しているのではないですか…?
今までは「1人の女性を生成したいから前に持ってくる!」だったのが、
実は「CLIPは”1girl”を顔周辺に影響させるものと捉えているから、後ろに持って行って影響度を下げなければいけない!」という考えの方が正しい説が浮上しました。
あと、「影響範囲が変わらずに色味だけ変わる」のではなく、
「色味が変わらず影響範囲が変わる」というのも発見だと言えます。
つまり、目的に応じて語順を変化させることでより求めていた効力を得られるということです。
分かりやすく”beautiful detailed eyes”などを調整してみましょう。
比較的影響度が高いとされる配置をした場合は以下のようになります。
これに対してtoken位置をずらしてあげるとこのようになります。
影響度合いが全身になります。
このように、「その単語が指向性を元々持つか」を把握して語順をコントロールすることで、プロンプトに指向性をもたらせることができます!
“eyes”に関してはもともと指向性を持つので、今まで通り単語を前の方に置くと良いということです。
係数を大きくするとどうなるか
続いて、係数によってどの程度影響度が変化するのかを検証します。
まずは”beautiful detailed eyes:1.0“の場合↓
次に”beautiful detailed eyes:1.3“の場合↓
最後に”beautiful detailed eyes:1.5“の場合↓
予想していた通り、影響範囲は変わらず影響度合いが増します。
ただ、1.3と1.5ではあまり変化がないですね。
つまり、
■係数変更→影響範囲は変わらず、影響度が変化する
このようになります。
色に指向性を持たせられないか
影響範囲を調整できるのであれば、色も指向性を持つはずです。
やるだけやってみましょう。
今回挑む課題はこれです↓
・銀髪
・青い目
・白いセーター
・黒いスカート
・黄色の靴下
・緑の靴
の7色塗分け問題です。Twitterで見かけたものを拾っています。
ちなみに以前6色の塗分けに挑んだときは成功率が5割程度でした。
5色なら7割超えるんですけど…
試しに今までの感覚通りプロンプトを組んでみます。
(1girl:1.0) (illustrations:1.0) (best quality:1.0) (official concept art:1.0) (outline:1.0) (dynamic pose and angle:1.0) (looking at viewer:1.0) (4K wallpaper:1.0) (limited tone:1.0) (cinematic light:1.0) (CG:1.0) (all intricate:1.0) (high saturation:1.0) (flat colors:1.0)
it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it
(yellow socks:1.0) (silver hair:1.0) (beautiful detailed blue eyes:1.0)
it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it
(white wool sweater:1.0) (red hat:1.0) (smile:1.0)
it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it
(green shoes:1.0) (black skirt:1.0)
再現できたのは、
☑銀髪
☑青い目
☑白いセーター
☑黒いスカート
×黄色の靴下
☑緑の靴
の6色でした。
やっぱり今までのノウハウがあるとはいえ7色は厳しいですね。
黄色の靴下は再現性がそもそも低いみたいですね。
黄色のヒートマップを見てみましょう。
靴下に全くかかってないですね。”yellow socks”だとどうでしょう?
靴下には寄っていますが、服などにも影響していますね。
少し影響範囲を絞ってみましょう。
服への影響を下げられました。
これで影響度を上げてみましょう。
かなり靴下にしぼったのに、服だけ黄色くなりましたw
これは”yellow”自体の影響範囲を絞れてないからでしょう。
あと、学習元データセットに「黄色い靴下」が少ないせいでしょう。
“wearing”を付けることで「黄色い靴下」であることを強調させてみます。
これ、もはや今回のトピックではないテクニックですがまあいいでしょうw
靴下問題はクリア(?)ですね!
帽子は赤色で上書きしちゃいましょう。係数で影響度を上げてみます。
もともとの”red”の影響範囲が狭すぎました。
語順で影響範囲を調整してみましょう。
あと、ここで初めて気づいたのですが、係数を極端に上げると影響範囲も少し大きくなるようです!
語順で影響範囲を下げておいて、係数で影響度を微調整するのが、やはり良さそうです。
髪の毛も青くマッピングされていることから、髪色にも少し伝染してしまったことがわかります。
髪色を銀髪に上書きしたいと思います。
“platinum”をつけて髪色であることを意識させてみました。
“platinum blonde“にすることで黄色の靴下にも寄せやすくしようとしたのですが、ヒートマップからあまり靴下に影響が出ていないことが分かったので、髪色の再現性を優先して”silver”を採用しました。
最後に「緑の靴」ですが、これはいったん”sneaker”としてみます。
およそ7色の塗り分けに成功しました。
最終的なプロンプトはこちらです↓
(1girl wearing yellow stockings socks:1.3) (illustrations:1.0) (best quality:1.0) (official concept art:1.0) (outline:1.0) (dynamic pose and angle:1.0) (looking at viewer:1.0) (4K wallpaper:1.0) (limited tone:1.0) (cinematic light:1.0) (CG:1.0) (all intricate:1.0) (high saturation:1.0) (flat colors:1.0) it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it (red beret:1.3) (platinum silver hair:1.4) (beautiful detailed blue eyes:1.0) it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it (green shoes footwear sneakers:1.15) (white wool sweater:1.0) (smile:1.0) it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it (black skirt:1.0)
分かったことは色に指向性をつけるために重要なことは、
「いかに色を付けたい箇所と関連付けさせるか」ですね!
今回有用だったのは、「関連付けしたい箇所をいろんな言い方で連呼する」です。
例えば、”green shoes”ではなくて“green shoes footwear sneakers”とすると、
上手く指定箇所に寄せられる気がします。↓
ちなみに7色塗分けの全体成功率は…
4/20枚!!(20%)
流石に低くなりますね~!
このレベルだと7色は手で加筆した方がいいでしょうね!
そんなこと言ってしまえば元も子もないのですが笑
まとめ
いかがでしたでしょうか?
可視化されることでツール自体の働きもそうですが、新たに着想を得るヒントとなるのが良いですね!
まとめるとこんな感じです↓
■係数は影響度を変化させる
■係数を大きくしていくと、影響範囲も少し大きくなる
■色に指向性を持たせたければ、(ヒートマップを確認しながら)
色を付けたい箇所と色を結びつけてあげる意識が重要!
今後のプロンプト作成に活かしてもらえればと思います!
ではまた!
コメント