LoRA-Block-Weight 層別メモ



なにこれ

LoRAはいいとしてLoCon/LyCORISで層が増えてわからなくなったので層別の個人用メモとして作成した。
キャラLoRA作成時のアンチョコ等が出てきたら後で足す方針(予定は未定)。


層の情報

以下の通りLoRAが17ブロックだったに対してLyCORIS/LoConは26ブロックに拡張されている。
そのためLoRAと同じ感覚で層別適用するには合わせてプリセットなりを修正する必要がある。

LoRA
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
LyCORIS(LoCon等)
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

LyCORIS/LoCon用カスタムプリセット 使い方

「LoRA Block Weights」の「Weights setting」を開き、末尾にコピペしたら「Save Presets」して保存すればよい。
保存出来たら「Reload Presets」「Reload Tags」で表示反映される(過去カスタムプリセット追加経験あるならその方法でよい)。


LyCORIS/LoCon用カスタムプリセット基本形 特定層のみ無効化

LC-ALL:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-BCE:0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN00:1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN01:1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN02:1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN03:1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN04:1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN05:1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN06:1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN07:1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN08:1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN09:1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN10:1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-IN11:1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-INALL:0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-MID:1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1
LC-OUT00:1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1
LC-OUT01:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1
LC-OUT02:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1
LC-OUT03:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1
LC-OUT04:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1
LC-OUT05:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1
LC-OUT06:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1
LC-OUT07:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1
LC-OUT08:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1
LC-OUT09:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1
LC-OUT10:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1
LC-OUT11:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
LC-OUTALL:1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0


LyCORIS/LoCon用カスタムプリセット LoRA版をもとに適当に設定したやつ

雑に設定しているので適宜4chan由来の表なりで見直し願う

LC-Face:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1
LC-NCNF:1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,0
LC-NF:1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1
LC-NC:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0
LC-NPNBASE:0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0
LC-NP:1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0
LC-NIN:1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1
LC-CT:0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1


適用サンプルとか

In Construction

既存の各層に関する情報(4chan由来)

比較的既知の4chan由来の各ブロックに対する影響星取表を普通の表に仕立て直した。
元表だと星の付け順がランダムだったため影響度合いごとに付与していた可能性があるが、いったんその可能性は除外してシンプルに星の数だけプロットしている。
なおBASEに対する影響度は記載されていなかったようなので無視してほしい。
またOutについて1~11を逆に記載しているのではないかという指摘もあったため、いったん両パターン記載している。
基本的にはこの表の中で行内の埋まっているセルが多いブロックほど、変更影響が強いブロックということになるはずである。
Blocks

上記情報との比較:各ブロックごとの分析

検証ではLoRA Block Weightの機能であるEffective Block Analyzerを使用し、対象層を0.5と比較した際の影響度合い、影響内容を確認する。
検証で使用するLoRAは自作のキャラLoRAのみとし、以下のプロンプト/条件で実行している。
出力結果の画像は「比較対象のブロック:差異%」「0.5適用時の結果」「1.0適用時の結果」で並んでいる。

プロンプト:
【キャラLoRAのトリガー】 ,1girl, solo, looking at viewer, sun, sky, cloud, beach, cute pose, yellow eyes, silver blonde short hair, evil smile, school uniform <lora:【キャラLoRA名】:1:XYZ>
ネガティブプロンプト:
Negative prompt: (worst quality:1.4), (low quality:1.4), text, error, cropped, blurry, signature, watermark, username, monochrome, multiple views,
Steps: 24, Sampler: DPM++ SDE Karras, CFG scale: 6, Seed: 2827667920, Size: 512x512, Model hash: e9c822fc93, Model: nullmix_, Clip skip: 2

