LoRAの適用を途中で止める機能が追加されています。少し触ってみましたが使い勝手がかなりよさそうです。
使い方はシンプルで、:stop=step数を追加するだけです。
<lora:LoRAの名前:1:stop=9>
次のように使うこともできます。
<lora:LoRAの名前:1:1:lbw=1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0:stop=9>
また、この記事についてですが、筆者は現在LBWを使っておらず、検証を暫く行っていないため情報が古くなっている可能性が高いです。常に一番正確な情報は公式リポジトリなのでそちらをご確認ください。
何ができるのか
・LoRAを顔だけに適用することができる。
・その他にも、画風、色、ポーズ、背景など、細かい調整が可能になる。
・LoRAだけでなく、LyCORIS(LoHa, LoCon, (IA)^3, LoKr, DyLoRA)や、SDXLにも対応している※しかし使い方が少し異なるので注意。
使い方が統一されました。
違う点はLoRAは17個の層を変更できるのに対し、LyCORISは26個の層を変更できます。SDXL LoRAの場合は12個、SDXL LyCORISの場合は20個の層を変更できます。
・設定は基本被らないので、自分だけのLoRAの使い方をすることができる。
顔除外LoRA
LoRA Block Weightのインストール手順
Extensions タブから
Available タブに移動してLoad from:をクリックした後に
LoRA Block Weightと入力して
LoRA Block Weightをインストールしましょう。
隣にあるInstalledタブからApply and restart UIにて適用と再起動を行います。
インストールに成功するとLoRA Block Weightのタブが追加されます。
とにかく一回使ってみようのコーナー | LoRAを顔だけに適用してみよう。
↓LoRAの書き方を見てみましょう。
<lora:LoRAの名前:1> |
ここに、LoRA Block Weightの設定を入れましょう。
:1の後に、この数列:1:lbw=0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0を書き加えてみて下さい。
つまり、
LoRAを顔だけに 適用する設定 | :1:lbw=1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0 |
これを | <lora:LoRAの名前:1> |
こうする | <lora:LoRAの名前:1:1:lbw=1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0> |
↓軽く解説
<lora:LoRAの名前:1:1:lbw=1,1,1…> |
LoRAの名前:TEncの重み:UNetの重み:lbw=階層別の重み17個
↓LoRA Block Weightが正常に適用された場合、cmdにいつもと見慣れない文字列が表示されます。
どうなったのか見ていきましょう。
顔だけにLoRAを適用しているはずなのに顔以外にもLoRAが適用されてます。
LoRAには階層が17個あるのですが、一つの階層に複数の要素(背景、画風、顔の形など)が組み込まれていることによってこのような結果になります。なので厳密に言うと、ある程度寄せることはできても”顔だけ”というのは不可能ということになります。
“階層”とはU-Netの階層のことであり、先ほど書いた数列17個にひとつづつ階層が割り当てられています。0,1,1,1←これです
他の設定集です。(プリセット)
プリセット名 | プリセット |
---|---|
顔1 | 1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0 |
顔2 | 1,0,0,0,1,0,1,0,0.8,1,1,0.6,0,1,0,0,0 |
顔3 | 1,0,0,0,0,0,1,0.3,1,1,1,0.8,0,0.4,0,0,0 |
顔なし | 1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1 |
服 | 1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0 |
ポーズ | 1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 |
画風 | 1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1 |
キャラ | 1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0 |
背景 | 1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0 |
弱める | 1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 |
プリセットだけでも結構楽しめますが、LoRAによって影響する層が大きく違ったりするので、基本的には自分で影響する層を調べてプリセットを作ることが必要になります。
では次は影響する層を調べてみましょう。
影響している階層を調べることができる Effective Block Analyzer
※重要11/5追記
デフォルト状態でも「Active」になりました。
Effective Block Analyzerのバグにも対応してくれています。
現在は拡張機能を最新に更新すると、グリッドが正常に作成されます。
とにかく一回Effective Block Analyzerを使ってみようのコーナー
XYZ plotのメニューからEffective Block Analyzerを選択します。
↓それぞれの値の推奨設定です。
diff image color | black |
change X-Y | チェックを入れる |
difference threshold | 20 |
Range | 2,0 |
Blocks | 17ALL |
number of seed | 1 |
↓次はご自身のプロンプトの、LoRAの設定を変更しましょう。
※↓これがない場合Effective Block Analyzerは動きません。
1のうしろに | :1:lbw=XYZを追加 |
---|---|
<lora:LoRAの名前:1> | <lora:LoRAの名前:1:1:lbw=XYZ> |
この設定だとイラストが18枚生成されます。
Hires.fixも適用可能ですがLoRAの影響が分かりにくくなるのでおすすめはしません。
これで設定は以上です。生成ボタンを押すと開始されます。
stable-diffusion-webui/outputs/txt2img-grids
※グリッドを見たけど変化量が少ない場合、LoRAに問題があります。
別のLoRAで試してみましょう。
ここで少し解説を挟みます。
階層について解説
↓LoRAには17個の階層があり、階層ごとに名前が付いています。BASE,IN01,IN02…
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BASE | IN01 | IN02 | IN04 | IN05 | IN07 | IN08 | MID | OUT03 | OUT04 | OUT05 | OUT06 | OUT07 | OUT08 | OUT09 | OUT10 | OUT11 |
先ほど使った1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0このプリセットは17個の数字が並んでおり、
左から順番にBASE,IN01,IN02,IN04…~OUT11のように並んでいます。
↓LyCORISでは26個の階層があり、より細かな設定が可能になっています。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BASE | IN00 | IN01 | IN02 | IN03 | IN04 | IN05 | IN06 | IN07 | IN08 | IN09 | IN10 | IN11 | MID | OUT00 | OUT01 | OUT02 | OUT03 | OUT04 | OUT05 | OUT06 | OUT07 | OUT08 | OUT09 | OUT10 | OUT11 |
↓SDXLは特殊で階層が少ないみたいです。
SDXL LoRAの場合(12)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|
BASE | IN04 | IN05 | IN07 | IN08 | MID | OUT0 | OUT1 | OUT2 | OUT3 | OUT4 | OUT05 |
SDXL – LyCORISの場合(20)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BASE | IN00 | IN01 | IN02 | IN03 | IN04 | IN05 | IN06 | IN07 | IN08 | MID | OUT00 | OUT01 | OUT02 | OUT03 | OUT04 | OUT05 | OUT06 | OUT07 |
Effective Block Analyzerで調べた比較表から自分だけの設定を作る
※重要11/5追記
デフォルト状態でも「Active」になりました。
Effective Block Analyzerのバグにも対応してくれています。
現在は拡張機能を最新に更新すると、グリッドが正常に作成されます。
あとは自分が欲しい層を選択していく形になります。
比較表の一番上に階層名が書いてあります。IN05とIN07とOUT3と…
選択できたら17個の数列を書いてみましょう!
左から順番にBASEは0で、IN01は2で….
0,2,0,0,0,0,1,1,0,0,0,1,1,3,0,0,0
・・・めんどくさいですよね?
なんと、あるんです。sp8999さんが便利なスプレッドシートを書いてくれていました。
それを参考にさせて頂いて私もスプレッドシートを作ってみました。
↑使い方は画像を見れば分かると思います。
一番下のタブを切り替えることでLyCORISでも使えます。
あとは列をコピーして自分のLoRAに組み込めば完成です。
2,3など、1以外も可能です。単純に倍率が高くなります。
3まで行くと殆ど壊れてしまうので多くても2がいいですね。
実はマイナスの値も可能です。-1や-2など。
私も少し試しましたが、要素を除外している感じでしょうか。
マイナスを使って狙った結果を出すのは至難の業かもしれません。
プリセットの使い方
LoRA Block Weightタブの説明
Active | LoRA Block Weightのオンオフ |
Activeの隣の テキストボックス | タグ。コピー用。 |
XYZ plot | 専用のXYZ plot(表が作れる) |
Weights setting | プリセットを保存しておける |
Elemental | sd-webui-supermerger用 |
Weights settingタブを見ていきましょう。
Reload Presets | 保存しているプリセットを呼び出します。 |
Reload Tags | コピー用のタグをテキストボックスに呼び出す。 |
Save Presets | 現在のプリセットを保存します。 |
Open TextEditor | テキストエディターで編集できます。 ※私はなぜかバグでコンソールが開きます。 |
テキストボックスにはデフォルトで沢山のプリセットが入っています。
ここに追加したいプリセットを書き込んでいきます。
プリセット名はなんでも構いません。
↑NekoLora-face-1というプリセットを追加しました。
早速使ってみましょう。
<lora:LoRAの名前:1:1:lbw=NekoLora-face-1> |
↑書き方は簡単で、:1の後に:1:lbw=NekoLora-face-1を追加するだけです。
cmdを見るとプリセットが適用されたか確認できます。
ここまでで簡単な使い方解説は終わりです。
次は設定の項目の解説をしていきます。
Effective Block Analyzerの詳しい解説
diff image color | 差分となる画像の背景の色を変更できます。 #黒のほうが見やすいです。 |
change X-Y | チェックを入れると比較表が横長になります。 #チェック推奨 |
difference threshold | 差分が変化したと認識される閾値を設定できます。 ←左の画像では46.233%となっています。 この値が変化し生成される差分に影響します。 #20推奨 |
Range | デフォルトのままだと極めて分かりづらいです。 ↑デフォルトでは0.5,1となっていますね。 仮にOUT05が生成されたとします。 その時OUT05のみ0.5として計算されます。 ※つまり下記のようになります。 1,1,1,1,1,1,1,1,1,1,0.5,1,1,1,1,1,1 #2,0を推奨、この方が分かりやすいです。 ※この場合下記のようになります 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0 |
Blocks | 調べたい階層を入力します。 #詳細はまたこの後記載します。 |
number of seed | 1だと自分のシードで生成します。 162495504など 2だとランダムシードで2回比較表を生成します。 つまり3,4と増やせば大量の比較表が作れます。 #2推奨 |
※Blocksについての詳細
デフォルトではLyCORISの設定になっています。
つまり26枚の画像が作られるということです。
しかし、LoRAの階層は17個にしか影響しないので
LoRAでLyCORISの設定を使うと、意味のない9枚の画像が作られることになります。
LoRAの場合17ALLと入力すれば自動的に17個の階層に絞ってくれます。
26ALLだとLyCORIS、12ALLだとSDXL LoRA、20ALLだとSDXL LyCORISに対応しています。
↓手動で階層を選択したい場合、下記を参考にしてください。
LoRAの場合 | BASE,IN01,IN02,IN04,IN05,IN07,IN08,M00,OUT03,OUT04,OUT05,OUT06,OUT07,OUT08,OUT09,OUT10,OUT11 |
LyCORISの場合 | BASE,IN00,IN01,IN02,IN03,IN04,IN05,IN06,IN07,IN08,IN09,IN10,IN11,M00,OUT00,OUT01,OUT02,OUT03,OUT04,OUT05,OUT06,OUT07,OUT08,OUT09,OUT10,OUT11 |
SDXL LoRA | BASE,IN04,IN05,IN07,IN08,MID,OUT0,OUT1,OUT2,OUT3,OUT4,OUT05 |
SDXL LyCORIS | BASE,IN00,IN01,IN02,IN03,IN04,IN05,IN06,IN07,IN08,MID,OUT00,OUT01,OUT02,OUT03,OUT04,OUT05,OUT06,OUT07 |
XYZ plotの解説
新機能について気になる方はgithubをご覧ください。
https://github.com/hako-mikan/sd-webui-lora-block-weight#Original-Weights%E3%81%AE%E5%90%88%E7%AE%97
※筆者的にはEffective Block Analyzerで十分なので、特別な理由がない限りこちらを使う必要はないと思います。
こちらはデフォルトでStable Diffusionに搭載されているXYZ plotとは別で、
LoRA Block Weight専用のXYZ plotです。
比較表を作ることができます。
Effective Block Analyzerと同じですが、比較できる項目が違うというだけです。
使い方は簡単でEffective Block Analyzerと同様
<lora:LoRAの名前:1:1:lbw=XYZ> |
:1:lbw=XYZを追加するだけです。
↓Xは赤色、Yは緑色、Zは比較表の数に影響します。
Zのテキストボックスに3つの値が入っていると、3枚比較表が作られます。
※例: Z Types=seed値, Z Values=1,2,3,4 これだと4枚の比較表が作られます
↓Typesメニューと対応するValuesの解説
Types | Typesの意味 | Values |
---|---|---|
Block ID | ブロックとは層のことです。 指定した層をTypesメニューのvaluesの値に変化させます。 | ここでは層を指定します。 IN05–OUT05とは IN05,IN07,IN08,MID,OUT03,OUT04,OUT05 この階層を変化させます。 またNOT IN05-OUT05を使うことで IN05-OUT05以外を変化させます。 |
values | Block IDとセットで使います。 | この値がBlock IDを変化させます。 2や3にするとBlock IDの値が2や3になります。 デフォルト設定でvaluesの値を2にすると 0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0 この設定で書き出されます。 |
seed | シード値を指定します。 | 1,2,3と入力したら、シード値の1,2,3が指定されます。 |
Original Weights | プリセット名を使います。 全ての層の初期値を決めます。 Original Weightsがない場合 初期値は1になります。 | デフォルトにあるプリセットのNONEと書けば 初期値が全て0になります。 ※NONEが全て0で登録されているため。 |
elements | sd-webui-supermerger用 |
掲示板
コメント一覧 (5件)
非常にわかりやすい説明で簡単に導入できました。
またスプレッドシートも大変便利に触らせていただきました。
質問なのですがLoRAのデフォルトで特定のblock weightをプリセットにしておく方法はないでしょうか?
つまりサムネイル画像をクリックしたときに、のように設定した値が自動で入ってほしいのです。
それとも何かしらのLora Mergeでweightを書けた状態で別保存しておくしかないのでしょうか?
プロンプト部分がコメントのルールで削除されてしまいましたが、:lbw=0…1部分も自動挿入してほしいということです
こんにちは。先日まではLoRA Block Weightを使用出来ていたのですが、昨日の夜から同じようにインストールしても
LoRA Block Weight : Not Activeと表示されてしまい、反映されなくなってしまいました。
試しに使用出来ていたころの画像を同じプロンプト、同じシードで生成したところやはり画像が違ってしまいました。
下記の画像のように表示されてしまいます。
https://imgur.com/6KADlBV.jpg
私はpaperspaceを利用して画像を生成しています。
不慣れなため、説明に不備がありましたら申し訳ございません。解決方法がありましたら、教えて頂ければ幸いです。
最新パッチの変更によって初期状態だと、「Not Active」がデフォルト状態になりましたね。LoRA Block Weightのメニューを開いて一番上にある「Active」のチェックボックスを入れ直すことで有効化されるみたいです。初期状態ではチェックが入っているのに「Not Active」と表示されて無効化されているので誤解しますねこれは。一応記事にも書いて置きました。
先程教えて頂いた通りに試しましたら、LoRA Block Weightが今までと同じように有効化出来ました。
チェックを入れなおすだけで良かったとは盲点でした。助けていただき感謝しています。ありがとうございます!