NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模

在浏览稳定扩散模型共享网站(例如 CivitAI)时,你可能遇到过一些标记为“LoRA”的自定义模型。“LoRA”到底是什么—它与典型的模型检查点有何不同?LoRA 可以与Diffusers包一起使用吗?在本文中,我们将回答这些问题!

1、LoRA:一种更简单的 LLM 微调方法

大型语言模型往往包含大量参数。例如,GPT-3 有 1750 亿个参数。由于规模如此之大,大型语言模型往往很难训练或微调。因此,LoRA 最初是为了使大型语言模型的微调变得更容易而开发的。

使用 LoRA(图形的橙色部分),只需要对原始预训练权重(图形的蓝色部分)进行较小尺寸的校正,从而使微调或定制变得更容易

使用 LoRA,无需对原始预训练权重 W 进行微调,而是以低秩矩阵 ΔW 的形式训练一组校正权重。通过将校正添加到原始权重:W’ = W + ΔW,可以对新模型 W’ 进行微调,而无需直接微调 W。

具有较低秩的矩阵跨越较低维度的向量空间,并且包含的​​元素比具有较高秩的矩阵(例如原始预训练权重)少,因此更容易训练。然后将这组低秩矩阵添加到原始预训练权重中以创建最终的微调模型。

此外,可以向原始预训练权重添加多个修正,以进行更多微调或自定义:W’ = W + ΔW₁ + ΔW₂ + …

2、使用 LoRA 的自定义稳定扩散模型

事实证明,稳定扩散模型需要花费大量精力和时间才能正确进行微调,就像大型语言模型一样。与大型语言模型一样,事实证明,可以使用 LoRA 向原始预训练权重添加修正,而不是直接对其进行微调,从而制作自定义稳定扩散模型!

使用 LoRA 允许普通用户在无需访问高性能计算资源的情况下更轻松地使用硬件和时间尺度训练自定义稳定扩散模型,并导致在 CivitAI 等网站上免费共享的自定义“LoRA”模型激增!

3、在Diffusers中使用 LoRA

为了使用带有扩散器的 LoRA 生成图像,您需要下载原始预训练权重以及 LoRA 权重。然后将两个权重(通常以 CivitAI 模型的安全张量的形式)加载到扩散器管道中,从而允许原始预训练权重无法使用的自定义输出。

在此示例中,我将使用自定义检查点(本文中的 Meichidark_Mix_V3.5)代替原始稳定扩散模型,并添加 LoRA(本文中的 Adepta Sororitas 战斗装甲 LoRA)以进一步自定义它。能够执行这样的自定义是稳定扩散成为如此强大的模型的原因之一。

请注意,LoRA 会针对某个预训练模型进行校正,虽然可以将 LoRA 与完全不同的预训练自定义模型一起使用,但您可能会得到意外或奇怪的结果!

首先,下载自定义检查点的安全张量并将其加载到扩散器管道中。截至撰写本文时,最新版本的扩散器能够直接以安全张量的形式加载和处理检查点。

import diffusers
import torch

# Load pretrained checkpoint from downloaded safetensors.

safetensors_path = "model.safetensors"

pipe = diffusers.StableDiffusionPipeline.from_single_file(
    safetensors_path,
    torch_dtype = torch.float16, # For CUDA.
)

下载的 LoRA 安全张量可以轻松添加到管道中。

# For using a single LoRA with the pipeline.

lora_safetensors_path = "lora.safetensors"

pipe.load_lora_weights(lora_safetensors_path

可以将多个 LoRA 加载到管道中,并使用不同的缩放因子来进一步定制模型的输出!缩放因子用于定义每个加载的 LoRA 对最终输出的贡献程度!这允许进行更多定制!

# Using multiple LoRAs with different scaling factors.

lora_dirs = ["lora1.safetensors", "lora2.safetensors", ...]
lora_scales = [0.7, 0.7, ...]

ldir, lsc in zip(lora_dirs, lora_scales):
    # Iteratively add new LoRA.
    pipe.load_lora_weights(ldir)
    # And scale them accordingly.
    pipe.fuse_lora(lora_scale = lsc)

一旦将检查点和 LoRA 添加到管道中,就可以像往常一样使用提示和负提示生成图像,并可以使用所有其他花哨的功能,例如 CLIP 跳过、调度程序、提示嵌入等!

用于生成以下示例输出的 Python 代码可通过我的 GitHub 存储库中的 Text2ImagePipe 类获得。

示例输出如下图所示:

虽然第一行描绘的是自定义预训练检查点(Meichidark_Mix_V3.5)的典型图像,但第二行的图像包含添加的 LoRA(Adepta Sororitas 战斗装甲 LoRA)的风格化,例如鸢尾花和更像科幻的外观。

4、结束语

在本文中,我们简要介绍了如何使用 LoRA 定制大型模型(例如 LLM 或稳定扩散),以及如何使用 LoRA 权重通过扩散器管道定制预训练的稳定扩散模型检查点。然后,我们展示了通过将 LoRA 添加到自定义预训练检查点,可以进一步定制已经定制的检查点的输出。通过这种方式,LoRA 让稳定扩散模型变得更加“有创意”!


原文链接:Using CivitAI LoRAs with Diffusers

BimAnt翻译整理,转载请标明出处