Block Comment Effective Parts
Base 顔(髪型や表情)、指、上下服装、塗り等広範に影響している。 顔・上半身・下半身・背景など
IN00 変化は1%未満。ほぼ左腕の影の部分のみ。 上半身
IN01 リボンタイの色が目立つがそれ以外にも髪や指、腕の光(塗り)、スカートの塗り、セーラー服の膨らみなどに影響が出ている。また背景にも少し影響が出ているようだ。 顔・上半身・下半身・(背景)など
IN02 スカートの破綻が目立つほか、髪、両腕や太腿の光(塗り)に影響が出ている。またキャラ背後の背景の塗りが多少変わっているようだ。 顔・上半身・下半身・(背景)など
IN03 左腕のや右太腿の光(塗り)が一番わかりやすいか。あまり大きな影響があるようには見えない。 上半身・下半身
IN04 左右腕の光(塗り)が変わったほか、左胸にポケットらしき造形が追加、左太腿の露出が増えている。背景も少し影響が出ているようだ。 上半身・下半身・(背景)
IN05 ポーズが変わっている。特に左腕の形、右手のつくり。合わせて手足の光(塗り)も変わっている。表情もEvilの効きが悪くなっているようだ。その他服装ではリボンタイが赤に、フロント布が青に。太腿露出度が増えているのはIN04と同様。また背景の海部分に追加の膨らみを描写している。 顔・上半身・下半身・構図・背景
IN06 左腕の塗り、フロント布の色はIN05と同様の傾向。右手小指の細かな違いのほか、髪の光(塗り)も少し変わっている。右足後ろ側の緑のシートらしきものの描写も少し変わっているようだ。 顔・上半身・小物
IN07 ポーズに大きな影響。表情はEvilの効果が落ちているようだ。髪や手足の光(塗り)も変わっている。フロント布はIN06同様だがリボンタイの色が赤になっている。スカートの一部もシートに塗り直されている。背景も水平に塗り足されている。 顔・上半身・下半身・構図・小物・背景
IN08 ポーズが変わっている。左手の形。髪・両腕・足の光(塗り)も変わっている。表情はEvilの効きが悪い。服装はリボンタイが赤に、フロント布も青に。左太腿部分スカートがスパッツか何かに変化している。ベンチが生えた。また波や海岸線の形に結構な変更有。 顔・上半身・下半身・構図・小物・背景
IN09 髪・両腕の光(塗り)、フロント布の色、リボンタイの結びに変化。右足後ろのシート形状に影響。本人真後ろ背景にのみ微細影響が出ている。 顔・上半身・小物
IN10 表情、Evilの効きが悪くなっている。リボンタイ形状に変化。スカート形状に変化。指形状に字微細な変化。 顔・上半身・下半身・小物
IN11 太腿の露出が増えている。合わせて足の光(塗り)だけ変わっている。 下半身
M00 差異22%だががっつり多方面影響が見える。顔の陰影(塗り)、表情もEvilの効きが少し怪しい。ポーズに大きな影響。リボンタイがなくなっている。手足の光(塗り)にも影響。瞳の塗りにも影響が出ている。シートの形状、背景描写も変動あり。 顔・上半身・下半身・構図・小物・背景
OUT00 ポーズに大きな影響。髪・上半身・下半身の光(塗り)、フロント布やリボンタイの色が変わる。表情はEvilの効きが悪い。海岸線水増しはIN07同様。シートの色が変わっている。 顔・上半身・(下半身)・小物・背景
OUT01 主に上半身に影響。フロント布、リボンタイの色と形状、袖口あたりに影響。胸回り? 髪・腕・太腿の光(塗り)にも多少影響あり。シート形状多少変更あり。 顔・上半身・下半身・(小物)
OUT02 フロント布、リボンタイの色と形状に影響。腕と太腿の光(塗り)に影響。シート形状と色に影響。 上半身・下半身・小物
OUT03 ポーズに大きな影響。フロント布、リボンタイの色と形状に影響。目に少し影響。表情、Evilの効きが悪い。海岸水平線はIN07などと同様。波寄際秒差も変化。手足の光(塗り)、スカート形状にも影響が出ている。 顔・上半身・下半身・構図・小物・背景
OUT04 ポーズに影響。髪・顔・手足の光(塗り)に影響。影除去?目にも影響あり。背景も塗り直しているほか、スカート布の一部がシートに変わっている。 顔・上半身・下半身・構図・小物・背景
OUT05 ポーズに大きく影響。指が怪しくなった。着座、膝立描写に変更されている。フロント布、リボンタイの色と形状に影響。胸回り増量?シートはスカートに置換。背景の水平線、海部分を雲に一部塗り替え。Evilの効きが悪い。髪・上半身・下半身の光(塗り)も変更。 顔・上半身・下半身・構図・小物・背景
OUT06 主に服装に影響。リボンタイの形状、カラーの白線、左太腿の露出度アップ。髪・両手・左足の光(塗り)に影響。微細な背景影響。 顔・上半身・下半身
OUT07 顔・髪・両手・左足の光(塗り)に影響。太腿露出度アップ。 顔・上半身・下半身
OUT08 ポーズに多少の影響。左胸、左太ももに描写追加。リボンタイの形状に影響。左腕、両太腿に多少光(塗り)影響。シートはスカートに。 上半身・下半身・小物
OUT09 左太腿の露出度アップ。左腕の光(塗り)に少し影響。シートの色(塗り)に影響。 上半身・下半身・小物
OUT10 フロント布、リボンタイの形状に影響。シートの色(塗り)に影響。 上半身・小物
OUT11 フロント布、リボンタイの形状に影響。顔・髪・腕の光(塗り)に影響。 顔・上半身

