見出し画像

AUTOMATIC1111版Stable Diffusion web UI上でVAE Mergerを利用する手順

07-25-2023追記:VAE Mergerは、SDモデルもマージが可能なMaji Mergerに置き換えられました。VAEをマージする機能は従来同様ですので、本記事の説明を参考にしてください。

※8. に、モデルからVAEのみを抽出する方法を追記しました。
https://github.com/sALTaccount/VAE-BlessUp にて、VAEの明るさとコントラストのみを調整するツールがありました。ご参考まで。


1. 概要

 Stable DiffusionにおけるVAE(Variational Autoencoder)は、画像と潜在空間を相互に変換する役割を持っています。現在のところVAEは数種類存在していて、これを差し替えることで出力画像が変化します。

 昨日、既存のVAEをマージするツールが登場したので、本記事ではこれをAUTOMATIC1111氏のStable Diffusion web UI(以下web UI)上から利用する手順について説明します。なお、Windows PCでweb UIを利用する手順(VAEの変更を含む)については、下記の記事で説明しています。

2. 入手可能なVAEについて

Stable Diffusion originalのVAE

 8.に、モデルから取り出す方法を掲載しました。

その他のVAE

 下記の記事の「4. VAE (Variational Autoencoder)」にまとめてあります。

3. VAE Mergerのインストール

 https://github.com/ddPn08/stable-diffusion-webui-vae-merger へアクセスして内容をご確認ください。

 次にweb UIを起動して「Extensions」「Install from URL」の順にタブを移動し、先ほどのURL(末尾の「.git」は任意の模様)を入力して「Install」をクリックしてください。少し待つと、インストール完了のメッセージが表示されます。

インストールが完了すると下部にメッセージが表示される

 タブを有効にするため、「Settings」のタブに移動して「Reload UI」をクリックしてください。なお、更新に時間がかかるとブラウザがエラーになってしまう場合がありますので、一呼吸おいてリロードしてください。「VAE Merger」のタブが表示されていればインストールは完了です。万一うまく行かない場合は、web UI自体を起動し直してください。

4. 利用方法

パラメタの設定

 VAE Mergerは、「txt2img」タブの設定を利用して画像を生成するため、マージしたVAEで生成を試したい場合は先にセットしておく必要があります。あらかじめテスト用の画像を生成しておき、「PNG Info」にドラッグ&ドロップして、「Send to txt2img」でセットするのがおすすめです。

生成済みの画像からtxt2imgタブへパラメタを送る

画面の説明

 下記は「VAE Merger」のタブにて「Each key」にチェックを入れた状態です。まずはそれぞれの項目を説明します(右下部分は割愛)。

VAE Mergerの画面
  • Merge and save
    現在の設定でファイルを保存します。ファイル名の入力が必須です。

  • Merge and gen
    現在の設定で、txt2imgによる生成を行ってプレビューします(txt2imgタブにて設定が必要)。

  • VAE A~C
    プルダウンメニューより、マージするVAEを選びます。

  • Merge Mode
    マージする方法を選びます。「Add difference」の場合は、「VAE C」も選択する必要があります。

  • Base alpha
    全体の混合比です。

  • Each Key
    チェックを入れると、「Textbox」「encorder」「decorder」が表示されます。

  • Override
    チェックを入れると、同じファイル名で保存(上書き)ができるようになります。入れていない場合はエラーになります。

  • Textbox
    現在の設定(おそらくBase alphaの設定に上書きする内容)が表示されます。マージ実行時に使用される生の値で、スライダーを使わずに直接書き換えることができます。

  • encorder(各種)
    VAE encorderに関する各レイヤー(?)の混合比を設定します。VAE encorderは学習時に使用されるものと思われますので、値の変化による検証は簡単ではありません。

  • decorder(各種)
    VAE decorderに関する各レイヤー(?)の混合比を設定します。txt2imgやimg2imgでは、VAE decorderのみが使用されます。

