我如何训练 LoRA:m3lt 风格训练概览

社区文章 发布于2024年7月1日

本文将逐步介绍我用于训练 'm3lt' LoRA 模型 的方法。我将提供输入图像(合成生成)并依赖自动生成的字幕,以展示图像和良好参数的重要性。我使用 multimodalartLoRA Ease 进行训练。

感谢 multimodalart 和 HF 团队!

建立一个易于使用、对于拥有本地 GPU 的人免费且符合我理想设置的训练环境几乎是一项不可能的任务。我真的要感谢 Huggingface 团队,特别是 multimodalart (apolinario),他们创建了 LoRA Ease 并进行了必要的调整,使我能够找到完美的参数。开源 AI 将继续改变世界!

一般说明

我个人认为不能通过教程快速学习 LoRA 训练——我认为理想的情况是从另一个人那里学习,因为它需要艺术和模式识别的混合理解。这就是为什么我很少编写“如何做 X”这种风格的 LoRA 训练工作流程。

如果这是您第一次尝试 LoRA——明智的做法是先使用几个 LoRA 和一个模型,这样当您测试模型时,您就知道好的结果是什么样子。

如果这是您第一次微调模型——预计您可能需要重新训练几次才能得到您想要的结果。我可能已经训练了数千个 LoRA,我仍然会重新训练一些 2-3 次以获得正确的输出。

模型信息

备注

  • 我创作艺术 LoRA 的目标是创造一种新的风格,因此我有时会在这个工作流程中融合风格。
  • 在创建特定风格时,可以实现更细微的差别和准确性。
  • 通过利用我在过去文章中提出的一些建议来使用字幕,您可以更准确地进行风格化。
  • 根据我的经验,不同的风格需要调整参数。我建议您以此为起点,并鼓励您自己发现。我计划将来做其他工作流程来 exemplify 差异。
  • 如果您更喜欢在本地运行脚本,可以使用此链接进行设置。

数据准备

模型创建中最重要的一步可能是数据集的整理。在这个模型中,我选择了54张图片。你会注意到其中包含了一系列风格元素,并带有一些共同的主题。这是有意的——我希望创造一种能够拥有广泛色彩范围的风格,而不是过分拟合那些更柔和的人像色调,同时在线条上创造一种草图般的质感。

image/png

通常,我倾向于将我的训练数据集保持在20-30张图片之间。由于这种风格的目标是呈现更广泛的风格概念,我将数据集推向了更大的规模。

字幕

在这个模型中,我想展示一个好的数据集和参数的力量,所以我将字幕留给了 LoRA Ease 上的自动字幕输出。我也可以利用字幕来设计某些结果,这可能会在未来的文章中展示。

独特标记

我使用了 LoRA Ease 提供的独特标记。然而,我在这里使用的特定参数通常不需要独特标记。

使用提示词“女人”,这种风格确实在没有标记的情况下也能很好地呈现出来。

image/png

然而,毫无疑问,加入“TOK 风格”(相同种子)后,风格会略微转变并固化。我们还会看到更多的景深和细节。这可以通过在训练过程中使用更高级的字幕技术进一步操作。

image/png

训练参数

对于 LoRA Ease,我使用了以下训练参数。我还在测试以较低学习率进行的“慢速”训练,这对于摄影等细致风格很重要。我将在另一篇文章中分享该预设。

image/png

当您使用 LoRA Ease 时,请随意为该工作流程选择 风格 预设。

高级选项

  • 优化器 AdamW
  • 使用 SNR Gamma
  • SNR Gamma 权重 5
  • 混合精度 bg16
  • UNet 学习率 0.0005
  • 最大训练步数 3000[^1]
  • LoRA 秩 32
  • 重复次数 12
  • 先验保持损失
  • TI 嵌入训练 关[^2]
  • TE % 0.2
  • TE 学习率 0.00005
  • 分辨率 1024
  • 种子 42 很好,选择最适合您的。

[^1]: 我通过训练图像数量乘以每张图像的步数来计算最大训练步数。通常,当 UNet 学习率为 1e-4 到 5e-4 时,我希望每张图像有 50-75 步。当我在较低的总体学习率下训练时,我会增加步数。

[^2]: 我发现 TI 训练风格很好,但概念会过拟合。我将通过一些概念特定的训练运行来更深入地探讨这一点。

更高级的选项

  • gradient_accumulation_steps 1
  • 训练批次大小 4
  • 训练周期数 1
  • prior_loss_weight 1
  • gradient_checkpointing 开启
  • adam_beta1 0.9
  • adam_beta2 0.999
  • 缩放学习率
  • lr_scheduler cosine_with_restarts
  • lr_power 1
  • lr_warmup_steps 0
  • 数据加载器工作进程数 0
  • local_rank -1
  • 使用 Prodigy Beta 3
  • Adam 权重衰减 0.0001
  • 使用 Adam 权重衰减文本编码器
  • Adam 权重衰减文本编码器 0
  • Adam Epsilon 1e-8
  • Prodigy 使用偏差校正
  • Prodigy 安全防护预热
  • 最大梯度范数 1
  • enable_xformers_memory_efficient_attention

通过这些设置,您应该能够相当快地训练出风格。我倾向于建议,如果您发现过拟合,请将 UNet 训练步数减少 100-200。在 -e4 学习率下,小的步长变化会产生很大的影响,这与较慢的 -e5 学习率不同。

如果您发现风格训练良好,但概念过拟合,请将 TE 百分比降低到 0.15 或 0.1。在这种情况下,您可能还需要将 UNet 学习步数增加 100-200 步。如果问题仍然存在,我建议您重新审视您的数据集,并确保您的图像没有重复,或者只是过于一致。

如果您遇到欠拟合,请尝试通过每次增加 100 步的总步数来解决。通常,LoRA 训练过拟合比欠拟合更好,因为您可以通过在推理时降低 LoRA 强度来平衡。

结果

我想分享一些这个模型的最终输出示例,向您展示这些参数创建的范围。对于推理设置,我总是使用训练该风格的模型(在我看来这对于获得良好结果至关重要)和以下推理参数:

image/png


一个女人,TOK 风格

image/png

一个机器人飞过天空,身后冒着滚滚浓烟

image/png

一个金棕色头发的女人,白色T恤,黑色亚麻短裤

image/png

一个金棕色头发的女人,白色T恤,黑色亚麻短裤,动漫风格插画,大圆眼镜,TOK 风格

image/png

一个肉丸潜艇三明治,TOK 风格

image/png

最终观察

  • 不同的提示词与独特标记有不同的关系。这可以通过混合字幕样式来解决,这样可以减少对提示词语法以及独特提示词与每张图像中概念之间关系的重视。
  • 通过提示词创建的女性和女孩的风格无疑是最具多样性的。这并不令人惊讶,考虑到数据集中包含的范围,并且它们对不同的风格化提示词反应良好。
  • 原始数据集中根本不存在的概念通常需要独特的提示。这可以通过更改字幕样式来调整。

社区

注册登录 以评论

© . This site is unofficial and not affiliated with Hugging Face, Inc.