🦊モデルのマージ
https://gyazo.com/60a8e4bd6e8b13d321cab6372e363baa
ぶどうジュースとオレンジジュースを真剣な眼差しでマージする我らの上司
新しいチェックポイントモデルを作る方法は主に3つあります
0から作る、既存のモデルをファインチューニングする、そして今回行うマージです やっていることは基本的にシンプルで、本当に上のイラストのように複数のモデルをごちゃごちゃに混ぜ合わせます
ただ混ぜる
https://gyazo.com/9b848bfcc78f0e933fe9b806f6986290
ComfyUIでは、その場でモデルをマージして、マージしたモデルをそのまま使って画像生成することができます
🟨好きなチェックポイントを2つ用意
0.5で1:1です
https://gyazo.com/89e876767a48d9acd6c6bb684e6b2495
ただ混ぜただけですが、リアル系とアニメ系を半分ずつ混ぜるとちゃんと2.5次元っぽくなるのが面白いところです
今回はただ2つのモデルをマージしましたが、マージしたモデルに対して更に新しいモデルをマージして、さらに…と、無限に遊べます(沼とも言う)
🚨注意点
モデルのサイズは固定なので、例えばモデル1とモデル2を1:1でマージすると、モデル1、2それぞれ性能の半分を捨てることになります
ほしい成分だけ混ぜる
ドリンクバーでジュースを混ぜたことがある皆さまならご存知だと思いますが、ただ適当にジュースを混ぜても出来上がるのは大抵まずい汁です
オレンジジュースのビタミンCだけぶどうジュースに添加して、ハイパー健康に良いぶどうジュースを作れないものでしょうか?
結論からいえば狙っては出来ないんですが、多くの人が色々実験をした結果なんだかいけそうな手法を見つけました
私もよく理解していないので扱ってきませんでしたが、Stable Diffusionのデノイズを担当する部分はU-Netといいます https://gyazo.com/46c1a1009b61f7c5b7faa5a48e2111b3
見ての通りUの字に階段を下って登ります
そして画像にはそれぞれの階段にIN 0 や MID、OUT11と名前がついていますね
先ほど行ったマージは、このU-Netを一つとみなして均一に混ぜましたが、階層マージではこの階段ひとつひとつに対して細かく設定していきます
しかし、これに意味があるんでしょうか?
意味はあるっぽいが、なんでうまくいくのかは分かっていない
U-Netの階層毎にどんな効果があるのかちゃんと調べた研究はなかったはずですが、P+のような研究で示されているとおり、例えばU-Netの浅いレイヤーでは"色"のトークンが強い影響を及ぼし、深いレイヤーでは"形"を表すトークンが影響力を持っているらしいです と、いうことは深いレイヤーにあるブロックだけマージすれば、ベースモデルの絵柄には影響を与えずに新しいオブジェクトが描けるようになるんじゃない?というのが階層マージの考え方です
https://gyazo.com/a9eff3e04cd76a2aa800eb67c89de549
OUT層だけマージしてみましたが、効果があるのかな?これは…
Stable Diffusion web UIでは23層それぞれを設定することができますが、ComfyUIでそれをやるカスタムノードは今のところ知らないです
LoRAのマージ
LoRAはちっちゃいチェックポイントみたいなものなので同じようにマージできます
というより、LoRAを複数個適用しているときの動作は、LoRAをマージしているときと同じです(多分おそらくきっと)
我々は普段からLoRAのマージをしていたわけですね
他のマージ手法
ただの混ぜ合わせや、階層マージなんて職人技じゃなくて、もっといけてる混ぜ方を探そうということで、TIESやDAREといったマージ手法に関する研究はいくつかあります ComfyUIにも実装されているので紹介しますが、使っている人を見たことありませんね…