Flux-dev2pro-fp8 special use for training Flux LoRA
详情
下载文件
模型描述
这是一个转载的模型。
我不是原始创作者。
警告: 此模型通常仅用作训练 LoRA 的基础模型,其图像生成效果不如 f1.d-fp8。
但如果你坚持使用此模型生成图像,它也能工作,你可以尝试一下。
来源:Kijai/flux-dev2pro-fp8 · Hugging Face
也许上面的也不是原始创作者,下面是 fp16 版本。
来源:ashen0209/Flux-Dev2Pro · Hugging Face
我不清楚它们之间的关系,因此一并提供了两个来源。
该基础模型的原理和效果如下:(同样为转载)
来源:Why Flux LoRA So Hard to Train and How to Overcome It? | by John Shi | Aug, 2024 | Medium
为何训练 Flux LoRA 如此困难?如何克服?
TL, NR
- 不要在如 Flux-dev/schnell 这类蒸馏模型上训练 LoRA。
- 在输入引导系数为 1.0 的微调模型上训练 LoRA。
- 以下是我使用三百万高质量数据微调的模型,虽然其自身效果并不令人满意,但能显著提升 LoRA 的训练结果。(不要在微调模型上应用 LoRA,而应在蒸馏模型 Flux-dev 上应用。)
https://huggingface.co/ashen0209/Flux-Dev2Pro
一些 LoRA 效果示例:
https://huggingface.co/ashen0209/flux-lora-wlop

在相同训练/验证设置下,从不同模型微调后得到的 LoRA 结果
背景
BlackForest Lab 最近发布的 Flux 模型令人印象深刻,在文本理解能力和图像细节质量方面表现卓越,远超当前所有开源模型,甚至与 Midjourney v6 等领先闭源模型相比也毫不逊色。

然而,当文本到图像模型的开源社区尝试对其进行微调时,出现了众多问题。我发现该模型要么在短时间内完全崩溃,要么微调效果极差。诸如扭曲的人体四肢、语义理解能力下降、图像模糊无意义等问题层出不穷。与 SD1.5 或 SDXL 不同,在 Flux.1 上进行微调或训练 LoRA 要困难得多。在这里,我想探讨这些困难的潜在原因,并探索可能的解决方法。
理解 Flux-dev 的蒸馏过程
让我们先推测 Flux-dev 的工作原理。与 SD 及许多其他 T2I 模型不同,Flux-dev 不使用负向提示进行 CFG(无分类器引导),因为该引导已被蒸馏进模型中。其训练目标可能是以下方式(个人推测,但非常可能):

推测的训练过程
首先,Flux-dev 由 Flux-pro 初始化,在每次训练迭代中,随机选择一个引导系数,Flux-dev 基于此系数预测去噪结果。同时,Flux-pro 在无引导嵌入的情况下预测去噪结果,但采用无分类器引导方式,即同时预测正向和负向结果,并以引导系数进行融合。Flux-dev 很可能在流匹配损失之外,还接受了这种蒸馏监督训练。经过该蒸馏过程后,Flux-dev 模型能在仅需一半计算成本的情况下,生成与无分类器引导方法质量相近的图像。
至于 Flux-schnell,它可能采用了类似 SDXL-turbo 所介绍的对抗蒸馏方法。但由于其训练更困难,我们在此不再深入探讨。

