跳转到内容

AI 绘画生成手册/训练/DreamBooth

来自维基教科书,开放世界中的开放书籍

什么是 Dreambooth ?

[编辑 | 编辑源代码]

我们将重点关注 Dreambooth 的训练。所以让我们继续吧

Dreambooth 是一种用于定制和个性化文生图扩散模型的方法。它只需要少量训练数据就能取得出色效果。Dreambooth 是基于 Imagen 开发的,模型可以导出为 ckpt 并加载到各种 UI 中。然而,Imagen 模型和预训练权重不可用。因此,Dreambooth 最初并不适合稳定扩散。

后来,扩散器实现了 Dreambooth 功能,并将其完全适应于稳定扩散。Dreambooth 很容易过拟合。为了获得高质量的图像,我们必须找到训练步骤和学习率之间的“最佳点”。建议使用较低的学习率,并逐渐增加训练步骤,直到达到满意的状态。

安装 Dreambooth

[编辑 | 编辑源代码]

下载 Dreambooth 扩展非常容易。首先,你需要转到“扩展”选项卡,点击下面的“可用”选项卡。

之后,搜索名为:sd_dreambooth_extension 的扩展,并点击“安装”按钮来安装它。

点击“已安装”选项卡,然后点击“应用并重启 UI”。 。为了更好的安装,关闭 webui.bat 并重新打开以确保正确安装。


注意:此处的说明基于开发者在 rev 926ae20 上的最新更新。

在 Dreambooth 中训练 / 模型选项卡

[编辑 | 编辑源代码]

(1) 点击 Dreambooth 选项卡。

(2) 为了从头开始创建新模型,在模型名称中输入模型的名称,并在源检查点中选择你已经安装的模型列表。确保选中了512x 模型

(3) 点击创建模型

(4) 等待大约 1 分钟,让 WebUI 生成模板文件夹

在 Dreambooth 中训练 / 设置选项卡

[编辑 | 编辑源代码]

你可以点击性能(WIP)来为 PC 上的 Dreambooth 训练设置推荐设置

在通用中有一些复选框,即

(i) 使用 LORA - 建议用于 8GB ~12GB VRAM 的 PC 训练

(ii) 仅训练 imagic - 仅使用单个图像进行训练

"每个图像的训练步骤(周期)"

在“间隔”部分,“每个图像的训练步骤(周期)”指定每个图像的训练步骤数量。

对于训练步骤,尝试训练 175 步 (用于训练物体/风格)。

注意:“概念”页面上的“训练人物”和“训练物体/风格”部分有不同的最佳值。它越高,训练时间越长。

例如,如果上传了三张图像,并且你想要总共训练 1500 步,那么每张图像将训练 500 步。


"每个周期后暂停" 指定每个周期之间有多少个间隔,并设置为 0。

"每个周期之间暂停的时间(秒)" 与之前的设置类型相同,也设置为 0。

"保存模型频率" 指示多久保存一次检查点。每次保存大约 4-5 GB,所以如果磁盘空间有限,可以设置更高的值。

"保存预览频率(周期)" 指示每个周期多久预览一次图像。它通常设置为 5,可能会影响训练速度。

“批次大小”用于加速训练时间,但会增加 GPU 内存使用量。

“梯度累积步骤”是在计算和反向传播梯度之前的步骤数量。确保用于训练的图像数量可以被这两个值的乘积整除。例如,如果两个值都设置为 2,则总体速度提高 4 倍,重要的是要确保用于训练的图像数量可以被 4 整除。

"将梯度设置为零时为 None" 使用更多 GPU 内存。

"梯度检查点" 减少 GPU 内存使用量。

学习率

[编辑 | 编辑源代码]

学习率是一个值,通常介于 0.0 到 1.0 之间,在神经网络训练过程中使用。模型的目标是将损失最小化,损失表示输入的预测输出与该输入的真实标签之间的差异。建议使用0.0000010.00000175 之间的任何值,以获得良好的结果。根据模型的复杂性,更简单物体的学习率可能只需要 0.001

然而,较高的数字可能会生成与你预期(通配符)不完全相同的模型输出,而较低的数字意味着模型输出可能会与你的模型看起来非常相似(过拟合)。


"学习率调度器"

这些调度器经过测试并确认适用于“训练物体/风格”,并解释如下

带预热常数:想象一下,你正在尝试爬一座山,但你的腿很僵硬。你需要先热身,做一些伸展运动和轻微的锻炼,让血液流动起来,然后再开始远足。

类似地,使用这种学习率调度器,我们从较低的学习率开始,并在一定数量的预热步骤中逐渐增加它,以便模型在开始增加学习率之前能够逐渐适应训练数据。

带预热的线性:想象一下与带预热的常数相同的情况,你需要在爬山之前热身。热身完毕后,你以缓慢的速度开始,并随着你越来越接近山顶而逐渐提高速度。

