見出し画像

キミの手で blue_pencil-v11 を作ろう!(Stable Diffusion マージモデル作成の実例)

※ はじめにお読みください

この記事には以下が含まれています。話半分に聞いてください
・著者の妄想
・オカルト
・根拠のない発言
・祈り、願望


この記事では2023年7月を最後に更新が途絶えている Stable Diffusion v1系のモデル blue_pencil シリーズ。その最終版である blue_pencil-v10 に含まれているモデルの紹介、およびそれらを用いたマージの手順を解説します

これを公開することで自分以外も blue_pencil に類似したモデルを作ることが可能となり、新しいヤツを作れという要望を避けられるのではないかと考えました

マージを作業をするための準備

マージには AUTOMATIC1111/stable-diffusion-webui の拡張機能
hako-mikan/sd-webui-supermerger を使います

いつもお世話になっております

blue_pencil-v10 に含まれているモデルたち

まず以下のものをすべてダウンロードします

※ 画像は全てリンク先にあるものです

Korakoe / OpenNiji-V2

Nijijourney の画像で学習させたモデル

PromptHero / Openjourney-v4

Midjourney v4 の画像で学習させたモデル

NoCrypt / SomethingV2_1

完成度高い。すき

newlifezfztty761 / ColorMagination v1.0

色がかわいい

Ikena / Yuzu v1.0

センシティブモデルのプロ Ikena 氏のちょいリアル寄りな一品

NeatNessNeatNess Fluffy Fur Mix nebula

ケモなモデル かわいいね

Lykon / NeverEnding Dream (NED) v1.22

DreamShaper で有名な Lykon 氏のちょっとアニメ寄りモデル

Tea endlessMixRenatus v1.1

やっぱ Tea よ

ashen-sensored / mzpikas_tmnd_enhanced
高解像度で学習させたモデル。一時期話題になりましたね

(画像なし)

rqdwdw / plagion v1.0

Counterfeit シリーズの作者の別のモデル。あんまり知られてない気がする
何が特徴なのかはわからない

Luna / Aurora ONE

幅広いものが生成できる器用なモデル。推してます

rqdwdw / Counterfeit-V3.0

説明不要

Lykon / AnyLoRA

LoRA のトレーニングに最適なモデルとされています

さらに LoRA もいくつかマージさせています
2vXpSwA7 / agomaruhohoaka, faceagebrighter-eyesanDka1
GOOKLEcolored eyelashes v1.0
chosenFantasy World 幻想世界 LORA v1.0
fitCorderFuturisticScape (Lora) 未来主义景观 v3
ashen-sensoredSilicon-landscape-isolation
ashen-sensoredpikas-lighting-isolation
Terry9993 Niji Default style v2.0
Terry9993Niji Cute style v1.0

マージの手順

実際にマージをして blue_pencil-v10 を再現してみましょう
supermerger の使い方については説明いたしません!

(1) OpenNiji-V2 + Openjourney-v4

まず、ベースとなるモデルを作ります
OpenNiji-V2 に Openjourney-v4 と SD1.5 との差を足します

A: OpenNiji-V2
B: Openjourney-v4
C: v1-5-pruned
Merge Mode: Add difference (smoothAdd)
Alpha: 1
use old calc method, fp16, prune, Reset CLIP ids

Openjourney-v4 はSD1.5に対し学習を行ったモデルです(そう書いてある)
なので上記の設定にすることで OpenNiji-V2 に Openjourney-v4 の学習内容がそのまま放り込まれるようなイメージになります
このとき smoothAdd にするとなんかいい感じに足されるらしい

実際そうなのかは知りません
そうなってくれるように祈りましょう

これ参考画像用のプロンプトが悪いね

(2) SomethingV2_1 + [1]

SomethingV2_1 に (1) を足します

A: SomethingV2_1
B: (1)
C: v1-5-pruned
Merge Mode: Add difference (smoothAdd)
Alpha: 1
use old calc method, fp16, prune, Reset CLIP ids

OpenNiji-V2はSD1.5に対し学習を行ったモデル
…かどうかはわかりませんが、細かいことは気にしないことにします

こちらもイメージ的には SomethingV2_1 に OpenNiji-V2 と Openjourney-v4の学習内容が足される感じですね

なぜ Weight sum ではなく Add Difference にするのか
それは Weight sum にすると情報量が減る気がして、もったいないような気持ちになるからです

この先もお気持ちによる工程が続くので覚悟しておいてください

SomethingV2_1 の時点で十分じゃない?

(3) [2] + ColorMagination v1.0

次に (2) と ColorMagination v1.0 を 60%:40% の比率で混ぜます

A: (2)
B: ColorMagination v1.0
Merge Mode: Weight sum (cosineA)
Alpha: 0.4
use old calc method, fp16, prune, Reset CLIP ids

