![見出し画像](https://assets.st-note.com/production/uploads/images/105251214/rectangle_large_type_2_e2ae4bdad4c18924187011ddba83f3e1.png?width=1200)
SuperMergerの新機能:Calcutation Modeを理解してみる
SuperMergerアップデートしましたか?
2023.04.22、SuperMergerをアップデートした所、新機能が追加されてました。
その名も【Calcutation Mode】です。
![](https://assets.st-note.com/img/1683732212295-iNLuHolDKb.jpg?width=1200)
この各モードを自分用のメモがてら解説書いていきます。
さて、ここで大事なことを言います。
解説といいましたが、合っているかわかりません。
頭のいい人、誰か解説記事書いて、お願いします、何でもはしませんけど出来ることはします!😫
まずはアップデート情報です。
内容はこれ見て下さい。
そもそも Calcutation Mode ってなに?
マージする時の計算方法を変更するモードです。
基本的に以下記事を翻訳して自分が咀嚼したことをなるべく分かりやすく書いていきます。
ですが間違っているかもしれないので、自分自身でも読んで咀嚼してみてください。
各モードの解説
モード:normal
今までのSuperMergerと同じ計算方法で混ぜますっていうモードです。
今まで通りならこれでいいです。
モード:cosineA/cosineB
使えるMerge ModeはWeight sumのみ。
簡潔に言うと、通常だとマージする時に損失が発生するけどそれをなるべく無くす計算方法でやりますって感じです。
もうちょっと書くと、モデルAの構造とBの構造に類似性が見られた場合かつ同一ではないといった場合、より良い結果の方を出すって感じだと認識してます。
また、マージするモデルが多い場合、過剰学習により類似性が多量に見られる場合、ある程度捨ててしまう傾向にあるんじゃないかと思っています。
これをある程度防いでくれる手法がcosineA/Bじゃないかなと思ってます。
cosineAはmodelA寄り
cosineBはmodelB寄り
にするということです。
cosineモードだけ試したのでご確認ください。
以下はendlessMixV9制作中の途中結果です。
3回ほどマージをした結果です。
プロンプト、設定、全部固定でこれだけ変わります。
モード:normal*3
![](https://assets.st-note.com/img/1683732461268-VOCYtDq5nB.jpg?width=1200)
モード:cosineA*3
![](https://assets.st-note.com/img/1683732472750-eFvn1F04w3.jpg?width=1200)
全然違うんじゃが! これは深い沼の予感!!!!😇
モード:smoothAdd
使えるMerge ModeはAdd differenceのみ。
Add differenceというのは差分を追加するモードですね。
僕は使ったことないモードです。
どうやらこれは中央値フィルタとガウシアンフィルタの利点を組み合わせて、モデルの差をよりスムーズに追加する方法らしいです。
中央値フィルターについて
通常?は平均値を使うが、中央値を使うことで効果的にノイズを除去する機能。
らしいです。
話を元に戻して、Add differenceでモデルを混ぜていく場合、ネガティブな「焼け」効果が出てしまうらしいです。
これを回避するための計算方法がsmoothAddらしいです。
モード:tensor
使えるMerge ModeはWeight sumのみ。
エレメンタルマージを超えるエレメンタルマージらしいです。
そもそもエレメンタルマージ自体使ったことないんじゃが🤔……。
ちょっと意味不明すぎるのでGPT4君に和訳してもらいました。
ご存知のように、U-NETにおいて、各エレメンタルテンソルは画像の特徴を決定し、通常のマージでは、各テンソルの値が比率で乗算され、以下に示すように合計されます(通常)。テンソル法では、下図のように比率でテンソルを分割して結合します(テンソル)。
![](https://assets.st-note.com/img/1683732643488-uvYWVlqQmJ.jpg?width=1200)
上の画像はreadmeから引っ張ってきた画像になるんですけど、図で見てわかる通りnormalはマージする比率に応じて半分半分みたいになってますよね。
tensorの場合特定の層~がBのモデルの値を使う形になっているのが分かります。
3回目のマージだけtensorにして出してみましょうか。
以下は比較です……と思って出そうとしたのですがエラーが出たので無理でした。
23.04.22 14時追記
このモード、XYでできないかな?とおもったらできました。
![](https://assets.st-note.com/img/1683732672723-q6bbs5eV6z.jpg?width=1200)
終わり
よくわからん!😫
cosineA/cosineBだけはなんとなく理解できたから、ちょっと色々試してみます。
誰か頭のいい人、赤ちゃんでも分かるように記事化してください!(人任せ)
よろしければサポートしていただけないでしょうか。 サポートいただきましたら、より私が活発に動き、いただいた支援はAI生成の活動費になります🥰