Stable Diffusion LoRA, LyCoris

时间:2024-11-09 08:31:27

本节内容,给大家带来的是stable diffusion的LoRA与LyCoris模型课程。我们在上节课程中,已经详细讲解了关于大模型的使用。在stable diffusion中打造一个大模型,需要基于大量特定特征的图像集进行训练,我们通常将这个过程称之为Dreambooth训练,这个过程比较耗时,同时对计算资源的要求也比较高,因为该过程将产出一个完整的新的大模型,所以最终训练出的文件也会占据相当大的存储空间,但总体来说,Dreambooth训练出的大模型应用能力是最强的,能适应广泛的场景。

除了大模型,stable diffusion还引入了一些方法和技术,来对绘制图片的过程进行更为明确的引导。Lora模型便是其中的一种。

一:LoRA

我们经常看到一些爱好者上传的图片,非常的有特色,比如

可以看到这些图片对某一类角色或事物有着很好的刻画和特定风格输出,这些特定的角色和风格输出就是由Lora模型实现的。

LoRA并不是AI绘画专有的技术,其原本是针对于LLM(大语言模型)所开发的技术,旨在解决避免将整个模型参数拷贝下来才能对模型进行调校的问题。(相较于SD,LLM的模型参数量完全是另外一个级别的了,比如ChatGPT3据说有1750亿参数,如果每次修改都要拷贝整个模型出来,那就有点太难以调校了)。LoRA采用的方式是向原有的模型中插入新的数据处理层,这样就避免了去修改原有的模型参数,从而避免修改整个模型,同时其也优化了插入层的参数量,最终实现了一种轻量化的模型调校方法。

通过LoRA训练,我们最终将训练出一套新数据处理层参数,这些参数可以插入进原有的SD模型中,并使得输出的图像结果具有高度的特征性。Lora的训练过程,不需要对基础模型进行底层修改,训练时资源消耗也远小于Dreambooth训练,而最终生成的Lora模型大小通常也小于基础模型,一般都是几百M大小。这些特点使得Lora模型非常的亲民,很多AI绘图爱好者也会拿自己非常喜爱的图像数据集去训练专属的Lora模型。

我们在C站上可以看到很多爱好者上传的Lora模型。我们打开Model列表页面,点击右侧的过滤图标,Model types只选择Lora,页面将展示Lora模型卡片列表。

在列出的模型列表中,可以看到左上角标签为Lora或Lora XL,这些模型就是stable diffusion的爱好者们训练和上传的Lora模型。

我们点击一个Lora模型进去查看一下详细信息。

在右侧的详细信息表格,可以看到这个Lora是基于SD1.5的。Lora模型必须搭配大模型使用。虽然这里提示的是使用SD1.5,但实际上我们在选择大模型时,不一定必须选择SD1.5,也可以选择基于SD1.5基础模型所训练得出的其他大模型。大部分这些模型的兼容性都是比较好的,也有很多大模型(比如ghostmix)会在说明文档中特别强调对Lora的兼容性比较好。

当然,有的时候,某些大模型与LoRa无法配合得很好,比如如果使用二次元风格的大模型去配合动物写实类Lora,出图的效果不一定会很好,这个时候,可以尝试使用原生SD1.5模型,或者二者风格更接近的大模型。  

带有XL的Lora,通常是基于SDXL使用,

我们点击一个带有XL的Lora,点击进入,可以看到基础模型为SDXL 1.0。

与使用大模型相同,我们在使用Lora前,建议认真阅读Lora文档,很多Lora模型除了告诉我们如何在提示语句中添加Lora触发关键字,还会推荐添加的提示词关键字。

我们演示一下,

找到喜欢的Lora模型后,可以点击下载按钮可以将Lora模型下载到本地,

我们在安装课程中已经学习过,Lora模型下载后需要放置到stable diffusion webui程序主目录下的models文件夹中的Lora子文件夹中,

我们这里用鼎鼎大名的墨心 MoXin Lora来做演示,C站上下载该Lora,然后将文件放置到stable diffusion webui程序主目录下的models文件夹中的Lora子文件夹后,在stable diffusion webui主页面反向提示词下方的标签页,点击Lora,点击刷新,便可以看到刚刚下载好的Lora(注意如果选择的是SDXL大模型,则moxin1 lora不会显示,需要选择SD1.5底模的大模型,moxin1 lora才会显示)。

下载好后,如何调用Lora模型生成想要的图像呢,stable diffusion webui提供了多种方式

我们可以在提示词中直接写入<Lora:Lora名字:数字>,Lora名字后冒号的数字用于设置权重,

但是在使用中我们并不推荐这种方法,因为书写Lora名字的时候很容易写错,很可能导致实际上并没有调用到Lora模型,我们推荐的是另外两种方法。

