見出し画像

AI イラストは緑に変色する? SDXL と Flux の VAE の精度と色を徹底比較! 【画像生成 AI】

はじめに

こんにちは、きまま / Easygoing です。

今回は、画像生成 AI で必ず耳にする、VAE について調べてみたいと思います。

白い制服を着た銀髪の女の子のアニメイラスト
今日は VAE について

画像生成は、莫大な計算が必要

画像生成は、行列演算を繰り返し行うので 膨大な計算 が必要になります。

現在の 画像生成 AI では、VAE(Variational Auto Encoder:可変オートエンコーダー)と呼ばれる 専用の AI モデル を使って空間を圧縮し、効率よく計算を行っています。

VAE(Variational Auto Encoder)が画像を潜在空間へと圧縮・復元する仕組みの概念図
VAE で潜在画像に変換する

VAE によって圧縮された空間のことを 潜在空間(latent space)と呼び、ここで処理される画像は特に 潜在画像(latent image)と呼ばれています。

通常は 1024 x 1024 x 3 の情報量

SDXL 以降の 画像生成 AI モデルでは、標準の解像度は 1024 x 1024 が設定されています。

白い制服を着た銀髪の女の子が笑顔でこちらを見ているアニメイラスト
1024 x 1024 x 3チャンネル が標準

さらに、私たちが利用している RGB 色空間 では、赤(Red)・緑(Green)・青(Blue) の3つの色のチャンネルがあり、合計で 1024 x 1024 x 3 の情報量が存在します。

VAE で、48分の1 に圧縮する!

VAE は、代表的なものに注目すると、SD1.5_vae → SDXL_0.9_vae → Flux.1_vae → Flux.2_vae の順に進化しています。

SD1.5、SDXL、Flux.1、Flux.2の各世代におけるVAEのロードマップ
各世代のVAEが持つ解像度やチャンネル数、圧縮率などのスペック詳細リスト
主な VAE の特徴

このうち SDXL_0.9_vae は、縦横の解像度をオリジナルの 8分の1 の 128 x 128 に圧縮し、さらにチャンネルを 潜在空間専用の 4チャンネル に変換することで、情報量を元の 48分の1 に圧縮しています。

VAE で画像が劣化する!

VAE を通すと画質はどのように変化するのでしょうか?

実際に ComfyUI で VAE encode → VAE decode を実行して画像の変化を確かめてみます。

ComfyUIのワークフロー図。VAE EncodeとVAE Decodeを繋ぎ、画像の変化を検証する構成
VAE encode → VAE decode をつなぐ
Image Difference CheckerノードのUI。差分マップ、MAE/SSIM数値、トーンカーブが表示されている
Image Difference Checker で画像の違いを分析

今回の分析で利用する Image Difference Checker ノードは、2つの画像の 差分マップ を表示して、 MAESSIM で画像の違いを数値化し、さらに トーンカーブ で色の変化を確認することができます。

ComfyUI-easygoing-nodes カスタムノード

実際の画像で比較!

それでは、実際の画像で比較してみましょう。今回は SD1.5_vae、SDXL_0.9_vae、 Flux.1_vae、Flux.2_vae の4つの VAE のそれぞれの精度を見てみます。

1.白い制服(アニメ)

検証用画像:白い制服を着たアニメ調の女性キャラクター

差分マップ

各VAEによる差分マップの比較。SD1.5やSDXLでは輪郭にノイズが見えるがFluxでは少ない

まず、差分マップで元画像からの変化を見てみると、SD1.5_vae では主に キャラクターの輪郭部分 に 画質の劣化 が生じているのが分かります。

SDXL_0.9_vae でも同じ部分に劣化が生じていますが、先ほどの SD1.5_vae と比べると程度はかなりマシになっています。

Flux.1_vaeFlux.2_vae では、元画像からの変化がかなり小さくなっていて、両者ともに 劣化の少ない優秀な VAE であることが分かります。

MAE と SSIM

それでは、MAE と SSIM を計算して VAE の精度を数値で比較してみます。

MAEとSSIMの測定結果表。各VAEの精度が数値化されている

