「Stable Diffusion web UI」を利用してAI画像の生成を行うときに、グラフィックボードのVRAM容量が少ないと大きな画像を生成することができません。一定サイズ以上の画像(たとえばFHD、WQHD、4Kなど)を生成しようとするとVRAMエラーが出てしまいます。
そういう時に「MultiDiffusion with Tiled VAE(マルチディフュージョン・ウィズ・タイルド・ブイエーイー)」という拡張機能を利用することによって、VRAM容量の少ないグラフィックボードを使用していてもパノラマ画像や高解像度の画像を生成することができるようになります。公式によるとVRAM12GBのグラフィックボードでは最大8Kまでの高解像度化が可能とあります。
「MultiDiffusion with Tiled VAE」は画像を複数の領域に細かく分割して各部ごとに描画を行わせてから統合することで、少ないVRAMでも大きな画像の生成を実現しているようです。
とはいえ「MultiDiffusion with Tiled VAE」も万能ではなく、使いどころを上手く見極める必要がありそうです。ここでは失敗も含めてサンプル画像を掲載しています。
なお、誤字脱字や間違い等は後日修正していく予定です。予めご了承ください。
「MultiDiffusion with Tiled VAE」を用いた画像の高解像度化
「MultiDiffusion with Tiled VAE」のインストール
ここでは「MultiDiffusion with Tiled VAE」という拡張機能を「Stable Diffusion web UI」にインストールする方法を紹介しています。
この「MultiDiffusion with Tiled VAE」の詳細は以下のページをご覧ください。
拡張機能は「Stable Diffusion web UI」のバージョン等によって正常に動作しないことがあります。また、拡張機能の利用に際して本体の更新が必要になることもあります。したがって、拡張機能のインストールや本体の更新は自己の責任に基づいて実行してください。本体の更新手順は以下のとおりです。
ここから、この拡張機能のインストール方法を見ていきます。
「Stable Diffusion web UI」を立ちあげて「拡張機能(Extensions)」タブから「拡張機能リスト(Available)」を開きます。
「URLからインストール(Install from URL)」する場合は以下のURLを指定します。
ここでは「拡張機能リスト(Available)」からインストールを実行します。「拡張機能リストのURL(Extension index URL)」にはURLが予め記載されていますので、そのまま「読込(Load from:)」ボタンをクリックします。
すると、「拡張機能リスト(Available)」の一覧にさまざまな拡張機能が表示されます。そのリストの中から「MultiDiffusion with Tiled VAE」を探して、右側の「インストール(install)」ボタンをクリックします。
インストールはすぐに完了して、リストの上部に「Extensionsフォルダにインストールしたのでインストール済タブから再起動してください」というメッセージが表示されます。
「インストール済(installed)」タブに移動して「適用してUIを再起動(Apply and restart UI)」をクリックします。これでインストール作業は完了です。
何らかの拡張機能をインストールした直後は、念のために「Stable Diffusion web UI」自体を再起動しておくとよいかもしれません。
「MultiDiffusion with Tiled VAE」のインストールが正常に行われている場合は、「Tiled Diffusion」と「タイル上のVAE(Tiled VAE)」の二つの項目が「txt2img」タブ内と「img2img」タブ内に追加されています。
それぞれの項目をクリックすると詳細設定の画面が開きます。ここでいくつかの設定を行います。
「MultiDiffusion with Tiled VAE」の使い方
「Stable Diffusion web UI」と拡張機能の利用環境
こちらのPC環境等は以下のページから確認してください。
拡張機能等は一般論としてPC環境や「Stable Diffusion web UI」のバージョンの違いによって正常に動作しないことがあります。
「Stable Diffusion web UI」の更新方法は以下をご覧ください。
拡張機能のインストール方法の詳細は以下に詳しいまとめがあります。
こちらのページでは項目名を日英で併記していますが、バイリンガル版を導入すると大変便利です。詳しくは以下のページをご覧ください。
「txt2img」から「MultiDiffusion with Tiled VAE」を利用する
基本設定
「txt2img」タブを開いてから「Tiled Diffusion」と「タイル上のVAE(Tiled VAE)」の二つの項目を開くと、それぞれの機能の詳細設定画面が開きます。
まず「Tiled Diffusion」内の「有効化(Enable)」と「現在の画像サイズで上書き」にチェックを入れます。「Method(手法)」が「MultiDiffusion機能(MultiDiffusion)」になっていることを確認します。
他の要素はデフォルトの状態にしておきます。細かい設定は使い方に慣れてから変更してみてください。
次に「画像の幅」と「画像の高さ」という項目を調整します。最初はパノラマ画像(横長)を作成することをおすすめいたします。「画像の幅」を「1920」「2560」「3840」などの任意の値に設定します。しかし、「画像の高さ」は「512」か「768」、最大でも「1024」までの値を指定します。最初は「512」から試すのがおすすめです。その理由はサンプルとともに後述します。
それから「タイル上のVAE(Tiled VAE)」内の「有効化(Enable)」にチェックを入れます。公式によると通常はデフォルトの設定で使用できるようですが、CUDA のメモリ不足エラーが発生した場合は「エンコーダータイルサイズ(Encoder Tile Size)」と「デコーダーのタイルサイズ(Decoder Tile Size)」の2つのタイルサイズを小さい値に変更するとのことです。
「VAEをGPUに移動」はチェックあり/なしを両方試してみましたが、VRAM12GBのグラフィックボードであればどちらでも変わらないようです。VRAM容量が少ない場合はチェックを入れないようにしたほうがよいと思います。
こちらの項目も他の要素はデフォルトの状態にしておきます。細かい設定は使い方に慣れてから変更してみてください。
あとはいつもどおりに「プロンプト」と「ネガティブプロンプト」を入力して、「サンプリング方法(Sampling method)」を好みのものに変更しておきます。画像のサイズは512×512のままでOKです。
作成例1 星空の下で佇む女性たち
こちらは画像のサイズを「2048×512」に設定した上で画像の生成を行ったものになります。プロンプトは以下のとおりです。以下2枚の画像のプロンプトも同一です。
masterpiece, best quality, 3 girls, brown hair, hair flower, brown eyes, (long skirt:1.2), wide shot, starry sky
(worst quality, low quality:1.4)
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Model: anything-v4.0, Clip skip: 2
再生されたパノラマ画像を見てみましょう。これくらいの設定であれば閲覧に耐える画像を出力することが可能です。
なお、画像はブログの掲載にあたり縮小化しています(以下も同様)。
こちらはサイズを「2560×512」にしたものになります。このくらいのサイズでもまったく問題なく画像を生成することができます。
しかし、画像の高さを低く設定していることには明確な理由があります。
こちらは「4K(3840×2160)」を指定して画像を生成したものになります。右上が「無茶しやがって…」のAAみたいになっていますね……。
大きな画像の生成はそれなりに時間が掛かります。「4K」はRTX 3060で10分ちょっと掛かっていたと思います。高さを低くすると数分から10分未満で画像が生成できます。
人物描写に関するプロンプトを入れた状態で巨大な画像を生成するとこのような画像になってしまいます。人物を大きなキャンバスに無理矢理描き込んだといった状態です。
人物の描写をプロンプトに含める場合は高さの調整が肝になるといえます。高さは「512」や「768」が適切で「1024」あたりが限界に感じます。
作成例2 友だちとカフェへ
今度は異なるプロンプトで画像を生成してみます。以下の2枚も同じプロンプトです。
best quality, multiple girls, silver hair, red hair, brown hair, pink hair, brown eyes, black t shirt, blue pants, wide shot, coffee shop
Negative prompt: nsfw, flat color, flat shading,retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res, cropped, signature, watermark, username, artist name, text
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Model: anything-v4.0, Clip skip: 2
上記の画像は「2560×768」を指定したものになります。画面を三分割したとすると、ちょうど継ぎ目にあたる部分の表現がやや微妙になっています。また、空間がやや湾曲した状態になってしまっています。
この点は細かい設定を変更することで改善可能なのかもしれませんが、先ほどの設定では似たり寄ったりの出力画像になります。
髪色はプロンプトを工夫することで数パターンを出すことができるようです。服装は1パターンしか入力していなかったため、皆同じような服を着ています。このあたりもプロンプトを工夫することでもう少し改善できるかもしれません。
こちらの画像は「3840×768」を指定したものになります。
やはり人物を上手く描いてもらうということはかなり難しいところがあります。細かいところに粗が目立ちます。
明らかな失敗作もご覧ください。
これはひどい!!w
こちらの画像は「4K(3840×2160)」を指定した上で、「1 girl」をプロンプトに含めて独りの人物を描けるかどうかを試した時のものになります。
画像が明らかに崩壊してしまっています。画面を細かく分割した上で画像を生成しているということもあってか、各部に無理矢理一人ずつ描こうとしているようです。
こちらが使い方を理解できていないという点はもちろんあると思います。しかし、人物を含める場合にはプロンプトとサイズの指定に工夫が必要ということは間違いありません。
一方、風景や特定の場所などの背景画像を生成する分にはそれなりに活用できます。
作成例3 カフェ(背景のみ)のパノラマ画像
こちらは「喫茶店」の画像を生成したものになります。人物に関するプロンプトは排除しています。とはいえ、左端のカウンター内に店員さんと思しき人物が小さく描かれています。人物の描写に関するプロンプトが含まれていなくても、人物が描かれていることは普通にあります。
プロンプトは次の通りです。プロンプトは先ほどのものから人に関する表現を除外しただけです。
best quality, wide shot, coffee shop
nsfw, flat color, flat shading,retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res, cropped, signature, watermark, username, artist name, text
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Model: anything-v4.0, Clip skip: 2
画像のサイズは「3840×768」です。つなぎ目のような箇所があることから不自然さはありますが、パッと見た感じではこんなものかなという印象を受けます。
作成例4 星空と草原(背景のみ)のパノラマ画像
こちらは「星空と草原」の画像を生成したものになります。画像のサイズは「3840×768」です。
こちらも人物に関するプロンプトは排除しています。しかし、画像を同じ設定で繰り返し生成していると、人物が描かれてしまうことが時々あります。
プロンプトは次の通りです。以下の2枚の画像も同様です。
best quality, wide shot, starry sky, grass field
nsfw, flat color, flat shading,retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res, cropped, signature, watermark, username, artist name, text
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Model: anything-v4.0, Clip skip: 2
先ほどと同じ「星空と草原」の画像を生成したものですが、こちらはサイズが「3840×1024」になっています。
これくらいであれば風景はまだそれらしく描かれるようです。
ところが「4K(3840×2160)」を指定すると途端におかしな表現になってしまいます。
もしかすると、細かい設定を変更することで対処できるのかもしれません。
「Region Prompt Control」を利用して描写に制限を加える
基本設定
「Tiled Diffusion」内の「有効化(Enable)」と「現在の画像サイズで上書き」にチェックを入れます。また「Method(手法)」が「MultiDiffusion機能(MultiDiffusion)」になっていることを確認します。
しかし、後者の「現在の画像サイズで上書き」は一旦チェックを入れずに、デフォルトのサイズ設定のところで「512×512」「512×768」「768×512」等でしばらく様子をみたほうがよいかもしれません。
「現在の画像サイズで上書き」にチェックを入れる場合は、サイズを最初から大きくしないほうがよいと思います。上の画像では「2560×1440」を指定していますが、大きなサイズよりも小さなサイズからお試しになることを強く推奨いたします。その理由は高解像度化によって画像が大きく崩れてしまいます。
他の要素はとりあえずデフォルトの状態にしておきます。細かい設定は使い方に慣れてから変更してみてください。
「Tiled Diffusion」内の下部に「Region Prompt Control(リージョン・プロンプト・コントロール)」という項目があります。
この機能を使うことでどこに何を描くのかをある程度制御できるようです。しかしながら、こちらも色々使ってからサンプル画像を掲載しようと試行錯誤していたものの、現時点ではうまく使いこなすことができていません。
画像を繰り返して生成していたのですが、見られる画がまったく出てきませんでした。そのため、ここでは簡単な使い方の紹介にとどめます。
間違っている可能性も大いにありますので話半分で聞いて(見て)おいてください。笑 後日、内容を追加するかもしれません。
「Region Prompt Control」をクリックすると詳細設定の画面が表示されます。「Enable Control(コントロールの有効化)」と「Draw full canvas background(キャンバス全体の背景を描画する)」にチェックを入れます。
そして、「Create txt2img canvas(txt2imgキャンバスを作成する)」をクリックしてキャンバスを作成します。
解像度を変更した場合は、「Create txt2img canvas(txt2imgキャンバスを作成する)」を再びクリックして、新しいキャンバスサイズを適用する必要があります。解像度の変更後にキャンバスサイズを変更していないと、キャンバスサイズが前の設定のままになってしまいます。
赤い枠やオレンジの枠は、この後の「Region(領域)」を有効化することによって出現します。この枠を拡大縮小&移動することで特定の要素を描画する領域を指定するという機能になります。
ただし、各領域を広げすぎると「Warning: Region very large! Take care of VRAM usage!(警告:領域が大きすぎます! VRAM の使用方法に注意してください!)」という警告文が表示されます。それでも画像の生成自体はできます。
こちらは先ほどの赤色の枠やオレンジ色の枠が出ている画面の続きです。
「Region 1(領域1)」という項目をクリックすると詳細設定の画面が表示されます。そこで「Enable Region 1(領域1を有効化)」をクリックして「Forground(前景)」を指定します。
これによって、前景となる領域を赤枠内に限定することができます。そして、その上で前景のプロンプトを入力することになります。
同じように「Region 2(領域2)」をクリックして詳細設定の画面を開きます。そこで「Enable Region 2(領域2を有効化)」をクリックして、今度は「background(背景)」を指定します。
これで背景となる領域をオレンジ枠内に限定することができます。そして、こちらでは背景のプロンプトを入力することになります。
なお、今回は前景を最初にしてしましたが、公式では「Region 1」に背景を指定して、「Region 2」に人物1を指定、「Region 3」に人物2を指定というようにしているようです。→ 追加した作例では公式に併せて最初に背景を指定しています。
この「Region(領域)」の指定は1~8まで可能なようです。とりあえず、「Region 1(領域1)」と「Region 2(領域2)」で試してみてください。
このほか、メインのプロンプトは主に品質に関わるものをプロンプトとネガティブプロンプト欄にそれぞれ入力することになります。また、タイルサイズに関するパラメーターは無効化されるとのことです。さらに、キャラクターの全身を綺麗に描くことも難しいとのことです。
人物を単純に左・右または左・中・右に描いてもらいたいということであれば「Latent Couple」という拡張機能の利用が最適です。詳細は以下にまとめがあります。サンプル画像もたくさん掲載しています。
(追加)作成例1&2とその時の各種設定
最初に基本的な設定を行います。プロンプトと設定は以下のとおりです。その他は画像を拡大してご確認ください。
masterpiece, best quality
(worst quality, low quality:1.4)
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Model: anything-v4.0, Clip skip: 2
「Tiled Diffusion」内の「有効化(Enable)」と「現在の画像サイズで上書き」にチェックを入れます。サイズは「1024×768」を指定しています。さらに大きなサイズが必要な場合は、後から「img2img」を利用して拡大することを検討してください。
「Method(手法)」が「MultiDiffusion機能(MultiDiffusion)」になっていることを確認します。
「Region Prompt Control」をクリックして、「Enable Control(コントロールの有効化)」と「Draw full canvas background(キャンバス全体の背景を描画する)」にチェックを入れます。
「Create txt2img canvas(txt2imgキャンバスを作成する)」をクリックしてキャンバスを作成します。赤色やオレンジ色の枠は「Region(領域)」の有効化後に表示されます。
先に説明しておくと、背景を指定した赤枠はキャンバス全面を覆うように拡大しています。そして人物1と人物2を指定した各領域(オレンジ枠と黄色枠)は真ん中にそれなりの大きさに拡大しています。これらの範囲の指定は小さすぎても大きすぎても上手くいきませんでした。良い塩梅に調整するだけでも膨大な時間が奪われてしまいます。
なお、例に挙げている設定が最適解という訳ではなく、解像度や描画内容に応じて適切な設定を模索する必要があるものと思われます。
「Region 1(領域1=赤枠)」は「Background(背景)」を指定しました。プロンプトには「red sofa(赤いソファ)」とだけ入力しました。
「Region 2(領域2=オレンジ枠)」は「Foreground(前景)」を指定しました。
プロンプト欄には「1 girl, silver hair, long hair, light smile, black t shirt, (long skirt:1.3), sit in a sofa」というように一人目の人物に関するプロンプトを入力しています。
「Region 3(領域3=黄色枠)」も「Foreground(前景)」を指定しています。
プロンプト欄には「1 girl, brown hair, short hair, laughing, white t shirt, (blue pants:1.2), sit in a sofa」というように二人目の人物に関するプロンプトを入力しました。
こちらが上述の設定の結果として生成された画像になります。「赤いソファ」という背景、一人目の「銀髪ロング、微笑、黒tシャツ、ロングスカートっぽい下」、二人目の「茶髪ショート、笑い顔、白tシャツ、ズボン」というように入力したプロンプトが指定した範囲に大体表現されています。いかがでしょうか。
青いズボンという指定が白tシャツに引きずられて白っぽくなっていますが、色の薄いジーンズもあるのでよしとしましょう。青色はソファのほうに表現されてしまったようです。
まったく同じ設定で別の画像を生成してみました。今度はどれもある程度うまく表現されているのではないでしょうか。
ちなみに、このような画像が毎回出てくることはありません。5枚~10枚に1枚程度かもしれません。ガチャは必須です。
「Region Prompt Control」の設定は、プロンプト、キャンバスサイズ、枠の範囲を調整するだけでも数日は掛かってしまいました。これ以上は試行錯誤する気力が起きません。皆さんはこの結果を叩き台にして時間を無駄にせず良い結果を出してください。
「あとは任せた」> _:(´ཀ`」 ∠):_
この内容が少しでも役に立ったという方は他のページもついでに見ていただけると幸いです。過疎ブログの応援をよろしくお願いします。
「img2img」から「MultiDiffusion with Tiled VAE」を利用する
基本設定
今度は「img2img」タブを開きます。そこに「txt2img」で予め作成していた画像を読み込みます。ここでは上の「512×768」の画像を例として用います。そして、この画像を生成したときのプロンプトをこちらにもそのまま入力します。
プロンプトと設定は以下のとおりです。
masterpiece, best quality, highly detailed beautiful face and eyes, blue eyes, silver hair, solo, black t shirt, skirt, stylish pose
nsfw, flat color, flat shading,retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res, cropped, signature, watermark, username, artist name, text
(元画像)Steps: 20, Sampler: Euler a, CFG scale: 7, Model: anything-v4.0, Clip skip: 2
(拡大画像)Sampler: DPM++ 2M Karras, Denoising strength: 0.5, upscaler: R-ESRGAN 4x+ Anime6B
まず「サンプリング方法(Sampling method)」を好みのものに変更します。次に「ノイズ除去強度(Denoising strength)」を「0.5~0.4」前後で適当に指定します。この「ノイズ除去強度(Denoising strength)」は公式の説明によると「0.6」以下に設定するようです。
その後、「Tiled Diffusion」と「タイル上のVAE(Tiled VAE)」の有効化と設定を行います。
まず「Tiled Diffusion」内の「有効化(Enable)」と「現在の画像サイズで上書き」にチェックを入れます。「Method(手法)」が「MultiDiffusion機能」になっていることを確認します。
アップスケーラーを好みのものに変更します。ここでは「R-ESRGAN 4x+Anime6B」を選んでいますが特に意味はありません。アップスケーラーを選び忘れて空欄にしていると元画像と同一サイズで似たような画像が生成されてしまいます。
倍率はデフォルトの2倍でOKです。これで「512×768」の画像が「1024×1536」に拡大されます。この倍率は2.4倍くらいでも画像を生成できますが、大きくする(2.5倍前後?にすると)とエラーが発生して失敗します。
次に「タイル上のVAE(Tiled VAE)」内の「有効化(Enable)」にチェックを入れます。「VAEをGPUに移動」はチェックしなくてもOKですが、チェックしても同じように生成されます。
作成例1 銀髪の女性
今回はこちらの画像(512×768)を活かした状態で2倍にアップスケールしてみました。
こちらが画像の生成を繰り返し行った結果の一部です。これらの画像は元の画像の要素を保ったまま2倍の「1024×1536」に拡大されています。一見するとまったく同じように見えるかもしれませんが微妙に異なっています。
画像の描写内容は「CFGスケール」と「ノイズ除去強度」を大きくすることでやや変化が見られます。「CFGスケール」のほうはあまり敏感ではないとのことです。しかし、いずれの設定にしても手指の表現が崩れてしまうことも時々あります。
倍率を2.2倍等に変更することでもう少し大きくすることも可能です。元の画像サイズをもう少し大きいものにするという手もあります。
さらに大きな画像を「img2img」で生成するためには、横長サイズのほうが好ましいので一例として「768×512(横長)」の画像を用意します。それを2倍にした「1536×1024」の画像を参照元に入れて、同じ手順で再びアップスケーリングを行います。そうすることで「1536×1024」の画像を「3072×2048」にすることができます。生成時間の目安は3分27秒です。
ただし、このときにデフォルトの設定のままではメモリのエラーが発生することがあります。「CUDA out of memory」といったエラーが表示されます。そのときは「タイル状のVAE(Tiled VAE)」内の「エンコーダタイルサイズ」を「2048」から「1024」に減らすなどの設定の変更が必要となります。
元画像(512×768)とアップスケール後の画像4枚の計5枚を比較してみます。「1」と番号の付いている画像が元の画像になります。
画像の拡大(高解像度化)は「txt2img」の「高解像度補助(Hires.fix)」を使うことも多いですが、「512×512」「512×768」「768×512」で大量に生成した画像の中から良さそうな画像を厳選して「img2img」から元画像を活かしたままアップケーリングするという方法もあります。
その際に「MultiDiffusion with Tiled VAE」を利用することが可能です。VRAMの少ないグラフィックボードをお使いでもそれなりに大きな画像を生成することができます。
長大なパノラマ画像は「txt2img」内で「Tiled Diffusion」と「タイル上のVAE(Tiled VAE)」を有効化して生成するのが良さそうです。
また使い方を試行錯誤して気づいたことがあれば追記しようと思います。