URL
type
status
date
slug
summary
tags
category
icon
password
最近很多人在训练Flux的Lora模型,看到一篇还不错的文章,翻译了一下。
嗨,大家好!我已经考虑做这个事情有一段时间了,但是在Stable Diffusion的subreddit上看到这个帖子后,我决定加快步伐。
目前我已经发布了16个Flux Lora(不包括许多失败的尝试),还有两个准备发布。
在这个过程中,我通过试验和错误或与社区其他成员交流学到了很多,我希望能回馈一些东西。因此,以下是对我迄今为止进行的训练的分析和回顾,希望对你们中的一些人有用。
这篇文章会很长,所以请准备好。
环境
首先介绍一下我的技术设置以及我如何训练Lora。我在本地使用Gigabyte AORUS 3090 24GB显卡,64GB内存和i7 11700k处理器。
我使用主板上的集成显卡作为显示输出,以尽可能减少对3090宝贵显存的占用(即使是显示器使用的微小显存也会产生影响)。
实际训练时,我使用的是Ostris的AI-Toolkit脚本。我之前曾用OneTrainer和Kohya训练SDXL,但我想尽早开始使用Flux,而AI-Toolkit已经准备就绪且非常易于使用。
我使用ComfyUI生成图像并测试训练好的Lora。
版本控制
随着你逐步建立数据集并训练Lora,很容易忘记你用来生成特定输出的文件,或者在发布时忘记将哪个Lora副本放入ComfyUI的模型文件夹中。你应该尝试为一切进行版本控制——包括你使用的配置文件、Lora备份保存的输出文件夹,以及用于训练的对应数据集。在准备文件时创建类似的文件夹结构:
- /ai-toolkit/config/my\_lora\_name/v1.0/config.yaml
- /ai-toolkit/datasets/my\_lora\_name/v1.0/
- /ai-toolkit/output/my\_lora\_name\_v1.0/
如果你更改了任何东西,即使只是增加了一个文件或稍微调整了学习率,也要创建一个新版本号,将所有相关文件复制到新版本中,然后在其中进行更改。这样你就会得到一个名为/ai-toolkit/config/my\_lora\_name/v1.1/config.yaml的文件。
即使是一个小的变化也会对输出产生很大影响,你有时会想回到之前的设置。你不希望因为覆盖掉数据或配置文件而导致无法找回。
你还应该尝试将这个版本号与发布到CivitAI上的版本号相匹配,这样如果你想重新训练一次,很容易配对两者。例如,在我的Flat Color Anime风格中,旧的SDXL版本使用的是2.0版本,而Flux版本及其更新则使用3.0、3.1、3.2等版本。这些数字与我本地训练配置的名称相匹配。
标注
请注意,我主要训练的是风格Lora,所以我在这方面的经验较多,但我也进行了一些角色训练。
风格Lora
在几乎所有情况下,我发现不为训练用图像添加标注能更好地匹配艺术风格。
我使用一个触发词(通常是“<something\_style>”,例如“ichor\_style”),并在AI-Toolkit配置文件中设置。我认为背后的逻辑是你希望捕捉图像外观的所有细节。
当你添加标注时,本质上是在告诉训练脚本你想要排除的内容。
关键在于你需要一组多样化的训练图像。如果你在训练风格时的每张图像中都有相同的角色,并且没有对其进行标注,那么它只会学会一遍又一遍地生成那个角色。
在我的Samurai Jack Lora中,我必须小心不使用过多实际显示Jack的图像(这并不容易找到!)。背景截图和其他角色的图像帮助完善风格,教会训练如何绘制一般性内容,而不是仅仅针对一个特定角色。
Genndy Tartakovsky / Samurai Jack风格训练图像的一个例子。
唯一的例外是Flat Color Anime。我发现在完整描述(即至少几句话描述每个图像)的情况下,效果更好。这可能是因为我的数据集主要是“waifu”,我不希望它专注于这一点,但我还没有一个好的解释。再次强调——版本控制在这里很有用,我可以分别运行有标注和无标注的配置,然后比较两者。
角色Lora
在这里,标注显得更加重要。你需要描述角色以外的一切。例如:
Aerith仰望,神情充满惊奇,双眼睁大,嘴唇微张,仿佛被上方的某物吸引住了。背景中温暖的光芒为场景增添了柔和的氛围光,突出了她的面部特征。
注意,我描述了她周围的环境以及她可能变化的特征(即表情和朝向),但没有谈论她的发型、服装、眼睛、饰品等。当我在第一次测试中标注了她的衣服和发型时,我得到了如下结果:
因为我标注了她的服装,所以生成的结果中她穿着完全错误的衣服。
数据集
图像的细节应尽可能高。即使你在512px下进行训练,仍然需要高分辨率的数据集(即至少1024x1024或更大)。
风格
对于风格数据集,你需要大约20到30张图像。如果图像非常一致,可以减少到10到15张。这些图像的风格显然需要一致,并且你需要在图像中尽量变化内容,以免某一特定角色或物品被反复生成(除非这是风格的一部分)。我第一次尝试像素艺术时使用了110张图像。
它们的风格完全相同,但Flux似乎不喜欢在如此大的数据集上进行训练,最终的结果并不理想。我将其减少到精心挑选的16张图像,重新运行训练,结果要好得多。
像素艺术风格训练数据示例 - 无标注(仅触发词)
角色
你需要类似数量的图像(加上我们前面讨论过的标注)。它们必须是相同风格的(不要混合写实风格与卡通/动漫风格),并且你要尽量获取各种角度的镜头。至少有五个在不同情况下的直接头部特写,还有一些侧面角度、全身镜头(以及相同的侧面和背面镜头)。
包含特定服装元素的特写(例如Aerith连衣裙的图案或她的手镯)。
训练设置 / 配置
你会听到很多人说没有两个训练配置是完全相同的。这是真的,但通常你可以使用一套标准参数,然后根据需要进行微调。
风格
对于风格Lora,我使用1.5e-4的学习率,运行3000步,每250步备份一次,每500步采样一次。确保保留所有检查点备份,并且在训练过程中不要让它开始删除备份(默认设置是保留最近的10个——我将其更改为1000,以便保留所有备份)。
风格通常收敛得很快,你可能在1500步时就能看到好的结果,但我发现2500到3000步之间通常效果最好(几乎总是在3000步)。通过每250步进行备份,你可以在训练后进行测试,找到最佳结果,而每500步进行的采样则可以为你提供良好的指示,告诉你应该关注哪些步骤。
你也可以在512px下进行风格训练,并获得出色的结果,这大大缩短了训练时间(通常约为2.5小时)。如果你有非常细微的细节想要捕捉,并且没有得到想要的结果,尝试将分辨率提高到1024px。
我主要使用默认的样本提示词,并进行了一些微调,但我通常会使用5个带触发词的提示词和两个不带触发词的提示词。这让我可以看到即使不使用触发词,风格在输出中渗透的程度。理想情况下,你希望不带触发词的两个样本从训练开始到结束变化尽可能小。
你还希望在触发词样本和不带触发词的样本中包含带有文本的图像,以测试文本理解的影响。
01 - 05 使用了触发词,06 和 07 没有使用触发词。
角色
这可能会更棘手。到目前为止,我发现最好的是进行更长时间的训练(长达8000步),并使用显著较低的学习率(2.5e-5)。
这能够捕捉到角色中的许多细微细节,并且通常能更好地理解角色在不同情况下的表现。使用1024px的训练分辨率来捕捉最多的细节。备份和采样设置与上述相同,但使用带有触发词的提示词来展示角色在不同情况下的表现以及不同角度的视角。
我仍然需要更多的实验来找到质量与训练时间之间的平衡。由于训练时间较长(根据设置通常为8到12小时),实验起来比较困难。此外,我还有很多风格Lora需要处理 :)
我已经在文章中附上了风格和角色设置的示例配置。
结论
两周前,当我看到Flux的潜力时,我全力投入其中。这简直太神奇了,我无法相信我们获得了如此强大的工具免费使用,我对其背后的开发者充满感激。
我们很快意识到Flux缺少了一些我们在SD 1.5和XL等之前的模型中拥有的艺术风格和角色,我想为重新引入这些元素尽一点绵薄之力。说实话,学习这些东西并将其付诸实践非常有趣,并且我从社区和Reddit上收到的反馈让这一切都值得。
我很乐意回答大家的问题——无论是在评论区提问还是给我发消息。如果你觉得这篇文章对你有帮助,请考虑点赞并关注我,获取更多的更新和风格。我也会尝试回过头去为我发布的模型添加训练数据集,这样你们就可以看到它们是如何制作的。
满满的爱 ❤️
CrasH
原文:‣
对这个话题感兴趣的小伙伴,欢迎加我一起探索交流~