AIで画像の美しさを評価する LAION Aesthetics
画像の美しさ、というのは主観が多分に含まれるものなので、コンピュータが評価するタスクとしては難しいのかな、と思っていたのだけどLAION-AESTHETICS を読んでびっくり、だいぶきちんと評価できてそう。実際にLAION Aesthetics V2でデータセットをスコア付した結果(リンク先ページは大量の画像ロードが走って遅いので注意)ではこんな感じ。例えばスコアが1.5~1.75の画像だと
となる。またスコア7~7.25の画像では
という感じになる。おーすごい、それっぽい。そしてこのスコアを学習・導出しているものも複雑なディープラーニング処理ではなく、単純なMLP(5つの線型層+Dropoutで、活性化関数を挟まない)というのもすごい。
LAION-Aesthetics V1
V1 では SAC というStable Diffusion等が生成した画像とプロンプトを約24万枚のデータセットのうち、当時あった5000枚のデータのうち4000枚を0-10でレーティング付して、入力にはCLIPを通した画像の特徴量を使い、MLPでトレーニング。結果4000枚のデータでも良い感じだったとのこと。
LAION-Aesthetics_Predictor V1 のコードや重みはこちら。
LAION-Aesthetics V2
V2では先程のSACのデータセットの17.6万枚をレーティングしたもの、LAION-Logosの1.5万枚のロゴ画像をレーティングしたもの、25万枚のレーティング画像があるAVA Datasetを使ってトレーニング。結果として、シンプルなMLPでCLIP ViT/14の画像特徴量を使ったものが最も主観的な評価で良かったとのこと。確かにスコア6.5以上の画像などを見るとどれも良さそうな画像に見える。Stable Diffusion V1はこのスコア5.5+の画像860M枚で学習したようで、たしかに高画質な画像生成では元データも高品質が求められる。
LAION-Aesthetics_Predictor V2 のコードや重みはこちら。Colab でかんたんに動かせるようにnotebookを書いてみた。
このブログ画像のAesthetics Predictorスコアを見る
Aesthetics_Predictor V2 を使って、このブログ記事画像6000枚ちょっとのスコアを算出してみた。
> df.image_score.describe()
count 6411.000000
mean 4.749680
std 0.375495
min 3.169599
25% 4.513570
50% 4.771865
75% 5.007550
max 6.175828
スコア的には平均4.75、標準偏差0.38で高スコアも少ないが低スコアも少ない。いちおうちゃんとした写真をブログに載せているはずなので、まぁそうだよね~というスコア分布。実際にどんな画像が低スコアで、どんな画像が高スコアか見てみよう。
低スコア
文字が入ったり画面が暗かったりノイジーだったり、といった物が多くなるほど感。
高スコア
おおー、たしかに高スコアぽい。縦長画像が多いけど。上位25%であるスコア5.0超えのものはだいたいサムネイルの見栄え良い感じがする。
LAION Aesthetics Predictor を使ってみて
CLIPの画像特徴ベクトルに対しスコア付したものを活性化関数をすらないシンプルなMLPで学習させたもので、良い感じのスコアが計算され驚きであった。あまりスコアが高くない画像はレコメンデーション時のサムネイル画像には使わないなど、普通にWebサービスなどでも活用できそう。
LAIONのDiscordを覗いてみると、このデータセットや学習をさらに広げる話などもされていて、今後もより良い美しさスコアや多様性を持ったスコア表現が出てきそうで楽しみである。