Hugging Face SDXL Dreambooth LoRA 高级训练指南
Hugging Face 已发布用于 Stable Diffusion XL(SDXL)Dreambooth LoRA 的高级训练脚本,结合了 Replicate 的 Cog trainer 中的 Pivotal Tuning 技术和 Kohya trainer 中的 Prodigy 优化器。此集成旨在使用最少的图像实现高质量概念捕获,同时保持基础 SDXL 模型的美学质量。
概念表示的 Pivotal Tuning
Pivotal Tuning 将 Textual Inversion 与标准扩散微调相结合,以防止现有 token 的语义干扰。与复用稀有 token(例如 "sks")不同,稀有 token 可能在模型的嵌入空间中已有预先关联,Pivotal Tuning 会向文本编码器中插入新 token。
这些新 token 会被优化以表示新概念。训练过程通常在前半段训练 epoch(由 --train_text_encoder_ti_frac 控制)执行文本反演,然后继续进行 UNet 优化。这样可确保模型在微调权重之前先学习到概念的干净表示。
自适应优化器与 Prodigy
为减少对学习率和权重衰减等超参数的手动调节,Hugging Face 推荐使用自适应优化器。虽然 Adafactor 是一种选择,但指南特别强调 Prodigy 对 Dreambooth LoRA 训练的显著益处。
Prodigy 会根据过去的梯度动态调整每个参数的学习率。使用 Prodigy 时,推荐以下设置:
- 学习率:设为
1.0。 - 额外设置:启用
--prodigy_safeguard_warmup和--prodigy_use_bias_correction,并将adam_beta2设置为0.99、adam_weight_decay设置为0.01。
高级训练实践
在 diffusers 训练脚本中加入了多项技术,以提升 LoRA 质量:
独立学习率
为文本编码器设置比 UNet 更低的学习率可以防止文本编码器过快过拟合。然而,当使用像 Prodigy 这样的自适应优化器时,优化器会自动从相同的初始学习率管理这些调整。
自定义字幕
对所有图像使用单一实例提示往往效果不佳。脚本支持通过 datasets 库进行自定义字幕,允许用户为每张图像提供唯一提示。可以使用 Hugging Face Hub 上的数据集,或创建带有元数据的本地 ImageFolder。
最小 SNR Gamma 加权
最小 SNR gamma 加权通过基于限制的信噪比自适应调整损失权重,平衡训练期间不同时间步的冲突。该方法对大规模数据集尤为有效;推荐值为 --snr_gamma=5.0。
训练集策划
高质量、多样化的数据对 LoRA 性能至关重要。关键建议包括:
- 人脸:使用高分辨率图像,避免训练集中出现其他人脸,并包含特写和全身镜头,避免远景。
- 多样性:确保光照、姿势、背景和面部表情的多样性,以提升泛化能力。
- 先验保持损失:使用真实肖像图像进行正则化(而非模型生成的图像),可降低语言漂移并保持真实感。
实验结果与基准
Hugging Face 在三个类别中进行实验,以验证这些技术的有效性:
- 风格与角色(Huggy LoRA):Pivotal Tuning 在与完整文本编码器训练的竞争中表现相当或更佳。使用
snr_gamma=5.0和 Prodigy 优化器的结果优于 AdamW。 - 风格(Y2K 网页 LoRA):该实验表明,风格 LoRA 相较于角色 LoRA 更容易过拟合。需要调整
max_train_steps、repeats和train_batch_size,以在概念捕获与灵活性之间取得平衡。 - 人脸(Face LoRA):实验显示 rank 为 32 时效果最佳;更高的 rank(如 64)常导致“空气刷”般的外观,皮肤纹理不够真实。对多样化数据集而言,训练步数为图像数量的 120 倍最为有效。
推理与兼容性
使用 Pivotal Tuning 训练的模型需要同时提供 LoRA 权重(*.safetensors)和训练得到的文本嵌入(*.safetensors)。
Diffusers 推理
在 diffusers 中,用户必须先使用 pipe.load_textual_inversion 将嵌入加载到两个文本编码器(CLIP ViT-L/14 和 CLIP ViT-G/14),随后再使用 pipe.load_lora_weights 加载 LoRA 权重。
ComfyUI 与 AUTOMATIC1111
训练脚本会生成兼容 WebUI 的 LoRA 与嵌入文件。在 AUTOMATIC1111 中,用户可以使用嵌入 token 和 LoRA 标签进行提示,例如 a y2k_emb webpage <lora:y2k:0.9>。在 ComfyUI 中,LoRA 通过 LoRALoader 节点加载,嵌入文件放置在 models/embeddings 目录下。