AI イラストは緑に変色する? SDXL と Flux の VAE の精度と色を徹底比較! 【画像生成 AI】
はじめに
こんにちは、きまま / Easygoing です。
今回は、画像生成 AI で必ず耳にする、VAE について調べてみたいと思います。

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

VAE によって圧縮された空間のことを 潜在空間(latent space)と呼び、ここで処理される画像は特に 潜在画像(latent image)と呼ばれています。
通常は 1024 x 1024 x 3 の情報量
SDXL 以降の 画像生成 AI モデルでは、標準の解像度は 1024 x 1024 が設定されています。

さらに、私たちが利用している 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 の順に進化しています。


このうち SDXL_0.9_vae は、縦横の解像度をオリジナルの 8分の1 の 128 x 128 に圧縮し、さらにチャンネルを 潜在空間専用の 4チャンネル に変換することで、情報量を元の 48分の1 に圧縮しています。
VAE で画像が劣化する!
VAE を通すと画質はどのように変化するのでしょうか?
実際に ComfyUI で VAE encode → VAE decode を実行して画像の変化を確かめてみます。


今回の分析で利用する Image Difference Checker ノードは、2つの画像の 差分マップ を表示して、 MAE と SSIM で画像の違いを数値化し、さらに トーンカーブ で色の変化を確認することができます。
Mean Absolute Error (MAE):主にカラーの違いを検出
Structural Similarity Index (SSIM):白黒の構造の違いを検出
ComfyUI-easygoing-nodes カスタムノード
実際の画像で比較!
それでは、実際の画像で比較してみましょう。今回は SD1.5_vae、SDXL_0.9_vae、 Flux.1_vae、Flux.2_vae の4つの VAE のそれぞれの精度を見てみます。
1.白い制服(アニメ)

差分マップ

まず、差分マップで元画像からの変化を見てみると、SD1.5_vae では主に キャラクターの輪郭部分 に 画質の劣化 が生じているのが分かります。
SDXL_0.9_vae でも同じ部分に劣化が生じていますが、先ほどの SD1.5_vae と比べると程度はかなりマシになっています。
Flux.1_vae と Flux.2_vae では、元画像からの変化がかなり小さくなっていて、両者ともに 劣化の少ない優秀な VAE であることが分かります。
MAE と SSIM
それでは、MAE と SSIM を計算して VAE の精度を数値で比較してみます。

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

次に色の変化を確認すると、SD1.5_vae は元画像と比較して 緑が少なく なっている一方で、Flux.2_vae では逆に 赤と青が増えている ことが分かります。
1枚のイラストでは、あまりはっきりした傾向は分からないので、それぞれの VAE について、さらに4枚のイラストを比較してみます。
2.港の夜景(アニメ)



MAE と SSIM の変化は同じ傾向
SDXL_0.9_vae は 緑が増える
3.赤い花(アニメ)



Flux.2_vae が、MAE と SSIM の変化が最も少ない
4.離陸(実写)



Flux.1_vae と Flux.2_vae は同等
5.油絵(実写)



Flux.1_vae と Flux.2_vae は同等
5つのイラストの平均を見る
それでは、今回測定した5つのイラストの平均を見てみましょう。
画像の変化

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 は性能が大幅に向上した 飛躍的な進化 であることが分かります。

Flux.1 は、潜在空間のチャンネル数が 4→16 になって情報量が SDXL の 4倍 に増えていて、この 情報量の増加 が精度の大幅な改善につながったと考えられます。
色の変化
続いて、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 イラスト でノイズを除去するときに失われがちな青と赤を補色 する、意図的な補正 がされていると予想できます。

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


SDXL_anime_natural_vae は、実際にMAE と SSIM の数値を見ながら調整を行ったので、数値上はオリジナルと比較して 精度が大きく向上 しています。
SDXL_anime_natural_vae は元画像からの変化が少ないので、特に Hires.fix や Detailer を利用するような、VAE の処理を繰り返すワークフロー で画質の向上が期待できます。
SDXL_anime_clear_vae
また、同じページで公開している SDXL_anime_clear_vae は、イラスト全体を暗くしてコントラストを上げて、重厚感を強調する味付け をした VAE になっています。


こちらは、先程の SDXL_anime_natural_vae と比べると癖があるので、全てのイラストにおすすめできるわけではありませんが、一度試して表現が合うようであれば、使ってみると良いと思います。
FP32 形式 と BF16 形式で画質は違う?
今回の検証は、VAE のうち最も精度の高い FP32 形式 を利用して行いました。
実際は、画像生成で一番使われることの多いのは FP16 / BF16 形式 の VAE だと思うので、最後に FP32 形式 と BF16 形式の画質を比べてみます。
sdxl_anime_natural_vae_BF16


FP32 形式 は、BF16 形式 と比べて ごく僅かですが画質が優れています。
イラストの生成で最高画質を追求するときは、FP32 形式の VAE を試してみても良いでしょう。
FP32 形式の VAE の利用方法


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 は、通常の VAE の代わりに使用するだけで画質が向上する可能性があるので、みなさんも気軽に試してみてはいかがでしょうか?
これからも、AI イラスト の画質をいろいろな角度から追求していきたいと思います。
最後までお読みいただきありがとうございます!
