这个扩展取代了内置的 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)
(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模型模型。
将 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>
语法的支持。