Dart+WD-Taggerでプロンプトの忠実度を計測してみる
最近出てきたプロンプト生成器
とWD-Taggerのv3
を組み合わせて、
Dartでプロンプト生成
生成したプロンプトで画像を生成
WD-Taggerでプロンプトを予測
1と3のプロンプトを比較
すればモデルのプロンプトへの忠実度測れるんじゃねということを思いついたのでやってみます。
前置きが長すぎる気がするので、とばしましょう。少なくとも俺だったら読まない。
設定
Dart側は全モデル固定で同じプロンプトにします。
top_k=100, temperature=2.0でrating:general, 長さはshort, character:originalで1girl, soloから始まるようにして生成します。各モデルプロンプトのルールは違うと思いますが、めんどくせから適当にカンマ区切りするだけです。
WD-TaggerはViTモデルを利用します。ComfyUI上で自前実装したらなんかちょっと結果ずれてたけどまあいいや。generalタグのthresholdを0.35に設定して、charcterタグは今回除外です。
生成設定は各モデルちょい違いますが、なるべく公平になるようにしたつもりだが分かんない。一番関係ありそうなcfgは7.0に固定します。サンプラーは何でもいいやとおもってeuler_ancestralにしています。画像サイズはモデルに合わせています(正方形で生成しようと思ってたのに忘れてていつもの縦長画像にしちゃった)。
ネガティブプロンプトは原則共通で、animagine-xl-3.0で推奨されているやつにしました。VAEはTAESDを使いました。
参加者紹介
Stable Diffusion 1.5:
原点にして、別に頂点ではない。512×512で30step。
NovelAIのリークモデル:
いつの間にか持ってた。512×768で30step。masterpieceとbest qualityを加えています。
AbyssOrangeMix3:
こいつのことよく知らん。512×768で30step。masterpieceとbest qualityを加えています。
Waifu-Diffusion-1.3:
せっかくなので骨董品もいれてみます。512×512で30step。Waifu-Diffusion-1.5:
みんなが忘れたモデル。640×896で20step。ポジティブプロンプトがないとどうしようもないモデルなので、推奨されているプロンプトを先頭に追加します(ダンボールタグじゃないから多分問題ない)。またそのままだとリアル調になるのでネガティブプロンプトにもrealistic, real lifeを追加します。
animagine-xl-3.0:
832×1216で20step。いまいちばんあついやつ(たぶん)
animagine-xl-3.0+lcm-animagine:
ぼくがつくったlcm-loraを適用してみました。832×1216で8step、cfg=1でやります。がんばるぞ!
Kohaku-XL-Delta:
さいきんでたやつ。832×1216で20step。
Pony Diffusion V6 XL:
よくわからんやつ。832×1216で20step。プロンプトの先頭にscore_9, score_7…みたいなやつを追加しています。
NekoRayXLv0.6-w3:
animagine xl 3.0の前までよく使っていたモデルです。下記のモデルとの比較のためにだした。832×1216で20step。
SSD-1B-anime:
ぼくがつくったSSD-1Bのアニメ版。上のモデルを蒸留して作っています。832×1216で20step。本当はこのモデルもっとcfg高い方がいいんだけど、えこひいきはしないことにした。がんばるぞ!
指標
結果の前に指標についてお勉強。Dartのプロンプトを正解、WD-Taggerのプロンプトを予測とします。
適合率(Precision):
WDTaggerによるプロンプト予測にあるタグが、どれくらいの割合でDartの生成プロンプトにも存在したかという指標です。プロンプトにないものを余計に生成してしまうと低くなる・・・とも言えますが、たとえばhair bowを指定したらbowが予測としてでてきてもいいですよね。ということで今回こっちはそこまで重視しなくていいと思います。
再現率(Recall):
Dartの生成プロンプトにあるタグが、どれくらいの割合でWDTaggerの予測にも存在したかという指標です。再現率が低いと、Dartで指定したタグがうまく生成できなかったといえるので、こっちの方が重要だと思います。WDTaggerによる予測が正確じゃなくても低くなりますが、今回は各モデルを同じTaggerで比較するので不公平にはならないでしょう。
F1 Score:
ここはモナコ・モンテカルロ!絶対に抜けない!(これしか知らない)
適合率と再現率はトレードオフの関係にあるので、調和平均をとったものを指標とします。
結果
全体
まあそこそこ納得感ある結果じゃないでしょうか。SD15は当然一番低くて、SDXL系が高いという順当な結果になりました。細かいところ疑問な部分もありますが
Precision
プロンプトにない余計な要素を生成せずにすんでいるかという指標‥になると思いますが、上で書いたようにそこまで参考にならないかもしれません。AOM3とか結構複雑な画像を生成しているみたいなので、それで下がってしまったのかもしれません。逆にwd13とはクオリティうんちですが余計な要素が生成されないのがよかったのかも。やっぱり参考にならないですね。
Recall
プロンプトにあったタグをどれだけ生成できているかという指標で、一番重要だと思います。よく知りませんがPonyすごいですね(スタイルがきもすぎて使おうとおもえないけど)。SDXL系が上位独占していますが、生成解像度が高いので有利なのかもしれませんね。ssd-animeが元のモデルからそこまで劣化していないというのが意外でした。LCMは順当に下がってしまっていますね。
F1
novelやwd13と比べてaomが低いというのは直感に反しますね。Precisionが足を引っ張っています。
結論
やはり一番納得できるのはRecallのランキングでしょうかね。同じモデルをいろんな設定でやってみて比較するというのも楽しそうですが、SDXLだと1回で1時間30分くらいかかるのでつらいです。