Composable LoRA/LyCORIS with steps
July 25, 2023 · View on GitHub
Composable LoRA/LyCORIS with steps
この拡張機能は、内部のforward LoRAプロセスを置き換え、同時にLoCon、LyCORISをサポートします。
この拡張機能はComposable LoRAのフォークです。
言語
インストール
注意: このバージョンのComposable LoRAには、元のComposable LoRAのすべての機能が含まれています。1つ選んでインストールするだけです。
この拡張機能は、元のバージョンのComposable LoRA拡張機能と同時に使用できません。インストールする前に、webui\extensions\フォルダー内のstable-diffusion-webui-composable-loraフォルダーを削除する必要があります。
次に、WebUIの[Extensions] -> [Install from URL]で以下のURLを入力します。
https://github.com/a2569875/stable-diffusion-webui-composable-lora.git
インストールして再起動します。
デモ
ここでは2つのLoRA(1つはLoHA、もう1つはLoCon)を紹介します。
<lora:roukin8_loha:0.8>に対応するトリガーワード:yamanomitsuha<lora:dia_viekone_locon:0.8>に対応するトリガーワード:dia_viekone_\(ansatsu_kizoku\)
Latent Couple extensionと組み合わせます。
以下はその効果です。

以下のことが分かります。
<lora:roukin8_loha:0.8>をyamanomitsuhaと組み合わせ、そして<lora:dia_viekone_locon:0.8>をdia_viekone_\(ansatsu_kizoku\)と組み合わせることで、対応するキャラクターを描画できます。- モデルのトリガーワードが互いに交換され、一致しなくなった場合、2つのキャラクターは描画できません。これは
<lora:roukin8_loha:0.8>が画像の左側のブロックにのみ制限されているため、そして<lora:dia_viekone_locon:0.8>が画像の右側のブロックにのみ制限されているためです。したがって、このアルゴリズムは有効です。
画像のヒントの文法にはsd-webui-prompt-highlightプラグインが使用されています。
このテストは2023年5月14日に行われ、使用されたStable Diffusion WebUIのバージョンはv1.2 (89f9faa)です。
(Note: You should enable [Lora: use old method that takes longer when you have multiple Loras active and produces same results as kohya-ss/sd-webui-additional-networks extension] in setting page.)
2023年7月25日、Stable Diffusion WebUIバージョンv1.5.0 (a3ddf46)を使用して、もう一つのテストが行われました。私自身が訓練したヒヨリのLoConモデルと、私自身が訓練したディア・ヴィコーネのLoConモデルの両方を使用しました。

機能
Composable-Diffusionと互換性がある
LoRAの挿入箇所をAND構文と関連付け、LoRAの影響範囲を特定のサブプロンプト内に限定します(特定のAND...ANDブロック内)。
ステップに基づく可組合性
形式[A:B:N]のプロンプトにLoRAを配置し、LoRAの影響範囲を特定のグラフィックステップに制限します。