推测某些能力已从 pro 模型中“移除”
此外,可能还有我们尚未了解的其他细节。例如,Flux-dev 和 Flux schnell 的输出多样性得分显著低于 Flux-pro。这可能表明某些其他能力被“移除”或削弱了。例如,可能存在另一个输入条件,比如美学输入嵌入,在蒸馏过程中,Flux-pro 教师模型中该嵌入的范围可能被限制得更窄(或许是为了人类偏好),而 Flux-dev 中并不存在。另一种可能性是,dev 模型只是对训练集中更小子集过度拟合。所有这些推测都可能是合理的,但目前真相仍未知。
为什么训练会失败
在理解了 Flux 的蒸馏过程后,我们就能明白,训练 Flux-dev 失败的关键原因在于 CFG 引导系数。在缺乏 Flux-pro 蒸馏的情况下,训练过程中该系数应如何设置?
如果在训练时将引导系数设为 3.5 或其他推理阶段推荐的合理范围,似乎很合理,因为这与原始训练阶段的值一致。然而,由于缺少 Flux-pro 的 CFG 结果约束,训练动态将发生显著变化:引导嵌入会被破坏,因为引导蒸馏已不存在,若训练时间足够长,通常会导致模型崩溃。
更简单的方法是在训练时使用引导系数 1.0。这看似违反直觉,因为原始训练和推理阶段并未使用 1.0 的引导系数。但有两个原因使这种方法可行:(1)在引导系数为 1.0 时,蒸馏损失最小,因为 CFG 对 Flux-pro 不起作用,而 Flux-pro 近似于 Flux-dev,因此我们可以摆脱教师模型。(2)这种无蒸馏的训练设置与 Flux-pro 一致,而 Flux-pro 本身没有引导系数作为输入,默认值为 1.0。因此,通常情况下,使用引导系数 1.0 训练模型,是为了恢复 Flux-pro 模型。
然而,仍存在问题:没人知道需要多少图像和多少计算资源。此外,引导系数 1.0 可能超出了原始 Flux-dev 蒸馏训练的分布范围,这意味着若训练步数不够,模型可能不够稳定。
如何良好地训练 Flux
遗憾的是,可能没有简单的解决方案。虽然已产生许多 LoRA 模型,但若没有充足的数据集和训练步数,几乎没有令人满意的成果。产生优质模型最可靠的方法是:先在 Flux-dev 上训练以恢复 Flux-pro,然后在恢复后的模型上微调 LoRA,而不是直接在 Flux-dev 上训练。否则,我们将面临丢失引导嵌入或获得低质量结果的风险。
以下是我使用三百万高质量图像训练两个周期后获得的微调模型 “Flux-dev2pro”:https://huggingface.co/ashen0209/Flux-Dev2Pro
虽然它远非完美,实际上生成效果比 Flux-dev 更差,但我确实注意到一些有益的改进。让我们看看在引导系数设为 1.0 时生成的图像:

使用引导系数 1.0 并非推理的典型设置,通常会导致原始模型效果不佳。然而,这表明在该特定训练设置下,微调模型表现更好,而原始模型则失败了。虽然在正常推理设置下它表现更差——因为我们缺乏使用更大引导系数的蒸馏训练——但这并不要紧。我们并不用它来进行推理,而是仅用于训练(如前文所述),并可继续以此设置训练 LoRA,以获得更好的结果。
这是我使用该模型进行实验的一些成果。我在两个基础模型——微调后的 “Flux-dev2pro” 和原始 “Flux-dev”——上训练了一个以著名艺术家 Wlop 风格为基准的 LoRA。
LoRA 地址:https://huggingface.co/ashen0209/flux-lora-wlop

在微调模型上训练 LoRA,并在原始模型上推理,效果最佳
正如预期,基于 “Flux-dev2pro” 训练并在 Flux-dev 上应用的 LoRA 产生了最佳效果,显著优于其他方法——类似于在 SDXL 上训练 LoRA 并应用于 SDXL-turbo 或 SDXL-lightning 时获得的优异结果。
尽管在 “Flux-dev2pro” 上训练 LoRA 并在 Flux-dev 上推理的初步结果令人鼓舞,并显示出显著改进,但显然我当前的 “Flux-dev2pro” 版本仍处于发展阶段。仍有进一步优化的空间,我乐观地认为,通过持续努力或社区贡献,我们将看到更出色的模型出现。完善这些模型的过程充满挑战,但每一步都让我们更接近释放其全部潜力。我期待着这一领域的发展,并热切盼望未来的创新。


