VAE
VAEって何?
Variational Auto Encoder。
変分オートエンコーダの略
VAEの効果
一応VAE自体も広義の画像生成モデルの一種なのだが、一般ユーザーにそう認識されることは少ない。
Stable Diffusionのような画像生成AIは潜在拡散モデルと呼ばれ、潜在空間(latent space)と呼ばれる情報が圧縮された世界で生成処理をしている。
これは単純に画像のサイズを縮小するのとは全く別物*1。
VAEはこの潜在空間との橋渡しをする役割を果たしている。
具体的には生成の最終段階でVAEが潜在空間表現から一般的な画像の形式にデコードすることで画像が完成する。
生成の最後でトラブルが起きることが多いのはこのデコード処理に多くのVRAMが必要なため。
逆にimg2imgでは最初にVAEが画像を潜在空間表現にエンコードしている。
SD1.5のアーキテクチャ設計は軽量高速化に重点が置かれており*2、
結果としてVAEと生成したい画像との相性の問題が今より大きかった。
原則的にすべてのモデルにVAEが内包されているが、それが適切なVAEとは限らない。
具体的には、彩度が低く灰色っぽくなったり、紫色の斑点が出現したり、といった問題が発生することがある。
必要や好みに応じて別のVAEを指定しよう!
96 無念 Name としあき 23/02/10(金)02:33:24 ID:iNtCkbRs No.1065201947 del +
>そもそもVAEが何だかよくわかってない
t2iでの説明をすると
画像の元になるノイズ画像 を VAEを通して64x64のサイズに(正確には各辺1/8のサイズに縮小する)
SD本体が作った64x64サイズのものをVAEが512x512のサイズに戻る
ざっくり説明だとこんな感じ
AIにとって理解しやすい拡大縮小をしてる部分だから色味や細部の線のでかたに影響がある
今あるのだとイラストに強くて奇麗だけど少し色あせてボケ気味なのと
イラストに強くて色味が強すぎるのと
何でもできるけど他がイラストに特化してる分実写が得意なのと選択肢が狭い
VAEが使われている場所
引用:としあき自作
主なVAE
SD v1.x専用
VAEは、モデルに比べると極端に数が少ない。主要なVAEファイルは5~6種類程度。
| モデル名 | 備考 |
| vae-ft-ema-560000-ema-pruned.safetensors | 二次系で安定 |
| vae-ft-mse-840000-ema-pruned.safetensors | 実写向き・二次でもいい |
| kl-f8-anime.ckpt | |
| kl-f8-anime2.ckpt | 彩度高い |
| autoencoder_fix_kl-f8-trinart_characters.ckpt | 彩度めちゃ高い |
| としあき製VAEシリーズ | |
| ClearVAE | 壺産。シャープ、かつ彩度が若干高め。 |
SDXL専用
SDXLはモデル内蔵(U-Net+TextEncoder+VAE)の構成が基本。
SD1.5系はVAEが原因で生成が破綻するケースもあったが、SDXLの標準VAEは最初から完成度が高くそれが原因で生成に支障をきたすということはほぼなくなっている。
SD系モデルは学習時に用いられたVAEの潜在分布との整合性が重要であり、安易な差し替えによる副作用が発生しやすい。
この為、代替VAEの重要性は薄れた。
VAEの重要性が十分に広まったため、モデル(checkpoint)にもともとVAEを焼き込んでくれている場合が多い。
VAEがbakeされていない場合はモデルの作者が推奨するVAEを使っておけば大丈夫。
どうしてもVAEを独自に指定したい場合は、特にこだわりがなければSDXL VAEを使うと良いだろう。
ちょっと雰囲気の違う塗りが欲しい場合はXL_VAE_Cというものがある。
XL_VAE_Cのバリエーションの一つであるEシリーズとFシリーズは彩度が高く独特の透明感があり特にアニメ塗りモデルによく合う。

SDXLより後のモデル
- VAEは単独で配布されることが一般的になりました。
- 基本的に、各シリーズ(FLUX.1, Anima等のこと)につき1種類。
- データ型(bf16)違いや、各DiTに合わせた独自VAEを配布している場合があります。
- どのモデルがどのVAEを使用するかは、各モデルの説明ページに書いています。
VAEを置く場所・適用方法
VAEの保存先
- (1111の場合)
C:\stable diffusion\webui\models\VAE 人によって親フォルダ名は異なります。
- (NMKDの場合)
\Data\models\vae
VAEの適用方法
Stable diffusionの設定を変更し、VAEを実際に適用させよう。
- (1111の場合)

- (NMKDの場合)
- まず右上の歯車アイコン(Open Settings)を押す。
- そしてこの画像の通り。

