LECO的直译并不是概念提取,概念提取更多是我的个人意译。
LECO全称Low-rank adaptation for Erasing COncepts from diffusion models.
简单来说,通过Erasing Concepts from Diffusion Models(下称消除概念)的原理来把特定的tag从底模里学习到lora里面,来达到消除/增强特定概念的方法。
由于消除概念的原目的是消除大模型里面的特定概念,比如nsfw,所以通过LECO制作出来的lora,正向权重是消除概念,负面是增强概念,而负值可以去到-4~-8等等
消除概念的一些示例
我们可以看到第一列第二张图,在消除梵高的概念后,通过梵高tag,生成出来的图就和梵高的风格就完全不一样了,而消除其他艺术家,比如毕加索的风格,并没有影响到梵高tag生成的图,SLD是Safe Latent Diffusion,另一种避开nsfw的方法。更多的例子,更详细的解释看Ref.
而基于消除概念和conceptmod的启发,p1atdev魔改了lora训练的脚本,通过把消除的概念提取出来,让lora学习这个特定的概念,制作出消除了这个概念的lora,而Lora本身可以正向和负向操作,使用负值就可以增强这个被提取出来的概念。
相对于单纯的tag权重,lora由于学习到提取出来的概念的合集,可以让图片更多元化?
blur_background:2,4,6,8
blur_background, <lora:blur_background:-2>,
同样的参数,可以看到blur_background lora权重到达-6的时候会触发一个特写,这就是lora在学习过程中,因为blur_background产生的数据里面包含了特写的相关数据,所以在权重特别大的时候能触发出来(猜的)
负面tag: blur_background:2,4,6,8
<lora:blur_background:2>,
单说blur_background这个lora,比较推荐-6到正6的权重,正面权重可以不放blur_background来减少背景模糊的效果,负面权重可以放blur_background增强背景模糊效果。
那么是如何使用LECO来训练这个Lora的呢?
使用了p1atdev的LECO脚本(https://github.com/p1atdev/LECO)
Setup
conda create -n leco python=3.10
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
pip install xformers
pip install -r requirements.txt
需要有8G 显存
open anaconda prompt
conda activate leco
cd到LECO文件夹
python ./train_lora.py --config_file "./examples/config.yaml"
讲解一下config.yaml
每个config都有对应的prompts.yaml,里面定义了要学(忘?)的概念
prompts_file: "./examples/blur_prompts.yaml"
pretrained_model:
name_or_path: "X:/...略.../xxx.safetensors" 也可以是ckpt 文件路径
v2: false
v_pred: true
network:
type: "lierla"
rank: 16
alpha: 1.0
train:
precision: "bfloat16"
noise_scheduler: "ddim"
iterations: 1000 一般1000步就够了,觉得不够的话就2000步,2000步以上就没多少意义了
lr: 1e-4
optimizer: "lion"
lr_scheduler: "cosine"
save:
name: "blur"
path: "./output/blur"
per_steps: 500 这里是每多少步保存一个lora文件
precision: "bfloat16"
logging:
use_wandb: false 如果有wandb野可以开
verbose: false
other:
use_xformers: true
blur_prompts.yaml
通过这个文件来决定要学习的概念
可以定义多个target概念,脚本会根据这些概念用底模生成数据来让lora学习
- target: "blur"
resolution: 512
batch_size: 3
- target: "blurry"
resolution: 512
batch_size: 3
- target: "blurry background"
resolution: 512
batch_size: 3
- target: "blur,blurry,blurry background"
resolution: 512
batch_size: 3
可以定义不同分辨率
- target: "blur"
resolution: 640
batch_size: 2
- target: "blurry"
resolution: 640
batch_size: 2
- target: "blurry background"
resolution: 640
batch_size: 2
- target: "blur,blurry,blurry background"
resolution: 640
batch_size: 2
- target: "blur"
resolution: 768
batch_size: 1
- target: "blurry"
resolution: 768
batch_size: 1
- target: "blurry background"
resolution: 768
batch_size: 1
- target: "blur,blurry,blurry background"
resolution: 768
batch_size: 1
具体的配合官方例子设置
一些官方的例子:
With "real life, instagram":
Without "real life, instagram":
laksjdjf的sd-trainer在dev里面也添加了LECO工具,可以改善p1atdev的训练过程中生成数据导致速度比较慢的问题。
除了单一概念的提出,有想过在提取出来的概念里面加一点各种各样的氛围,比如模糊背景加一个克苏鲁风格,那是不是就可以产生克苏鲁风格的模糊背景?
组合各种各样的概念融合进行提取,产生各种有趣的效果lora。
背景模糊lora
C站
https://civitai.com/models/100363/blur-background
l站
https://www.liblibai.com/modelinfo/b94b6999db15429493f613bef34f47b0?mine=1
看论文,研究脚本,训练lora,各种验证测试,还是花费了好几天的,
欢迎各位留言转发,
有能力的还可以给我充电支持一下,十分感谢。
https://www.buymeacoffee.com/JasonAICreator
有个AI群,欢迎各位加入一起研究进步。
Ref:
https://github.com/p1atdev/LECO