【Lora炼丹术】从零开始,炼制你的第一个LoRA(1)
作者:白马少年 |公众号:【 白马与少年】
介绍:SD实践派,出品精细教程
发布时间:2023-08-15 20:01
原文网址:https://mp.weixin.qq.com/s/NUvEBvdGTQNCfxSKCwV_gw
从接触SD到现在,相信大家一定使用过各种各样的lora,包括人物的、建筑的、画风的等等,那么你有没有想过炼制一款属于自己的lora模型呢。
我们先来了解一下炼丹的基础概念,它的关键原理就是——等价交换法则!
不好意思,说错了。
重新来,Lora全称Low-Rank Adaptation Models,中文翻译为低阶自适应模型。它的作用在于影响和微调画面。通过lora的帮助,可以再现人物或物品的特征。
大模型的训练通常是非常复杂且需要很高的电脑配置的,LoRA采用的方式就是在原有的模型中插入新的数据处理层,这样就避免了修改原有模型的参数。LORA模型训练,其实就是用一些特定特征来替换大模型中的对应元素,比如一个固定的人物相貌、特定的服装或者是特定的风格,这样就可以生成不同于底模的图片。
所以,lora训练是比较轻量化的,需要的显存也少了很多,硬件门槛显存达到6G就可以开启训练了。
我们今天要使用的是B站UP主“朱尼酱”的赛博丹炉,他的这款丹炉,界面更加友好、美观,适合新手入门。
废话不多说,我们就正式开始吧。
# 丹炉基础部署
首先我们在云盘中下载这个压缩包,然后解压到本地磁盘中。
最好是直接放在某个盘的根目录下,路径中不要带有中文。
然后找到E:\cybertronfurnace1.4\cfurnace_ui路径下的Cybertron Furnace.exe文件,双击启动。
等待一段时间,我们的赛博丹炉就正式启动了,画面非常的炫酷,有一种未来科技的感觉。
# 参数理解
我们点击“开启炼丹炉”,正式进入到丹炉内部。
打开素材库可以看到5张tifa的图片图片,这是丹炉中自带的,我们先用这个来炼制第一炉丹吧。
我们可以选择一个任意的基础模型,然后给我们想要炼制的lora取一个名字,即召唤词。
正常来说,这个丹炉已经帮我们按照类型设定好了参数,所以你只需要点击“人物”选项卡就可以开始训练了。但是,我们这里最好还是要了解一下相关的参数,所以我们选择“自定义参数”。
点击确定,我们就进入了一个参数设置的面板。接下来,我们就来了解一下,这些参数的具体含义。
1
首先是学习步数,指的是AI对我们每一张图片的学习次数。根据我们的训练内容,二次元图片的repeat一般在10-15,写实人物图片的repeat一般在30-50,真实世界的一些景观场景可能要达到100。repeat值越高,ai就能更好的读懂我们的图片,理论上讲图片的精细度越高,学习步数就要越高。
循环次数:AI将我们的所有图片按照学习步数学习一轮就是一次循环,那循环次数就是将这个过程重复多少遍。一般数值在10-20之间,次数并不是越多越好,因为学多了就会知识固化,变成一个书呆子,画什么都和我们的样图一样,我们称之为过拟合。每一次循环我们都会得到一个炼丹结果,所以epoch为10的话,我们就训练完之后就会得到10个丹。
我们总的训练步数,就是:图片张数*学习步数*循环次数=训练步数。
即:5*50*10=2500步
2效率设置,主要是控制我们电脑的一个训练速度。可以保持默认值,也可以根据我们电脑的显存进行微调,但是要避免显存过载。
并行数量:代表了AI在同一时间学习多少张图片。数值越大,训练速度越快,内存占用越大,但收敛得慢。反之,数值越小,训练速度越慢,内存占用越小,但收敛得快。以512*512的图片为例,显存小于等于6g,batch size就老老实实地设置为1就行了;如果显存为12g以上的话,batch size就可以设置为4或者6。这里提到一个收敛的概念,就是说你最后生成的图片,和原图越像,就说明收敛得越好。训练速度越快的话,就像一个人在快速地翻书,虽然很快翻完了,但是未必能全记得住,所以并不是训练速度越快越好。在一般情况下,我们增加并行数量,同时也会增加一些循环次数,让AI多看几遍书。
3
质量设置主要是用来影响产出LORA的一个最终质量,当然最终lora的好坏还需要通过XYZ去测试和看实际的loss值。
学习率指的是AI学习图片时的效率,学习率太高会出现过拟合,图片和素材太相似;学习率低会出现不拟合,图片和素材没关系。
1e-4是一种程序里的数学表达,实际上就是1除以10的4次方,即:
1e-4=1/10000=0.0001
1e-5=1/100000=0.00001
这三个数值呢,一般情况下我们保持默认就可以,如果想要调整的话,点击数值旁边的加减号就可以了,很直观。
网格维度:network dim决定了出图的精细度,就像细分网格一样。数值越高,会有助于AI学会更多的细节。同样,也不是数值越大越好,数值越大,学习越慢,训练时间越长,容易过拟合。
DIM为32时,输出的文件一般为40MB+;
DIM为64时,输出的文件一般为70MB+;
DIM为128时,输出的文件一般为140MB+;
4
样图设置主要是用来控制在训练过程中的样图显示,这样我们能实时观测到训练过程中的效果。
sample every n steps为50,就代表着每50步生成一张样图。
prompts提示词可以预设一些效果,让样图进行显示,也可以自定义。
# 素材处理设置好参数之后,我们来训练集当中,正常情况下,我们要炼制lora的话,大概需要20-30张质量比较高的图片。这边虽然只有5张,不过我们可以先用起来。
先设置分辨率,常见的就是512*512,或者512*768。
这里有一些裁剪模式,可以帮我们自动处理图片。
设置好之后,我们点击预处理。
等待预处理完成,就可以看到图片被处理成了脸部和上半身的聚焦图片。
进入TAG编辑当中,可以看到每张图片都被自动加上了标签,可以说是非常方便了。
纯英文的tag看起来还是有点费劲的,我们可以打开这个翻译设置来开启双语tag。
我们进入百度翻译开放平台,注册一个账号,点击“通用文本翻译”、
点击“免费体验通用文本翻译API”。
接下来会有注册为开发者的选项,大家可以注册个人开发者,按照流程填写即可。注册好之后,进入开发者信息,就可以看到AppID和密钥了。
将信息填入,开启双语TAG,可以看到下面的tag就变成双语的了。
接下来就是检查每幅图的tag,看看描述词是否和人物匹配,删除不正确的,新增一些你需要的。
检查完没有问题之后,就可以点击“开始训练”,炼制我们的第一枚丹了。
# 炼丹
接下来就可以看到训练过程了,每训练50步,右下角就会生成一张图,方便查看目前的效果。这个图会随着训练的进行越来越像,静下心慢慢等待吧。
训练完毕之后,这里会有一个loss值,这代表着一个深度学习的效果,数值在0.07-0.09之间是最优的,如果数值太大说明学习效果不好。我们这个丹是0.0734,所以目前来看还是不错的。
然后我们点击这个模型文件夹,就可以看到我们的炼丹成果了。
一共有10枚丹,我们改一下名字,将第一枚丹的后缀改为“……000010”。
至此,我们的训练过程就全部结束。
# 跑图测试
炼丹完成并不意味着结束,这些丹到底成不成功呢?我们还需要将这些丹放入SD当中,进行跑图测试。
不然的话,万一……
不可能,绝对不可能!
我们进入SD的lora文件夹中——E:\sd-webui-aki-v4.2\models\Lora,新建一个文件夹,命一个名字“tifa”。
将这十枚丹全部放入其中,然后启动SD。
打开lora选项卡,刷新一下,就可以看到这十个lora了。
我们将一张tifa的图片放入WD 1.4 标签器中,反推关键词,然后发送到文生图。
在正向提示词的结尾加上第一个lora。
更改一下代表单词,将编号“00001”改为“NUM”,将权重“1”改为“STRENGTH”。
使用XYZ脚本,提示词替换,x轴设置为“NUM,000001,000002,000003,000004,000005,000006,000007,000008,000009,000010”;y轴设置为“STRENGTH,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1”。这样就可以测试出不同的lora,在不同的权重之下的效果。
点击生成,经过一段时间的渲染,我们就得到了一张lora的测试图。
接下来,我们就要在茫茫多的tifa当中,用肉眼来寻找里面觉得最像的一张,这个过程是艰辛的,大家要坚持住,我们就快成功了。经过对比,我觉得编号00003在权重为1时是最像的,那就决定是你了!
接下来,我们就换一换提示词,使用选定的这个3号lora在不同提示词下生成一些图片,看看效果如何。
效果看起来还是不错的,这样我们的第一枚丹就算是炼好了,虽然不能说是一模一样,但还是有几分神似的,毕竟我们的训练图只有5张。分享到这里告一段落,对丹炉感兴趣的朋友,可以添加我的公众号【白马与少年】,回复【炼丹】即可。
-END-