在Diffusers中使用LoRA微调模型

news2024/9/23 7:33:43

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

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

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 让稳定扩散模型变得更加“有创意”!


原文链接:Diffusers使用LoRA模型 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉基础 2. 滤波器

1. 简介 模糊滤波器是低通滤波器。它们从图像中去除高空间频率内容,只留下低频空间分量。结果是图像失去了细节,看起来很模糊。图像模糊在计算机图形学和计算机视觉中有许多应用。它可用于降低噪声(如图17.1所示),揭示…

代码时光机:Git基础速成

hello,家人们,今天咱们来介绍Git以及Git相关的操作,好啦,废话不多讲,开干. 1:Git初识 在介绍Git前,博主首先讲一个小故事. 我们学计算机的小伙伴们,在学校里头都有实验课,那么老师呢就会要求我们写实验报告并且要求我们交上去给老师检查.有一个学计算机的大学生,名字叫张三,然…

Datawhale X 李宏毅苹果书 AI夏令营-深度学习进阶task2:自适应学习率,分类

1.自适应学习率 临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。很多时候训练网络,损失不再下降,不是因为到了临界点,而是可能在山谷之间不停震荡。 以下为不同学习率对训练的影响,下图中左右平缓,上下陡…

C语言 | Leetcode C语言题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;int val;UT_hash_handle hh; };int firstUniqChar(char* s) {struct hashTable* position NULL;int que[26][2], left 0, right 0;int n strlen(s);for (int i 0; i < n; i) {int ikey s[i];struct has…

火语言RPA流程组件介绍--浏览选择文件夹

&#x1f6a9;【组件功能】&#xff1a;打开浏览文件夹选择对话框 配置预览 配置说明 对话框标题 支持T或# 打开浏览文件夹对话框时显示的标题。 默认打开文件夹 支持T或# 打开浏览文件夹对话框时&#xff0c;默认打开此文件夹。 取消后终止流程 “是”、“否”2种供选择…

一篇详细介绍常用第三方库的教程

作者&#xff1a;郭震 我们之前介绍过如何安装Python的各种常用第三方库.这些库为程序员提供了许多功能,能够大大简化我们的开发工作.本文将为你介绍一些最常用的第三方库,帮助你更好地理解它们的用途及基本概念. 1. NumPy NumPy是一个强大的科学计算库.它提供了多维数组对象以…

09.定时器02

#include "reg52.h"sbit led P3^6;void delay10ms() { //1. 配置定时器0工作模式位16位计时TMOD 0x01;//2. 给初值&#xff0c;定一个10ms出来TL00x00;TH00xDC;//3. 开始计时TR0 1;TF0 0; } void main() {int cnt 0;led 1;while(1){if(TF0 1)//当爆表的时候&a…

Git之2.9版本重要特性及用法实例(五十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

非关系型数据库 Redis 的安装与配置

文章目录 一 . CentOS 7 安装 Redis【版本选择说明】一 . 安装 Redis二 . 配置 Redis2.1 针对可执行程序设置符号链接2.2 针对配置文件设置符号链接2.3 修改配置文件2.3.1 设置 IP 地址2.3.2 关闭保护模式2.3.3 启动守护进程2.3.4 设置工作目录2.3.5 设置日志目录 三 . 启动 Re…

Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化

引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本&#xff0c;围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程&#xff0c;希望通过这篇文档&#xff0c;对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文章将会分成三篇&#xff0c;从以下方向给大家介绍&am…

掌握数据利器:AWS Glue与数据基盘概览

引言 随着数字化进程的不断推进&#xff0c;企业现在能够积累并分析海量且多样化的数据。这一优势使得许多企业开始采用数据驱动型经营&#xff08;即基于数据的经营策略&#xff09;。通过基于数据的客观判断&#xff0c;企业及其管理者可以获得诸多好处。 然而&#xff0c;…

DeepMind 机器人学习打乒乓球,朝着「专业运动员水平的速度和性能」发展

这几天全球各界最火热的话题非奥运会莫属&#xff0c;而其中乒乓球比赛更是引起了互联网的讨论热潮&#xff0c;无论是欢呼也好、争议也罢&#xff0c;在现实世界人类的乒乓球大赛风生水起的同时&#xff0c;AI已经偷偷在乒乓球上“出师”了—— ——DeepMind近日发布一项新工作…

机器学习 第7章 贝叶斯分类器

目录 7.1 贝叶斯决策论7.2 极大似然估计7.3 朴素贝叶斯分类器7.4 半朴素贝叶斯分类器7.5 贝叶斯网7.5.1 结构7.5.2 学习7.5.3 推断 7.6 EM算法 7.1 贝叶斯决策论 对分类任务来说&#xff0c;在所有相关概率都己知的理想情形下&#xff0c;贝叶斯决策论考虑如何基于这些概率和误…

如何删除浏览器每次登录自动保存的密码,以防自动登录泄露自己的隐私

今天小编以 Microsoft edge 浏览器为例&#xff0c;如何在自己离职或毕业以后留给他人的电脑是干净的&#xff0c;不会在任何网页登录时显示已保存的密码&#xff0c;让他人自动登录。 ①在电脑上打开 Microsoft edge 浏览器后&#xff0c;点击“设置” ②进入设置界面后&…

基于SSM的咖啡馆管理系统

基于SSM的咖啡馆管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisJSP工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台界面 后台界面 摘要 在当前这个信息爆炸的时代&#xff0c;众多行业正经历着…

Python酷库之旅-第三方库Pandas(114)

目录 一、用法精讲 501、pandas.DataFrame.mode方法 501-1、语法 501-2、参数 501-3、功能 501-4、返回值 501-5、说明 501-6、用法 501-6-1、数据准备 501-6-2、代码示例 501-6-3、结果输出 502、pandas.DataFrame.pct_change方法 502-1、语法 502-2、参数 502…

[知识分享]华为铁三角工作法

在通信技术领域&#xff0c;尤其是无线通信和物联网领域&#xff0c;“华为铁三角”是华为公司内部的一种销售、交付和服务一体化的运作模式。这种模式强调的是以客户为中心&#xff0c;通过市场、销售、交付和服务三个关键环节的紧密协作&#xff0c;快速响应客户需求&#xf…

2.12 滑动条事件

目录 实验原理 实验代码 运行结果 实验原理 在 OpenCV 中&#xff0c;滑动条设计的主要目的是在视频播放帧中选择特定帧&#xff0c;而在调节图像参数时也会经常用到。在使用滑动条前&#xff0c;需要给滑动条赋予一个名字&#xff08;通常是一个字符串&#xff09;&#x…

Java | Leetcode Java题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthLongestPath(String input) {int n input.length();int pos 0;int ans 0;int[] level new int[n 1];while (pos < n) {/* 检测当前文件的深度 */int depth 1;while (pos < n && inpu…

Mamba:超越Transformer的新一代神经网络架构

在过去的七年里&#xff0c;Transformer一直在语言建模领域占据着主导地位。然而&#xff0c;现在有一个新兴的神经网络架构Mamba&#xff0c;正在挑战Transformer的霸主地位。虽然目前Mamba仅在规模较小的模型上进行了测试&#xff08;参数量达到数十亿&#xff09;&#xff0…