ここまで足してきた (2) と ColorMagination v1.0 を混ぜて雰囲気をかわいい感じに寄せておこうと思ったのかもしれません

Weight sum にする場合に cosineA / cosineB というオプションがあります、それぞれA寄りにするか、B寄りにするかみたいなノリで考えてください

今回の場合はベースは (2) で雰囲気だけ ColorMagination v1.0 に寄せたかったので cosineA にしています

ちょっとかわいい系に寄った?

(4) Yuzu v1.0 + NeatNess Fluffy Fur Mix nebula

ここで、ベースとは方向性が違うモデルも別に作ります
もう覚えてないけど多分ちょっとセンシティブな感じにしたかったのかもしれない

Yuzu v1.0 に NeatNess Fluffy Fur Mix nebula と SD1.5 の差を足します

A: Yuzu v1.0
B: NeatNess Fluffy Fur Mix nebula
C: v1-5-pruned
Merge Mode: Add difference (smoothAdd)
Alpha: 1
use old calc method, fp16, prune, Reset CLIP ids

NeatNess Fluffy Fur Mix nebula は SD1.5 とかけ離れてるモデルなのは間違いないので差を足したところで意味が分からなくなるだけだと思われます

が、細かいことは気にしないでください

よくわからん変化してる

(5) [4] + NeverEnding Dream (NED) v1.22

さらに (4) にNeverEnding Dream (NED) v1.22 を 75%:25% の比率で混ぜます

A: (4)
B: NeverEnding Dream (NED) v1.22
Merge Mode: Weight sum (cosineA)
Alpha: 0.25
use old calc method, fp16, prune, Reset CLIP ids

古来からの言い伝えによると、センシティブとリアル寄りのものを混ぜるといい感じになるとされているためです

立体的になった

(6) [3] + [5]

ベースとなるモデル (3) とセンシティブ気味のモデル (5) を 50%:50% の比率で混ぜます

A: (3)
B: (5)
Merge Mode: Weight sum (cosineA)
Alpha: 0.5
use old calc method, fp16, prune, Reset CLIP ids

比率的には 1:1 ですが cosineA にしてあるのでベースモデルの方にかなり寄ります

丁度いい感じになった気がしません?

(7) endlessMixRenatus v1.1 + mzpikas_tmnd_enhanced

そしてここでまた別のモデルを作ります
理由は忘れました。なんか背景とか強くしたかったのかも

endlessMixRenatus v1.1 に mzpikas_tmnd_enhanced と SD1.5 の差を足します

A: endlessMixRenatus v1.1
B: mzpikas_tmnd_enhanced
C: v1-5-pruned
Merge Mode: Add difference (smoothAdd)
Alpha: 1
use old calc method, fp16, prune, Reset CLIP ids

これも例に漏れず謎のマージです
どうしても両モデルの特徴を余すことなく混ぜたかったんでしょうね

その代償として、いわゆる過学習気味な状態となってしまいました
が、まあどうせこの後で薄まるので気にしなくて大丈夫です

無理なマージをするとこういう謎の影になりがち

(8) [6] + [7]

ベースのモデル (6) と直前に作ったモデル (7) を 75%:25% の比率で混ぜます

A: (6)
B: (7)
Merge Mode: Weight sum (cosineA)
Alpha: 0.25
use old calc method, fp16, prune, Reset CLIP ids

(7) が若干過学習気味なのもあって割合を気持ち低めにしてマージしています

まあなんかいい感じなんじゃない?知らんけど

背景のくっきり度が上がった!やったね!

(9) [8] + plagion v1.0

(8) と plagion v1.0 を 60%:40% の比率で混ぜます

A: (6)
B: (7)
Merge Mode: Weight sum (cosineA)
Alpha: 0.4
use old calc method, fp16, prune, Reset CLIP ids

plagion v1.0 は他のモデルと系統が違う気がするので、この遺伝子も取り込みたかったんだと思います

今さらですがこのサンプル。軽蔑気味の表情

(10) Aurora ONE + Counterfeit-V3.0

マージも終盤に差し掛かってきましたが、ここでまた別のモデルを作ります
調整用のモデルみたいな感じですね

個人的に推している Aurora ONE とド定番 Counterfeit-V3.0 を混ぜます

A: (6)
B: (7)
Merge Mode: Weight sum (cosineA)
Alpha: 0.5
use old calc method, fp16, prune, Reset CLIP ids

両モデルともかなり安定したモデルですが、若干クセつよでもあった気がするので混ぜて薄めておく感じ

なのか?

ぶっちゃけこいつらがメイン成分

(11) [9] + [10]

(9) と調整用モデル (10) を 70%:30% の比率で混ぜます

A: (9)
B: (10)
Merge Mode: Weight sum (cosineA)
Alpha: 0.3
use old calc method, fp16, prune, Reset CLIP ids

この時点でほぼ完成みたいなもんですね