这类似于带预热的线性学习率调度器的工作原理。我们从较低的学习率开始,并在一定数量的预热步骤中线性地逐渐增加它,然后在接下来的训练步骤中保持不变。

多项式学习率:想象一下,你正在一个天气变化无常的地区爬山。你想要调整你的速度,以便能够安全地导航远足,避免从山上掉下来。如果你在雨天/强风中走得太快,你可能会失去控制而掉下去,而如果你走得太慢,你将无法按时到达目的地。

这类似于多项式学习率调度器的工作原理。我们从较高的学习率开始,并使用多项式函数随着时间的推移逐渐降低它。多项式的次数决定了学习率下降的速度,我们可以调整它以找到训练模型的最佳速度。

使用 EMA:此选项通常不选择。EMA(指数移动平均)用于梯度下降,对微调并不重要。它使用指数移动平均权重来避免在最终迭代中过度拟合。它可以提高模型质量,但在训练期间会使用更多 VRAM。

使用 8 位 Adam:选择此选项以使用 Bitsandbytes 中的 8 位 Adam。它减少了内存使用。在混合精度中选择 fp16 或 bf16,但建议选择 bf16 以获得更好的性能。

内存注意力: 选择 Xformers(如果使用 Torch 1.x)以加快训练过程。Xformers 和 Flash_attention(一种可以减少内存使用的注意力机制)之间的内存使用差别不大。默认值是最快的,但会使用更多 VRAM,Xformers 的速度和 VRAM 使用量居中,而 Flash_attention 最慢,但使用最少的 VRAM。|

附注:请注意,有未经证实的传言称 Torch 2.0 消除了对内存注意力的需求。

缓存潜变量:此选项就像拥有一个存储空间,模型可以在其中保存训练过程中处理数据时获得的中间结果。这样,当它需要再次处理相同的数据时,它可以使用缓存的结果,而不是从头开始重新计算所有内容。这可以加快训练过程,但它也需要更多 VRAM 来存储缓存的结果。

训练 U-NET:启用此选项以允许 U-NET 网络与扩散模型同时训练,以提高图像生成的质量。U-NET 网络经过训练,可以接收扩散模型的输出,并对其进行进一步细化以生成更高质量的图像。此选项*可能*会提高生成图像的整体质量(具体情况具体分析),但它可能需要额外的 GPU 内存并增加训练时间。

设置文本编码器训练比例:人脸图像的最佳值为 0.7,风格图像的最佳值为 0.2。如果 GPU 内存不足,请将其设置为 0。通常,训练 U-Net 可能产生更好的结果。

偏移噪声: 如果将值设置为 0,则会禁用该效果,模型将不会学习调整亮度和对比度。如果启用,Dreambooth 将在输入图像的亮度和对比度中添加一些随机噪声,这使模型能够学习调整这些参数,以创建更逼真和更具变化的输出图像。正值将增加生成图像的亮度/对比度,而负值将降低亮度/对比度。但是,强烈建议使用在不同光照条件下拍摄的输入图像来模拟逼真的图像。

冻结 CLIP 归一化层: 启用此选项时,它可能有助于防止过度拟合,即模型变得过于专门化以适应训练数据,并且不能很好地推广到新数据。通过冻结这些层,模型被迫学习输入数据的更有意义和更健壮的表示,这可以提高其将新数据推广到新数据的能力。它不会增加 VRAM 使用量,但它可能会增加训练时间,因为模型在训练期间无法从归一化层中学习。

裁剪跳过: 如果将裁剪跳过设置为较高的值(> 1),则模型训练实际上是在跳过一定数量的训练层,从而基于对输入文本的更有限的理解来生成图像,这会导致输出不连贯且不相关。

在 Dreambooth/生成选项卡中训练

[编辑 | 编辑源代码]

(1) 对于图像生成库,选择Diffuser

(2) 对于图像生成调度器,首先尝试使用PNDMLMSDISCRETE调度器,以获得更好的结果。如果训练非常快地过度拟合,当模型过度拟合时,DDIM通常比 PNDM 和LMSDISCRETE好得多。

*额外说明

[编辑 | 编辑源代码]

已知使用更多 VRAM 的设置

[编辑 | 编辑源代码]
  • 高批次大小
  • 将梯度设置为零时设置为无
  • 使用 EMA
  • 全精度
  • 默认内存注意力
  • 缓存潜变量
  • 文本编码器

降低 VRAM 的设置

[编辑 | 编辑源代码]
  • 低批次大小
  • 梯度检查点
  • fp16/bf16 精度
  • xformers/flash_attention
  • 文本编码器训练步长比例 0(无文本编码器)

参考资料

[编辑 | 编辑源代码]

Dreambooth 白皮书

Zuxier Github Dreambooth

学习率

U-NET

华夏公益教科书