第一种推荐方法是在页面中点击Lora标签页,然后点击对应的Lora卡片,可以看到Lora模型的信息就会自动添加到提示词中,我们只需要修改权重数字即可。这种方式能更准确地添加Lora模型信息到提示词,我们也可以同时添加多个Lora模型的信息到提示词中。

我们点击墨心lora,可以看到,墨心lora引用指示添加到了提示词中,我们增加提示词:

(masterpiece, top quality, best quality, official art, beautiful and aesthetic:1.2),shuimobysim, zhenbanqiao,  1girl,traditional chinese ink painting, <lora:shuimobysimV3:0.8>

我们可以仔细阅读该lora的文档,参考文档中的信息,修改Lora的权重为0.8,另外,Lora的模型右侧也提到了触发词,

添加这些触发词并不是必须的,但是我们推荐添加到提示语句中,推荐的大模型有guofeng3,

所以我们使用guofeng3,点击生成,stable diffusion很快帮我们生成了优秀的水墨画图像。

这里我们还要再次强调阅读文档的重要性,与大模型相同,在使用Lora前一定要认真阅读文档,因为文档中包含了详细的信息,比如提示词的推荐写法,参数的推荐设置,大模型的选用等等,这些信息都是引导AI绘制出高质量图像的关键。

除了上述方式引用Lora,另外一种推荐的方式是使用Addition Network插件来引入Lora,Additional Network是一个插件,他可以用于控制多个LoRA模型生成混合风格的图像

我们需要先安装Additional Network这个插件,该插件的官方地址如下。

https://github.com/kohya-ss/sd-webui-additional-networks

按照之前课程中已经讲述的插件安装方法,我们将插件下载到指定目录,然后重启webui

需要注意的是,默认情况下,addtional network会在插件目录models文件夹下的lora子目录去搜索模型,但我们建议修改设置,将lora搜索目录设置为stable diffusion的原生lora目录。设置的方法是在设置标签页找到可选附件网络(LoRA插件)设置项,然后在选项“扫描 LoRA 模型的附加目录”中,复制原生lora模型文件夹地址,保存设置即可。

addtional network允许任意地组合最多5个不同的LoRA模型并设置它们的权重(-1-2),使用addtional network,提示词中无需再通过尖括号:Lora名:权重的方式添加引用Lora的指示词 ,

我们演示一下addtional network的使用,安装addtional network后,在页面下方将出现一个可选附加网络下拉列表,点击展开,可以看到在这里我们可以附加最多5个lora模型,点击启用,第一个附加模型选择MoXinV1, 权重设置为0.8,

我们还可以附加另外的Lora,比如我们在第二个附加网络,设置好hanfuTang这个我们已经安装好的Lora,该Lora是一个可以生成汉服唐风图像的Lora模型,设置权重为0.6,然后填写好提示词

(masterpiece, top quality, best quality, official art, beautiful and aesthetic:1.2), 1girl,traditional chinese ink painting, pink upper shan, chest po skirt , tang style, shuimobysim (注意模型切换为sd1.5)

然后填入一些固定的反向提示词

(hand:1.3),finger,EasyNegativeV2,ng_deepnegative_v1_75t, lr,(monochrome:1.2),facial mark, facial tattoo,border,frame,(pantyhose),(low quality,worst quality:1.3),bad artist's work,crossed eyes,signature,watermark,username,text

这里的提示词中没有再通过尖括号:Lora名:权重的方式添加引用Lora的指示,点击生成,stable diffusion帮我们生成了一幅唐装水墨画,该图像也融合了moxin和hanfutang两个lora的特征。

二 :LyCoris

使用Lora模型是非常重要的SD绘图技巧,我们应该熟练掌握。

与Lora模型相似的还有LyCORIS模型

LyCORIS(有时又称LoHa)也是一个类似lora的微调模型,他是算法更优化、更简洁、更节约训练资源的微调模型,同时在stable diffusion webui中可以进行更多的参数微调。LyCORIS调节层数更多,可以精准的微调某一项的效果。比如脸、手、光影、服装以及皮肤等等。

我们在调用lora模型时的参数只有一个权重,而LyCORIS的参数可以非常丰富。我们预计将来也会出现基于LyCORIS的更多定向微调模型,比如面向脸、面向手、面向服装等。简而言之,LyCORIS比Lora增加了更多的参数,从而提供了更为精准与强大的AI绘图调节手段。

stable diffusion webui默认没有添加对lycoris的支持。在使用LyCoris前我们需要安装相应的插件,lycoris的插件地址如下

https://github.com/KohakuBlueleaf/a1111-sd-webui-lycoris

参照之前课程的讲述,我们将该插件下载放置到stable diffusion webui主程序目录下的extensions文件夹,然后重启webui,可以看到反向提示词下方的标签页列表出现了lycoris项目,接下来我们便可以使用lycoris模型来指导绘图。   

