こんばんは、スタジオ真榊です。今回は「自分画風LoRA」や「CoppyLoRA」の作り方を踏まえて、普段使いのモデル(Checkpoint)に手持ちのLoRAをマージし、自分好みの画風で生成できるオリジナルSDXLモデルを作る方法について解説していきます。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 【2024/08/18アップデート】「比率の整ったデータセットを用意するプロンプト」の項目を刷新しました。寝そべった画像や複数人の画像など、より幅広いバリエーションのデータセ...

こんばんは、スタジオ真榊です。こちらは、AIアプリ開発者のとりにく(@tori29umai)さんがFANBOXで配布されているかんたんLoRA作成アプリ「CoppyLora webUI」の紹介・検証記事です。AI絵を自分のタッチに近づけたり、AI-Assistantでオート線画化・オート着色する際により自分らしい絵に仕上げてもらったりと、初心者で...
具体的には「Supermerger」という拡張機能を使って、自分画風LoRAのほか、描き込みの量や線の太さ、タッチなどを指定する各種LoRAを普段使いのモデルに融合(マージ)させ、生成のたびにLoRAを組み合わせなくても、いつでも狙い通りのタッチや「マスピ顔」で生成できるモデルを作ることを目指します。対応するLoRAがあれば、線の太さや描き込み量、目の大きさなども調整できますので、理想の絵作りを探す沼に入ってみましょう。
1.Supermergerとは
2.Supermergerの使い方
3.各パラメータの意味
1. same to Strength
2. overwrite
3. metadata
4. save precision (保存精度)
5. calc precision (計算精度)
6. device
7. Model A と Model B
8. alpha
9. beta
10.gamma
11.remake dimension
4.マージ比率(重み)を決めよう
5.AnimagineXLにLoRAをマージしてみよう
ー同時にマージした場合と、順番にマージした場合で結果は変わるか
6.完成したオリジナルモデルを検証しよう
7.CoppyLoRAで微調整も可能
「SuperMerger」はStableDiffusionWebUIの拡張機能の1つで、CheckpointやLoRAといったAIモデル同士の「掛け合わせ(マージ)」を効率的に行うためのツールです。マージしたcheckpointをローカル保存する前に、このマージ比率だとどんな画像が生成できるかXYZ plotを使ってテストできるため、ストレージ容量を節約できるのが特徴です。
よく知られたcheckpoint同士のマージだけでなく、checkpointにLoRAをマージすることも可能。例えばAnimagineXL3.1に自分画風LoRAと水彩画風LoRAとオリジナルキャラクターLoRAをの3つをマージすれば、「1girl,zaraki_mina」と入れるだけで自分の好みの画風で水彩タッチのミナちゃんを描いてもらうことができるわけです。
他にもさまざまな便利機能があり、例えば手元のLoRA同士をマージしたり、二つのLoRAの差分を抽出して新たなLoRAを作ったりすることができます。
まずはSDwebUIの「拡張機能」の一覧からSupermergerを探すか、「URLからインストール」欄に「https://github.com/hako-mikan/sd-webui-supermerger」を入力してインストールしましょう。UIを再起動して、画面上部にタブができていれば成功です。
【Forgeユーザー注意】SDwebUI Forgeの一部のバージョン(例えばf0.0.17v1.8.0rc-previousなど)ではSupermergerがうまく動作しない問題が生じています。私の環境では、CheckpointにLoRAをマージしようとしてもエラーが起こってしまう不具合が生じます。2024年8月以降の最新版(Forge v2)、もしくはフォーク版のReForgeでは問題なく動作するようですので、古いForgeを温存している方はご注意ください。

