モデルマージ基礎A
[注意事項]
そもそもAIイラストが何かわからない方はこちらのノートを御覧ください。
このノートではStable Diffusion WebUIを構築している前提で進めていきます。
[動作環境]
今回動作検証を行う環境は以下の通りです。
Windows11
GPU: RTX4070Ti(VRAM: 12GB)
python: 3.10.9
torch: 2.0.1+cu118
stable-diffusion-webui version: v1.7.0
sd-webui-supermerger version: e4b59de7
[想定読者]
WebUI(ローカル)を自分で構築可能。
モデルマージをやったことがない。
モデルを公開するリスクや危険性を理解している。
生成AIに対して知識や理解がある。
◇宣伝
モデルマージの本をBoothにて頒布しています。
このノートの内容から階層マージ、モデルライセンスまで詰まっています。
これからマージを始めるかたにおすすめの書籍です。
このノートも上記書籍の内容に沿って書いています。
◆1. モデルマージとは何か
まずモデルマージとは、「モデルを混ぜる」という行為を指します。
ここで言うモデルとは、画像生成AIの学習モデルのことです。
例えば、「絵柄が好みだけど背景が微妙なモデル」があるとします。
そこに「背景は綺麗だけど他は微妙」なモデルを混ぜると、
「背景も絵柄も綺麗なモデル」ができます。
このように学習モデルを混ぜて新しいモデルを作り出す行為をモデルマージと言います。
食べ物で例えるとこんな感じです。
基本的な考え方は理解していただけたかと思います。
◆2. モデルマージの手法
モデルマージにはいくつかの方法があります。
加重平均
差を加える
階層マージ
■加重平均
加重平均とは、最も一般的なモデルマージの方法です。
$${A*(1-M)+B*M}$$
A: ベースモデル
B: 混ぜるモデル
M: Multiplier(M)。数値が大きくなるほどBに寄ります。
M=0 : [A=100%]
M=0.3 : [A:30%,B=70%]
M=1 : [B=100%]
Multiplierの数値を変更してどれだけモデルAの要素を入れるかで決めます。
簡単に言うと単に混ぜてるだけです。
■差を加える
差を加えるとは、一部の要素を引いて加えるマージです。
$${A+(B-C)*M}$$
A: ベースモデル
B: ベースモデル2
C: Bからなくしたい要素が入ったモデル
M: Multiplier(M)。数値が大きくなるほど(B-C)に寄ります。
BからCの要素を引いてAに混ぜ込むマージ方法です。
NSFW要素をなくしたり逆に入れたりぶっこ抜いたりするときに使います。
■階層マージ
U-Netの階層ごとにマージする方法です。
このように各階層ごとに要素を割り振っていきます。
かなりややこしいですが、特定の要素や部分をマージすることができます。
◆3. マージの利点と欠点
モデルマージには利点と欠点があります。
■利点
単体のモデルでは出しにくい絵柄が出せる。
モデルを自分の好みな絵柄で作ることができる。
オリジナリティが簡単に出しやすい。
■欠点
ライセンスの理解が必須。
モデルを公開する場合はリスクを負う。
試行錯誤が必要。
LoRA等の学習も併用が必要。
利点としてはやはり「個性が簡単に出せる」という点。
モデルを混ぜることによって簡単に絵柄を変えることができます。
LoRAと違い、絵柄がブレない(固定される)ので非常に便利です。
欠点としては、モデルを公開する際にリスクを負うという点。
商用不可モデルが稀にあるので注意。
Civitai等のライセンスも無茶苦茶なので、見極める力も必要です。
◆4. マージモデルの事案例
最後に目立った事例について紹介。
個人的に一番大きかったのが『basil mixライセンス変更』。
簡単に言えば「商用利用不可にしました」ってだけなんですが、
使用モデルが多かっただけにマージ界隈は大混乱。
自分も公開していたモデルに入っていたので、非公開にするしかないかなといった感じで当時は大変でしたね…
ライセンス変更前にマージされたものについては問題ないですが、現在も念のため非公開にしています。
多分今も混ざってるモデルはあるんだろうな…
◆5. マージの沼へ
マージは所謂沼の入り口です。
色々コツはありますが、モデルによって変わってくるので当てになりません。
とりあえずやってみて慣れましょう!!