Skip to main content

使用Dreambooth训练稳定扩散

对使用Dreambooth训练稳定扩散的实验分析
Created on December 9|Last edited on February 14


Dreambooth是一种通过特殊形式的微调来教授稳定扩散(Stable Diffusion)新概念的技术。有些人用Dreambooth来搭配一些照片,让自己置身于美丽的环境中,而另一些人则用Dreambooth来融入新的风格。🧨 扩散器(Diffusers)提供了一个Dreambooth训练脚本,但一些用户表示很难获得好的结果。
我们进行了大量实验来验证脚本,并分析Dreambooth不同设置的效果。本报告将介绍实验的发现和一些技巧,以提高大家在Dreambooth训练稳定扩散时的效果。

所涉及的内容



TL,DR;

  • 使用Dreambooth,StableDiffusion很快就会过度拟合。为数据集找到合适的学习率(LR)和训练步骤很重要。用较少的步骤训练较高的学习率,用较多的步骤训练较低的学习率,得到的结果非常相似。我们必须找到给定学习率的“最佳”训练步骤,以获得合理的图像。
  • Dreambooth需要更多人脸训练步骤。在批次大小为2、学习率为1e-6的实验中,大约800-1200个步骤效果不错。
  • 在对人脸进行训练时,先验保存(Prior preservation)很重要,以避免过度拟合,对于其他对象来说,似乎没有太大区别。
  • 如果看到生成的图像有噪声,或者质量下降,很可能意味着过度拟合。首先,尝试以上步骤来避免。如果生成的图像仍然有噪声,使用DDIM调度器或运行更多的推理步骤(在我们的实验中,大约100个步骤效果不错)。
  • 执行EMA似乎并没有什么区别。
  • 通过微调文本编码器,结合低学习率和适当数量的步骤,获得了最佳结果。然而,微调文本编码器需要一个至少有24GB内存的GPU。

学习率(LR)的影响

使用Dreambooth,StableDiffusion很快就会过度拟合。为了获得较好的结果,调整数据集的学习率和训练步骤很重要。我们在四个具有高学习率和低学习率的数据集上,对Dreambooth SD进行了微调,在所有情况下,用低学习率训练时,模型产生的结果更好。

实验设置

所有实验都是使用train_dreambooth.py脚本和AdamW优化器,在2x 40GB A100s上进行的。我们使用了相同的种子,并在整个运行过程中保持所有超参数相等,除了学习率、训练步骤和使用先验保存。
对于前三个示例,我们对模型进行了微调,批量为4(每个GPU 2批),400步。我们使用了5-6的高学习率和2e-6的低学习率。未使用先验保存。
人脸示例在先验保存的情况下进行训练,批量为2(每个 GPU 1 批),800步和1200步。我们使用了5-6的高学习率和2e-6的低学习率。
下方可以看到具有高学习率和低学习率的四个数据集的结果。

猫咪玩具示例

高学习率 (5e-6)

低学习率 (2e-6)


Pighead Example

高学习率 (5e-6)

低学习率 (2e-6)



蛋头先生示例

高学习率 (5e-6)

低学习率 (2e-6)


人脸示例

调查结果摘要

正如所见,要在使用Dreambooth训练稳定扩散技术时获得良好的结果,重要的是:
  • 调整数据集的学习率和训练步骤。
    • 高学习率和过多的训练步骤会导致过度拟合(换句话说,无论提示如何,模型都只能从训练数据中生成图像)。
    • 低学习率和过少的步骤会导致欠拟合,这是因为模型无法生成经过训练的概念。
  • 在我们的实验中,2e-6用于具有400个训练步骤的对象,1e-6或2e-6用于具有约1200个步骤的人脸,似乎效果不错。

噪声和退化图像的影响

如果模型过度拟合,图像质量会下降很多,如果出现以下情况,就会发生这种情况:
  1. 学习率过高,如上节所述。
  2. 运行了太多的训练步骤,如上节所述。
  3. 对于人脸的情况,如果没有使用先验保存的话。

先验保存对人脸的影响

使用先验保存,1200步,低学习率 (2e-6)

未使用先验保存,1200步,低学习率 (2e-6)



调度器(采样器)的影响

以上所有结果都是使用PNDM调度器(又名PLMS)生成的,同样有趣的是,不同的调度器有不同的效果。
过度拟合时,使用PNDMLMSDiscrete (klms) 调度器时,图像质量受到的影响最大。使用DDIM进行推理似乎更加稳健。通过执行更多的扩散步骤,也可以提高质量(约100步似乎效果不错)。

PNDM

LMSDiscrete

DDIM



使用蛋头先生数据集


PNDM

LMSDiscrete

DDIM


调度器影响的总结

如果看到生成的图像有噪声或质量下降,则可能意味着过度拟合。要避免这种情况,请执行以下步骤:
  • 使用低学习率或较少的训练步骤
  • 使用先验保存
如果经过以上步骤,图像质量仍然下降:
  • 尝试不同的调度器
  • 使用更多的推理步骤

微调文本编码器的效果

有些人观察到,使用扩散器的效果不如其他Dreambooth分支的效果,尤其是对于人脸。经过研究,我们发现在CompVis分支中,文本编码器也进行了微调!微调文本编码器的效果很不错。
请自行查看:

冻结文本编码器

微调文本编码器



微调文本编码器的总结

微调文本编码器似乎产生了最好的效果,特别是对人脸。
  • 生成更逼真的图像
  • 减少过度拟合
  • 允许更优的提示解释性(prompt interpretability),即可以处理更复杂的提示。
微调文本编码器的唯一缺点是,无法在16GB GPU上进行训练,我们至少需要一张24GB的显卡。使用DeepSpeed在16GB中应该可以,但这会增加训练时间。

文本倒置和Dreambooth

我们还做了另一个实验,首先运行文本倒置(textual inversion)2000步,然后使用该模型运行Dreambooth 500步,学习率为1e-6


如上所见,结果比只做Dreambooth好得多,但不如微调整个文本编码器时好,因为这似乎更多地复制了训练图像的风格。但这也可能是因为过度拟合。我们没有多加探讨,但这可能是微调文本编码器的一个很好的替代方案,因为文本倒置和Dreambooth都可以在16GB的GPU运行,而且训练时间较短。我们将其留给社区进行深入探索。
这种分析并不完美,还有其他方法可以改进Dreambooth。如果发现任何错误或改进之处,敬请告知。感谢阅读!

相关资料


Iterate on AI agents and models faster. Try Weights & Biases today.