層別学習(ToDo多し)

前提! これはあくまで個人的なテストケースの一つに過ぎないため、追検証は必須。各位自分のベストバランスを見つけよう。

2023/04/04、Sd_scriptに層別学習(階層別学習、階層別dim)の機能が追加された。
階層別学習は比較的事前知識が通用する(階層別マージの知識が活用できる可能性がある)と想定して、先に階層別dimをさわってみた。

実験1

階層別dimはBASEを除いたIN12+M00+OUT12階層の合計25階層を設定する必要がある。
上記の4chan由来の表に則って、今回は「基本的にはdim/nw/conv_dim/conv_nw=16/8/8/1」とし、顔に影響があるとされる階層のうちIN02,IN04,OUT08を「128/11.3/128/11.3」とした。なお11.3なのは√128の近似値であること、およびスクリプトの小数稼働確認を兼ねている。
またIN07についてはあえて「1/1/1/1」としてみた。それを踏まえた設定結果は以下の通りとなる。

"block_dims=16,16,128,16,128,16,16,1,16,16,16,16,16,16,16,16,16,16,16,16,16,128,16,16,16" "block_alphas=8,8,11.3,8,11.3,8,8,1,8,8,8,8,8,8,8,8,8,8,8,8,8,11.3,8,8,8" "conv_block_dims=8,8,128,8,128,8,8,1,8,8,8,8,8,8,8,8,8,8,8,8,8,128,8,8,8" "conv_block_alphas=1,1,11.3,1,11.3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11.3,1,1,1"

差異結果確認を優先したい意図から事前作成していた正則化画像入りのLoRAと上記階層別dimの有無で比較した結果を整理した。n=1の結果なので参考程度に参照されたし。

プロンプト:
【キャラLoRAのトリガー】, 【キャラの衣装トリガー】, 1girl, solo, looking at viewer, sun, sky, cloud, beach, cute pose<lora:【キャラLoRA名】:1>
ネガティブプロンプト:
(worst quality:1.4), (low quality:1.4), text, error, cropped, blurry, signature, watermark, username, monochrome, multiple views,
Steps: 24, Sampler: UniPC, CFG scale: 12, Seed: xxxxxxxx, Size: 384x512, Model hash: e9c822fc93, Model: nullmix_, Clip skip: 2

Pattern Comment
Base 左が基準画像、右が3epoch相当まで相当の出力結果。効果があるようなのはわかるがよいとも悪いとも言い難い。
実験2

別の階層別dim設定(減らす方向はやめて、増加させる方向のみでいくつかの階層を選択)を実施して比較検証例を追加した。
IN02~IN04、IN08、OUT03、OUT08だけ増やしてある。

"block_dims=16,16,128,128,128,16,16,16,128,16,16,16,16,16,16,16,128,16,16,16,16,128,16,16,16" "block_alphas=8,8,11.3,11.3,11.3,8,8,8,11.3,8,8,8,8,8,8,8,11.3,8,8,8,8,11.3,8,8,8" "conv_block_dims=8,8,128,128,128,8,8,8,128,8,8,8,8,8,8,8,128,8,8,8,8,128,8,8,8" "conv_block_alphas=1,1,11.3,11.3,11.3,1,1,1,11.3,1,1,1,1,1,1,1,11.3,1,1,1,1,11.3,1,1,1"

おおよそ学習素材や学習状況は同一内容にそろえた上での比較画像例を以下に添付する。なお左側、dimvTest~とあるのが階層別dim適用版のLoRA(kohya-locon)で右が対照群である。対照群は16/8/8/1で学習させている。

プロンプト:
【キャラLoRAのトリガー】, (【キャラの衣装トリガー】:1.4), standing, 1girl, solo, looking at viewer, dramatic light, small smile, field full of flower and river and mountain, sun, sky, cloud, skirt,<lora:【キャラLoRA名】:1>
ネガティブプロンプト:
(worst quality:1.4), (low quality:1.4), text, error, cropped, blurry, signature, watermark, username, monochrome, multiple views,
VAE:kl-f8-anime2

Pattern Model Comment
Base BluePencilv4 以降も含めた全体的な特性として、層別dim側のほうが遠景で描きたがる傾向があるように見える。
Base AOM3 割と特徴的で、層別dim適用したほうのみリアル質感が強調されているケースが出ている。
Base AnimeLike2.5D んんーん
Base NostalgiaClear ん-?
Base Nabylon v1.2 んーん-ん-
Base NullMix んーん-ん-
Base Counterfeit v2.5 んーん-ん-
Base Anything v4.5 んん-ん-
Edit
Pub: 31 Mar 2023 09:18 UTC
Edit: 05 Apr 2023 09:40 UTC
Views: 25946