這個擴展取代了內置的 forward LoRA 過程,同時提供對LoCon、LyCORIS的支援。
本擴展Fork自Composable LoRA擴展
注意 : 這個版本的Composable LoRA已經包含了原版Composable LoRA的所有功能,只要選一個安裝就好。
此擴展不能與原始版本的Composable LoRA擴展同時使用,安裝前必須先刪除原始版本的Composable LoRA擴展。請先到webui\extensions\
資料夾下刪除stable-diffusion-webui-composable-lora
資料夾
接下來到webui的[擴充功能] -> [從網址安裝]輸入以下網址:
https://github.com/a2569875/stable-diffusion-webui-composable-lora.git
安裝並重新啟動即可
這裡示範兩個LoRA (分別為LoHA和LoCon),其中
<lora:roukin8_loha:0.8>
對應的觸發詞:yamanomitsuha
<lora:dia_viekone_locon:0.8>
對應的觸發詞:dia_viekone_\(ansatsu_kizoku\)
- 當我
<lora:roukin8_loha:0.8>
搭配yamanomitsuha
,以及<lora:dia_viekone_locon:0.8>
搭配dia_viekone_\(ansatsu_kizoku\)
的組合可以順利畫出對應角色; - 當模型觸發詞互相交換而導致不匹配時,兩個角色都無法順利畫出,可見
<lora:roukin8_loha:0.8>
被限制在只作用於圖片的左半邊區塊、而<lora:dia_viekone_locon:0.8>
被限制在只作用於圖片的右半邊區塊,因此這個演算法是有效的。
圖片上的提示詞語法使用sd-webui-prompt-highlight插件進行上色。
本次測試於2023年5月14日完成,使用Stable Diffusion WebUI版本為v1.2 (89f9faa)
另一次測試於2023年7月25日完成,使用Stable Diffusion WebUI版本為v1.5.0 (a3ddf46)。 測試中使用了自行訓練的《世界頂尖的暗殺者轉生為異世界貴族》蒂雅·維科尼和《公主連結》日和LoCon模型。
將 LoRA 在提示詞中的插入位置與AND
語法相關聯,讓 LoRA 的影響範圍限制在特定的子提示詞中 (特定 AND...AND區塊中)。
使 LoRA 支援放置在形如[A:B:N]
的提示詞語法中,讓 LoRA 的影響範圍限制在特定的繪圖步驟上。
添加了一個語法[A #xxx]
可以用來控制LoRA在每個繪圖步驟的權重
如果 #
不起作用,您可以將 #
符號替換為 \u0023
。
目前支援的有:
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逐漸遞增,直到x之後為1
cooldown(x)
- x為0-1之間的數字,表示一個冷卻的常數,以總步數計算,在高於x比例的步數時,函數值從1逐漸遞減,直到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]
[<lora:A:1>:<lora:B:1>:10]
[<lora:A:1>:10]
- 從第10步才開始使用名為A的LoRA
[<lora:A:1>:0.5]
- 從50%的步數才開始使用名為A的LoRA
[[<lora:A:1>::25]:10]
[<lora:A:1> #increment:10]
[<lora:A:1> #decrease:10]
[<lora:A:1> #cmd\(warmup\(0.5\)\):10]
[<lora:A:1> #cmd\(sin\(life\)\):20]
[<lora:A:1> #cmd\(
def my_func\(\)\:
return sin\(life\)
my_func\(\)
\):10]
- 與
[<lora:A:1> #cmd\(sin\(life\)\):10]
相同,但用了函數語法
- 提示 :
- 如果
[<lora:A:1> #cmd\(sin\(life\)\):10]
沒有作用的話,試試[<lora:A:1> \u0023cmd\(sin\(life\)\):10]
。 - 如果
[<lora:A:1> #increment:10]
沒有作用的話,試試[<lora:A:1> \u0023increment:10]
。
- 如果
使用內建的 LoRA 時,反向提示詞總是受到 LoRA 的影響。 這通常會對輸出產生負面影響。 而此擴展程序提供了消除負面影響的選項。
勾選此選項之後才能使用Composable LoRA的功能。
勾選此選項之後才能使用在特定步數上啟用或不啟用LoRA的功能。
在語言模型編碼器(text model encoder)的反向提示詞部分使用LoRA。 關閉此選項後,您可以期待更好的輸出。
在擴散模型(diffusion model)或稱降噪器(denoiser)的反向提示詞部分使用LoRA。 關閉此選項後,您可以期待更好的輸出。
如果有勾選[Composable LoRA with step],可以勾選此選項來觀察LoRA權重在每個步驟數上的變化
- 如果你產生的圖片崩成這樣:
可嘗試以下步驟解決:
- 先關閉Composable LoRA
- 從你的提示詞中暫時移除所有LoRA
- 隨便生成一張圖片
- 如果產生的圖片是正常的,再次開啟Composable LoRA
- 再把剛才移除的LoRA加回去提示詞中 (注意,要先開啟Composable LoRA再加入LoRA語法)
- 應該就能正常產生圖片了
--always-batch-cond-uncond
必須與--medvram
或--lowvram
一起使用
- 新增LoCon、LyCORIS支援
- 修正: IndexError: list index out of range
- 2023-04-08的版本提交pull request
- 修正使用 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)
- 實作控制LoRA在指定步數啟用與不啟用的功能
- 參考LoCon、LyCORIS擴展的程式碼,改善LoRA在不同AND區塊與步數啟用與不啟用的演算法
- 實作控制LoRA在不同步驟數能有不同權重的方法
[A #xxx]
- 繪製LoRA權重在不同步驟數之變化的圖表
- 修正: AttributeError: 'Options' object has no attribute 'lora_apply_to_outputs'
- 修正: RuntimeError: "addmm_impl_cpu_" not implemented for 'Half'
- 修正有時候LoRA加上去後會無法移除的問題 (症狀 : 崩圖。)
- 加入對
<lyco:MODEL>
語法的支援。