こんにちは、スタジオ真榊です。今夜は人気webUI「Forge」の後継となるべくPanchovix氏によって開発されたwebUI、「reForge」に関する検証記事をお届けします。 2024年6月以降、Illyasviel氏によるForgeの開発方針が「A1111の快速版」という当初の位置づけから変化しつつあることを踏まえ、「いつものForge」の環境を維...
さて、SuperMergerの画面上部から「LoRA」画面を開くと、次の4つのボタン=機能があります。(ボタンなどの色は設定したテーマで変わります、悪しからず)
①Merge to Checkpoint:checkpointAに手持ちのLoRAをマージします。複数のLoRAを一つのモデルに一気にマージすることもできます。
②Make LoRA (alpha*A - beta*B):二つのCheckpointの「差分」を抽出して、その差分の効果を及ぼすLoRAを作ることができます。
③Merge LoRAs:LoRA同士を単純にマージします。一つのLoRAを適用するだけでよくなるので便利ですが、生成のたびにそれぞれの重みを自由に変えて適用できなくなるので、きちんとした製作意図がない場合は無闇に混ぜないほうが良いでしょう。(例:水彩画風LoRA+FlatLoRAで"フラット水彩LoRA"にできますが、塗りの水彩度合い・フラット度合いを個別に調整できなくなります)
④Extract from two LoRAs:同じベースモデルで追加学習された2つのLoRAから共通する特徴(もしくは差分)を抽出して、両方のLoRAの良い部分を兼ね備えたモデルを作るための機能とのこと。【注意】記事執筆時点では、現行バージョンではSDXL用LoRAで使用してもエラーが出るようで、自環境で検証できていません。
4つのボタンの他にも、さまざまなパラメータがあります。基本的にデフォルト値のままでも構いませんが、簡単に各パラメータの意味をまとめておきます。
1.same to Strength
LoRAをマージする際に、マージ時の比率が生成時に指定した強度(Strength)と一致するように調整する機能です。ごく簡単に言えば、モデルAに対してあるLoRAを「-0.5」で適用して1girlを生成したとき(PP:1girl )と、そのモデルにLoRAを「-0.5」でマージしてPP:1girlのみで生成したときに、同じ画像が生成されるようにするためのものです。
スクリプトの計算式上、通常生成でLoRAを適用した時とマージした時で同じ生成結果にならない仕様だったのを是正するために作られたとのことですが、自環境での検証上ではそうした不具合に遭遇しませんでした(same to Strengthをオンにして作ったモデルでもオフのモデルでも問題なく同じ画像が生成できた)ので、そうした現象が起きたときに使用すればよいかと考えています。
2.overwrite
マージしたモデルを既存のモデルファイルに上書き保存するかどうかを指定する機能。この機能をオンにすると、既にあるモデルと同じファイル名を持つモデルを出力したときに、新しいマージ結果で上書きします。従来のAnimagineにマージ後の新Animagineが上書きされてしまっては困る場合、チェックを外しましょう。(モデル名を別にしていれば上書きされません)
チェックが外れていれば、同じファイル名で出力しようとしても「Output file (G:\Data\Packages\Stable Diffusion WebUI\models\Stable-diffusion\XXXX.fp16.safetensors) existed and was not saved」と表示され、上書きされません。(モデルも保存されません)
3.metadata
LoRAを出力する際、メタデータ(モデルに関連する情報)をどのように扱うかを指定するオプションです。作ったLoRAを配布しない場合はあまり気にしなくてOK。checkpointにLoRAをマージしたときのメタデータは保存されない模様?
・create new:新しいメタデータを作成します。LoRAやモデルに必要最低限の情報を持つ新しいメタデータが作成されます。dim、アルファ値、ベースモデルのバージョン、ファイル名、ネットワークタイプといった基本情報が記載されます。
・create new without output_name:「create new」と似ていますが、出力ファイル名に関する情報を含まない新しいメタデータを作成します。
・merge:既存の複数のLoRAのマージする際に、メタデータも統合します。複数のLoRAを統合する際、それぞれのメタデータがまとめられ、一つのメタデータとして保存されます。
・save all:LoRAやモデルに関連するすべての情報が保存されます。
・use first lora:最初に選択したLoRAのメタデータをそのままコピーします。複数のLoRAを扱う場合でも、メタデータは最初のLoRAに基づいて作成されます。
4. save precision (保存精度)
LoRAの保存時に使用する精度(データ形式)を指定します。精度によってモデルのサイズと計算速度が変化し、多少生成結果も変わります。
①float: 32-bit浮動小数点形式。最も高い精度で保存されますが、ファイルサイズが大きくなります。
②fp16: デフォルトの16-bit浮動小数点形式。floatよりもデータサイズが小さく、計算効率が高くなりますが、精度が若干低下します。
③bf16:「bfloat16」という形式で、fp16よりも広い範囲の数値を表現できます。
5. calc precision (計算精度)
こちらはモデルを計算する際の精度を指定します。よく分からなければデフォルトのfloatでOKと思います。
6. device (使用デバイス)
計算を実行するデバイスを選択します。「cuda」を選びましょう。
・cuda: GPUを使用して計算を行います。高速で大規模な計算に適しています。
・cpu: CPUを使用して計算を行います。GPUがない場合や、GPUのメモリが不足する場合に使用します。
7. Model A と Model B
ベースとなるCheckpointを一つ、もしくは二つ選択する欄です。AnimagineXLにLoRAを混ぜたい場合はModel AにAnimagineを選び、ModelBは空欄にします。
8. alpha (アルファ)
これからマージする2つのモデル間でどちらを優先するかを調整します。デフォルトの0.5の場合は、Model AとModel Bが均等に反映されます。値が0に近いほどModel Aが優先され、1に近いほどModel Bが優先されます。
9. beta (ベータ)
特徴の類似性や非類似性を制御します。0に近いと、Model A・Bの共通する特徴を抽出します。1に近いと、Model Bと似ていない特徴(=差分)を抽出します。
10. gamma (smooth, ガンマ)
特徴の類似性・非類似性をどの程度厳密に判定するかを制御します。1がデフォルトで、類似性と非類似性のバランスが取れています。
11. remake dimension (ネットワーク次元数の再設定)
LoRA学習の際に重要な「ネットワーク次元数(dim)」を再設定することができます。64や128といった高次元の方がより多くの情報を保持できますが、ファイルサイズが大きくなり、処理が重くなる傾向にあります。LoRAが適用されるチェックポイントに対して、次元の再設定を行わない場合は「no」、 次元を自動的に最適化したい場合は「auto」を設定します。異なる次元のLoRAを統合する際や、最適な次元が分からない場合は基本的に「auto」でよいはずです。
(※LoRA群の上にある「Calculate LoRA dimensions」ボタンを押すと、少し時間が掛かりますが、手持ちのLoRAのdimをすべて表示してくれます)
パラメータについてはここまで。触ってみないとそれぞれの意味がよく分かりませんので、さっそく「Merge to Checkpoint」機能を使って、自分の好みの画風にファインチューンしたAnimagineXL3.1を作ってみましょう。
今回の検証では、AnimagineXL3.1に
・「自分で調整した賢木画風LoRA」
・「線を太くするbold系LoRA」
・「書き込みを減らすFlat系LoRA」
・「ざかざかした手描き風イラストタッチにするスケッチ系画風LoRA」
の4つを適用してみます。
私の好みの画風で、線は細め、描き込み量は多め、線画部分はやや手描き感のある画像生成モデルを作るのが目標ですので、bold系とFlat系LoRAはマイナス適用して描き込みを増やしたいと思います。AnimagineXL3.1にそれぞれのLoRAをどんな重みで適用すれば、破綻なく最も好みの結果になるか、検討してみましょう。
XYZ Plotなどを使ってそれぞれの重みを微調整してみます。とりあえずすべての値を0.5にしたプロンプトを作りました。
PP:1girl, +クォリティタグ
これをXYZ Plotで下記のように入力すると、二つのSeed値で細かく数値を変えた画像比較ができます。
比較結果がこちら。
各LoRAの適用値を見比べて、最も自分の思う結果に近い結果を探ります。いろいろと検討した結果、今回は次の重みで適用することに決めました。
0.6>:自分画風LoRAは0.6
0.5>:スケッチ感は0.5
-0.4>:線の太さはやや細く繊細に
-0.5>:描き込み量は不自然にならないように多め
「Seed値:11111」で1girl+クオリティタグを生成すると、この画像が出ることを覚えておきます。
さて、実際にマージを始めたいと思います。
①ベースモデルを決める
まず、「Checkpoint A」にLoRAを混ぜたいモデルを選択します。今回はAnimagineXL3.1を選びました。
②新モデルに名前を付ける
次に、「file name」欄で新しくできるCheckpointに名前をつけましょう。今回はtestmodel_v1と無難なものにしました。LoRAをたくさん混ぜていく場合は、どれがどれだかわけわからなくなるので「AnimagineXL31+flat0.5+bold1」などとファイル名に書いてしまうと便利です。色んなマージモデルを作って、最終的にうまくいった一例に「iomagineXL」などと名付け、あとの失敗作は試作モデルフォルダを作ってポイしましょう。
③各種パラメータを設定
その他の設定の意味がよく分からない場合、上のスクショのようにsame strengthはオン、over wrightはオフ、remake dimensionはauto、save precisionはfp16、calc precisionはfloat、deviceはcudaとします。(設定の意味と効果が理解できている方は適宜設定してください)
④混ぜるLoRAを選んで重みを設定
画面下部に「stable-diffusion-webui\models\Lora」に入っている全てのLoRAが一覧表示されていますので、「Ctrl+F」などで探してマージしたいLoRAを選んでください。チェックマークを入れると、強度「1」の状態ですぐ上のウィンドウにLoRA名が記載されます。
強度部分をさきほど実験で決めた数値(自分画風LoRAなら0.6)に書き換えれば準備完了です。「Merge to Checkpoint(Model A)」を押してモデルにマージしましょう。
※text2image画面で実験を行った直後であれば、「get from prompt」ボタンを押すとプロンプト欄にあるLoRAタグが強度とともにコピペされて便利ですが、書式が間違って引用されることがあるので気を付けましょう(エラーになります)
一気に4つ同時にマージしてもよいですし、一つずつ順番にマージして効果を確かめたり、強度を変えて試してみたりするのも良いでしょう。
【実験】4つ同時にマージした場合と、順番にマージした場合で結果は変わるか
次のような実験を行いました。
①AnimagineXL3.1に4つのLoRAをプロンプト欄で適用して1girl生成
②AnimagineXL3.1に4つのLoRAモデルを同時にマージして1girl生成
③AnimagineXL3.1に4つのLoRAモデルを順に一つずつマージし、最終的にできたモデルで1girl生成
①②③それぞれの生成結果を左から並べるとこのようになりました。
4つ同時にマージすると、マージ前のモデルにLoRAを適用したのとほとんど同じ画像(細部は異なる)が生成できますが、順繰りにマージした場合はポーズや衣装がやや異なる結果となりました。これはあとからマージされたLoRAが、事前にマージされたLoRAによる干渉部分を上書きしているためだと思われます。
<これまでの体感と考察>
一気にすべてマージするのが手っ取り早いですし、事前に想定した通りの結果が出るはずなのですが、実践上ではそれによって予期しない破綻が出ることもあります。そもそも、画風LoRA自体完璧に作るのは至難ですので、画風だけを変化させようとしても構図が変わったり、悪くすると手足が崩壊するのは皆様よくご存じだと思います。経験上、順番にマージしたときのほうが破綻率が少ない気がするのですが、このあたりは条件次第になるので、はっきりしたことは言えません。
「あとからマージされたLoRAが、事前にマージされたLoRAによる干渉部分を上書きする」のなら、大きく影響させたい自分画風モデルは最後にマージして上書きすると良いような気もしますし、逆に最初にマージして、他の調整系LoRAを弱めにあとからマージした方がよい気もします。これからマージするのがどういうLoRAの取り合わせかによっても、上書きが起こる潜在空間上の座標が異なる気がしますので、おのおので検証してみるほかないのかもしれません。
さて、できたモデルに問題がないか、実際に生成を行ってみましょう。
こちらがマージ前、通常のAnimagineXL3.1に4つのLoRAを適用して生成した画像です。
Checkpointを新モデルに切り替えて、プロンプトから4つのLoRAのタグを抜き、生成してみます。
LoRAを適用せずに、無事さきほどとほぼ同じ画像を生成することができました。(微細な差はあります)
想定した画像が生成できることを確かめたら、データセットを作るためのランダムプロンプトを使って、しばらくランダム生成をしてみることをおすすめします。特に、縦長の画像、横長の画像、寝転んでいるポーズなどで崩壊しないか確かめてみましょう。マージ前のanimagineで同じ画像を生成しても崩壊する場合はしょうがないのですが、animagineでは普通に生成できる画像が全く生成できなくなっていた場合、LoRAかマージ設定に何らかの問題があったのではないかと思います。
四肢や構図が盛んに崩壊するようなら、重みを見直すか、一気にマージするのをやめて順番にマージするなど工夫が必要になります。好みの画風が出せるようにはなったけれども、プロンプトの効きが悪かったり、四肢が崩壊しがちで使えないという場合は、再度自分画風LoRAを作り直すか、強度を見直すなどしてやり直すのも一つの手です。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 【2024/08/18アップデート】「比率の整ったデータセットを用意するプロンプト」の項目を刷新しました。寝そべった画像や複数人の画像など、より幅広いバリエーションのデータセ...
今回は四つのLoRAを適用して理想の画風を決めたわけですが、少し目がイメージと違うとか、あごの尖りが違うとか、眉毛をもっとこうしたいといった場合は、CoppyLoRAを使って調整LoRAを自作するという方法があります。