VAE は、世代を経るごとに精度が向上していますが、唯一 Flux.2_vae の MAE が Flux.1_vae より劣っていて、色の再現性は Flux.1_vae の方が良い 結果になりました。

色の変化

各VAEによる色の変化の表。青や緑や赤のチャンネルのズレを示している

次に色の変化を確認すると、SD1.5_vae は元画像と比較して 緑が少なく なっている一方で、Flux.2_vae では逆に 赤と青が増えている ことが分かります。

1枚のイラストでは、あまりはっきりした傾向は分からないので、それぞれの VAE について、さらに4枚のイラストを比較してみます。

2.港の夜景(アニメ)

検証用画像:港の夜景を描いたアニメイラスト
夜景イラストにおける、各VAEの差分マップ比較
夜景イラストにおけるMAE、SSIM、色の変化のまとめの表
  • MAE と SSIM の変化は同じ傾向

  • SDXL_0.9_vae緑が増える

3.赤い花(アニメ)

検証用画像:鮮やかな赤い花のアニメイラスト
赤い花イラストにおける、各VAEの差分マップ比較
赤い花イラストにおけるMAE、SSIM、色の変化のまとめデータ
  • Flux.2_vae が、MAE と SSIM の変化が最も少ない

4.離陸(実写)

検証用画像:離陸する飛行機の実写写真
飛行機の実写写真における、各VAEの差分マップ比較
飛行機の実写写真におけるMAE、SSIM、色の変化のまとめの表
  • Flux.1_vae と Flux.2_vae は同等

5.油絵(実写)

検証用画像:重厚なタッチの油絵風の実写イラスト
油絵イラストにおける、各VAEの差分マップ比較
油絵イラストにおけるMAE、SSIM、色の変化のまとめの表
  • Flux.1_vae と Flux.2_vae は同等

5つのイラストの平均を見る

それでは、今回測定した5つのイラストの平均を見てみましょう。

画像の変化

枚の画像から算出した、VAEごとの精度(劣化率)の平均の表
  • VAE を通すと 画像は 0.2 〜 2 % 劣化

  • 色の正確性(MAE):Flux.1 > Flux.2 > SDXL > SD1.5

  • 構造の正確性(SSIM): Flux.2 ≒ Flux.1 > SDXL > SD1.5

まず、VAE を通すと 画質は 0.2 〜 2 % 程度劣化 します。

VAE は、SD1.5 → SDXL は順当に進化して精度が上がっていますが、SDXL → Flux.1 は性能が大幅に向上した 飛躍的な進化 であることが分かります。

SDXL(4ch)とFlux(16ch)の潜在空間チャンネル数の違いを説明する表の再掲

Flux.1 は、潜在空間のチャンネル数が 4→16 になって情報量が SDXL の 4倍 に増えていて、この 情報量の増加 が精度の大幅な改善につながったと考えられます。

色の変化

続いて、VAE ごとの色の変化を確認します。

RGBの色相環と補色の関係を示した図
色と補色の関係
5枚の画像から算出した、各VAEの色ずれ(緑、赤、青の増減)の平均の表
  • SD1.5_vae:全体が暗くなる、紫に変色する

  • SDXL_0.9_vae:緑に変色する

  • Flux.1_vae:ほぼ正確

  • Flux2_vae:紫に変色する

色について確認すると、SD1.5_vae は全ての色が減少しているので イラスト全体が暗く なり、その中でも特に 緑が大きく失われている ことが分かります。

SDXL_0.9_vae について見ると、全体の色の変化は SD1.5 より少ないですが、その代わり今度は 緑が増えている ことが分かります。

Flux.1_vae は色の再現が優秀で、変化はほとんどありません

Flux.2_vae は、赤と青(マゼンタブルー) が強調 されていて、これはおそらく AI イラスト でノイズを除去するときに失われがちな青と赤を補色 する、意図的な補正 がされていると予想できます。

白い制服を着た銀髪の女の子が自信の有りそうな笑顔でこちらを見ているアニメイラスト
Flux.2 は意図的に色を補正する

改良型の SDXL の VAE を作る!

