建议重新审视Diffuser默认LoRA参数

社区文章 发布于2024年6月21日

过去一年里,我使用SDXL训练了数百个LoRA微调模型,而在我重新回到咨询领域后,我在十几个提供微调服务的初创应用平台上进行了测试。我非常一致地看到这些训练程序产生相同的一般质量结果。

  • 如果风格是通用的、浮夸的,特别是3D风格,那么通常情况下,普通观众会觉得质量尚可。
  • 原始数据集中的概念几乎总是略微过拟合,有时甚至过度过拟合,在大多数图像中或多或少地出现。
  • 极简主义风格、真实摄影风格和人工创建的数据集开始崩坏。
  • 在许多图像的边缘放大时,退化非常明显。

一些例子:在这个例子中,你可以看到逼真度水平,然而提示是“一个小男孩”——尽管这个角色在一个合理大小的数据集中,但概念在模型本身的逼真度退化之前就过拟合了。这对我来说意味着训练速度过快。

image/webp

此外,这张图片不仅显示出轻微的概念过拟合,你还可以看到线条退化。这可能很难辨别,因为早期过拟合的线条退化与欠拟合的线条退化相似。关键在于,如果你也发现概念出现过拟合,那么这在真正欠拟合的模型中是不会出现的。

image/png

此外,你可以在这个写实主义示例中看到,尽管更广泛的概念被理解,但使得写实主义令人信服的细微细节并未被学习。我猜测这又是训练过快过强的结果。

image/png

我最初感到困惑——为什么整个领域的训练会如此一致地出现同样的问题,特别是在我的经验中,这些问题通常是可以避免的?于是——我开始提问。我很幸运地在开始训练SDXL时,最初使用了The Last Ben的runpod notebook,它有非常合理的建议设置。然而,我记得在早期测试中,我曾看到Diffusers的预设,并最初尝试使用它们。所以——我最近开始询问创始人——你们是否使用Diffusers的预设?

答案当然是肯定的。

为了方便理解,以下是Diffusers LoRA博客中的预设。

根据我的经验,这些预设能快速出结果,但结果质量较差。然而,解决方案很简单。在我看来,Unet和文本编码器的学习率设置过高。这导致训练速度非常快,除非是训练一个数据集已经经过VAE处理的通用概念,否则我发现结果往往完全失败。即使整体风格被捕捉到,我仍然持续看到逼真度、提示连贯性和概念过拟合方面的问题。此外,由于学习率高得多,自然需要减少总训练步数。我发现这也会强制快速学习,但结果并非我个人满意的模型。

从实际角度来看,对于初创公司来说,测试每个训练边缘情况是不现实的。此外,AI数据集更容易整理,所以根据我的经验,许多初创公司至少在部分训练过程中依赖它们。Diffusers也是一个重要的资源,因此,依赖其预设作为良好的起点似乎很自然。在我看来,这导致了不良训练实践的广泛采用。

(顺便一提,这些预设也将训练图像分辨率设置为512,而对于SDXL来说,几乎肯定应该是1024。)

这是我对修订后预设的建议

resolution: 1024
train batch size: 4
max training steps: [# of images x 250]*
Unet LR: 5e-5
Text Encoder LR: 1e-5

为了保留复杂的细节,我通常会提高总步数并逐步降低学习率。我通常不会低于9e-7,并将文本编码器的学习率保持在低于Unet的水平。我发现主题比风格更需要专注的文本编码器训练。

  • 这可能不适用于所有人,但我认为在训练过程中,在数据集中每张图像以60、90、120、150、180、210步或其他类似间隔的步数处停止并查看结果是绝对必要的。我认为指望每个数据集都需要相同的步数是不现实的,即使是相同风格的数据集也是如此,同时也能让用户对最终结果有掌控感。如果无法做到这一点,您可能会发现,在许多情况下,更接近150步停止会更好。

正面例子

在这个例子中,你可以看到线条非常干净,尽管是数字化的,但没有那种明显是AI生成线条在轻微过拟合时可能出现的融化效果。image/jpeg)

这张图片不仅没有概念过拟合,还清晰地展示了通过放慢训练速度可以达到的逼真度水平。image/webp

总而言之,我认为如果能重新审视默认的Diffuser参数,将对整个社区有所裨益。我希望这能有所帮助,当然也很想听听其他人用我的方法取得了什么结果。我并不认为我的方法是最终定论,但我认为采用更合理的预设将导致整个领域取得更好的结果,Diffusers有责任建议一个能带来更多成功的预设。

社区

注册登录 发表评论

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