Sign In

如何微调SDXL LoRA模型(使用Koyha和Runpod)

如何微调SDXL LoRA模型(使用Koyha和Runpod)

如何微调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中。

5

Comments