今回、SDXL_0.9_vae が緑に変色することが分かったので、アニメイラスト用に MAE と SSIM の変化が最も少ない、オリジナルの色表現に忠実な SDXL_anime_natural_vae を調整してみました。

SDXL_anime_natural_vae

sdxl_anime_natural_vaeを使用した際の出力結果
SDXL_anime_natural_vaeとSDXL_0.9_vaeの精度数値を比較した表

SDXL_anime_natural_vae は、実際にMAE と SSIM の数値を見ながら調整を行ったので、数値上はオリジナルと比較して 精度が大きく向上 しています。

SDXL_anime_natural_vae は元画像からの変化が少ないので、特に Hires.fixDetailer を利用するような、VAE の処理を繰り返すワークフロー で画質の向上が期待できます。

SDXL_anime_clear_vae

また、同じページで公開している SDXL_anime_clear_vae は、イラスト全体を暗くしてコントラストを上げて、重厚感を強調する味付け をした VAE になっています。

SDXL_anime_clear_vaeを使用した際の出力サンプル
SDXL_anime_clear_vaeの測定データの表

こちらは、先程の SDXL_anime_natural_vae と比べると癖があるので、全てのイラストにおすすめできるわけではありませんが、一度試して表現が合うようであれば、使ってみると良いと思います。

FP32 形式 と BF16 形式で画質は違う?

今回の検証は、VAE のうち最も精度の高い FP32 形式 を利用して行いました。

実際は、画像生成で一番使われることの多いのは FP16 /  BF16 形式 の VAE だと思うので、最後に FP32 形式 と BF16 形式の画質を比べてみます。

sdxl_anime_natural_vae_BF16

VAEのデータ形式(FP32 vs BF16)による画質の違いを測定するワークフロー
FP32とBF16の精度差をMAE/SSIMの数値で示した比較表

FP32 形式 は、BF16 形式 と比べて ごく僅かですが画質が優れています

イラストの生成で最高画質を追求するときは、FP32 形式の VAE を試してみても良いでしょう。

FP32 形式の VAE の利用方法

Hugging Faceでモデルをダウンロードする際の手順説明画面
Hugging Face で 該当のモデルをクリック
ファイルの詳細画面で、モデルの精度(Precision)がF32であることを確認する箇所
Precision が F32 であれば、FP32 形式のモデル

ComfyUI で FP32 形式の VAE を使うときは、FP32 形式のモデルをダウンロード した上で、--fp32-vae の引数をつけて ComfyUI を起動してください。

ComfyUI の起動引数の設定方法

環境にもよりますが、起動引数をつけない場合は、FP32 形式のモデルであっても BF16 形式で実行されることが多くなります。

Flux.2_vae は何が優れている?

最後に、Flux.2 の VAE について Shiba*2 さんが詳しく解説されている記事をご紹介します。

今回は、オリジナルの画像との比較で VAE の性能を測定したので、Flux.1_vae と Flux.2_vae にあまり差がない結果になりました。

Flux.2_vae は、画像が持つ「意味」を理解する 新世代の VAE なので、他の検証方法や今後の改良によって、さらに性能が向上する可能性があります。

まとめ

  • SDXL の VAE は緑に変色する

  • Flux の VAE は精度が高い

  • SDXL_anime_natural_vae の紹介

今回は、VAE について調べてみました。

VAE は、UNET / Transformer やテキストエンコーダーと違って、どのようにイラストに影響するのか分かりにくいですが、今回 Image Difference Checker ノードを使うことで、VAE の精度を客観的に比較することができました。

白い制服を着た銀髪の女の子が澄んだ瞳でこちらを見ているアニメイラスト
SDXL_anime_natural_vae を試してみよう!

今回ご紹介した SDXL_anime_natural_vae は、通常の VAE の代わりに使用するだけで画質が向上する可能性があるので、みなさんも気軽に試してみてはいかがでしょうか?

これからも、AI イラスト の画質をいろいろな角度から追求していきたいと思います。

最後までお読みいただきありがとうございます!


English Article


いいなと思ったら応援しよう!