はじめに
Colabにて、Stable Diffusion 2.1を使って生成した画像に対して、CLIP+MLP Aesthetic Score Predictorを使って画像を評価してスコアを算出してみたのでメモ。
いずれは、プロンプト生成→画像生成→評価→プロンプト生成→...みたいなことができたらいいなと。
方法
やったことは単純で、以下3種類のプロンプトごとにStable Diffusion 2.1で6枚ずつ画像を生成。
promptA = "cat in dump site"
promptB = "cat in flower garden"
promptC = "cat in flower garden, beautiful, detailed, high quality"
多分、画像の良さとしては、A<B<Cになるはず。
続いて、それぞれの画像ごとにCLIP+MLP Aesthetic Score Predictorで評価スコアを計算し、平均が最大のプロンプトを求めます。
結果
結果は以下の通り。
{'promptA': 5.334874391555786, 'promptB': 5.8839954535166425, 'promptC': 6.003186146418254}
ということで、スコアからもpromptCが良好な結果を得られそうだということが分かりました。パッと見た感じ、BとCの違いはあまりなさそうですが、スコアが近いことからも感覚に近いといえそうです。(ちなみに、promptCは絵画風が2枚含まれていました)
考察
これを使えば、GANみたいにスコアをプロンプト生成にフィードバックして、良好なプロンプトを得ることもできそうですが、今回やって見た感触としては、あまり現実的ではないような気もします。
というのも、評価が評価モデルに依存するので、評価モデルに特化した生成結果が選ばれてしまうからです。
実は今回、色々試している時に、promptBの方が高くなることがありました。ばらつきのせいかなと思ったものの、生成された画像を見るとpromptBは猫が小さく描かれている一方、promptCの方は猫をアップで撮っていて良さそうに感じました。
そこで気付いたのは、背景として指定している「花の咲いた庭」を高く評価しているのではないかということでした。つまり評価モデルは主題を理解しているわけではないということです。
逆に、私が「猫を描いているものだ」という先入観をもって評価しているせいだとも言えるのですが、少なくとも今回の評価モデルについては主題を指定して評価することはできないので、人間らしい評価であるとは必ずしもいえないような気がします。
ある程度プロンプトの候補が決まっていれば、そこから総当りで生成して、スコアの高いプロンプトの生成物から人間が確認する、みたいな使い方が良さそうです。
参考
Google Colab で Stable Diffusion 2.1 を試す - diffusers版
https://note.com/npaka/n/n1f4e2bcad037
AIで画像の美しさを評価する LAION Aesthetics
https://secon.dev/entry/2022/09/20/100000-laion-aesthetic/