使い方1(混合比を変えて確認)

 「VAE A」と「VAE B」にて適当なVAEを選択して、「Merge and gen」を押してみてください。画像が生成され、通常の設定であればtxt2imgと同様に画像ファイルも出力されます。「Base alpha」を変更すると、混合比を変えることができます。

Base alphaが 0, 0.5, 1.0 の場合の例
マージするVAEを変更した場合の例

 一つ目の例では色が変化しているのが分かります。二つ目の例でも色の変化はありますが、混合したときのコントラスト低下が目立ちます。0と0.5の間、0.5と1の間については、その前後の中間であると思っていただければ十分です。

使い方2(保存とweb UIでの適用)

 txt2img等で確かめたり、VAEを残しておいたりしたい場合は保存します。「Output filename」欄にファイル名を入れて(例:test.pt)、「Merge and save」をクリックしてください。

ファイル名を入れて保存する
VAEのディレクトリに保存された

 メインの画面でVAEを選べるようにしていない場合は、「Settings」の「User Interface」にある「Quicksettings list」に、「sd_vae,」を追加して「Apply Settings」をクリックしたあと、web UIを再起動してください。

sd_vae, を追加しておく

 画面の上部に「SD VAE」のプルダウンメニューが表示されたら、右側のリロードボタンを押してください。これで保存したVAEが選べるようになります。

保存したVAEを選択する

同じファイル名を再利用したい場合

 マージのテスト等で、同じファイルを書き換えて使い回したい場合は注意が必要です。
 VAE Mergerの「Override」にチェックを入れて、保存時に上書きできるようにしてください。また、VAE Mergeで保存したあとは、SD VAEにて別のVAEに変更してから戻す操作を行ってください。これにより、上書き保存されたファイルが読み込まれます。

5. 出力サンプル

 VAE decorderの混合比を少しずつ変えて出力した結果を掲載します。値は左から順に「0, 0.25, 0.5, 0.75, 1」としています。Base alphaは0.5固定です。

 VAE Aは「kl-f8-anime2」、VAE Bは「anything-v4.0」を選びました(先ほどのコントラストが低下した例と同じ)。あくまで、この組み合わせでの結果であることに注意してください。また、添えた文言は個人の感想です。

decoder.up.0の変更

 見てのとおり、コントラストが変化しています。

decoder.up.0を変更した場合

decoder.up.1の変更

 decoder.up.0を0.8に変更しています。

decoder.up.1を変更した場合

decoder.up.2の変更

 decoder.up.0を0.8に変更しています。

decoder.up.2を変更した場合

decoder.up.3の変更

 decoder.up.0を0.8に変更しています。左はビビッドで、右はくすみがかっていて、それぞれのVAEが持つ特徴が感じられます。

decoder.up.3を変更した場合

decoder.up.midの変更

 decoder.up.0を0.8に変更しています。

decoder.up.midを変更した場合

6. まとめ

 VAE decorderの混合比を変化させみたところ、ある程度の傾向が見て取れることが分かりました。ただし、この検証ではHires. fixを行っていません。値の調整とtxtimg等による確認を繰り返すことで、より好ましい出力に変化させられることが期待できます。作ったVAEはモデルに内蔵できるため、今後はモデル調整の過程に組み込まれる可能性もあります。

 続いて重要な情報がありますので、最後までご覧いただければ幸いです。

7. 高度な利用方法

 「Each Key」にチェックを入れた時に表示される「Textbox」は、各スライダーを動かすと内容が変化します。マージの実行時はTextboxの内容が参照されるため、この箇所を直接書き換えることで設定が変えられるようになっています。

スライダーはそのままで「decoder.up.0」の値を書き換えた

キーの設定を直接変更する(1)

 試しに、decoder.up.0のスライダーを0.8にして、Textboxの設定の末尾に「"decoder.up.0.block.0.nin_shortcut.weight":**」を追加して値を変えてみました(「**」は0~1の値)。全体的な変化もありますが、虹の紫色や、女の子の髪の緑色が分かりやすいです。このように、特定のキーのみ混合比を変えることができます。

