見出し画像

Stable Diffusion web UIのDAAMを触ってみる

本記事は Synamon Advent Calendar 2022 の24日目の記事になります。


前回の記事では、Stable Diffusion web UIを使用する場合のPromptの記法を紹介しました。

今回の記事では、描いて欲しいとイメージしたイラストをAIに描いてもらいやすくするためにPromptをチューニングする際に便利な、DAAMという拡張機能を紹介します。

今回の記事もStable Diffusion web UIを使用することを前提としています。

早速本題に入っていきましょう。

DAAMとは

DAAMは Diffusion Attentive Attribution Maps の略です。

自分はDeep Learningは基礎の基礎の理論しか知らないので確証はないのですが、Attentive(注意の)というのはおそらく、Stable Diffusionの内部で使用されている自然言語処理に使われるモデルであるTransformerにおけるAttentionのことだと思います。

DAAMは指定したテキストに対するAttension、つまりテキストの影響度合いのようなものの分布をヒートマップとして可視化できるというもののようです。

言葉だと分かりにくいかもしれませんので実際に解析結果を見てもらった方が早いかもしれません。

詳しい原理が気になる方は論文を参照してみてください。

Stable Diffusion web UIではこのDAAMの機能が拡張機能として利用できます。

今回はこちらを使用していきます。

DAAMの導入方法ですが、Stable Diffusion web UIのUI上のタブの「Extensions > Available」の画面を開き、「Load from:」のボタンを押して拡張機能の一覧をロードしてから、「stable-diffusion-webui-daam」を探してインストールをしてから、web UIを再起動します。

DAAMの機能を使用するためには、txt2imgもしくはimg2imgのUIの一番下にある「Script」から「Daam script」を選択し、「Attention texts for visualization. (comma separated)」の箇所に解析したいフレーズを ,(カンマ)区切りで入力します。

解析の結果は , で区切ったフレーズ毎にヒートマップの画像が生成されます。

サンプルとして作成するイラストを決める

それでは実際にイラストを生成してみてDAAMがどんな感じに使えるのか見ていきたいところですが、その前にまず生成したいイラストを考えて言語化するところから入ります。

  • 2D寄りのイラスト

  • 構図は全身でもバストアップでもどちらでもOKだが、キャラが映えるようにしたい

  • 顔と目はイラストの命なのでクオリティ高くしたい

  • 髪は銀髪のショート

  • 服装はふわふわしたロリータ系

  • 熊のぬいぐるみを持たせたい

  • 背景は晴れた青空の下、地中海とかの白い街のイメージ

このイメージを元にPromptを作成します。

今回は普段使い回しをしているPromptをベースに、ざっと作成した下記を使用しました。

(1girl:1.2) (super fine illustration:1.2) (best quality:1.0) (highres:1.0) (ultra-detailed:1.0) (an extremely delicate and beautiful:1.0)
(8k wallpaper:0.9) (outline:1.0) (flat color:1.0) (limited tone:1.0) (2D:1.2)
(looking at viewer:0.9) (close at viewer:0.8)
(extremely beautiful girl:1.2) (delicate and beautiful silver short hairs:1.0) (extremely detailed cute anime face:1.1) (beautiful detailed eyes:1.2)
(small breasts:1.1) (lolita clothes:1.0) (hair ornament:1.0) (neck ornament:1.0) (ribbon:1.0) (holding brown stuffed bear:1.0) (accurate digits:0.85)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(beautiful background:0.8) (outdoor:0.8) (chalk town:0.8) (beautiful blue sky:0.8) (white cloud:0.8)

前半はクオリティを上げるための汎用フレーズ、中盤にキャラの指定、後半に背景の指定をしています。

記法は前回の記事で紹介した、

(phrase:weight)

で後から細かく調整できる形式に統一しています。

-(ハイフン)がたくさん入っているのは色移り対策のつもりですが、まだまだ使いこなせていないので解説はできないです。おまじないだと思ってください。

今回はDAAMの検証をメインにしたいのであまり細かい調整はせずに、Seedを変えて見栄えがいい感じの結果になったこちらをサンプルとして使用します。

DAAMを使用してみる

上記のイラストを作成したPrompt、設定、Seedを固定して、Scriptに「DAAM」を設定して解析をしていきましょう。