こんばんは、スタジオ真榊です。こちらは、AIアプリ開発者のとりにく(@tori29umai)さんがFANBOXで配布されているかんたんLoRA作成アプリ「CoppyLora webUI」の紹介・検証記事です。AI絵を自分のタッチに近づけたり、AI-Assistantでオート線画化・オート着色する際により自分らしい絵に仕上げてもらったりと、初心者で...
例えば、ベース1girlちゃんをi2iなどで画像加工して、耳を長くすれば「耳の長さ調整LoRA」になりますから、これを好きな重みでマージすることで耳の長さを調整できます。
このように画像加工して作ったCoppyLoRAを掛ければ、色合いも調整することができるはずです。
ただ、CoppyLoRAはあくまで簡易LoRAですから、プロンプトの効きを悪くしたり、四肢を崩壊させやすくしたりする恐れがあります。生成結果を確認し、悪影響が出ていたら重みを調整するようにしましょう。直接モデルにマージするだけでなく、自分画風LoRAを作る際のデータセット作りに使用することで、品質の低劣化を避ける手法も考えられます。
本当にモデル作りはどんどん沼に陥ってしまって創作に割ける時間が消えていきますので、データセットを作ってはLoRAを作り、それをマージしてみてはプロンプトの効きの悪さにため息をつくーの繰り返しになる前に、良いところで妥協する気持ちを持つことが大事ではないかなと思います。
それでは、今回はこのへんで。スタジオ真榊でした。
Яefill
2024-08-29 09:12:10 +0000 UTCAIイラストが理解る!【スタジオ真榊】
2024-08-23 17:29:33 +0000 UTCz-kumagon
2024-08-23 13:49:45 +0000 UTC