ここだけは真面目にいろんな比率を試してちょうどいい感じの値を探した気がします

ほぼ 10≒11では?
ここまでの過程。いらなかった?

(12) [11] + LoRAたち

最終調整として適当にLoRAをマージして自分の好みに寄せます
モデルたちのところにも書いたように、以下の LoRA たちをマージします

agomaruhohoakafaceagebrighter-eyesanDka1colored eyelashes v1.0Fantasy World 幻想世界 LORA v1.0FuturisticScape (Lora) 未来主义景观 v3Silicon-landscape-isolationpikas-lighting-isolationNiji Default style v2.0Niji Cute style v1.0

ただし、直接 (11) にマージするのではなくちょっとひと手間を加えます

AnyLoRA に対して以下の LoRA たちを Merge to Checkpoint で足します
値は完全に自分の好みの絵になるように決めました

agomaru:1.0,faceage:0.5,brighter-eye:0.15,colored_eyelashes:0.3,fansty world_20230601105102:0.05,FuturisticScape-V3:0.3,Silicon-landscape-isolation:0.4,nijipretty_20230624235607:0.15,Nijicute:0.05,sanDka1:-0.15,pikas-lighting-isolation:0.35,hohoaka:-1.5

☝で作成されたモデルと (11) を trainDifference という方式でマージします

A: (11)
B: (LoRAマージされたAnyLoRA)
C: AnyLoRA
Merge Mode: Add difference (trainDifference)
Alpha: 1
use old calc method, fp16, prune, Reset CLIP ids

trainDifference とはなんかまるで学習を行ったかのような変化が得られるマージ方法らしいです(適当)

普通にLoRAを足すだけでもいい気がしますが、こっちのほうがひと手間加わっていてすごそうな気がしてきませんか?

良い感じに調整できたな!

完成!

以上が、blue_pencil-v10 の製造工程(の再現)でした

実際の blue_pencil-v10 と比較してみると微妙に差はあるけどほぼ同じ!

間違い探しかな?

blue_pencil シリーズは大体毎回こういう工程を踏まえて作成されています
v6 ~ v9 のレシピは Hugging Face に書いてあるのでそちらを見てね!

マージするときのコツ

ここまで読んできたなら、なんとなく大事なことがわかってきたのではないでしょうか?

そう。一番大事なのは気持ちなんです

途中のマージ比率を見てください。なんと全部キリがいいですね
それはなぜか、キリが良い方が気持ちがいいからです

比率とかは基本的に雰囲気で決めています
そうやって雰囲気で決めた値で適当にマージして、結果を見て 0.05 か 0.1 ずつぐらいずらしてマージして…を何回かぐらい繰り返して「これでよくね?」ぐらいのが見つかったら次に進みます
それはなぜか、こだわりだすとキリがないし時間がかかって大変だからです

そこそこ回数を重ねるマージするときは最後の方だけ真面目にやればだいたい丸く収まります
途中は適当でも不思議といい感じになります

階層マージは難しそう?しなくても別に大丈夫です

どうせ完璧だと思っても3日後にはなんか違くね?ってなります
有名マージモデルを出してる人たちを見てください。無限に作り直してます

まとめ

いかがだったでしょうか?
想像以上に適当な blue_pencil-v10 の製造工程でしたね

このレシピを改変してキミだけの blue_pencil-v11 を作ってくれよな!
自由に後継を名乗ってくれてもいいよ!

おまけ

blue_pencil-realistic-v1 のマージ手順

blue_pencil-v10 をそのままリアル系にできないかと思って作ったやつです

無理やりだからちょっとこわい

こちらには blue_pencil-v10 のほかに以下のモデルが含まれています
sazyou-roukaku / BracingEvoMix v1
と LoRAたち
jiojioawfa / Asian girls face v1.0
LEOSAMLEOSAM's FilmGirl VELVIA 2.0
eznorb / Retouch - Majic v1.0

こちらは blue_pencil-v10 から階層マージして LoRA を適用しただけです

A: blue_pencil-v10
B: BracingEvoMix v1
Merge Mode: Weight sum (cosineA)
MBW Alpha: 0,1,0.1,0.15,0.25,0.25,0.5,0.75,0.6,0.5,0.5,0.75,0.7,0,0.94,0.85,0.84,0.625,0.315,0.41,0.51,0.45,0.325,0.15,0.2,0
fp16, prune, Reset CLIP ids

この階層マージでできたものにこちらはそのまま LoRA を Merge to Checkpoint します

asianGirlsFace_v1:0.25:A,FilmVelvia2:0.2,RetouchMajic:0.1:B

# ↓ LoRA階層マージのプリセット
# A:0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1
# B:1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0

これだけ!

たったの2工程ですが、構図変えずにリアル系に寄せるっていうのがムズすぎるのと中途半端にリアルにすると顔こわすぎる問題が難問で100倍大変でした

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