乐趣区

关于人工智能:使用-Diffusers-通过-DreamBooth-来训练-Stable-Diffusion

邀请参加咱们的 DreamBooth 微调编程马拉松流动!

DreamBooth 是一种应用专门的微调模式来训练 Stable Diffusion 的新概念技术。一些人用他仅仅应用很少的他们的照片训练出了一个很棒的照片,有一些人用他去尝试新的格调。🧨 Diffusers 提供一个 DreamBooth 训练脚本。这使得训练不会破费很长时间,然而他比拟难筛选正确的超参数并且容易过拟合。

咱们做了许多试验来剖析不同设置下 DreamBooth 的成果。本文展现了咱们的发现和一些小技巧来帮忙你在用 DreamBooth 微调 Stable Diffusion 的时候晋升后果。

在开始之前,请留神该办法禁止利用在歹意行为上,来生成一些无害的货色,或者在没有相干背景下假冒某人。该模型的训练参照 CreativeML Open RAIL-M 许可。

留神:该帖子的先前版本已出版为 W&B 报告

TL;DR: 举荐设置

  • DreamBooth 很容易疾速过拟合,为了获取高质量图片,咱们必须找到一个 “sweet spot” 在训练步骤和学习率之间。咱们举荐应用低学习率和逐渐减少步数直到达到比较满意的状态策略;
  • DreamBooth 须要更多的脸部训练步数。在咱们的试验中,当 BS 设置为 2,学习率设置为 1e-6,800-1200 步训练的很好;
  • 先前提到的对于当训练脸部时防止过拟合十分重要,但对于其余主题可能影响就没那么大了;
  • 如果你看到生成的图片噪声很大品质很低。这通常意味着过拟合了。首先,先尝试上述步骤去防止他,如果生成的图片仍旧充斥噪声。应用 DDIM 调度器或者运行更多推理步骤 (对于咱们的试验大略 100 左右就很好了);
  • 训练文本编码器对于 UNet 的品质有很大影响。咱们最优的试验配置包含应用文本编码器微调,低学习率和一个适宜的步数。然而,微调文本编码器须要更多的内存,所以现实设置是一个至多 24G 显存的 GPU。应用像 8bit adam、fp 16 或梯度累计技巧有可能在像 Colab 或 Kaggle 提供的 16G 的 GPU 上训练;
  • EMA 对于微调不重要;
  • 没有必要用 sks 词汇训练 DreamBooth。最早的实现之一是因为它在词汇中是常见的 token,但实际上是一种 rifle。咱们的试验或其余像 @nitrosocke 的例子都表明应用自然语言形容你的指标是没问题的。

学习率影响

DreamBooth 很容易过拟合,为了取得好的后果,设置针对你数据集正当的学习率和训练步数。在咱们的试验中 (细节如下),咱们微调了四种不同的数据集用不同的高或低的学习率。总的来说,咱们在低学习率的状况下取得了更好的后果。

试验设置

所有的试验应用 train_deambooth.py 脚本,应用 AdamW 优化器在 2X40G 的 A00 机器上运行。咱们采纳雷同的随机种子和放弃所有超参雷同,除了学习率,训练步骤和先前保留配置。

对于前三个例子 (不同对象),咱们微调模型配置为 bs = 4 (每个 GPU 分 2 个),400 步。一个高学习率 = 5e-6,一个低学习率 = 2e-6。无先前保留配置。

最初一个试验尝试把人退出模型,咱们应用先去保留配置同时 bs = 2 (每个 GPU 分 1 个),800-1200 步。一个高学习率 = 5e-6,一个低学习率 = 2e-6。

你能够应用 8bit adam,fp16 精度训练,梯度累计去缩小内存的须要,并执行雷同的试验在一个 16G 显存的机器上。

Toy 猫

高学习率 (5e-6)

低学习率 (2e-6)

土豆学生的头

高学习率 (5e-6) 请留神,色彩伪像是噪声残余物 – 运行更多的推理步骤能够帮忙解决其中一些细节

低学习率 (2e-6)

