你真的会用LORA吗?超详细讲解LORA分层控制

LORA分层控制的教程其实网上已经有一些了,不过我感觉都偏理论,许多像在上数学课,

而且实际运用讨论很少,既然如此,我就自己研究,出一期应用型的心得好了。

既然说是应用型的心得,所以文章也会用大量的实例来说明和求证


我们为什么要用lora?

LORA可以让我们轻松画出特定的人物,物品,特殊的笔触和特殊的画风或风格,属于一种特殊训练的子集。

那么我们将一个人物LORA的特征分下类 (人物LORA为例,容易理解)

人物容貌:包括人物的发型,眼睛,脸型,嘴巴,表情

人物服饰:包括头饰,服装,鞋子,配饰等

人物姿势动作:人物的姿势或者动作

画面风格:整个LORA的画面风格

画面背景:整个LORA画面的背景

LORA过拟合:某些LORA训练过拟合产生的问题。


分层控制这个插件对应的层数有17层,为了更好的理解,先看看LORA的原理,

能看出LORA工作流程分为三大部分:

IN(输入部分),MID(中间部分)和OUT(输出部分)外加一个开关BASE(第一层)

开关第1层+ IN输入部分(2-7层)+MID(8层)+OUT输出部分(9-17层)

而插件作者将17层归为7个小类,如下

INS 17层的2-4层,第一层是base 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0
IND 17层的5-7层,第一层是base 1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0
INALL INS+IND,整个IN部分, 2-7层 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0
MIDD IND+MID+OUTD部分,5-12层 1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0
OUTD 17层的9-12层,第一层是base 1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0
OUTS 17层的13-17层,第一层是base 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
OUTALL OUTD+OUTS, 整个OUT部分 1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1


那每个部分是如何作用画面的呢?我用官方文档和我自己生成的双图为例,

NONE是指原图,ALL是指LORA全开权重为1的图。

通过不断对比两组图,找出各种差异属于哪个部分,做一个大概的推断,得到以下数据

人物容貌 MIDD左右
人物服饰 IND,OUTD,MIDD
人物姿势 IND
LORA上色风格 OUTS
LORA背景 MIDD
过拟合 OUTALL


这里说下过拟合,过拟合是指LORA追求100%像,而降低了泛用性,拿人物来说,有些LORA只能出半身图,你用它出全身图就崩了。


LORA控制容貌层

LORA只影响容貌

好了,基本总结完了,下面进入实际操练环节,首先是LORA容貌部分,我们先看这张图,

原图
斯嘉丽LORA分层全开,权重1

为了不让tag影响我们实验结果,tag就用基础魔咒

prompt: 1girl, (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.37), ultra-detailed
1个女孩, (8k, RAW照片,最佳质量,杰作:1.2),(逼真,照片逼真:1.37),超细节
Negative prompt: nsfw, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, (outdoor:1.6), manboobs, backlight,(ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.331), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (more than 2 nipples:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), bad hands, missing fingers, extra digit, (futa:1.1), bad body, NG_DeepNegative_V1_75T,pubic hair, glans

现在我们用斯嘉丽的LORA作为例子,如果我们想要寡姐只替换这张图的面部,而不改变其他,那我们根据之前总结的,应该只作用于MID部分附近,其他都关闭,试试效果。OUTD为9-12层,我们先扩大为8到12层

具体参数为1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,结果如下

开启8-12层

发现连姿势和背景也变了,不太对,缩小范围为9到11层,调整参数为:1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0

开启9-11层

寡姐脸对了,再试试继续调整,参数改成1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0

仅开启10层

放一起对比看看

还是黑色衣服寡姐比较像,最后那套方案和原图很像了,那就用之前的方案,命名为ONLYFACE

ONLYFACE:1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0

LORA影响容貌以外的元素

因为影响容貌的层已经试出来了,那就剩余层就应该是影响其他因素

参数为1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,试一试

关闭9-11层,其他全开

再对比下原图和LORA全开的图

发现还是比较符合预想,把这个命名为DELFACE

DELFACE:1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1

LORA人物服饰

根据最初总结的,去掉OUTS的最后5层,MIDS的2-4层,以及人物容貌控制的9-11层

余下的应该是1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,试一试

开启4-7层和12层

其实服装挺像了,发型容貌也没有被寡姐影响,但是背景被影响到了,姿势也是,再调整试试,删掉

midd部分,只留下1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0

只开5,6和12层

背景也被保留了,而且也是室外而不是室内,再调整参数,继续精简,然后发现第5层一定要留,不留就变这样

不留5层,服饰完全无法更改
只留5层

感觉只要5层就可以了,为了验证下,我们再开一组试试, 用一组不需要触发词的LORA(爱丽丝),自带衣服风格的,易比较

只开5层:

只开5层

崩得很严重,LORA全开应该是这样

LORA全开

没办法,只能继续调试


头都秃了,发现MID层极为影响衣服的生成,但是同样也影响容貌,很难分离,只能又加回来几层继续调试,试了半天觉得比较好的衣服参数为以下,

CLOTHES: 0,0,0,1,1,0,0.2,0.8,0.8,1,1,0.2,0,0,0,0,0

CLOTHES参数

有更好的参数记得告诉我

LORA上色风格

不说过程了,又是调试好久,这个还行

COLOR-STYLE: 1,0,0,0,0,0,0,0,0,0,0,0.8,1,1,1,1,1

原图
LORA全开
上色风格

实在要吐,越来越玄学

LORA画面背景

用回原来的图,锁种子,又是调整了好久,就怕过拟合,差不多的参数,取名BACKGROUND

BACKGROUND: 1:1,1,1,1,1,1,1,1,0.2,0,0,0.8,1,1,1,0,0

原图
LORA全开
保留背景(有室内的影子)

LORA人物动作

锁种子后非常不好调,和许多参数重叠在一起,很难单独调出来

网上的调法是:1,1,1,1,1,1,0.2,1,0.2,0,0,0.8,1,1,1,0,0,试过效果一般,为了完成还是取名

ACT: 1,1,1,1,1,1,0.2,1,0.2,0,0,0.8,1,1,1,0,0

建议用controlnet的canny或者openpose辅助完成,单靠LORA分层无法解决

LORA过拟合

其实很多教程和我自己实验都证明了,解决过拟合比较好的方式就是OUTALL,

这里举例证明下,

原图
风格LORA,崩了
过拟合修正

OUTALL:1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1

除了这个方法外,还可以用降低LORA的比重来解决LORA过拟合问题。


17分层的研究就告一段落了,这里把我调试的参数公布整理下

ONLYFACE:1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0

DEFACE:1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1

CLOTHES: 0,0,0,1,1,0,0.2,0.8,0.8,1,1,0.2,0,0,0,0,0

COLOR-STYLE: 1,0,0,0,0,0,0,0,0,0,0,0.8,1,1,1,1,1

BACKGROUND: 1:1,1,1,1,1,1,1,1,0.2,0,0,0.8,1,1,1,0,0

ACT: 1,1,1,1,1,1,0.2,1,0.2,0,0,0.8,1,1,1,0,0

OUTALL:1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1

分层插件LoRA Block Weight

把上列数据拷近插件LoRA Block Weight

GitHub - hako-mikan/sd-webui-lora-block-weight

点保存,下次就可以直接调用使用了

例如 <lora名称:1:ACT>,就能调用ACT的分层参数,记得区分大小写,也记得启动LoRA Block Weight

应该是全网最详了,头疼,各位晚安

编辑于 2023-04-12 23:12

Published

Category

Zhihu

Tags