上周初次尝试了训练LoRA模型,周末两天的时间一直在遇到问题摸索解决问题,修改完善模型,测试模型当中度过,好在问题都一一解决,也在LiblibAI上首发了我的处女作。👏👏👏
本篇文章仅整理归纳我的LoRA训练思路及步骤,以及自己遇到的问题和解决方案的复盘整理。希望对新手炼丹师们有所启发和帮助。
LoRA是Low-Rank Adaptation的缩写,最早在2021年论文《LoRA: Low-Rank Adaptation of Large Language Models》中提出。是一种大语言模型低秩适配器,简单来说就是它可以降低模型可训练参数,使其尽量不损失模型表现的大模型微调方法。
在此之前,StableDiffusion只能通过使用Dreambooth的方法训练大模型,如果对大模型的效果不满意,那么就只能从头开始,重新训练,但是大模型的训练要求高,算力要求大,速度慢。自从LoRA被引入StableDiffusion后,大大降低了训练门槛,并扩宽了产出模型的适用范围。这就使得我们这些对AI绘画感兴趣的非专业人员,也可以在家用电脑上尝试训练自己的LoRA模型。
LoRA的出图原理和理论知识在网上已经有很多,在此不做赘述,感兴趣的小伙伴可自行查找。
LoRA训练对显卡有一定要求,同时需要安装一些方便训练的软件。
首先,对电脑配置的要求主要来自显卡,需要显卡有足够的显存,其他配置不太差就可以。显卡的选择中显存是第一要素,SD1.5版本的底模6G显存勉强可用,8G显存就可以比较流畅的生成图片和炼制LoRA,12G可以流畅的使用Dreambooth微调大模型。我的Mac本直接Pass,Win的配置也不是特别高,所以炼丹速度比较慢,但是勉强可以用。
然后,就是推荐下载几个后续方便训练的软件,帮助新手小白降低训练难度,提升炼丹效率。
其他LoRA训练丹炉,我已经下载还未使用,感兴趣的小伙伴也可以自行下载试用。
1. 确定目的
在训练LoRA模型之前,我们需要首先明确自己需要训练什么类型的LoRA,有的博主将模型分成了几个大类:人物角色、画风/风格、概念、服饰、物体/特定元素等。
我只简单的划分为两类:具象类和泛化类,具象类如:一个物体、一种姿势、一种服装、一个人物、某个特定元素等都可以划归为具象类。泛化类如:某种场景、某种艺术风格、色彩风格等。
前期明确目的的训练能更好的确定要找素材的数量及选择的大模型类型,为后面的具体训练打好基础。
2. 收集素材
⚠️ 「大模型的选择」和「图片质量」都是收集素材的关键!
收集素材阶段,我们仍然按照第一步中的训练目的,分为具象类和泛化类。
具象类LoRA:数量:在具象训练中并不是素材越多越好,一般建议20张左右即可;素材要求:不同角度,不同背景,不同姿势,不同服饰,清晰无遮挡的图片
⚠️ 如果同质化的素材太多,容易造成权重的偏移。
泛化类LoRA:数量:在泛化类训练中需要素材多一些,建议50张以上
⚠️ 这种情况不需要特别在意同质化,但也切勿非常接近的素材占比过高。
3. 处理素材
从这一步起,我们会使用到上文提到的软件。处理素材主要包括统一素材尺寸、生成标签和优化标签。
a、统一素材尺寸
可以使用修改图片工具对图片尺寸进行批量处理,至少保证一边为512px,但必须是64的倍数。横竖图可放一起训练。也可以使用美图秀秀或者PS自行裁剪。
b、生成标签
我使用的是秋叶大佬提供的StableDiffusionWebUI,启动SD-训练-图像预处理。
在你的随便一个盘,建2个文件夹,我简单的命名为1和2(1文件夹放你收集好的图片素材即为「源目录」。2文件夹不需要管,等到SD自动打标完,会将打标文件和你的图片自动存放在2文件夹内,即为「目标目录」),调整宽度和高度与你的素材尺寸保持一致。
复制文件夹1和2的地址,分别粘贴到源目录和目标目录的位置。
有两种生成标签的方式:BLIP即自然语言标签,比如“1个女孩在草地上开心的跳舞”;Deepbooru即词组标签(常用),比如“1个女孩,草地,跳舞,大笑”。一般选择使用Deepbooru生成标签。
当SD界面右侧出现Preprocessing finished,就表示SD已经帮你自动打标好了。
打开刚才建的2文件夹,就可以看到图片和自动生成的标签了。txt文本中的就是SD自动打好的标签。
c、优化标签
第一次训练时我没有优化标签直接训练LoRA,最后的LoRA效果不是很理想,第二遍训练又新增了素材数量,同时优化了标签。
优化标签一般有两种方式:1)保留全部,不做删减,用此方法比较方便,但是需要用精准的关键词,才能还原想要的效果;2)删除部分特征标签,我使用的是此方法。
批量修改关键词的工具BooruDatasetTagManager,很多大佬推荐过,界面比较原始,好用的点是可以批量增删改查关键词,并且可以通过调整关键词位置来调整权重。当然你也可以使用VsCode,或者直接用txt调整都可以。
下载完后,直接双击exe文件运行,就会出现此界面。界面分为三个区域,分别是「数据集区域」「图片标签区域」「数据集内所有标签区域」。标签相关的区域右侧都有操作,可以增加、删除,翻译、上下移动标签,常用的就是这几个功能。
选中文件-读取数据集目录可导入数据集;选中界面-翻译标签,可翻译所有标签,标签可拖动上下移动,更改权重,最后全部修改完别忘记保存更改。
数据集导入后,就可以开始对照图片素材对标签进行删改,需要注意的是标签提示词的前后顺序代表着标签的权重,越靠前的标签权重也就越大,所以我们可以把想要的效果或风格标签放在前面,像背景干净这类标签尽量靠后。
标签优化方法:删减掉训练风格或者需要生成内容的相关词。比如我要生成「手绘插画」的LoRA模型,就需要保留图片素材中手绘插画风格相关的内容作为自带特征,那么就将与手绘插画相关的词语标签删除,增加触发词“shouhui或者chahua”。将“shouhui或者chahua”触发词与其风格相关的词关联,当你填写触发词后就会自带此风格。
4. 调整参数/开始训练
至此,准备工作就完成了,可以开始准备正式训练LoRA了,我使用的还是秋叶大佬的LoRA训练器SD-Trainer,选择新手训练模式。
在新手训练开始之前需要先明确几个概念:
重复次数(Repeat):每一张素材的重复次数。
需要在文件夹名以【数字_名称】的方式设定,如训练集chahua重复次数10,则文件夹命名为10_chahua。
训练轮数(Epoch):整个训练集按照重复次数训练一次为一轮,10轮就是10*10为每一张训练100次
在操作过程中也同样要考虑具象类和泛化类不同来调整参数,具象类需要在每一轮提高次数以求精准度;泛化类就降低次数提高轮数,不需要那么精准,一轮轮去训练。新手训练模式下,我们只需要调整这几个参数即可。
进入新手模式后,需要选择训练LoRA使用的大模型
底模文件路径,选择你要训练LoRA使用的大模型,直接点击右侧的小文件夹选择即可。
训练数据集路径:在选择这一步之前,需要现在sd/lora-scripts-v1.7.3/train这个文件夹下建一个文件夹,比如我建的叫“chahua”,再打开“chahua”文件夹在里面建一个“数字_英文名”的文件夹,将之前打标好的图和标签一起复制到“数字_英文名”的文件中(如训练chahua重复次数16,则文件夹命名为16_chahua。)
修改分辨率(之前数据集的尺寸是多少,这里就用多少)
保存设置:保存模型的名称修改成你想要的名称
点击开始训练,就可以在终端看到它正在疯狂训练中...这个时间会比较久,慢慢等待就好。
当出现“训练完成”字样后,表明你的LoRA模型已经初步完成了训练,我是晚上开着电脑自己跑的,用时9小时……初步训练完LoRA模型,我们就可以对LoRA进行测试,来验证我们的LoRA训练成果,以及了解这个LoRA的最佳参数。
在sd/lora-scriipts-v1.7.3/output文件夹中就可以看到我们生成的LoRA模型了,因为我设置的是2步保存一个Lora模型,16步,所以有8个LoRA的阶段稿。(没有数字的这个是最后的LoRA)
5. 测试反馈
通过测试我们可以对比大模型、不同阶段LoRA、迭代步数、采样方法等生图效果,从而帮助我们对比生成的模型,选择更好的LoRA模型。
a、loss图
每次训练的loss图都是独一无二的,loss曲线只是参考,重点要观察loss逐步降低的状态,loss越低,拟合度就会越高,过低也有可能会过拟合,需要找到合理值,可以通过loss值来选择几个训练好的lora模型进行xyz序列图测试,从而选择更好的Lora模型。
b、xyz序列图
xyz序列图是一个参考值,能看出不同权重对LoRA的影响,以及过拟合,欠拟合的程度。需要多生图去测试加深对模型的判断。
我是用xyz序列图进行反馈:在使用之前需要先给Stable-Diffusion安装一个插件AdditionalNetworks,这个插件可以帮助我们测试多个LoRA不同权重的效果。安装成功后,会有图片所示部分。
虽然在训练模型前已经选定了大模型,但我还是会根据LoRA的类型,选择不同的大模型进行跑图测试,选择更多合适的大模型。
在SD的脚本中选择“xyz图表”,X轴类型选择“大模型”,选择电脑中有的合适的大模型,点击生成即可。
这样就可以横向对比,哪个大模型出图效果更好,更适合此LoRA。
选定了大模型后,我们可以测试几个LoRA在多少权重下生图效果最好。
首先需要把已经训练好的LoRA模型从output文件夹(sd/lora-scriipts-v1.7.3/output)复制出来,放到文件夹(sd-webui-aki/extensions/sd-webui-additionalnetworks/models/lora)中,刷新后就可以在SD中看到你训练的8个模型。
选择xyz图表,X轴类型选择附加模型1,X轴值选择生成的8个LoRA模型;Y轴类型选择附加模型权重1,Y轴值可以自行填写,我是按照从0-1的权重进行对比的。
通过生成的xyz测试图,就可以对比看到哪个LoRA模型在多少权重下生成的效果是最好的。最终就可以选定我们的LoRA模型终稿。
同样的,也可以用此方法来测试不同采样方式哪种效果更好。
甚至迭代步数等很多参数都可以通过xyz的对比进行确认,xyz有非常多的参数可以对比,感兴趣的可以自己跑跑试试。
至此一整套我自己生成LoRA的方法已经汇总整理完毕,没有实践之前也感觉困难重重,但是真的做起来,就感觉没有那么难了,再整理成文章,就又感觉更清晰了一些。下面是我在炼丹中遇到的一些问题和我的解决方法。
1. 页面文件太小,无法完成操作的报错
这应该是虚拟内存不足的情况。win电脑设置-系统-系统信息-高级系统设置,系统属性-高级-性能-设置-高级-虚拟内存-更改,增加虚拟内存即可。
2. Additionalnetworks选择模型显示“无”
这个问题首先需要看看你的LoRA模型是不是放在正确的文件夹中,正确的地址应该是sd-webui-aki/extensions/sd-webui-additionalnetworks/models/lora,如果位置正确,仍然报错,可以尝试先在Additional Networks中选择一个LoRA,然后在去xyz轴中删去不需要的LoRA。
LoRA现在已经广泛应用于商业场景中,将IP形象训练成LoRA就大大节省了运营去根据不同活动不同场景结合IP绘制的时间;在电商领域,可以将衣服训练成LoRA,就不需要请模特,或者拍摄,直接用AI生成模特,使用LoRA给AI模特穿上特定的服饰;很多需要真人出镜拍摄的场景,也可以使用LoRA模型,让一切变的简单可操作。
IP形象LoRA
IP形象LoRA的应用可以快速生成符合IP形象的设计方案,更灵活的应用在不同的场景中,IP形象LoRA将整个设计过程更简化,让设计师能更专注于提升作品的审美价值,提高设计的多样性和丰富性,提升设计效率。
无论是在线上的运营海报、开屏页、banner等还是在线下的KT版、海报物料等,都可以很好的应用。
电商LoRA
通过LoRA模型训练,可以训练出属于自己的电商AI模特,让其穿上指定的服饰,也有很多电商背景LoRA模型,布局、光影、拍摄都不需要了,大大节省了请模特和拍摄的时间人力物力成本。
建筑及空间LoRA
训练室内或建筑风格的LoRA,可以结合controlnet一起使用,快速根据客户实际户型结构出效果图,大大提升了效率。
LoRA的应用场景还有很多,也有很多未被探索出的使用场景,大家可以多多尝试探索,训练自己专属的LoRA。
最后,写了这么多,总结回顾一下LoRA的训练步骤就这么简单的五步:
1、收集素材;
2、秋叶大佬SDWebUi打标签;
3、BooruDatasetTagManager改标签;
4、秋叶大佬LoRA训练器训练LoRA;
5、测试训练好的LoRA;
最后的最后,总结一下炼制LoRA的几个关键点:
1、素材库非常重要,在我们收集素材的时候就一定要保证素材的高质量高清晰度,这可以使我们的LoRA训练从源头上保证质量。
2、不要迷信别人给的参数,由于你的素材库、模型训练目的等的不同,不要盲目照抄别人提供的参数,别人的参数仅可作为参考,包括我在文章中提到的数据。
3、多测试,多尝试。新手期可以先以成功炼出一个LoRA为小目标,提升自己的信心,然后就可以多尝试使用专业版,多了解其他参数的含义,尝试具象类和泛化类LoRA模型训练的不同,说不定会有意想不到的效果。
我的手绘扁平插画风格的LoRA已经在LiblibAI和堆友上线,欢迎大家下载试用。
liblib地址:https://www.liblib.ai/modelinfo/337d1cfa92024b3c9f010f9983d1241d
堆友地址:https://d.design/model-detail/11dd7d34844f4c2299274187295af0fc
PS. 此篇最早发布于2023年11月16日 ,随着SD WEBUI的升级,界面会有变化。