DAAMで指定するフレーズですが、今回は何も考えずにPromptをそのまま突っ込んでみます。

注意が必要なのは、DAAMの指定フォーマットは , 区切りのみで ( )などは使えないため、適切に変換をしてあげる必要があります。

VSCodeなどのテキストエディタが使える方は、例えば自分のPromptの記法では次の正規表現で置換することができます。

\((.+?):.+?\)

$1,

結果として指定するテキストは以下になります。

1girl, super fine illustration, best quality, highres, ultra-detailed, an extremely delicate and beautiful, 8k wallpaper, outline, flat color, limited tone, 2D, looking at viewer, close at viewer, extremely beautiful girl, delicate and beautiful silver short hairs, extremely detailed cute anime face, beautiful detailed eyes, small breasts, lolita clothes, hair ornament, neck ornament, ribbon, holding brown stuffed bear, accurate digits, beautiful background, outdoor, chalk town, beautiful blue sky, white cloud

ようやく準備が整ったので実際に結果を見ていきましょう。

画像の底部に書いてあるテキストが対象のフレーズになります。

クオリティ部分

キャラ全体にかかってますね、狙い通り。

ぼやっと全体にかかっていますね、作風の指定なので想定通り。

顔に集中してますね、確かに顔は大切。

同じく顔にかかっています。

全体に広がりつつ、キャラ全体に強くかかっていますね、かなり影響が強そう。

これも顔がメインですね。

背景全体にかかっていますね、意外でした。

目に強く出ていますが、キャラ全体に影響してますね、単語通り。

顔やももなど、肌の塗りのグラデーションに影響していそうでしょうか?

顔と髪が強いですね、髪の塗りへの影響?

流石に全体に影響していますね、想定通り。

キャラクター指定部分

顔は分かりますが、なぜ脚?

顔を中心にキャラ全体にかかっていますね、想定通り。

クオリティ系は顔にかかりやすい傾向がありそう。

思っていたより髪以外への影響が大きいですね、指定の仕方を見直した方が良さそう。

全然顔にかかっていない、なぜ…?

目にかかってますね、想定通り。

なぜか全体にかかってしまっていますね、想定外。

思っているほど影響がない?

髪飾りなのに顔?

なぜ顔?

想定より影響が強いですね、熊のぬいぐるみにもリボンついてますし。

ぱっと見では影響は薄いですね、けどここのチューニングで指の造形が変わるので大切です。

影響は薄いですね、指定したように抱き抱えている感じではないからかも。

背景指定部分

なぜかキャラにかかってしまっている。

これも全然想定外ですね、そもそも屋内なので仕方ないですが。

これもダメ。

はい。

背景は全体的にダメそうです。

ふりかえり

上記のDAAMの結果から分かる傾向をふりかえってみます。

  • クオリティ系は顔にかかりやすい印象だが、語順の問題もあるかも?

  • キャラは髪が思ったより言うことを聞いてくれないので、指定方法の改善が必要かも

  • 背景は全体的にダメ

  • まだまだ語順や強調の度合いの調整ができる余地がありそう

まとめ

これまでPromptをチューニングするときはSeedを固定してみて出力がどう変わるかを感覚で捉えながら調整するしかなかったのですが、DAAMを使うことで影響範囲が視覚化され、具体的にどのPromptの指定が想定から外れているのか見返すことができるようになりました。

使い道はちょっと考えるだけでもいくつかありそうです。

  • Promptの指定方法(英語での記述)が正しそうか確認する

  • 汎用Promptの改善

  • Seedを固定してのPromptの微調整

今回の成果物は当初の生成したいイラストのイメージから外れてしまっている部分も多いですが、それを改善する方針が考えられそうです。

一応注意事項ですが、Promptの影響の仕方はSeedの値によって変わる部分もあるため、一度の解析の結果をあまり過信せずに、複数のSeedの出力結果の傾向も見た方がより安定するPromptが作成できると思います。

ですのでSeedを変えても思った感じの結果が出ない場合に、DAAMを使って改善点を探してみる、という使い方ができるといいのではないでしょうか。

以上、DAAMの活用方法など参考になれば幸いです。

最後に今回作成したイラストをUpscalerで4Kに高画質化したものを載せておきます。

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