人脸

咱们试图将 Seinfeld 的 Kramer 角色纳入 Stable Diffusion 中。如前所述,咱们培训了更小的批量尺寸的更多步骤。即便这样,后果也不是杰出的。为了简洁起见,咱们省略了这些示例图像,并将读者推延到下一部分,在这里,面部训练成为咱们致力的重点。

初始化后果总结

为了用 DreamBooth 获取更好的 Stable Diffusion 后果,针对你的数据集调整你的学习率和训练步数十分重要。

  • 高学习率多训练步数会导致过拟合。无论应用什么提醒,该模型将次要从训练数据中生成图像
  • 低学习率少训练步骤会导致欠拟合。该模型将无奈生成咱们试图组合的概念

脸部训练十分艰难,在咱们的试验中,学习率在 2e-6 同时 400 步对于物体曾经很好了,然而脸部须要学习率在 1e-6 (或者 2e-6) 同时 1200 步才行。

如果产生以下状况,模型适度拟合,则图像品质会升高很多:

  • 学习率过高
  • 训练步数过多
  • 对于面部的状况,如下一部分所示,当不应用当时保留时

训练脸部应用先前配置

先前的保留是一种应用咱们试图训练的同一类的其余图像作为微调过程的一部分。例如,如果咱们尝试将新人纳入模型,咱们要保留的类可能是人。当时保留试图通过应用新人的照片与其他人的照片相结合来缩小适度拟合。益处是,咱们能够应用 Stable Diffusion 模型自身生成这些其余类图像!训练脚本如果需要的话会主动解决这一点,然而你还能够为文件夹提供本人的先前保留图像

先前配置,1200 步数,学习率 = 2e-6

无先前配置,1200 步数,学习率 = 2e-6

如你所见,当应用先前配置时,后果会更好,然而依然有嘈杂的斑点。是时候做一些其余技巧了

调度程序的成果

在后面的示例中,咱们应用 PNDM 调度程序在推理过程中示例图像。咱们察看到,当模型适度时,DDIM 通常比 PNDM 和 LMSDISCRETE 好得多。此外,通过推断更多步骤能够提高质量:100 仿佛是一个不错的抉择。附加步骤有助于将一些噪声贴在图像详细信息中。

PNDM, Kramer 脸

LMSDiscrete, Kramer 脸。后果很蹩脚

DDIM, Kramer 脸。成果好多了

对于其余主题,能够察看到相似的行为,只管水平较小。

PNDM, 土豆头

LMSDiscrete, 土豆头

DDIM, 土豆头

微调文本编码器

原始的 DreamBooth 论文讲述了一个微调 UNet 网络局部然而解冻文本编码局部的办法。然而咱们察看到微调文本编码会取得更好的成果。在看到其余 DreamBooth 施行中应用的办法后,咱们尝试了这种办法,后果令人诧异!

解冻文本编码器

微调文本编码器

微调文本编码器会产生最佳后果,尤其是脸。它生成更事实的图像,不太容易适度拟合,并且还能够更好地提醒解释性,可能解决更简单的提醒。

后记:Textual Inversion + DreamBooth

咱们还进行了最初一个试验,将 Textual Inversion 与 DreamBooth 联合在一起。两种技术都有类似的指标,然而它们的办法不同。

在本次试验中咱们首先用 Textual Inversion 跑了 2000 步。接着那个模型咱们又跑了 DreamBooth 额定的 500 步,学习率为 1e-6。后果如下:

咱们认为,后果比进行简略的 DreamBooth 要好得多,但不如咱们调整整个文本编码器时那样好。它仿佛能够更多地复制训练图像的款式,因而对它们可能会适度拟合。咱们没有进一步摸索这种组合,然而这可能是改善 DreamBooth 适宜 16GB GPU 的过程的乏味代替办法。欢送随时摸索并通知咱们你的后果!


英文原文: Training Stable Diffusion with DreamBooth using 🧨 Diffusers
译者:innovation64 (李洋)
退出译者团队: https://bit.ly/3QGHTOz

退出移动版