Stable Diffusion系のモデル性能をFIDスコアで確認する(ついでにaesthetic scoreも)

 画像生成モデルの性能を測るFID scoreを自分で学習したStable diffusion系のモデルで測ってみました。FID scoreはstable diffusionのgithubに貼ってある謎のグラフにも使われています。
 解説は出来ないのでリンクを貼る。

注意点

 上の2つをみると、FIDスコアの欠点として、ImageNetを使った学習済みモデルに依存しているため、アニメ画像でいい結果が得られるとは限らないことと、大量のサンプルが必要であることが挙げられていますが、今回はその問題を全く解決できていません。1万サンプル以上推奨らしいですが、今回はなんと1000枚ぽっきりでやります。設計上最低でも2048枚必要らしいですが、ネットワークの構造を変えれば1000枚でもいけるらしいので変えています。そのため他の結果との比較もできません。まあとりあえず数字だけ出してみようという話です。

実装(他力本願)

これをやる。最終層768次元でやります。

データセットとモデル

今回はこのモデルを元のSD2.0、ついでにWD1.3と比較していきます。fateシリーズの画像をいっぱい学習させたモデルです。

 学習に使った元画像のうち1000枚と、その画像に紐づく説明文によってAI生成された画像1000枚を比較していきます。まあ学習に使った画像で比較するんだから負けるわけないと思うのですが。768×768(WDは512×512)で生成し、299×299にリサイズします。
 比較対象の画像も299×299にしないといけないのですが、中央切り抜きで無理やり正方形にします。これは非常にまずい気がするのですが、他に方法思いつかないので。せめて顔中心に切り抜くべきかも?

aesthetic score

 せっかく1000枚も作ったので、ついでに生成画像の採点もしてみます。WD1.4の学習画像選別用に作られたモデルっぽいです。299×299にして採点しています。SDのgithubでもこれと似たようなもの(CLIP score)を比較してますね。ちがうっぽい

結果

FIDスコアは小さいほど性能が良いという意味です。つまり右下にあればあるほどいいモデルです。ちなみに計算は画像生成に比べてあっという間におわります。生成モデルばっかり触ってると、他のモデルの出力が早すぎてびっくりしちゃいますね。

steps=20(+50stepsは50 steps),
guidance scale=7.5(+5.5gscaleは5.5)
SD=Stable diffusion, FD=fate-diffusion, WD=Waifu diffusion
”+np”はNAIデフォルトのネガティブプロンプトをつけたバージョン

 とりあえずFD>SDという結果にはなってますね。意外なのはsamplerのsteps数を増やした方が数字としては悪くなってることですね。人間の目でも10枚ほど比較してみましたが、ネガティブプロンプトありや、ステップ数が50のバージョンの方がましに見えました・・・。まあFIDスコアは分布を比較してるだけで良い画像かどうかを判定しているわけではないところに注意です。
 WDはSDよりFIDは良いけどaesの方はダメという結果になりましたが、この理由はおそらく見切れた画像が多いからだと思われます。WD1.3では学習用画像を中央切り抜きしているので、見切れた画像を生成しやすいです。FIDで比較する画像も上で述べた通り中央切り抜きしたので、それで有利になったのかもしれませんね。WD1.4では見切れ問題は改善されるはずです。

追記1:guidance scaleを下げてみましたがFIDそのままでaesは上がってますね。

他の設定とか新しいモデルとかを追加していく予定です。

追加履歴:
WD14-110k←Eimisモデルとか使ってるらしいのでやっぱ削除。
guidance scale=5.5

追加したい:
guidance scaleを動かしてみる

そもそも画像数増やしたい:
emadさんが今後すごい画像生成スピード上がるとおっしゃっていたという話を聞いたのでそれで生成枚数稼げるようになるならせめて2048枚以上でやりたい。その場合全データ書き換え。