LyCoris的使用与Lora是非常类似的,我们只需要将下载的LyCoris模型文件下载到stable diffusion webui程序主目录models文件夹下的Lycoris目录即可。

我们以Delicate Armor这个LyCoris来做演示,该lycoris模型可以为人物添加盔甲元素,C站上搜索 Delicate Armor关键字。

下载好该模型文件并放置到对应文件夹下,点击反向提示词下方的LyCoris标签页,点击刷新按钮,可以看到下载的LyCoris模型,点击该模型对应的卡片可以将该模型的指示命令即尖括号lyco:名称:权重添加到提示词中,

我们先切换一个合适的大模型,选择一个人物写实模型,然后我们参考该LyCoris的文档,权重设置为0.6,书写提示语句如下,提示语句中也添加了文档中推荐的触发关键词,

masterpiece, best quality, (1boy:1.1),  delicate\(armor\), <lyco:delicate_armor_V2:0.6>

反向提示词使用仍然可以使用一些固定的写法

(worst quality, low quality:1.4), text, watermark

nsfw, mutated hands and fingers, deformed, bad anatomy, disfigured, poorly  drawn face, mutated, extra , ugly, poorly drawn hands, missing  , floating , disconnected limbs, malformed hands, out of  focus, long neck, long body

点击生成,可以看到,stable diffusion帮我们生成了一幅精美的穿戴者盔甲的人物图像。

这里还有一个小提示给到大家,Lycoris模型其实能很好地兼容Lora,比如我们可以采用lora的写法,使用尖括号lora:名称:权重的方式将lycoris的指令添加到提示词中

我们甚至可以将Lycoris模型下载到Lora目录,像使用Lora一样使用Lycoris模型

目前C站上提供的大部分lycoris模型其实并没有完整地体现lycoris模型的优势,比如lycoris模型理论上在使用时可以添加参数值来对绘图过程进行更细致的控制。但目前大部分lycoris模型并没有体现这些功能。

在lora的使用中我们提到可以使用additional network插件,additional network插件能简化lora模型的调用操作过程。到目前为止,additional network插件还不支持lycoris,但将来additional network插件应该会增加对lycoris的支持亦或者是有类似的插件提供对lycoris的支持。我们可以经常关注社区的一些信息,随时获取最高效的stable diffusion使用工具。

三:补充知识点:CLIP SKIP

本节课程我们还补充另外一些知识点,我们在C站上浏览其他爱好者上传的图片时,可以看到生成图片的详细信息,但我们更建议使用之前课程讲述的图片信息标签页来获取图片信息。比如我们浏览武墨 WuMo这个lycoris,将示例图片下载到本地,

使用图片信息标签页上传图片,可以看到详细信息,这些详细信息比C站上提供的信息更完整,也更准确。我们看到这张图片的详细信息里有Clip skip: 2, ENSD: 31337这两个特别的数字。这是两个非常重要的数值,但是我们在使用stable diffusion webui生成图片时从未设置这两个数值。这两个数值其实是在设置中来进行调整,

进入设置—打开stable diffusion项,可以找到clip skip或clip跳过层设置,该设置默认为1,由于课程篇幅有限,我们不对clip skip做过多的理论讲述,如果有兴趣,可以自行上网搜素stable diffusion clip skip的知识,我们只需要知道调整clip skip可以使绘图结果产生轻微的变化,在sd1系列大模型中,可以对该数值进行调整来调试图像输出结果。很多时候该数值设置为2,我们可以在这里将默认数值设置为2,保存设置即可。

我们也可以在用户界面项中的快捷列表中添加clip_stop_at_last_layers快捷项,保存重启webui,可以看到最上方出现了clip skip的快捷设置项,在绘制图片时调整该设置项可以对clip skip数值进行设置。

四:补充知识点:ENSD

ENSD 其实是 Eta noise seed delta 的缩写,  

该数值用于设置种子值偏移量,当生成图像时,该数值将添加到种子值中,如果种子值使用随机设置-1,则ENSD没有太多影响,但如果我们使用固定种子值还原图像时,一般需要将该值设置为31337,这是一个惯例值。

进入设置—打开采样器参数项,

可以找到Eta 噪声种子偏移,默认值为0,我们可以根据推荐设置为31337,保存即可。

好了,本节课的课程到这里就结束了,我们做一下总结,我们首先比较了Lora模型与大模型在微调模型时的区别,然后详细演示了在stable diffusion中如何使用Lora模型来引导AI绘制具有特定倾向性的图像,我们演示了Lora的两种不同引用方式以及使用Lora模型时一些需要注意的事项。

学习完Lora模型,我们继续讲解了与LoRa模型非常相似的LyCoris模型的使用。最后我们为大家补充了一些在stable diffusion应用时需要掌握的知识点。这些知识点可以帮助大家在某些场景能成功复现图像的绘制。