Skip to content

Latest commit

 

History

History
221 lines (189 loc) · 11.3 KB

README.zh-cn.md

File metadata and controls

221 lines (189 loc) · 11.3 KB

Python License

Composable LoRA/LyCORIS with steps

这个扩展取代了内置的 forward LoRA 过程,同时提供对LoCon、LyCORIS的支持。

本扩展Fork自Composable LoRA扩展

buy me a coffee

stable-diffusion-webui-composable-lycoris

语言

安装

注意 : 这个版本的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\)

并搭配Latent Couple extension

效果如下: 可以看到:

  • 当我<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模型模型。

功能

与 Composable-Diffusion 兼容

将 LoRA 在提示词中的插入位置与AND语法相关系,让 LoRA 的影响范围限制在特定的子提示词中 (特定 AND...AND区块中)。

在步骤数上的 Composable

使 LoRA 支持放置在形如[A:B:N]的提示词语法中,让 LoRA 的影响范围限制在特定的绘图步骤上。

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载入的种类,可能是loralyco
        • 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函数库中的函数 示例 :
  • [<lora:A:1>::10]
    • 使用名为A的LoRA到第10步停止
  • [<lora:A:1>:<lora:B:1>:10]
    • 使用名为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步停止使用
  • [<lora:A:1> #increment:10]
    • 在名为A的LoRA使用期间,权重从0开始线性递增直到设置的权重,且从第10步才开始使用此LoRA
  • [<lora:A:1> #decrease:10]
    • 在名为A的LoRA使用期间,权重从1开始线性递减直到0,且从第10步才开始使用此LoRA
  • [<lora:A:1> #cmd\(warmup\(0.5\)\):10]
    • 在名为A的LoRA使用期间,权重为预热的常数,从0开始递增直到50%的此LoRA生命周期达到设置的权重,且从第10步才开始使用此LoRA
  • [<lora:A:1> #cmd\(sin\(life\)\):20]
    • 在名为A的LoRA使用期间,权重为正弦波,且从第10步才开始使用此LoRA
[<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 的影响。 这通常会对输出产生负面影响。 而此扩展程序提供了消除负面影响的选项。

使用方法

激活 (Enabled)

勾选此选项之后才能使用Composable LoRA的功能。

Composable LoRA with step

勾选此选项之后才能使用在特定步数上激活或不激活LoRA的功能。

在反向提示词的语言模型编码器上使用LoRA (Use Lora in uc text model encoder)

在语言模型编码器(text model encoder)的反向提示词部分使用LoRA。 关闭此选项后,您可以期待更好的输出。

在反向提示词的扩散模型上上使用LoRA (Use Lora in uc diffusion model)

在扩散模型(diffusion model)或称降噪器(denoiser)的反向提示词部分使用LoRA。 关闭此选项后,您可以期待更好的输出。

绘制LoRA权重与步数关系的图表 (plot the LoRA weight in all steps)

如果有勾选[Composable LoRA with step],可以勾选此选项来观察LoRA权重在每个步骤数上的变化

其他

  • 如果你产生的图片崩成这样: 可尝试以下步骤解决:
    1. 先关闭Composable LoRA
    2. 从你的提示词中暂时移除所有LoRA
    3. 随便生成一张图片
    4. 如果产生的图片是正常的,再次开启Composable LoRA
    5. 再把刚才移除的LoRA加回去提示词中 (注意,要先开启Composable LoRA再加入LoRA语法)
    6. 应该就能正常产生图片了

兼容性

--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扩展的代码,改善LoRA在不同AND区块与步数激活与不激活的算法

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'

2023-04-23

  • 修正有时候LoRA加上去后会无法移除的问题 (症状 : 崩图。)

2023-04-25

  • 加入对<lyco:MODEL>语法的支持。

铭谢

a2569875/stable-diffusion-webui-composable-lora