如何微调SDXL LoRA模型(使用Koyha和Runpod)
本指南将介绍如何微调SDXL LoRA模型。
它的目标是尽快为您提供一个高质量的LoRA模型,以便您可以尽快在SDXL模型中使用它。
当然,"快速"是相对的。
收集高质量的训练数据集需要相当长的时间。
实际的模型训练也需要时间,但您可以在后台运行它。
本指南使用Runpod。非常类似的过程也适用于Google Colab(您必须手动将SDXL模型上传到Google Drive)。
如果您想在自己的计算机上进行训练,强烈建议您至少具备12GB VRAM。本指南中的大部分过程也适用于本地训练(确保您已安装Kohya SS和AUTOMATIC1111)。
Runpod是一个云GPU租赁服务。它附带了用户创建的便捷模板,让我们能够一键部署训练工具Kohya SS + 图像生成器AUTOMATIC1111。
您可以用至少2美元进行训练(虽然这只是最低限度,不太实际。我建议您充值更多,这样您就可以进行更多实验,而不感到匆忙)。
许多人忽视的重要事项已用粉色突出显示。
让我们开始吧!
方法概述与结果 讨论LoRA训练的问题在于,对于大多数问题的答案是:“取决于情况”。
不同的设置对不同的数据集和硬件效果更好。
本指南涉及以下特定于面部训练的方法:
由于我们使用Runpod,我们可以自由选择使用什么GPU。我推荐使用带有24GB VRAM的RTX 3090/4090,或者像A100这样的数据中心GPU,其VRAM为80GB。性能更高的GPU将训练更快,但更昂贵。 我们将使用50-100张面部训练图像。 我们将使用标签样式来为图像加上标题,例如:“lisaxl,女性,棕色衬衫”。 自然语言的标题样式,例如“lisaxl,一个穿着棕色衬衫的女性”,也可以使用,但对于这种方法来说并不是最佳选择。 不需要正则化图像。 以下是我们示例中使用的一些训练图像,来自K-pop艺术家Lisa:【图片略】 以下是使用LoRA生成的一些示例图像:【图片略】
准备训练数据 对于这种方法,您需要大约50-100张主题的训练图像。
我建议所有图像都是完美的1:1正方形(您不必拥有1:1正方形图像来训练LoRA,但这会减少我们的误差)。
您可以使用bulkimagecrop.com批量裁剪图像为正方形。
图像应满足以下条件:
尺寸大于1024 x 1024。由于较大的图像较难找到,大于512 x 512也可以接受。使用太多低于此尺寸的图像将破坏SDXL LORA模型。 图像应以肖像风格放大到脸部,因为我们正在创建脸部LoRA。 以各种角度和光线展示您的主题(不要太过离奇)。 JPEG/PNG/WEBP格式 避免以下类型的图像:
人物部分被其他物体遮挡 风格或姿势奇怪 图像中有其他人(甚至不要让其他人的脸部或手部靠近图像边缘,因为这会使模型倾向于将物体放在图像边缘上) 图像模糊(低分辨率截图或照片) 以下是我们数据集中的一些图像示例:【图片略】
以下是我考虑但最终未包含的一些照片,以及原因:【图片略】
手部遮盖了大部分面部
角度和视角过于动态
实际上看起来并不像主题,分辨率较低
将图像放入同一个文件夹中。
设置Runpod 注册 访问Runpod并创建一个帐户。
替代选择?
您还可以使用Google Colab跟随本教程,这样您将支付每月10美元的专业会员费。
Vast.ai是另一个云GPU提供商。然而,它没有我们将要使用的模板,该模板允许我们一键启动Kohya SS(用于训练)和AUTOMATIC1111(用于测试)。
前往结算选项卡购买小时。您将使用花费0.40美元至0.80美元/小时的GPU。5美元至15美元足以开始并完成本教程。
启动Pod 在模板选项卡中,在社区部分寻找“Stable Diffusion Kohya_ss ComfyUI Ultimate”(以前称为“Stable Diffusion and Kohya_ss Ultimate”):【图片略】
选择您的GPU,然后点击部署。
RTX 3090 / RTX 4090将为您提供速度和价格的合理平衡。
如果成本不是问题,可以选择其中一个A100。
点击继续,然后点击部署。
部署需要一些时间:【图片略】
Pod正在运行 当Pod正在运行时,您将在角落看到绿色的运行徽章。
点击连接按钮。
这些端口将允许您访问不同的工具和服务。这些是模板中这些端口的映射:
[端口3000] AUTOMATIC1111的Stable Diffusion Web UI(用于生成图像) [端口3010] Kohya SS(用于训练) [端口3010] ComfyUI(可选,用于生成图像。查看ComfyUI指南。) [端口6006] Tensorboard(可视化工具,超出本教程范围) [端口8888] Jupyter Lab(用于访问文件系统和终端) 点击连接到HTTP服务[端口8888]以打开JupyterLab。
使用默认密码登录:Jup1t3R!
您将看到以下内容。点击终端。
通过导航到左侧面板的文件夹stable-diffusion-webui/models/Stable-diffusion,找到已下载的SDXL模型:【图片略】
上传训练图像 您将直接将训练图像上传到JupyterLab工作区。
您只能上传文件,而不能上传文件夹,因此您需要在JupyterLab中创建文件夹结构。
创建以下文件夹(右键单击 -> 新建文件夹):
名为img的文件夹 在其中,一个名为1_<CLASS>的子文件夹
<CLASS>是您的主题所属的类别。从以下选项中选择一个:男/女/男孩/女孩
-> 我的示例文件夹将是1_woman 在这个1_<CLASS>文件夹中,将所有训练图像拖放到其中。
上传配置文件 下载此配置文件:
kohya_facePreset_AdamW-fullbf16Download 将其上传到您的JupyterLab工作区。
打印Kohya日志 我们需要一个地方来查看我们的进度更新。
在JupyterLab中,打开一个新的终端。输入以下命令:
tail -f /workspace/logs/kohya_ss.log 复制 现在,此终端将输出Koyha SS日志,为您提供进度更新。
为训练图像加上标题 下一步:您需要为所有的训练图像添加标题。
我们的标题样式将如下所示:
TRIGGER,CLASS,<任何不在所有图像中的内容>
TRIGGER是您将用于触发生成中的主题的单词 CLASS是其所属类别。从man/woman/boy/girl中选择一个。 然后写一些不在所有图像中的内容,如“坐着,红色衬衫,微笑”等。 因此,对于这个图像:【图片略】
我的标题将是:
lisaxl, girl, looking at viewer, sleeveless, black shirt, head tilt, jewelry, parted lips, gray background
您可以手动完成这些标题,但我们将使用Kohya SS生成标题,然后删除不必要的部分以节省时间。
前往Runpod,点击连接,然后点击连接到HTTP Serve [端口3010]。
Kohya SS将会打开。
在Kohya界面中,转到实用工具选项卡,然后进入Captioning子选项卡,然后点击WD14 Captioning子选项卡。
在要为其加标题的图像文件夹中,输入/workspace/img。 在要添加到WD14标题的前缀中,写入您的TRIGGER,后跟逗号,然后是您的CLASS,如下所示: "lisaxl, girl,"
点击Caption images。
这将为您提供第一个结果 - 您可以检查JupyterLab中的Kohya终端,以查看您在主题中获得的标签。在我的示例中,我删除了所有这些标签:“nose”、“lips”、“1girl”。
将这些项目放入逗号分隔的列表中,放入“不需要的标签”字段中,例如:"nose, lips, 1girl"。
然后再次点击Caption images,您将获得经过修剪的标题集合。
Kohya SS训练 在Kohya SS界面中,点击LoRA选项卡。
确保您在LoRA选项卡中,而不是Dreambooth选项卡。这使得许多人困惑,因为选项卡看起来完全相同。【图片略】
进行以下更改:
点击配置文件部分以打开它。
从JupyterLab工作区复制配置文件的路径(确保在前面添加斜杠“/”)。如果您使用了上面的配置文件,则为:
/workspace/kohya_facePreset_AdamW-fullbf16.json
点击加载。
然后,进行以下更改。
在源模型选项卡中:
在预训练模型模型名称或路径中,写入: /workspace/stable-diffusion-webui/models/Stable-diffusion/sd_xl_base_1.0.safetensors (这应该是您的SDXL模型下载到的位置,请检查您的JupyterLab工作区) 确保选中标记为SDXL模型的复选框
然后,转到文件夹选项卡:
将图像文件夹更改为您之前在JupyterLab工作区中创建的img文件夹的路径。如果您遵循本指南,它应该是: /workspace/img 将输出文件夹更改为: /workspace/stable-diffusion-webui/models/Lora 将您的模型输出名称更改为您想要的任何内容。为了保持组织,您可以在模型名称后面加上版本号,例如:“lisaxl_v1”
现在,转到参数选项卡。
配置文件已设置推荐的设置。下面我将对这些设置进行评论,以及为什么您可能想要更改它们。
Train batch size: 5 -> 您拥有的训练图像数量应该可以被批次大小整除。
Epoch: 100 -> 使用该方法在大约50-60个时期左右应该可以获得良好的结果。此配置文件每5个时期输出一次模型,这将使您可以在不同的时期测试模型。我注意到过煮(过度训练)一个SDXL模型要困难得多,因此这个值设置得稍高一些。如果您不想进行如此多的训练,可以将其降低到60。
在这里详细解释了Kohya LoRA训练设置。
点击大的开始训练按钮。
检查训练日志 您可以在JupyterLab工作区终端中检查训练进度:【图片略】
进度条将告诉您当前时期和步骤,经过的时间,估计剩余时间,每次迭代的秒数(s/it)和损失。
测试您的LoRA 返回到Runpod,并点击连接到HTTP服务[端口3000]以打开AUTOMATIC1111。
确保在提示之前调整以下设置:
分辨率:1024宽 x 1024高 采样步数:30或更多 采样方法:DPM++ 2M Karras(或任何使用Karras的DPM++采样器) 在上一步中,您将LoRA的输出目标位置设置为AUTOMATIC1111 LoRA文件夹stable-diffusion-webui/models/lora。这意味着您将能够立即使用LoRA来进行AUTOMATIC1111。
要使用它们:
在提示中编写LoRA关键词短语。它的格式如下: lora:LORA-FILENAME:WEIGHT
LORA-FILENAME是LoRA模型的文件名,不带文件扩展名(例如没有.safetensor)。
WEIGHT是您希望LoRA的强度。范围为0-1。
然后,在提示中包括您之前在为图像添加标题时指定的TRIGGER。
作为示例:
lora:lisaxl_v1:0.9 lisaxl portrait, masterpiece, breathtaking photograph, golden hour, outside 复制
这是结果:【图片略】
如果您对LoRA感到满意,从JupyterLab工作区下载LoRA文件。它将位于stable-diffusion-webui/models/lora中。