ツールには無い「decoder.up.0.block.0.nin_shortcut.weight」を変更してみた

キーの設定を直接変更する(2)

 実は、現状のスライダーでは一切変更できないキーも存在しています。今度は、「"decoder.conv_in.":**」を加えてみました。左が0で右が1です。ぱっと見でも分かるほどの違いがあります。

「decoder.conv_in.」を変更してみた

 他のキーも変えてみたところ、やはり明確な違いがありました。選んだ2つのVAEは、内部に大きな相違があるようです。

「decoder.conv_out.」を変更してみた
「conv_in. 」を変更してみた
「post_quant_conv. 」を変更してみた

VAEのキー一覧

 これから発生するかもしれないVAE沼を上手に渡り歩けるよう、独自に確認してまとめたVAEのキー一覧を掲載しますのでご活用ください。

 Textboxでの書き方をまだ説明していませんでしたが、前方一致で変更したいキーを指定できます。たとえば設定の末尾に「, "decoder.":1」を加えると、decoder.で始まる全てのキーがVAE Bの内容になります(Weight sumの場合)。

マージしたVAEの注意点

 注意点といっても、画像の出力に利用するだけであれば気にする必要はありませんので、下記はスルーしてください。

 decorder. で始まるキーはVAE Decorderに関することが明白(画像出力でしか利用されない)です。しかし、encorder. で始まるキーはもちろんのこと、それら以外のキーも画像の出力以外で使用される可能性があります。たとえば、マージ後のVAEが学習に利用されていた場合は、学習の品質が悪化する恐れがあります。VAE DecorderとEncorderはセットで存在しています。制作者が多数の画像を使用してトレーニングを行い、念入りに調整して作られています。このことを念頭にマージしたVAEをご利用ください。マージしたVAEをモデルに組み込んで公開するような場合は、確実に検証を行うことが好ましいと考えています。

(…と思ったのですが、VAE Encorderが使用される場面を確認、検証したことが無く、VAEごとのEncorder情報の相違も不明なので、半分はただの想像話になってしまいました。)

8. VAEの抽出方法

 Stable Diffusionのモデルから、VAEのみを取り出す方法があるので説明します。ここでは例として、Stable Diffusion v1.4に内蔵されている「kl-f8」と呼ばれるVAEを抽出します。

 抽出は https://github.com/arenatemp/stable-diffusion-webui-model-toolkit に掲載された「stable-diffusion-model-toolkit」を使用します。モデルの剪定、修復ができるほか、内蔵されているVAE等の種類やモデルの破損の有無を調べることもできます。まずは、本記事のVAE Mergerと同じ要領でインストールしてください。

 次に https://huggingface.co/CompVis/stable-diffusion-v-1-4-original へアクセスして、「sd-v1-4.ckpt」をダウンロードしてください。2.で紹介した「Stability AIのVAE」のページにある、「kl-f8.zip」に含まている「model.ckpt」でも構いません(こちらは画像出力のモデルとしての利用はできません)。

 入手したckptファイルを所定の場所(stable-diffusion-webui\models\Stable-diffusion)に設置してから、web UIを起動します。Toolkitは、web UIの起動中に設置されたファイルが認識できません。

 web UIを開いたら、「Toolkit」「Advanced」の順にタブを移動して、先ほどのファイルを選択してから「Load」をクリックしてください。

VAEを抽出したいモデルを選択してLoadする

 モデルの情報が表示されるので、「Class」にて「VAE-v1」を選択すると「Name」の欄にファイル名が入力されます。必要があれば適宜変更してから、「Export」をクリックするとファイルが出力されます。

VAEのみのファイルをExportで出力する

9. twitterの連絡先

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。


この記事が気に入ったらサポートをしてみませんか?