LoRA重み制御
[A #xxx]構文を追加して、LoRAの各グラフィックステップでの重みを制御できます。
現在、サポートされているものは以下のとおりです。
decrease- LoRAの有効なステップ数で徐々に重みを減少させ、0になります
increment- LoRAの有効なステップ数で0から重みを徐々に増加させます
cmd(...)- カスタムの重み制御コマンドで、主にPython構文を使用します。
- 使用可能なパラメータ
weight- 現在のLoRA重み
life- 0-1の数字で、現在のLoRAのライフサイクルを表します。開始ステップ数にある場合は0であり、このLoRAが最後に適用されるステップ数にある場合は1です。
step- 現在のステップ数
steps- 全ステップ数
lora- 現在のLoRAオブジェクト
lora_module- 現在のLoRA作用層オブジェクト
lora_type- 現在のLoRAのロードされた種類で、
loraまたはlycoのいずれかです。
- 現在のLoRAのロードされた種類で、
lora_name- 現在のLoRAの名前
lora_count- すべてのLoRAの数
block_lora_count- 作用中の
AND...ANDブロック内のLoRAの数
- 作用中の
is_negative- 反転提示語であるかどうか
layer_name- 現在の作用層の名前。これを使用して、LoRA Block Weightの効果をシミュレートできます。
current_prompt- 作用中の
AND...ANDブロック内のプロンプト
- 作用中の
sd_processing- sd画像の生成パラメータ
enable_prepare_step- (出力用パラメータ) Trueに設定すると、この重みがtransformer text model encoder層に適用されます。 step == -1の場合は、現在transformer text model encoder層にいます。
- 使用可能な関数は以下の通りです
warmup(x)- xは0から1までの数値で、総ステップ数に対して、xの比率以下のステップでは関数値が0から1に徐々に上昇し、x以降は1になります。
cooldown(x)- xは0から1までの数値で、総ステップ数に対して、xの比率以上のステップでは関数値が1から0に徐々に減少し、0になります。
- sin, cos, tan, asin, acos, atan
- すべてのステップを周期とする三角関数です。sin、cosの値は0から1に変更されます。
- sinr, cosr, tanr, asinr, acosr, atanr
- 弧度単位の周期2*piの三角関数です。
- abs, ceil, floor, trunc, fmod, gcd, lcm, perm, comb, gamma, sqrt, cbrt, exp, pow, log, log2, log10
- Pythonのmath関数ライブラリと同じ関数です。 例 :
- 使用可能なパラメータ
- カスタムの重み制御コマンドで、主にPython構文を使用します。
[<lora:A:1>::10]- 名前がAのLoRAを使用して、10ステップで停止します。

- 名前がAのLoRAを使用して、10ステップで停止します。
[<lora:A:1>:<lora:B:1>:10]- 名前がAのLoRAを、10ステップまで使用し、10ステップから名前がBのLoRAを使用します。

- 名前がAのLoRAを、10ステップまで使用し、10ステップから名前がBのLoRAを使用します。
[<lora:A:1>:10]- 10ステップから名前がAのLoRAを使用します。
[<lora:A:1>:0.5]- 50%のステップから名前がAのLoRAを使用します。
[[<lora:A:1>::25]:10]- 10ステップから名前がAのLoRAを使用し、25ステップで使用を停止します。

- 10ステップから名前がAのLoRAを使用し、25ステップで使用を停止します。
[<lora:A:1> #increment:10]- 名前がAのLoRAを使用する期間中に重みを0から線形に増加させ、設定された重みに到達します。そして、10ステップからこのLoRAを使用します。

- 名前がAのLoRAを使用する期間中に重みを0から線形に増加させ、設定された重みに到達します。そして、10ステップからこのLoRAを使用します。
[<lora:A:1> #decrease:10]- 名前がAのLoRAを使用する期間中に重みを1から線形に減少させ、0に到達します。そして、10ステップからこのLoRAを使用します。

- 名前がAのLoRAを使用する期間中に重みを1から線形に減少させ、0に到達します。そして、10ステップからこのLoRAを使用します。
[<lora:A:1> #cmd\(warmup\(0.5\)\):10]- 名前がAのLoRAを使用する期間中、重みはウォームアップ定数であり、0からこのLoRAのライフサイクルの50%に到達するまで線形に増加します。そして、10ステップからこのLoRAを使用します。

[<lora:A:1> #cmd\(sin\(life\)\):20]- 名前がAのLoRAを使用する期間中、重みは正弦波であり、10ステップからこのLoRAを使用します。

- 名前がAのLoRAを使用する期間中、重みは正弦波であり、10ステップからこのLoRAを使用します。
すべての生成された画像:

反向トークンに対する影響の消去
内蔵のLoRAを使用する場合、反転トークンは常にLoRAの影響を受けます。これは通常、出力に負の影響を与えます。この拡張機能は、負の影響を排除するオプションを提供します。
使用方法
有効化 (Enabled)
このオプションをオンにすると、Composable LoRAの機能を使用できるようになります。
Composable LoRA with step
特定のステップでLoRAを有効または無効にする機能を使用するには、このオプションを選択する必要があります。
Use Lora in uc text model encoder
言語モデルエンコーダー(text model encoder)の逆提示語部分でLoRAを使用します。 このオプションをオフにすると、より良い出力が期待できます。
Use Lora in uc diffusion model
拡散モデル(diffusion model)またはデノイザー(denoiser)の逆提示語部分でLoRAを使用します。 このオプションをオフにすると、より良い出力が期待できます。
plot the LoRA weight in all steps
[Composable LoRA with step]が選択されている場合、LoRAの重みが各ステップでどのように変化するかを観察するために、このオプションを選択できます。
互換性
--always-batch-cond-uncondは--medvramまたは--lowvramと一緒に使用する必要があります。
更新ログ
2023-04-02
- LoCon、LyCORISサポートを追加
- 不具合を修正:IndexError: list index out of range
2023-04-08
- 複数の異なるANDブロックで同じLoRAを使用できるようにする

2023-04-13
- 2023-04-08のバージョンでpull requestを提出
2023-04-19
- pytorch 2.0を使用する場合に拡張がロードされない問題を修正
- 不具合を修正: RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda and cpu! (when checking argument for argument mat2 in method wrapper_CUDA_mm)
2023-04-20
- 特定のステップでLoRAを有効または無効にする機能を実装
- LoCon、LyCORISの拡張プログラムを参考にし、異なるANDブロックおよびステップでのLoRAの有効化/無効化アルゴリズムを改善
2023-04-21
- 異なるステップ数でのLoRAの重みを制御する方法の実装
[A #xxx] - 異なるステップ数でのLoRAの重み変化を示すグラフの作成
2023-04-22
- 不具合を修正: AttributeError: 'Options' object has no attribute 'lora_apply_to_outputs'
- 不具合を修正: RuntimeError: "addmm_impl_cpu_" not implemented for 'Half'
特別な感謝
- opparco: Composable LoRAの元の作者である、Composable LoRA
- JackEllieのStable-Siffusionコミュニティチーム 、 YouTubeチャンネル
- 中文ウィキペディアのコミュニティチーム
