見出し画像

Merge Block Weightedを使ってモデル合成をする方法

はじめに

この記事はAutomatic1111の拡張機能であるMerge Block Weightedを使ってモデルを合成する方法についての記事です。
ある程度AIイラストにも慣れてきて、
こういうイラスト出したいけど、いいモデルないなぁ~とか、
このモデル、キャラはいいけど背景描写がイマイチなんだよなぁ~というときに使える手法です。
なお、この記事はローカル環境構築の記事になっており、ある程度のグラボの性能が求められます

AIイラストにおけるモデル合成とは

モデル合成(あるいはモデルのマージ)とは、2つのモデルを合体させて各々のモデルの良いとこ取りをするための手法です。


合成したらどうなる?を見てみる

パラメータは以下の通り

parameters

((masterpiece, best quality)),dynamic angle,moon,night,temple in the distance,japanese onsen,((loli), kawaii, cute),1 girl,(10 years old),(full body),((vivid colored kimono)),(light smile),troubled eyebrows,(white hair) , (blue colored inner hair), long hair ,blue eyes ,beautiful detailed eyes,(sitting),steam on legs ,cinematic shadows,from side,
Negative prompt: (low quality, worst quality:1.4), (bad anatomy), (inaccurate limb:1.2),bad composition, inaccurate eyes, extra digit,fewer digits,(extra arms:1.2),(extra legs:1.2),
Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 8, Seed: 212676673, Size: 384x384, Model hash: 08ea2e441a, Denoising strength: 0.6, Hires upscale: 2, Hires upscaler: Latent


ACertainThing

↑のモデルはACertainThingで出力した結果です。キャラクターの顔周りは非常に良いですが、背景の描写や足回りがチョットいまいち…

AbyssOrangeMix2_hard

↑のモデルはAbyssOrangeMix2_hardで出力した結果です。全体的な構図や背景は良いですが、ACertainThingと比べて顔周りがちょっと大人びちゃってますね。

ACertainThingとAbyssOrangeMix2_hardをマージしたモデル

↑のモデルがACertainThingとAbyssOrangeMix2_hardをマージしたモデルで出力した結果です。全体的な構図はAbyssOrangeよりですが、顔周りはACertainThingになってるかと思います。

いざモデル合成へ!

ローカル環境にAutomatic1111WebUIをインストール

既にインストール済みの人はスキップしてOKです。
一番簡単な方法はだだっこぱんださんが公開している「Flat」を使うことです。数回のクリックで環境構築できるのでお勧めです。

拡張機能「Merge Block Weighted」をインストールする

インストールが完了したら起動しましょう。
起動したら「Extensions」タブを開きます。
開いたらさらに「Install from URL」タブを開きます。
「URL for extension's git repository」欄に↓を入力し、Installボタンを押します。

https://github.com/bbc-mc/sdweb-merge-block-weighted-gui

インストールが完了したら「Installed」タブを開き「Apply and restart UI」をクリックします。
するとブラウザがリロードされ、タブに「Merge Block Weighted」が追加されます。もし上手くリロード出来ない場合はWebUIごと再起動すれば大体は上手くいきます。

合成する

いよいよ合成に入ります。
まずは合成したいモデルをmodelsの中に突っ込みます。flatでインストールした場合なら「flat\userData\features\stable-diffusion-webui\repository\models」です。
突っ込んだら「Merge Block Weighted」タブを開き、「MBW」タブを開きます。
次に「Reload checkpoint」をクリックしてモデルをロードします。
次に「ModelA」側にベースとしたいモデル、「ModelB」側に合成したいモデルを指定します。
次にオプションですがOutput Model Nameを入力します。解りやすい名前を付けましょう。
最後にPreset Weightsから適応したい重みづけを選択し、(重みづけの意味合いは後述します)「Run Merge」をクリックします。
少し待てば合成されたモデルが出力されます。場所はmodelsです。

重みづけって何?

厳密に書き出すと機械学習の領域に足を突っ込んでわけが解らなくなる(上に自分も詳しくは理解してない)ので、書きません。
また、あくまで機械学習素人な自分の理解してる範囲の説明なので、誤っている可能性もあります
詳しい検証を知りたい方は拡張機能の作者さんでもあるbbcmcさんの記事に詳しく書かれてます。

閑話休題。

さて改めてMBWのタブを開いて諸々を設定すると、下の方にシークバーがU字型に一杯でてるのが解ると思います。
これがModelAに対して各層にどれだけの比率でModelBを適応するか、を表してます。
で、ここからかなり大雑把な理解ですが、U字の上の方(IN00とかOUT11の方)に行くほどイラスト全体(構図や背景)に強く影響を及ぼします
一方U字の底の方(IN11とかM00とかOUT00の方)に行くほどイラストの詳細(顔や小物など)に強く影響を及ぼします

それを踏まえたうえでACertainThing(ACT)とAbyssOrangeMix2_hard(AOM)の合成を考えてみます。
表情部分はACTを強めに、全体的な構図や背景にはAOMを強めに適応させたい!となった場合、
ベースをACT、合成する対象をAOMに指定し、プリセットから「GRAD_V」を選択すればちょうど意図通りの合成が出来る!となります。
そのように適応して出力した絵が↓になります。
構図や背景はAOMがベースになりつつ、顔周りのパーツはACTに寄っているのが解るかなと思います。

各プリセットがどういう適応になるの?というのは作者さんのGithubのページに図と合わせて記載されているので参考にすると良いかなと思います。

最後に

ここまで長々と説明してきましたが、1個だけ大きな問題があります。
それは記事の最初の方でもちょっと触れましたが、ローカル環境で実施する場合、グラボの性能が低いとそもそも合成できない、という問題です。参考までにGeForceのRTX1080では動きませんでした
これの回避策はGoogleColabで動かす、という方法があるのですが構築が少々面倒なので、この記事の反響が大きかったら別記事として書こうかなと思います。

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