跳到正文
原文
Hugging Face:Blog(RSS)·· 2024-01-02精选AI 评分61

Hugging Face 发布 SDXL Dreambooth LoRA 进阶训练指南

LoRA training scripts of the world, unite!

AI 导读

Hugging Face 发布社区版 SDXL Dreambooth LoRA 微调进阶指南,将 Replicate SDXL Cog trainer 的 Pivotal Tuning 与 Kohya trainer 的 Prodigy 优化器等多项优化结合,训练脚本已在 diffusers 开源,并提供 Colab 和 Hugging Face Spaces 入口。

推荐理由

原文把 Pivotal Tuning 与 Prodigy 优化器等技巧整合进 diffusers 训练脚本,并给出人脸、风格等场景的实测参数对比,方法可直接复用。

正文 · AI 翻译

一份由社区总结的 SD-XL Dreambooth LoRA 微调部分 SOTA 实践指南

TL;DR

我们将 Replicate 的 SDXL Cog 训练器上使用的 Pivotal Tuning 技术与 Kohya 训练器中使用的 Prodigy 优化器(外加一系列其他优化)相结合,在 SDXL 的 Dreambooth LoRA 训练上取得了非常好的效果。在 diffusers 上查看训练脚本🧨。在 Colab 上试一试。

如果你想跳过技术讨论,你可以使用本博客中的所有技术,并在 Hugging Face Spaces 上通过简单的 UI 和精选参数(你可以随意调整)进行训练。

概述

使用 LoRA dreambooth 微调的 Stable Diffusion XL (SDXL) 模型,仅用少量图像就能在捕捉新概念方面取得令人难以置信的效果,同时保持 SDXL 的美学和图像质量,并且所需的计算量和资源相对较少。在这里查看一些很棒的 SDXL LoRA。
在这篇博客中,我们将回顾一些流行的实践和技术,让你的 LoRA 微调飞速运行,并展示你现在如何用 diffusers 运行或训练你自己的 LoRA!

回顾:LoRA(低秩适应)是一种针对 Stable Diffusion 模型的微调技术,它对图像和提示词交汇的关键交叉注意力层进行轻微调整。它能在质量上达到与完全微调模型相当的水平,同时速度更快、所需计算量更少。要了解更多关于 LoRA 工作原理的信息,请参阅我们之前的文章——使用 LoRA 进行高效的 Stable Diffusion 微调。

目录:

  1. Techniques/tricks
    1. Pivotal tuning
    2. 自适应优化器
    3. 推荐实践——文本编码器学习率、自定义标注、数据集重复、min snr gamma、训练集创建
  2. 实验设置与结果
  3. Inference
    1. Diffusers 推理
    2. Automatic1111/ComfyUI 推理

致谢 ❤️: 本指南中展示的技术——算法、训练脚本、实验和探索——均受到以下贡献者的启发并建立在其基础之上:Nataniel Ruiz:Dreambooth,Rinon Gal:Textual Inversion,Ron Mokady:Pivotal Tuning,Simo Ryu:cog-sdxl, Kohya:sd-scripts,The Last Ben:fast-stable-diffusion。向他们以及社区中的其他人致以最诚挚的感谢!🙌

Pivotal Tuning

Pivotal Tuning 是一种将 Textual Inversion 与常规扩散微调相结合的方法。对于 Dreambooth,通常你会提供一个稀有 token 作为触发词,比如“an sks dog”。然而,这些 token 通常还带有其他语义含义,可能会影响你的结果。社区中流行的 sks 例子实际上与一个武器品牌有关。

为了解决这个问题,我们在模型的文本编码器中插入新的 token,而不是复用现有的 token。 然后我们优化新插入的 token 嵌入来表示新概念:这就是 Textual Inversion—— 我们通过嵌入空间中的新“词”来学习表示这个概念。一旦我们获得了新的 token 及其 表示它的嵌入,我们就可以用这些 token 嵌入来训练我们的 Dreambooth LoRA,从而兼得两者的优势。

训练

在我们新的训练脚本中,你可以通过提供以下参数来进行 textual inversion 训练