(1111)VAEを手軽に切り替える方法
Quicksettings listを利用しよう。
Settings → User interface → Quicksettings list
に「sd_vae」を書き足して画面上部の Apply settings を押す。
するとあら不思議、画面上部にSD VAEの欄が!
画像生成AIとしてのVAEの特徴
Stable Diffusion等ではオリジナルのVAEとはだいぶ違う使われ方をしている為、
SD以外の分野でのVAEの文献がSDでのVAEにそのまま当てはまるとは限らないので注意。
高速で無難な出力をするが、ボケやすいという特徴を持つ。
SDのVAEがそんなにボケないのは、不正値への耐性と引き換えに画質を取っており、またディテール描写に優れるGANの手法を一部取り入れて構築されているため*3。
とはいえGANの弱点があまり出ない程度の利用に抑えられているため、長所の部分も本家のGANには及ばない。なのでUpscalerにはそちら等が使われる。
「重い画像生成モデルの前後に軽量なVAEを挟んで計算コストを抑える」という手法は現在では当たり前になっているが、Stable Diffusionが初めて実用レベルで成功させた。
VAEを使わない拡散モデルはそれ以前にもあったが、計算コストが極めて重かった為OpenAIやGoogleなどのAI先進企業がクローズドソースでWebサービスとして公開する程度だった。
現在個人のPCでも動くような画像生成AIが多数普及しているのもこのVAEのおかげである。
SD以前のもともとのVAE
単独で乱数ベクトルから画像を生成できるAIとして発表された。
SD等では入力がノイズだとVAEでデコードしてもノイズになるが、本来のVAEはどんな潜在を入力してもできるだけ教師画像に近い雰囲気になるよう出力する。
が、先の通りボケやすい。
VAEのデコーダは、潜在表現zを確率的に画像xにデコードするよう訓練される。
訓練時に「確率的に」zを揺らしてからデコードさせるのはzを点ではなく中心μ±誤差eの広がりとして学習させて潜在空間全体を埋めるためだが
(でないとまともな画像を出せる入力値の幅が狭くなり独立生成モデルとして使えない)、
SD本体と異なり生成時は通常乱数を使わず期待値E[x|z]を出力させる。
学習目標は条件付き確率p(教師画像xi|zi)を最大化すること、および潜在表現zの差異が大きいときは大きく異なる画像を出力することだが、これはデコーダ単独では計算不可能。
ベイズの定理における尤度の近似として、画像xが潜在表現zにエンコードされる確率を表すq(z|x)をシミュレートするためにエンコーダが置かれている。
なのでもともとは、エンコーダはGANの識別器Dのような副産物だった。
Stable Diffusionでは画像生成に適した圧縮・展開器として利用されており、
KL正則化も「どんな潜在でも自然な画像にできる」ではなく「若干潜在が崩れていても画像にできる」程度の調整になっている。
潜在表現の許容値を広げるには潜在表現ziがズレていてもそれに近い教師画像xiを出力するように訓練する必要があるが、それを広げると近隣の教師画像が平均化されてボケボケになるため。
逆にKL正則化を強めたβ-VAEは、教科書的には潜在表現の解釈可能性が高いXAIのように書かれることもあるが、生成品質の評価値は拡散モデルの100倍くらい悪い。
CIFAR10データセットでのFID評価がDDPM(拡散モデル)3.17に対しβ-VAEは200とかになっている*4。
LDM(SD)発表当時、独立生成モデルとしてのVAEは画質でGANに後塵を拝しており、
潜在空間も独立生成に使うために正規分布に正則化されていたのでぱっと見ランダムノイズと大差ないと思われがちだったが、
ハイパーパラメータ調整でちょうどいい感じの次元圧縮ツールに生まれ変わらせたのがLDMのブレークスルー。
画像生成AIとしてのVAEの長所
- 生成が高速。
- 多様性は比較的確保しやすい。分からないから適当に描きこんだだろみたいなのはGAN程にはない。
- オートエンコーダの名の通り次元圧縮にも使える。
- 教師なし学習なのでアノテーション(キャプション)の手間がない。
- 学習も安定しやすい。
画像生成AIとしてのVAEの短所
コメント
- 見ないうちに情報充実してる。VAE周りよくわかってなかったのですごい助かる。 -- 2023-02-03 (金) 20:25:05
- VAEについての情報助かる -- 2023-02-14 (火) 21:18:29
- 新しいモデルを試すとcivitaiのサンプリングと違って色褪せて灰色っぽくなって困っていたけど、VAEが入ってなかった。一番の悩みを解決してくれて、ありがとうございますた! -- 2023-03-19 (日) 11:26:59
- sd_vae,を追加したのですが、SD VAEの右側に重さの数字を設定できる方法があったはずのなのですが、settingのどこをいじるんでしたでしょうか? -- 2023-04-05 (水) 09:54:16
- ↑すいません。解決しました。clipskipのことだったようです。 -- 2023-04-05 (水) 11:05:30
- よう。某所でその質問に回答した者だ。でもwikiで質問するよりは、あそこの方が回答者人口多いかもしれないなあ。たぶんふたばの方がもっと回答者多いし、質問するにも回答するにも画像を貼り易いから都合がいいんだけどね。 -- 2023-04-05 (水) 12:43:57
- XL_VAE_Cを使うと画像が真っ黒になってしまったけど、--disable-nan-checkを外したら直った -- 2024-06-16 (日) 13:23:05
(Tips)


