如何训练一个非常像的真人LoRA
在本篇文章中,我们将探索如何训练一个能够将喜爱的人物置入任何场景中并实现高度一致性的LoRA模型。借助LoRA,我们能够创造出极为逼真的人物图像,就如同我为斯嘉丽训练的LoRA模型所展示的那样。
那么,让我们一起深入了解如何训练LoRA。
如果你喜欢看视频教程,那么我非常欢迎你观看本文所对应的视频(B站同名帐号):
Kohya训练器
在多种工具中,Kohya训练器因其全面的功能——不仅限于训练LoRA,也包括DreamBooth和Text Inversion——而广受欢迎。
国内也有一些开发者制作出了一些好用的训练器,比如赛博丹炉和秋叶丹炉。它们的原理和Kohya一样,设置好参数以后,最终都会转化为脚本进行训练。所以说,掌握了Kohya训练器以后,其他的训练器也不在话下。
安装Kohya相对简单,其详细的安装指南可在项目的Github主页(https://github.com/bmaltais/kohya_ss)找到。
此外,B站的知名UP主Nenly也提供了一份详细的安装攻略(https://gf66fxi6ji.feishu.cn/wiki/Q4EYwQl2riWw25kdN3hc5xuEnIe),非常值得参考。
LoRA训练流程
训练LoRA的流程包括以下几个关键步骤:
1️⃣ 准备数据集:选取适合训练的图片。
2️⃣ 图片预处理:进行裁剪和打标,为图片添加合适的标注或提示词。
3️⃣ 设置训练参数:在Kohya训练器中进行参数设置。
4️⃣ 开启训练:通过命令行查看训练进度。
5️⃣ 测试训练结果:挑选出效果最佳的LoRA文件进行测试。
LoRA训练的底层逻辑
为了解决可能出现的疑惑,本段落将深入解释LoRA训练的底层逻辑。通过深入了解这一过程,您将能更清晰地把握如何训练出一个高质量的LoRA模型。
LoRA训练概述
LoRA模型的训练目标是生成的图片与原训练图像高度相似。这是通过在Diffusion模型上添加额外权重来实现的,这些权重被保存在一个称作LoRA文件的单独文件中。可以将LoRA文件视为Diffusion模型的一种插件,这种插件会根据训练过程不断调整权重,以达到与原始训练图相似的效果。
训练过程详解
- 添加初始噪声:首先,我们会给训练图像添加一些初始噪声,这一步骤是为了模拟Diffusion过程中的噪声添加和去除过程,提高模型的泛化能力。
- 打标与去噪:在添加噪声后,Diffusion模型将根据训练图上的标注(例如“1girl”)进行去噪处理。这解释了为何我们需要在训练前为训练图打上标签的重要性。
- 计算Loss值:去噪后,我们将得到一张新的图片,用于与之前添加噪声的图片进行对比,通过这一比较,计算出两张图片之间的差异性,即Loss值。这个值反映了经过初步训练后的图片与原始训练图之间的差异。根据这个Loss值,AI会调整附加在Diffusion模型上的权重,使得模型去噪后的图片与原始训练图更加接近。
- 迭代优化:这一过程会不断重复,通过迭代调整权重,LoRA文件的训练效果将逐步提升。这个迭代次数也就是我们在Kohya训练器里设置的最大训练步数。
- 重复次数和轮次:在训练过程中,每张图都会被训练多次,这一次数称为重复次数(Repeats)。所有图片经过若干重复次数的训练后,完成的总体过程称为一个轮次(Epoch),这个参数也是在Kohya训练器中进行设置的。
通过上述步骤,LoRA模型的训练涉及到精细的权重调整和优化,确保了生成图像与原始训练图之间的高度相似性。希望这一解析能帮助您更好地理解LoRA模型的训练机制。
正式开始LoRA训练:以斯嘉丽为例
在理解了LoRA训练的底层逻辑后,我们现在可以开始实际的训练过程了。本次我们将以众所周知的好莱坞明星斯嘉丽·约翰逊为例,展开训练。下面是详细的步骤和一些建议,希望能帮助你顺利完成LoRA模型的训练。
第一步:准备训练集
成功的LoRA训练起始于高质量的数据集。以下是一些建议,帮助你准备一个合格的训练集:
选择合适的图片作为训练集是至关重要的第一步。优质的数据集直接影响训练结果的质量。
第二步:图片预处理
裁剪
为了让AI更好地学习人物的脸部特征,建议以1比1的宽高比进行裁剪,主要聚焦于头部区域。稍微包含一些肩膀部分也是可以的。这样的裁剪策略有助于生成更加逼真的LoRA图像。这样可以让AI充分学习人物的脸部特征,生成的LoRA也更像。如果到时候我们训练出的LoRA生成的图片只有大头照也没关系,因为我们可以先生成其他人物的全身照,然后用LoRA生成的大头照进行换脸。 这几张斯嘉丽的图片我就是这样生成的。灵活度很高,想要什么风格就什么风格。
放大
鉴于许多在线图片的分辨率较低,裁剪后的图片分辨率可能进一步降低。因此,我们推荐将图片放大至至少512×512的分辨率。如果条件允许,可以考虑放大到768×768。图片放大不仅可以提升图片细节,还能丰富训练过程中的学习材料。
- 推荐工具:可以使用Topaz软件或是WebUI里的StableSR脚本进行图片放大。经比较,Topaz在某些情况下可能提供更好的效果。
放大完以后,我们就可以进行最终裁剪啦。上篇文章(https://myaiforce.com.cn/text-inversion/)中,我给大家推荐了一个非常好用的在线裁剪工具,感兴趣的话可以回顾一下。
第三步:打标
- 为什么要打标:如前所述,打标是为了在训练过程中指导模型更准确地学习和重建目标特征。通过对图片进行适当的标注,可以帮助模型理解并重现人物的特定特征。
- 如何打标:详细的打标方法在之前的文章(https://myaiforce.com.cn/text-inversion/)中有所提及。如果你对打标的具体操作还有疑问,可以参考之前的相关介绍或教程,以获得更深入的了解。
通过遵循上述步骤,你将能够为LoRA训练准备好高质量的数据集,并进行有效的预处理。这样的准备工作是成功训练LoRA模型的关键。希望这些指导能帮助你顺利进行训练,并创造出令人印象深刻的人物图像。
LoRA训练核心参数详解
在图片处理完成之后,我们将进入Kohya训练器的设置阶段,这一阶段是LoRA训练过程中至关重要的一步。接下来的指南将帮助您熟悉Kohya训练器的界面和必要的设置选项,确保您的训练顺利进行。
选择预训练模型
- 预训练模型名称或路径:首先需要指定训练所用的底模,也就是预训练的Diffusion模型。LoRA训练实质上是在这个底模的基础上通过微调权重来实现的。
- 底模推荐:建议使用SD1.5的第一代模型,根据测试,其性能甚至优于SDXL模型。建议直接填写模型的路径以确保准确无误地加载模型。
- 其他选项:底模选择好以后,下方会出现三个选项,都不要勾选。
设置训练项目文件夹
1️⃣训练模型输出名称:为训练好的LoRA文件命名。这一步骤对于后续的测试和使用非常重要,确保您能够轻松识别和调用不同的训练结果。
2️⃣图片文件夹路径:需要指定一个包含训练图片的文件夹。这里存放的是您预处理后用于训练的图片,确保路径设置正确。
3️⃣LoRA文件输出路径:指定LoRA训练结果存放的位置。这个文件夹将用于保存训练过程中生成的LoRA文件,方便后续测试和使用。
4️⃣训练日志文件夹路径:设置一个文件夹用于存放训练过程中生成的日志文件。这对于监控训练进度和调试可能出现的问题非常有帮助。
其他设置
- 正则化图片文件夹:这个选项通常用于训练特定的画风,对于训练人脸或二次元人物不太适用,因此我们在此场景下不需要考虑。
新建训练项目文件夹
填这些路径之前,首先得新建一个训练项目的文件夹。
1️⃣新建项目文件夹:首先,创建一个新的训练项目文件夹,例如命名为scarlett_johansson
。重要提示:为了避免潜在的问题,请确保文件名不包含中文字符或空格。
2️⃣创建必要的子文件夹:在项目文件夹内部,需要创建三个子文件夹,分别命名为image
、models
、和log
。这些文件夹分别用于存放训练数据集、输出的LoRA模型文件以及训练日志。
3️⃣添加数据集和打标文件:在image
文件夹下,进一步创建一个用于存放具体数据集和打标文件的子文件夹,如25_ScarlettJohansson
。这里的25
代表对每张图片进行的重复训练次数(Repeats),建议设置在10到30之间。文件夹名称的其余部分应反映训练的概念或主题,例如人物的姓名。
注意事项
- 路径复制:通过点击文件浏览器上方的地址栏并使用快捷键
Ctrl+C
来复制所需的文件夹路径,随后粘贴到Kohya训练器的相应配置中。 - 避免使用具体概念文件夹的路径:在设置数据集路径时,应选择到
image
这一层级的路径,而不是直接到25_ScarlettJohansson
这样的具体概念文件夹。
参数详解
- LoRA类型:在训练器中,首先要选择的是LoRA的类型。对于人脸训练,选择“Standard”即可。如果你的目标是二次元人物,那么可能需要考虑其他选项。
- 训练批次大小:一般设置为1。这意味着一次性处理一张图片,适合大多数显存容量的配置。
- 最大训练步数:这是整个训练过程中迭代的总步数。设置范围通常在3000到5000步之间,这个参数直接影响训练的深度和质量。
- Epoch:代表整个数据集将被重复训练的次数。合理的Epoch范围为5到10,这个范围可以平衡训练深度和防止过拟合的需求。
- 重复次数:指的是每张图片在每个Epoch内被训练的次数。这个参数可以根据最大训练步数、Epoch和图片数量计算得出。
重复次数计算公式
我们可以使用以下公式来确定重复次数:
例如,如果我们设置最大训练步数为4800,有32张图片,且Epoch设置为10,那么:
这意味着,每张图片在每个Epoch内将被重复训练15次。
然后我们回头把训练集的文件夹重命名一下。
其他参数
- 每N个epochs保存:这个设置决定了多久保存一次训练好的LoRA文件。如果设置为1,则每完成一轮Epoch后保存一次。这样做的好处是可以提供多个训练阶段的模型,供后续选择使用。
- Caption Extension:填写的是打标文件的文件名的后缀,也就是“.txt”,以避免在训练过程中出现“no caption file found”的错误。
- 精度选项:推荐设置为“fp16”,这有助于节约显存同时加速训练过程。
- 缓存潜变量:启用此选项可以将所有图片一次性缓存到显存中,从而提高训练速度。
高级LoRA训练参数设置
在LoRA训练的深入阶段,理解和调整高级参数是提升训练效果的关键。这些参数的精细调整可以大大影响训练的效率和产出的质量。下面,我们将详细介绍如何根据不同需求选择和设置这些参数,以及提供两种高效的调参方案。
学习率与优化器
- 学习率:可以被看作是训练过程中学习的速度或强度。如果把训练LoRA的过程比作烤面包的话。学习率就是你设定的烤箱的温度。温度越高,面包烤的越快。但很容易把面包烤焦。这种情况在机器学习领域也称为过拟合。温度越低,面包烤的越慢。可能很长时间过去了,还是没有烤熟。这种情况称为欠拟合。
- 学习率调度器:用于在训练过程中动态调整学习率。
- 优化器:负责根据损失函数更新模型的权重。优化器的选择直接影响训练的稳定性和最终模型的性能。
- 最大分辨率:如果训练图超过这里指定的分辨率,Kohya会按照这里设定的分辨率进行缩放。因为我的图片裁剪成了768×768。所以这里我改一下。如果你的图片是512的,就不用管它。
- 启用数据容器:bucket这个单词直译过来就是“水桶”。LoRA 中使用的训练图像不一定要大小相同,但不同大小的图像不能同时进行训练。因此,有必要在训练前根据图像大小将其分类放入 “桶 “中。启用了这个选项以后,Kohya就会把你所有训练图整理一遍,将其中比例相同的图像放进同一个桶里,再智能缩放到相同尺寸上。我建议不要开启这个选项。“桶”的数量越多,训练的质量越差,训练的速度也越慢。最好是一开始就把训练图裁剪成统一的尺寸。
- 网络秩:该参数调节的就是附加权重里的神经网络隐藏层的神经元的数目。神经元数目越多,可存储的学习信息也就越多。也就是说,这个参数调的越大,训练出来的脸部细节也越丰富。当然,这个参数也不必调得过大。否则训练出的人物也会不那么像,LoRA文件也会变得过大。我通常设置为128,适用于大多数人脸训练任务,确保足够的模型复杂度以捕捉细节。如果是训练二次元人物,可以设置的低一些,比如64。
- 网络Alpha:设置为“网络秩”的一半或者更小。
高级功能
- 交叉注意力(Cross Attention):确保开启
XFormers
,这可以显著降低显存占用并加速训练过程。
调参方案
方案一:静态学习率
- 学习率:包含“文本编码器学习率”和“Unet学习率”,推荐使用Kohya官方文档的推荐设置。
- 优化器:
AdamW8bit
,这是一个经过时间检验的优化器,以其稳定性著称。 - 学习率调度器:选择
带重启的余弦函数
,这个调度器会让学习率在更多的点上达到峰值,随后平滑衰减,这样可以更充分地学习数据集。 - 学习率周期数:建议设置在3到5之间,以平衡学习的效率和避免过早陷入局部最优解。
方案二:动态学习率
- 优化器:
DAdaptAdam
或Adafactor
。“DAdaptAdam”对显存是有要求的。最小要求6GB的显存。如果你显存不足的话,可以尝试“Adafactor”这个优化器。 - 优化器额外参数:如果设置为“DAdaptAdam”,则在下方的额外参数添加
--optimizer_args "decouple=True" "weight_decay=0.01" "betas=0.9,0.999"
。如果优化器设为“Adafactor”,则在下方的额外参数添加--optimizer_args "relative_step=True" "scale_parameter=True" "warmup_init=True"
。 - 自适应学习率:这两个优化器都是一种自适应的优化方式,可以自动修正学习率,对于过拟合有很好的限制作用,可以将所有相关的学习率设置为1。
查看训练进程
成功配置参数并启动训练后,LoRA模型的训练进程正式开始。此时,有效监控和理解训练过程变得至关重要。下面是训练过程中的关键步骤和要点,帮助你确保训练顺利进行并有效地保存模型。
训练启动与监控
1️⃣启动训练:在Kohya训练器中设置好所有参数后,点击“开始训练”按钮以启动训练过程。
2️⃣检查训练状态:训练开始后,需要转到命令行窗口或终端查看训练的实时状态。这个终端窗口是启动Kohya训练器时打开的,不同操作系统或环境(如本地或服务器)的界面可能略有不同。
关键指标解读
1️⃣显示参数:终端会显示出当前训练使用的所有参数设置,这可以帮助你确认是否所有配置都按预期进行。
2️⃣总训练步数:系统会基于你的设置计算并显示总的训练步数,这是衡量训练深度的一个重要指标。
3️⃣进度条与轮次:展示当前训练的进度和所处的轮次(Epoch)。如果设置了多轮训练,可以看到当前正在进行的是哪一轮。
4️⃣预估时间:训练旁边可能会有一个预估的完成时间,帮助你规划训练过程。
5️⃣Loss值:训练过程中最关注的数值之一是Loss值,它反映了模型输出与目标之间的差异。随着训练的进行,理想情况下Loss值应逐渐降低。
训练完成与模型保存
当看到命令行中出现“model saved”信息时,意味着LoRA模型已经成功保存。根据你的设置,“每N个Epochs保存”,你将在指定的文件夹中找到相应数量的LoRA模型文件。
检查输出文件
训练完成后,进入之前设定的模型输出文件夹。在这里,你应该能看到所有生成的LoRA文件。如果设置的Epoch为10,则预期会有10个模型文件,每个文件代表训练过程中的一个保存点。
评估LoRA训练效果
在完成LoRA模型的训练后,评估其训练效果成为了下一个重要的步骤。如何判断哪个LoRA模型的效果最佳呢?以下是一套实用的流程,帮助你通过直观的图像生成测试来评估每个模型的性能。
准备LoRA文件
1️⃣重命名LoRA文件:为了便于管理和测试,建议将最后一个生成的LoRA文件重命名,比如将其命名为“第10号文件”,这样便于后续的对比分析。
2️⃣文件迁移:将所有LoRA文件拷贝到WebUI平台上常用的LoRA文件夹中。这一步骤确保了在进行图像生成测试时,所有训练好的模型都可以被轻松调用。
在WebUI上进行测试
1️⃣设置提示词:在WebUI界面上,输入用于图像生成的提示词,并调整好基本的生成参数。这些参数包括但不限于图像的尺寸、生成质量等。
2️⃣选择LoRA文件:作为测试的一部分,先选中你刚刚训练并迁移的某个LoRA文件,比如“1号LoRA”。
3️⃣使用XYZ图表进行对比测试:
在最下方的脚本里选择XYZ图表。
- 在“X轴类型”中选择“提示词搜索替换”,并在“X轴值”中填入不同的LoRA文件编号,这样能够按顺序生成由这些LoRA文件产生的图像。
- “Y轴类型”同样选择“提示词搜索替换”,而在“Y轴值”中则填入一系列LoRA权重值。这允许你在不同权重下观察单个LoRA文件的表现。
4️⃣生成并比较图像:设置完成后,向上滚动页面并点击“生成”按钮。随后,系统将根据设置生成一个包含各个LoRA文件及其在不同权重下表现的图表。
分析结果
- 横向比较:通过观察图表,你可以横向比较不同LoRA文件生成的图像,判断哪个LoRA文件更准确地捕捉到了人物的特征,哪个的图像质量最高。
- 纵向分析:纵向分析则允许你评估单个LoRA文件在不同权重设置下的表现,从而找到最优的权重值。
结语
通过本文,您应该对如何训练一个高质量的真人LoRA模型有了全面的了解,从准备数据集到参数设置,再到最终的测试。随着技术的不断进步,LoRA训练变得越来越简单,希望您能够利用这些知识创造出令人惊叹的人物图像。如果本文对您有所帮助,请不吝点赞和分享,感谢您的支持!