本文档是关于Stable Diffusion工作流中训练LoRA模型方法的文档
一.前置训练集准备
第一步:
准备训练集:准备训练模型时使用的训练集。注意:训练集应当能尽量涵盖训练对象的“多样化样本”。如角色立绘图,各个角度不同的图片。
第二步:
图片预处理:裁剪+打标。裁剪:就是让AI能更好地通过图片辨析训练对象
尺寸需要符合原模型。打标:使用WD 1.4标签器。
裁剪:
对于图像过于瘦长但又重要的图像可以使用图片处理软件进行横向拉长。
注意:训练器不能同时训练大小不同的图像。
注意:Kohya训练器可以勾选【启用数据容器】选项解决大小不一的问题。此选项把各个图片按照尺寸分别装进对应的桶里,再进行缩放,分别学习。
尺寸须知:
SD 1.4/1.5 :512*512
SD 2.0/2.1 :768*768
SD (0.9/1.0) : 1024*1024
打标:
越希望A学习的东西越不能出现在标注里。如果标记过于全面,则不得不在每次生成时,都将”白头发,红眼睛”加进去。
定理:标注里所描绘的标注在生成图片时,如果没有再一次使用对应关键词,则均会在生成时被“AI”剔除。
但如果一点标签也不给,AI的学习效果会变差。
打标分为:1.一句话描述
2.不希望出现的元素。
3.不包含细节的关键词(描述整体的词,角度,颜色等)
2.对标签进行“清洗”与“纠正”:
1.使用Dataset Tag Editor进行标签纠正。
整体审核:
批量编辑-删除,选择一个或多个标签,选择移除,即可。
删除标签类型:
1. 明确不符合角色特质的错词。
2. 与训练对象本体识别特征密切相关的词。如最主要的特征:比如:头部特征,发型,发色等。
总结:希望始终生成统一特征,就删除对应特征的关键词。如希望统一服装,就删除对应服装的关键词。
3.换,替换与之不对应的词。Danbooru 标签超市
4.共通:一些共通有明确特质、元素的图片,可以为他批量增加一些标签。比如如果使用LoRA后色调偏暗,有可能就是因为训练集图片有大部分的背景为夜景,或暗调。也就是说,训练集的调性会影响使用LoRA出图时的调性。
通过选择过滤,选择足够的应该修改的场景图片-使用搜索与替换。进行对标签的修改。
在搜索与替换中,取消 只展示在 Positive 过滤器中的被选中标签,原标签就是他们共同的标签。
单张审核:
1.很多的东西Tagger均无法识别出来。如:夜晚,调性,粒子,花,树,建筑等。
2.将图片的元素与你看见的元素进行对比,少补多删。
注意:只有在最终完成时点击“保存所有更改”才能生效。
WD 1.4标签器功能:
1.可以把训练集文件夹批量输入
2.使用“附加标签”功能,可以在里面添加一些字,词。作为训练主体的触发词。
3. 对于一些整体识别得不是特别对的内容,可以在搜索与替换中将其对应替换为另一个词。
预处理结束的训练集应该为一张图片外加一个TXT文件。
第三步:训练集训练物品:可以使用更少的训练集。
1.提高训练集的质量:1.减少背景多余的元素。抠低使用纯白底产品图效果更佳。(后期处理的RemBg的智能抠图插件)
2.规范图片尺寸1:1
3.白墙或绿幕方式实拍也可。(注意在标签里加入“白色背景墙的”关键词)
以及拍摄照片的角度,大段描述词。
第四步:调整参数
1.勾选 随机标签(Shuffle Caption)。此功能用于打乱每一次标签排列的顺序。
2.保持N个令牌(Keep N Token):保持前N的标签的顺序。
二.训练LoRA基本流程
第一步:
选择底模:不同版本模型之间的一些底层构造不同。因此,选择哪个模型的底模,训练出的LoAR模型也只能对应选择的底模使用。
使用须知:你可以使用任何一个符合项目需求的大模型作为底模使用,
优点:训练出来的LORA在训练底模上的实现效果一定是最好的。
缺点:在其他一些模型上发挥时性能会有缺陷。
第二步:
准备开始训练模型时,需要准备创建基础文件夹路径:
1.创建总项目文件,并分别在总项目文件路径下分别创建以下文件夹:
1.训练集图片(image):在此路径内训练集文件夹。
训练集文件夹:命名规范:Repeat_Concept。
其中:Repeat:重复次数 Repeat重复学习训练集图片的次数影响步数计算和学习效果。
一般来说:二次元图片建议设置在5-10之间。三次元设置在10-30之间。
Concept:概念名称:Concept训练对象的主要概念名称(可以是触发词)可利用此种方式向一个LORA植入多种概念
2.正则化文件夹:
3.输出文件夹(models):空着就好。
4.日志文件夹(log):空着就好。
三.LoAR模型训练参数详解(中英对译)
注意:这些参数中,只有一小部分核心参数会对训练结果产生明显影响。
基础参数
1.LoAR类型 (LoRA type):
作用:定义当前训练的LoRA类型。
原因:但在Simo发掘出了最早的LORA食用方法后,有许多开发者在这个基础上对算法不断做改进,开发出了许多的“增强版”的LORA。来实现更好的训练和推理效果。
类别:1.Standard :传统LoRA,最原始的LoRA微调手法,通用且基础。
2.LoCon:微调更 深入,能够更好地结合角色和风格,但对学习率和训练集更敏感大多数情况下更好。
3.LoHa: 使用哈达玛积对权重重新参数化,适合较简单的概念或多概念训练,可以追求更好的泛化能力对了,花的时间更长。适合训练画风。
4.LoKr:与LoHa相似,但是使用了不同的算法进行优化对了, 花的时间更长。适合训练画风。
5.IA*3:最快/最轻便的训练方法,学习画风效果很好, 但是很难迁移评价: 简单粗暴。
官方算法指南: github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Guidelines.md
2.训练步长 (Training):
作用:
1.Epoch/数量增加:修改Epoch的系数。从而改变训练步数。
2.Max Train Steps/最大训练步数:步数到预设值时,自动结束训练。
3.Max Train Epoch/最大轮次数:
4.Batch Size/训练批次大小:每一步训练的图片数量。可以更加的节省时间,有助于ai更加均匀的消化图片特征。但可能会导致微调精度略微下降。
数学表达:Epoch/n
注意:增大此数值会导致显存使用增加。
原因:训练模型的核心单位为“步”。一步为根据训练标注生成图片,并把它与训练集里的某一步图片进行对比,把他们的差异微调嵌入向量。假设你的训练集里有30张图片。训练一总次则为30步。
文件夹的命名也会对步数产生影响。Repeat对应着每一张图片重复学习的次数。加入Repeat = 6,而训练集数量为30。则一轮次的步数为180步。
由此得出公式:Epoch(轮次)=Repeat(单张重复次数)*训练集数量。
参数推荐:训练集规模(20~30)间,可用1200~1500可以取得较好的效果
3.每N个epochs保存:
作用:除生成最终的成品以外,每完训练n的倍数轮时,就会生成对应的动态积累的模型。
4.学习率/Learning Rate
作用:学习训练集图片的强度。(默认为0.0001 or 1e-4)。学习率过高会导致Overfitting过拟合。也就是过于精确或匹配训练用的数据集。导致无法根据新的数据生成新的结果。严重后果就是画什么都千篇一律的像训练集里的图片。不光是画风色调,还有人物姿势,背景元素。
而学习率过低会导致underfitting欠拟合。但过拟合远比欠拟合的错误概率高。决定学习率的因素有很多:
1.训练集图片的复杂度。复杂度低,学习率可能要随之降低。
2.步长:学习率与步长的参数形成反比。学习率高,步长调低。反之,同理。
3. Batch Size/训练批次大小:存在隐形关系。
关系公式 :2*batch size = 2*根号2*leaming rate
5.LR cycles/文本编码器学习率 和 LR power/Unet 噪声预测器学习率:
作用:文本编码器相对于噪声预测器更加的敏感。所以文本编码器的学习率通常为噪声预测器的1/2至1/10。
当默认不填时,其数值等于学习率/Learning Rate
6.优化器Optimizer
须知:在学习的过程中,学习率是随时间衰减的。而主导衰减参数的东西为调度器。
类型:AdanW8Bit
信息:机器学习领域著名老牌优化器。 适合优化器:1e-4
2.Lion
信息:由Google在今年年初退出的新机器学习优化器。理论上更加先进。最佳学习率比AdanW8Bit小10倍左右。且在大Batch Size/训练批次大小下更加优秀。支点文本编码器学习率:8e-6,unet学习率:7e-5。
3.Prodigy 神童
将学习率默认设置为“1”,它将自动匹配适合的学习率,来取得最佳效果。
7.调度器Scheduler
调度器在整个训练的过程中,对结果的影响是微乎其微的。默认为cosine。
推荐使用Cosine with Restart。
配合学习率周期数使用。推荐数值3~5。可随着训练对象的复杂程度增大。
8.网格维度Network Rank Alpha
作用:搭建合适的LoRA模型基底。被称之为“网络”(Network)
1.Network Pank
Pank:可以翻译成网络的“秩”。与矩阵的“秩”是一个概念。也被称为Dimension(Dim)。
Network Pank的值越高,从原始矩阵里抽出来的行列就越多。要微调得到的的数据量也就越多。进而能够容纳更复杂的概念。它直接影响的是LoRA模型的大小。参数的理论最大值为128。LoRA模型大小约为144M(标准)。最小值为8,LoRA模型大小为(<10M)。较大的数值会导致训练使用的显存上升。
参数推荐:
训练一些较为复杂得多画风,或者是三次元物品,形象的时候,使用128,64的高Rank值。
如果为二次元画风,使用32,16,8这样得多低Rank值。
须知:
1.维度过高会导致学习结果“太深”。与过拟合类似。推荐低Rank值。
2.不同的LoRA Topy也会有不同的限制。如LoCon不超过64,LoHa则不超过32。
2.Network Alpha
Alpha和Rank的比值等于我们使用LORA时的“减弱权重”程度,Alpha一般不超过Rank。它越接近Rank则LoRA对原模型权重的影响越小。越接近0则LoRA对权重的微调作用越显著。
数值:
1.温和做法:Alpha数值为Rank的一半。
2.固定为“1”:代表LoRA的微调效果不减弱。
3.二次元模型的推荐参数设置:
9.卷积层Rank和Alpha(Convolution Rank/Convolution Alpha)
作用:在使用LoCon/LoAHA等带有对卷积层的控制LoRA Topy时,额外需要调试的参数。
参数:
1.留空:自动把上面的两个数值带入卷积层进行训练。
10.混合精度/Min Precision ,保存精度/Save Precision。
三个选项:
no(fp32),fp16,bf32。Fp的全称为“Floating Points”,是一种数据类型。Fp32会增大性能消耗,但没有明显的效果变化。
参数推荐:
均选择fp16。
11.缓存潜空间图像/缓存潜变量到磁盘
作用:缓存潜变量:将训练集图片转换为向量。可明显提升速度。但是会增加显存的使用。
缓存潜变量到磁盘:将生成的向量保存进磁盘,方便使用同训练集进行训练。
12.交叉注意力/Cross Attention:
交叉注意力是一种深度学习里面的学习机制,可以提高模型训练以及推理的效率。N卡用户请开启xformers。
13.内存高效注意力专注
减少爆显存的风险,减缓速度。如果配置足够请关闭。
四.训练过程监视
1.查看命令行:it为步数单位。如34.05s/it,就是34.05秒一步。
Avr_loss= :平均损失函数值。即预测值与样本值之间的差异。
定理:loss值越低,拟合度越高。正常的loss值应该在初期体现出较高的数值,后面慢慢降低。最后保持一个相对低位的“震荡”。
反之,如果一直提高或者高低乱飘,说明训练欠拟合或根本无拟合。如果loss值一直固定,说明过拟合。
如果loss=NaN,说明有些参数被误调到了极大或极小。
2.TensorBoard监视器
1.loss监视:1.可以通过调节曲线润滑度(Smoothing)来查看整体趋势。
2.左边为LoRA训练的历史记录。
2.lr/textencoder:学习率监视器。缓慢降低为正常趋势正常应该随学习率调度室变化。
如果设置了学习率预热,则应该开头一定比例的步数略微提高学习率。
3.训练LoRA时的样例抽查
可以设置每个多少步或每隔多少轮返回一张图像。建议为100-200。
样本提示推荐使用其中某一张的训练集倒推出来的提示词做适当改动。模型输出的图片会被放在sample文件夹内。
1.其中过拟合便为样例图连续多张均生成过分接近训练集的图片。并发生了明显的画风畸变(就是完全不像底模跑出来的)
2.欠拟合便为根本不像,不用lora也能跑出来的。
3.维度过高会导致样图混乱。建议调整网格维度Network Rank Alpha
4.炸炉则会生成极端模糊混乱又或者是直接黑屏的样图。
4.利用x/y/z图标对比并检验成品
使用Web ui中x/y/z plot脚本进行测试。写一组差不多的提示词并调整基本参数。
选择Prompt S/R。将新出炉的所有LoRA导入相应文件夹并写进提示词。随后更改总LoRA文件名与动态积累LoRA相应的序号。
随后,将尾椎复制至x轴值,并用英文逗号分隔,排列所有LoRA动态积累模型。
其次,在y轴数值中测试权重值 :1>,:0.8>,:0.6>,:0.4>,:0.2>,:0>
挑选满意的数值,并进行纪录数值。
4.炼制画风LoRA
1.画风LoRA对训练集数量的要求更高。100-600
2.在关键词中注意对影调关键词的修改。删除训练集里你需要保留的大调。如你希望你的影调为暗调,则删除关于描述暗调的关键词。
3.为你的影调添加相应的标签。
4.画风LoRA的训练步数也对应增高。常见为3000-10000.