--train_text_encoder_ti
--train_text_encoder_ti_frac=0.5
--token_abstraction="TOK"
--num_new_tokens_per_abstraction=2
--adam_weight_decay_text_encoder
  • train_text_encoder_ti 支持训练新概念的嵌入
  • train_text_encoder_ti_frac 指定何时停止 textual inversion(即停止对文本嵌入的优化,并仅继续优化 UNet)。 在中途切换(即在前一半训练 epoch 中执行 textual inversion) 是 cog sdxl 示例中的默认值,我们的实验也验证了这一点。我们鼓励在这里进行实验。
  • token_abstraction this refers to the concept identifier, the word used in the image captions to describe the concept we wish to train on. Your choice of token abstraction should be used in your instance prompt, validation prompt or custom captions. Here we chose TOK, so, for example, "a photo of a TOK" can be the instance prompt. As --token_abstraction is a place-holder, before training we insert the new tokens in place of TOK and optimize them (meaning "a photo of TOK" becomes "a photo of <s0><s1>" during training, where <s0><s1> are the new tokens). Hence, it's also crucial that token_abstraction corresponds to the identifier used in the instance prompt, validation prompt and custom prompts(if used).
    • num_new_tokens_per_abstraction 为每个 token_abstraction 初始化的新 token 数量——即为模型的每个文本编码器插入并训练多少个新 token。 默认设置为 2,我们鼓励你对此进行实验并分享你的结果!
  • adam_weight_decay_text_encoder 这用于为文本编码器参数设置不同的权重衰减值( 与用于 unet 参数的值不同)。`

自适应优化器

在训练/微调扩散模型(或任何机器学习模型)时,我们使用优化器来引导 我们走向通往训练目标收敛的最优路径——即我们所选损失函数的一个极小值点, 它代表模型已经学会了我们试图教给它的东西的状态。深度学习任务的标准(也是 最先进的)选择是 Adam 和 AdamW 优化器。

然而,它们要求用户大量调整那些铺就通往收敛之路的超参数(例如 学习率、权重衰减等)。这可能导致耗时的实验并带来次优结果,而且 即使你找到了理想的学习率,如果学习率在训练期间保持不变,它仍可能导致收敛问题。 有些参数可能受益于更频繁的更新以加速收敛,而另一些参数可能 需要更小的调整以避免越过最优值。为了应对这一挑战,具有自适应 学习率的算法(如 Adafactor 和 Prodigy)被引入。这些 方法通过根据每个参数过去的梯度动态调整其学习率,来优化算法在优化景观中的遍历。

我们选择更多地关注 Prodigy,因为我们认为它对 Dreambooth LoRA 训练尤其有益!

训练

--optimizer="prodigy"

使用 prodigy 时,通常的良好做法是设置——

--learning_rate=1.0

被认为对扩散模型尤其是 LoRA 训练有益的额外设置包括:

--prodigy_safeguard_warmup=True
--prodigy_use_bias_correction=True
--adam_beta1=0.9
# Note these are set to values different than the default:
--adam_beta2=0.99 
--adam_weight_decay=0.01

使用 prodigy 训练时,你还可以调整其他超参数 (例如——--prodigy_beta3、prodigy_decouple、prodigy_safeguard_warmup),我们不会在这篇文章中深入探讨这些, 但你可以在这里了解更多。

额外良好实践

除了 pivotal tuning 和自适应优化器之外,这里还有一些可能影响你 训练出的 LoRA 质量的额外技术,它们都已被整合到新的 diffusers 训练脚本中。

文本编码器和 UNet 使用独立的学习率

在优化文本编码器时,社区普遍认为为其设置不同的学习率( 相对于 UNet 的学习率)可以带来更好的质量结果——具体来说,为 文本编码器设置更低的学习率,因为它往往更快过拟合。 * 在执行 pivotal tuning 时,UNet 和文本编码器使用不同学习率的重要性也很明显—— 在这种情况下,为文本编码器设置更高的学习率被认为更好。 * 但请注意,当使用 Prodigy(或一般的自适应优化器)时,我们为所有可训练参数设置相同的初始 学习率,然后让优化器发挥它的魔力 ✨

训练

--train_text_encoder
--learning_rate=1e-4 #unet
--text_encoder_lr=5e-5 

--train_text_encoder 支持完整的文本编码器训练(即文本编码器的权重被完全优化,而不仅仅是优化我们在 textual inversion 中看到的插入的嵌入(--train_text_encoder_ti))。 如果你希望文本编码器学习率始终与 --learning_rate 匹配,请设置 --text_encoder_lr=None。

自定义标注

虽然使用同一实例提示(例如“一张 人的照片”或“以 的风格”等)为所有图像添加标注进行训练可以获得不错的结果,但使用相同的标注可能会导致 次优结果,具体取决于所学概念的复杂程度、模型对该概念的“熟悉”程度, 以及训练集对其的捕捉程度。

训练 要使用自定义标注,首先确保已安装 datasets 库,否则你可以通过以下方式安装——

!pip install datasets

要加载自定义标注,我们需要训练集目录遵循 datasets ImageFolder 的结构, 其中包含图像以及每张图像对应的标注。

  • 选项 1: 你从 hub 中选择一个已包含图像和提示的数据集——例如 LinoyTsaban/3d_icon。现在你只需 在训练参数中指定数据集名称和标注列的名称(在本例中为“prompt”):

--dataset_name=LinoyTsaban/3d_icon
--caption_column=prompt
  • 选项 2: 你希望使用自己的图像并为其添加标注。在这种情况下,你可以使用 这个 colab notebook 来 通过 BLIP 自动为图像添加标注,或者你可以在元数据文件中手动创建标注。然后你 按照同样的方式进行,将 --dataset_name 指定为你的文件夹路径,将 --caption_column 指定为标注的列 名。

Min-SNR Gamma 加权

训练扩散模型常常面临收敛缓慢的问题,部分原因是不同时间步之间的优化方向相互冲突。Hang 等人通过引入 简单的 Min-SNR-gamma 方法找到了缓解此问题的方法。该方法基于截断的信噪比 自适应调整时间步的损失权重,从而有效平衡时间步之间的冲突。 * 对于小型数据集,Min-SNR 加权策略的效果可能不明显,但对于较大的 数据集,效果可能会更明显。 * snr vis 在 Weights and Biases 上找到这个项目,它比较了 以下设置的损失曲面:snr_gamma 设置为 5.0、1.0 和 None。

训练

要使用 Min-SNR gamma,请设置以下值:

--snr_gamma=5.0

默认情况下 --snr_gamma=None,即不使用。启用 --snr_gamma 时,推荐值为 5.0。

重复次数

这个参数指的是数据集中某张图像在训练集中被重复的次数。它与 epoch 的不同之处在于,图像会先被重复,然后才被打乱。

训练

要启用重复,只需将 repeats 计数设置为大于 1 的整数值——

--repeats

默认情况下,--repeats=1,即训练集不重复

训练集创建

  • 正如那句流行的话所说——“垃圾进,垃圾出”。仅使用少量图像就可以轻松训练出好的 Dreambooth LoRA,但这些图像的质量对微调后的模型影响非常大。

  • 通常,在对某个物体/主体进行微调时,我们希望确保训练集包含的图像能够以尽可能多的不同方式呈现该物体/主体,以便我们能够以这些方式对其进行提示。

  • 例如,如果我的概念是这个红色背包:(可在 google/dreambooth 数据集中获取)

  • 我可能还希望提示它被人背着的样子,所以要有这样的示例:

    in the training set - that fits that scenario - will likely make it easier for the model to generalize to that setting/composition during inference.

具体来说,在训练人脸时,关于数据集,你可能需要牢记以下几点:

  1. 如果可能,始终选择高分辨率、高质量的图像。模糊或低分辨率的图像可能会损害调优过程。

  2. 在训练人脸时,建议训练集中不要出现其他人脸,因为我们不想对正在训练的人脸是什么产生模糊的概念。

  3. 特写照片对于实现真实感很重要,但也应包含良好的全身照,以提高泛化到不同姿势/构图的能力。

  4. 我们建议避免使用主体距离很远的照片,因为此类图像中的大多数像素与我们希望优化的概念无关,模型无法从这些图像中学到多少东西。

  5. 避免重复的背景/服装/姿势——力求在光照、姿势、背景和面部表情方面具有多样性。多样性越大,LoRA 就越灵活、越具有泛化能力。

  6. 先验保持损失 -
    先验保持损失是一种使用模型自身生成的样本来帮助其学习如何生成更多样化图像的方法。由于这些样本图像与你提供的图像属于同一类别,它们有助于模型保留其已学到的关于该类别的知识,以及如何利用它已经知道的关于该类别的知识来生成新的构图。 用于正则化的真实图像 VS 模型生成的图像 在选择类别图像时,你可以在合成图像(即由扩散模型生成的图像)和真实图像之间做出选择。支持使用真实图像的人认为,它们能提高微调模型的真实感。另一方面,也有人认为,使用模型生成的图像更能达到保持模型对该类别的知识和整体美学的目的。

  7. 名人相似者 - 这更多是关于用于训练的字幕/实例提示的评论。一些微调者在提示中使用一个 token 标识符 + 基础模型知道的、与所训练人物相似的公众人物时,结果有所改善。

使用先验保持损失进行训练

--with_prior_preservation
--class_data_dir
--num_class_images
--class_prompt

--with_prior_preservation - 启用带先验保留的训练
--class_data_dir - 包含类别图像的文件夹路径
—-num_class_images - 先验保留损失所需的最少类别图像数量。如果 --class_data_dir 中已有的图像不足,将使用 --class_prompt 采样额外图像。

实验设置与结果

为了探索所描述的方法,我们在不同目标(风格调优、人脸和物体)上尝试了这些技术的不同组合。

为了缩小无穷无尽的超参数取值范围,我们以一些更流行和常见的配置作为起点,并在此基础上进行调整。

Huggy Dreambooth LoRA 首先,我们感兴趣的是微调一个 huggy LoRA,这意味着同时教授一种艺术风格和一个特定角色。 对于这个例子,我们整理了一个高质量的 Huggy 吉祥物数据集(使用了 Chunte-Lee 出色的艺术作品),包含 31 张图像并配有自定义标注。

配置:

--train_batch_size = 1, 2,3, 4
-repeats = 1,2
-learning_rate = 1.0 (Prodigy), 1e-4 (AdamW)
-text_encoder_lr = 1.0 (Prodigy), 3e-4, 5e-5 (AdamW)
-snr_gamma = None, 5.0 
-max_train_steps = 1000, 1500, 1800
-text_encoder_training = regular finetuning, pivotal tuning (textual inversion)
  • 完整文本编码器调优 VS 关键调优 - 我们注意到关键调优取得的结果与完整文本编码器训练相当或更好,而且无需优化 text_encoder 的权重。
  • Min SNR Gamma
    • 我们比较了未使用 snr_gamma 训练的 version1 与使用 snr_gamma = 5.0 训练的 version2 具体来说,我们在两个版本中都使用了以下参数(并在 version 2 中添加了 snr_gamma)
--pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
--pretrained_vae_model_name_or_path="madebyollin/sdxl-vae-fp16-fix" \
--dataset_name="./huggy_clean" \
--instance_prompt="a TOK emoji"\
--validation_prompt="a TOK emoji dressed as Yoda"\
--caption_column="prompt" \
--mixed_precision="bf16" \
--resolution=1024 \
--train_batch_size=4 \
--repeats=1\
--report_to="wandb"\
--gradient_accumulation_steps=1 \
--gradient_checkpointing \
--learning_rate=1e-4 \
--text_encoder_lr=3e-4 \
--optimizer="adamw"\
--train_text_encoder_ti\
--lr_scheduler="constant" \
--lr_warmup_steps=0 \
--rank=32 \
--max_train_steps=1000 \
--checkpointing_steps=2000 \
--seed="0" \
  • AdamW vs Prodigy Optimizer
    • 我们比较了使用 optimizer=prodigy 训练的 version1 与使用 optimizer=adamW 训练的 [version2](https://wandb.ai/linoy/dreambooth-lora-sd-xl/runs/cws7nfzg? workspace=user-linoy)。两个版本都使用了关键调优进行训练。
    • When training with optimizer=prodigy we set the initial learning rate to be 1. For adamW we used the default learning rates used for pivotal tuning in cog-sdxl (1e-4, 3e-4 for learning_rate and text_encoder_lr respectively) as we were able to reproduce good results with these settings.
    • 所有其他训练参数和设置都相同。具体来说:
    --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
  --pretrained_vae_model_name_or_path="madebyollin/sdxl-vae-fp16-fix" \
  --dataset_name="./huggy_clean" \
  --instance_prompt="a TOK emoji"\
  --validation_prompt="a TOK emoji dressed as Yoda"\
  --output_dir="huggy_v11" \
  --caption_column="prompt" \
  --mixed_precision="bf16" \
  --resolution=1024 \
  --train_batch_size=4 \
  --repeats=1\
  --report_to="wandb"\
  --gradient_accumulation_steps=1 \
  --gradient_checkpointing \
  --train_text_encoder_ti\
  --lr_scheduler="constant" \
  --snr_gamma=5.0 \
  --lr_warmup_steps=0 \
  --rank=32 \
  --max_train_steps=1000 \
  --checkpointing_steps=2000 \
  --seed="0" \

Y2K Webpage LoRA 让我们探索另一个例子,这次训练的数据集由 27 张 1990 年代和 2000 年代初的网页截图组成,这些是我们(怀旧地 🥲)从互联网上抓取的:

配置:

–rank = 4,16,32
-optimizer = prodigy, adamW
-repeats = 1,2,3
-learning_rate = 1.0 (Prodigy), 1e-4 (AdamW)
-text_encoder_lr = 1.0 (Prodigy), 3e-4, 5e-5 (AdamW)
-snr_gamma = None, 5.0 
-train_batch_size = 1, 2, 3, 4
-max_train_steps = 500, 1000, 1500
-text_encoder_training = regular finetuning, pivotal tuning

这个例子展示了与之前略有不同的行为。 虽然在两种情况下我们使用的图像数量大致相同(即约 30 张), 但我们注意到,对于这个风格 LoRA,那些为 Huggy LoRA 带来良好结果的相同设置会导致网页风格过拟合。这里

对于 v1,我们选择对训练 Huggy LoRA 时效果最好的设置作为起点——它明显过拟合了,所以我们试图在后续版本中通过调整 --max_train_steps、--repeats、--train_batch_size 和 --snr_gamma 来解决这个问题。 更具体地说,这些是我们在每个版本之间更改的设置(其余所有设置保持不变):

param v1 v2 v3 v4 v5 v6 v7 v8
max_train_steps 1500 1500 1500 1000 1000 1000 1000 1000
repeats 1 1 2 2 1 1 2 1
train_batch_size 4 4 4 4 2 1 1 1
instance_data_dir web_y2k 从 web_y2k 中随机采样的 14 张图像 web_y2k web_y2k web_y2k web_y2k web_y2k web_y2k
snr_gamma 5.0 5.0 5.0 5.0 - - 5.0 5.0

我们发现 v4、v5 和 v6 达到了最佳平衡:

Face LoRA 在人脸图像上训练时,我们的目标是让 LoRA 生成的图像尽可能真实、接近原始人物, 同时还能很好地泛化到训练集中未出现过的背景和构图。 针对这个用例,我们使用了由 Linoy 的人脸组成的多个数据集,每个数据集包含 6-10 张图像,其中包括一组在同一时间拍摄的特写照片,以及一个在不同场合拍摄的数据集(变换背景、光线和服装)以及全身照。 我们了解到,在光线/分辨率/主体对焦方面,如果图像质量处于中低水平,那么用更少但经过更好筛选的图像效果会优于用更多图像——少即是多:挑选你最好的照片来训练模型! 配置:

rank = 4,16,32, 64
optimizer = prodigy, adamW
repeats = 1,2,3,4
learning_rate = 1.0 , 1e-4
text_encoder_lr = 1.0, 3e-4
snr_gamma = None, 5.0
num_class_images = 100, 150
max_train_steps = 75 * num_images, 100 * num_images, 120 * num_images
text_encoder_training = regular finetuning, pivotal tuning
  • 先验保持损失

    • 与常见做法相反,我们发现使用生成的类别图像会降低与主体的相似度和真实感。
    • 我们创建了一个真实肖像图像的数据集,使用的是从 unsplash 下载的免费授权图像。 你现在也可以在新的训练空间中自动使用它!
    • 使用真实图像数据集时,我们确实注意到语言漂移更少(即模型不会只把 woman/man 这个词与训练过的人脸关联起来,也能生成不同的人),同时在提示训练过的人脸时仍能保持真实感和整体质量。
  • 秩

    • 我们比较了秩为 4、16、32 和 64 的 LoRA。我们观察到,在我们探索中测试的设置下,使用秩为 64 的 LoRA 生成的图像往往具有更明显的磨皮外观,皮肤纹理看起来也更不真实。
    • 因此,对于下面详述的实验以及 LoRA ease space,我们使用默认秩 32。
  • 训练步数

  • 尽管少量高质量图像(在我们的示例中是 6 张)效果很好,我们仍然需要确定训练模型的理想步数。

  • 我们尝试了图像数量的几个不同倍数:6 x75 = 450 步 / 6 x100 = 600 步 / 6 x120 = 720 步。

  • 如下所示,我们的初步结果表明,使用 120 倍乘数可以获得良好结果(如果数据集足够多样而不至于过拟合,最好不要使用同一拍摄场景)

    Inference

    使用上述技术训练的模型进行推理,应与使用任何训练器一样工作,只是当我们进行 pivotal tuning 时,除了你的 LoRA 的 *.safetensors 权重之外,还有随模型一起训练的 *.safetensors 文本嵌入 用于新 token。为了用这些进行推理,我们在通常加载 LoRA 的方式上增加 2 个步骤:

    1. 从 hub 下载我们训练好的嵌入 (你的嵌入文件名默认设置为 {model_name}_emb.safetensors)
    import torch
    from huggingface_hub import hf_hub_download
    from diffusers import DiffusionPipeline
    from safetensors.torch import load_file
    pipe = DiffusionPipeline.from_pretrained(
            "stabilityai/stable-diffusion-xl-base-1.0",
            torch_dtype=torch.float16,
            variant="fp16",
    ).to("cuda")
    
    # download embeddings
    embedding_path = hf_hub_download(repo_id="LinoyTsaban/web_y2k_lora", filename="web_y2k_emb.safetensors", repo_type="model")
    
    1. 将嵌入加载到文本编码器中
    
    # load embeddings to the text encoders
    state_dict = load_file(embedding_path)
    
    # notice we load the tokens <s0><s1>, as "TOK" as only a place-holder and training was performed using the new initialized tokens - <s0><s1>
    # load embeddings of text_encoder 1 (CLIP ViT-L/14)
    pipe.load_textual_inversion(state_dict["clip_l"], token=["<s0>", "<s1>"], text_encoder=pipe.text_encoder, tokenizer=pipe.tokenizer)
    # load embeddings of text_encoder 2 (CLIP ViT-G/14)
    pipe.load_textual_inversion(state_dict["clip_g"], token=["<s0>", "<s1>"], text_encoder=pipe.text_encoder_2, tokenizer=pipe.tokenizer_2)
    
    1. 加载你的 LoRA 并提示它!
    # normal LoRA loading
    pipe.load_lora_weights("LinoyTsaban/web_y2k_lora", weight_name="pytorch_lora_weights.safetensors")
    prompt="a <s0><s1> webpage about an astronaut riding a horse"
    images = pipe(
        prompt,
        cross_attention_kwargs={"scale": 0.8},
    ).images
    # your output image
    images[0]
    

    Comfy UI / AUTOMATIC1111 推理

    新脚本完全支持以 Comfy UI 和 AUTOMATIC1111 格式加载 textual inversion!

    AUTOMATIC1111 / SD.Next
    在 AUTOMATIC1111/SD.Next 中,我们将同时加载 LoRA 和文本嵌入。

    • LoRA:除了 diffusers 格式之外,脚本还会训练一个兼容 WebUI 的 LoRA。它生成为 {your_lora_name}.safetensors。然后你可以将它放入你的 models/Lora 目录中。
    • Embedding:该嵌入对于 diffusers 和 WebUI 是相同的。你可以从训练好的模型下载你的 {lora_name}_emb.safetensors 文件,并将其放入你的 embeddings 目录中。

    然后你可以通过提示 a y2k_emb webpage about the movie Mean Girls <lora:y2k:0.9> 来运行推理。你可以正常使用 y2k_emb token,包括通过 (y2k_emb:1.2) 来增加它的权重。

    ComfyUI
    在 ComfyUI 中,我们将同时加载一个 LoRA 和一个文本嵌入。

    • LoRA:除了 diffusers 格式外,该脚本还会训练一个 ComfyUI 兼容的 LoRA。它生成为 {your_lora_name}.safetensors。然后你可以将其放入你的 models/Lora 目录中。接着你将加载 LoRALoader 节点,并将其与你的模型和 CLIP 连接起来。加载 LoRA 的官方指南
    • Embedding:该嵌入在 diffusers 和 WebUI 中是相同的。你可以从训练好的模型中下载你的 {lora_name}_emb.safetensors 文件,将其放入你的 models/embeddings 目录,并在提示中像 embedding:y2k_emb 这样使用它。加载嵌入的官方指南。

    接下来是什么?

    🚀 更多功能即将推出! 我们正在努力为我们的高级训练脚本添加更多控制和灵活性。请告诉我们你觉得哪些功能 最有帮助!

    🤹 多概念 LoRA Shah 等人最近的一项工作引入了 ZipLoRAs——一种将独立训练的风格和主体 LoRA 合并的方法,以便实现以任何用户提供的风格生成任何用户提供的主体。mkshing 实现了一个开源复现,可在 此处获取,它使用了新的改进版脚本。

来源:Hugging Face:Blog(RSS) · huggingface.co