Stable Diffusion——四种模型 LoRA(包括LyCORIS)、Embeddings、Dreambooth、Hypernetwork

目前 Stable diffusion 中用到主要有四种模型,分别是 Textual Inversion (TI)以 Embeddings 为训练结果的模型、Hypernetwork 超网络模型、LoRA(包括 LoRA 的变体 LyCORIS)模型、Dreambooth 模型。

视频博主 koiboi 用图        形拓扑图来讲解了这四种 SD 模型的异同,并配有全程的视频讲解:koiboi 对四大SD模型的视频讲解。

看完这个视频,非专业技术人员也可以对 SD 的四种微调模型的原理有所了解。虽然这并不算什么深入详细解剖的论文级别的讲解,但足够形象生动易懂。如果你还想更深入更地了解四种模型的细节可以详细阅览每一种模型的详细介绍,分别在下面四篇文章链接中:

  • Textual Inversion (Embeddings)网络与模型请查看此篇:7号床:Stable Diffusion 模型——Textual Inversion(TI)文本翻转和 Embedding 嵌入
  • Hypernetwork 超网络与模型请查看此篇:7号床:Stable Diffusion 模型——Hypernetwork 超网络
  • LoRA 与 LyCORIS 网络与模型请查看此篇:7号床:Stable Diffusion 模型——LoRA 模型
  • Dreambooth 网络与模型请查看此篇:7号床:Stable Diffusion 模型——Dreambooth 模型

注:关于这四种模型的详细训练方法和参数等细节可以在各文章中查看对应的链接。

有关Stable Diffusion的详细讲解,请查看此篇:Stable Diffusion 稳定扩散模型最详细解释

以下是对 koiboi 视频中四个模型的简要介绍:

1. Textual Inversion (TI)(Embeddings)

图1

首先看这样一个提示词:“A photo of SKS.”。

作者希望在给 SD 输入这样的提示词时,运用训练的模型可以产生一只特殊的柯基犬的形象,这只柯基犬名叫“SKS”。

所以,他首先需要训练这个柯基犬形象的模型,于是他给这个模型起一个特殊的名字: “SKS”。“SKS” 既是这个模型的名称,也是这个模型在作图过程中的关键词(或称触发词 trigger word )。

(注:起“SKS”这样奇特的名字是有意义的,这是为了和其他通用词汇的名字区分开来,以免发生”语言漂移“(Language Drift),即模型在生图过程中分不清你的意图到底是要生成这个特殊的柯基犬造型还是要生成一只半自动步枪。可是,”SKS“为半自动步枪的意思,不知道他为啥要起这个名字,或许这就是他家柯基犬的真实名字吧。所以,其实选择”SKS“这个名称并不明智,虽然它看起来很生僻,但是仍然没有避开”半自动步枪”的意思。要找到独特的名称其实不难,比如“Skkkk”。所以当你起这个特殊名字之前最好在搜索引擎中查查看。)

训练过程:

训练过程按照 koiboi 提供的拓扑图1 中的描述是这样的。

  1. 首先用这只柯基犬的照片(若干张)作为训练图像(图1 中 training sample )生成含有某个强度级别噪点含量的噪点图(图1 中 apply noise * n );
  2. 同时生成含有某个强度低一级的噪点含量的噪点图(图1 中 apply noise * (n-1) );
  3. 然后把步骤 1 中的含有 n 级别噪点的噪点图和关键词“SKS”一同输入给 Diffusion Model ,让 Diffusion Model 进行去噪点操作,得到一个从 n 级别去除一定噪点到 n-1 级别的相对少一些噪点的图像(图1 中 Diffusion Model 模块右侧的柯基犬图)
  4. 然后把步骤 3 生成的 n-1 级别图像和步骤 2 生成的 n-1 级别图进行比较生成一个 loss (损失,即差异化描述)。(注:起初由于 text embedding 模块并不清楚 SKS 具体指的是这种特殊的柯基犬,所以会随机生成各种输出的结果,即某种随机的向量。这样的向量作为输入给 Diffusion Model 模块,自然导致 Diffusion Model 模块输出的 n-1 噪点级别的图像与步骤 2 中产生的 n-1 噪点级别的图像极为不像。但这便是训练开始的第一步,之后系统会逐渐自动调整参数,以使得这两个图像越来越相近,这便是所有模型训练的基本逻辑。)
  5. 系统自动调整参数的过程是这样的:系统把这个 loss 通过 Gradient Update 的方式反馈给 text embedding 模块,以期该模块能够根据这个差异 loss 校正针对“SKS”的输出。这样当校正后的“SKS”的输出再次输入给中间的 Diffusion Model 模块后,能够使得 Diffusion Model 输出 n-1 图像能够和步骤 2 中生成的 n-1 图像更接近。
  6. 以上过程反复多次后,text embedding 模块会逐渐地学会如何正确地解析“SKS”这个特殊词汇,以便在 text embedding 模块在输出“SKS”所代表的向量输入给 Diffusion Model 模块后,Diffusion Model 模块可以生成一个与步骤 2 提供的 n-1 图像极为相似的图像。至此,text embedding 的训练过程就结束了。

这样的训练过程便称为 Textual Inversion(如果直译的话为“文本翻转”,缩写为TI。一般以 embeddings ,即 TI 的训练结果为这种模型的称呼。)。

训练后产生一个 embeddings 模型文件。在实际生图阶段,需要加载这个 embeddings 模型文件,该文件会对 SD 系统中 text embedding 模块产生一个类似插件的影响(图1 中 text embedding 模块的橙色部分)。当输入给 SD 系统提示词:“A photo of SKS.” 后, text embedding 模块便解析出了特殊的 “SKS”向量给 Diffusion Model 模块,从而生成出我们想要的特殊的柯基犬图像。

2. Hypernetwork

图2

Hypernetwork 的总体训练思路同 Textual Inversion 是接近的,只是此时 loss 通过 Gradient Update 反馈的目标发生了变化,从 text embedding 模块转变成了一个单独的附加的小神经网络 Hypernetwork,这个小的神经网络一般译为“超网络”(图2 中橙色虚线方框即为这个小神经网络)。

这个 Hypernetwork 超网络劫持了 Diffusion Model 模块中的三个矩阵(图2 中三个菱形块,具体来说是 U-Net 噪声预测器中的交叉注意层之前的 Q、K、V 三矩阵中的 K 和 V 矩阵),并修改了数据,使得 Diffusion Model 模块生图时发生变化。

(注:有关注意力层的 Q、K、V 三矩阵是一个十分有意思的知识点,这个知识点也是目前最火爆的 GPT 的核心 Transformer 大模型的灵魂所在。所以感兴趣的可以去单独了解,推荐此篇:Q、K、V 与 Multi-Head Attention 多头注意力机制。)

Hypernetwork 模型训练结束后,会生成一个 Hypernetwork 模型(图2 中橙色虚线方框)。在实际生图阶段,需要加载这个 Hypernetwork 模型,并在提示词中用专门的提示词公式来表达这一模型要发挥作用,于是该模型就会对 SD 系统中 Diffusion Model 模块在生图时产生一个劫持并修改数据的效应,这样的劫持修改使得 Diffusion Model 模块生图时发生变化,从而能够让 SD 生成出我们想要的特殊的柯基犬图像。

3. LoRA

图3

LoRA 的总体训练思路同 Textual Inversion 和 Hypernetwork 都是接近的(其实这一训练框架与生图框架本身就是 SD 的核心架构,各种模型训练只是在利用这一架构中各个可以微调的环节来进行某些类似插件效应的改变而已。),只是此时 loss 通过 Gradient Update 反馈的目标落在了 Diffusion Model 模块中 Q、K、V 三个矩阵本身的身上。

与 Hypernetwork 劫持并修改 Q、K、V 三矩阵输入数据的方式不同,LoRA 是直接生成属于自己风格的 Q、K、V 三矩阵作为模型(图3 中三个橙色菱形),作为对原有模型中 Q、K、V 的叠加,也可以理解为原有 Diffusion Model 模块中 Q、K、V 三矩阵的额外“插件”。

这三个橙色菱形“插件”所组成的模型文件,便是 LoRA 的模型文件了。在实际生图过程中,需要加载这个 LoRA 模型文件,并用专门的提示词公式来表达这一模型要发挥作用。于是便能影响 SD 模型的整体输出,生成我们想要的独特柯基犬图像了。

LyCROIS,英文全称 LoRA beyond Conventional methods, Other Rank adaptation Implementations for Stable diffusion. ,可以翻译为:用另一种超越常规的 Rankadaptation “秩自适应”的方法来实现 SD 稳定扩散。可以说 LyCORIS 是 LoRA 的思路的进一步扩展,是升级换代的 LoRA,通常比 LoRA 更有表现力,可以捕捉更多的训练图像的细节。LyCORIS 属于一系列类 LoRA 方法的总称,目前至少分为以下几种:Standard、LyCROIS/LoKr、LyCROIS/LoHa、LyCROIS/LoCon、LyCROIS/iA3、LyCROIS/DyLoRA、LoRA-FA。

4. Dreambooth

图4

同样,Dreambooth 的总体训练思路接近以上三个模型的总体架构,只是 loss 通过 Gradient Update 反馈的目标直接落在了 Diffusion Model 模块本身。要知道 Diffusion Model 模块是 SD 的最核心部分,也是最主体部分。 loss 通过 Gradient Update 直接作用在这里,则导致 Diffusion Model 模块中数以亿计的参数发生微调以适应新的特征(独特柯基犬特征)。很明显这样的训练方式将耗费大量的算力资源,生成出的模型相当于 Diffusion Model 基础模型的变种文件,即为 Dreambooth 模型文件,文件体积也很大,通常在 2G 到 5G 左右。但也由于直接在基础模型上微调,所以导致 Dreambooth 模型在 SD 生图过程中的输出效果很细腻很高效。

在实际生图过程中,需要加载这个 Dreambooth 模型文件,无需要额外在提示词中描述这个模型文件的特殊提示词,系统会按照基础大模型文件同样的待遇来进行生图。

总结

最后,为了方便区分四种训模型以及 SD 基础大模型之间的不同属性,我特地做了下面的表格:

SD基础大模型与微调模型(原创图标,转载请注明出处,谢谢)

其中最主流的模型训练方式为 Dreambooth 和 LoRA(以及 LoRA 的变体 LyCORIS)。就训练时间与实用度而言,平均打分为 Dreambooth > LoRA > HyperNetwork > Embedding。Checkpoint 模型、Embeddings 模型、LoRA 模型较受欢迎,Hypernetworks 模型则有被淘汰的趋势。

这里还有模型训练方面其他一些需要考量的因素:

  • 如果你有成千上万张图片的训练集,并且希望得到更精确的模型微调,而且你并不拘泥于某一种具体的人物风格、画风等等,Dreambooth 仍然是最好的选择。
  • 在四类模型中,Dreambooth 是对模型本身变动最大的。它可以被理解为基础模型和 LoRA 模型的合体,它改变了基础模型的部分权重,并将新的内容权重添加其中,同时又保留了基础模型中的那些未被变动过的部分,所以最终导致它的模型文件体积比较大。
  • 可以用几个 LoRA 一同使用,这样就可以不局限于某一个 LoRA 只关注某一个具体的风格和角色了。
  • Hypernetworks 和 LoRA 基本上都是来源于同一篇研究论文。但 Hypernetworks 超网络基本上算是过时的老旧 Alpha 测试版本,而 LoRA 算是成型的如今最流行的版本。相对于 Dreambooth 来说,Hypernetworks 和 LoRA 都很小,并且它们只是在原有模型基础上进行了某种插件式的变动,以达到效果,所以它们都无法单独使用。
  • Base Model 基础的大模型也可以称作 Full Models ,因为这个模型中包含了 SD 种的所有参数,所以称为“Full”。比如 SDXL 基础大模型,文件名: sd_xl_base_1.0.safetensors 。这种是从 0 开始学习起来的,不需要依赖任何其他模型而完全从海量的训练集中耗费了大量的算力资源与时间训练出来的大模型。这种模型很明显不是普通人或普通机构可以支撑起来的。通常数据集都是以亿为单位,一次训练费用动辄百万美金起步,但它是模型金字塔的底层基座。
  • 在模型训练过程中,如果您将“混合精度”和“保存精度”设置错误,则可能会遇到“ValueError: bf16 mixed precision requires PyTorch >= 1.10 and a supported device”报错。此设置与软件中的浮点格式数值有关。如果您遇到这个错误,这很可能意味着在没有能够支持的 GPU 的情况下错误地设置了 bf16 浮点格式,。如果是这种情况,将“混合精度”和“保存精度”都设置为 fp16,然后再次启动训练过程。详细训练内容和方法参数等请参考本文中所列的四种模型各自的介绍。

对于很多刚学习AI绘画的小伙伴而言,想要提升、学习新技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

如果你苦于没有一份Lora模型训练学习系统完整的学习资料,这份网易的《Stable Diffusion LoRA模型训练指南》电子书,尽管拿去好了。

包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

由于内容过多,下面以截图展示目录及部分内容,完整文档领取方式点击下方微信卡片,即可免费获取!

img

img

img

篇幅有限,这里就不一一展示了,有需要的朋友可以点击下方的卡片进行领取!

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中Apache网站基于Http服务的访问限制(基于地址/用户)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年6月3日11点44分 🀄️文章质量:95分 为了更好地控制对网站资源的访问,可…

用 Axios 封装一个双 token 无感刷新

为什么要用双Token无感刷新,它解决了什么问题? 为了保证安全性,后端设置的Token不可能长期有效,过了一段时间Token就会失效。而发送网络请求的过程又是需要携带Token的,一旦Token失效,用户就要重新登陆&…

python书上的动物是啥

Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。之所以选中Python作为程序的名字,是因为他是一个叫Monty Python…

C# 判断字符串不等于空的示例

在C#中,要判断一个字符串是否不等于空(即它既不是null也不是空字符串""),方法有如下几种,如下。 方法1 使用逻辑运算符和string.IsNullOrEmpty方法 string myString "123"; // 假设要检查的字…

重邮803计网概述

目录 一.计算机网络向用户提供的最重要的功能 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成(功能) 6.互联网功能 7.互联网的组成(物理&#…

java自学阶段二:JavaWeb开发50(Spring和Springboot学习)

Spring、Springboot基础知识学习 目录 学习目标Spring基础概念IOC控制反转DI依赖注入事务管理AOP面向切面编程Spring案例说明(Postman使用、Restful开发规范、lombok、Restful、nginx了解) 一:学习目标: 1)了解Sprin…

将小爱音箱接入 ChatGPT 和豆包ai改造成专属语音助手

这个GitHub项目,mi-gpt,旨在将小爱音箱和米家设备与ChatGPT和豆包集成,有效地将这些设备转变为个性化语音助手。以下是对其功能和设置的详细分析: 主要特点 角色扮演:该项目允许小爱适应不同的角色,如伴侣…

HCIA-WLAN实验-二层旁挂组网

目录 前言:拓扑说明创建新拓扑配置网络互通SW1上配置VLAN10 20 30SW1上放行对应的VLANSW2上创建vlan 10 20并在对应接口放行VLAN在AC上创建vlan10并放行对应接口在SW1上创建vlanif20和vlanif30,并配置对应的IP在AC上创建vlanif10并配置IP在路由器AR上配置…

形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现

背景: 新手在学习Python时可能会出现如下图所示的报错 下面分情况教大家如何解决 视频教程【推荐】: 形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现 过程: 问题概述: 简单…

[数据集][目标检测]道路圆石墩检测数据集VOC+YOLO格式461张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):462 标注数量(xml文件个数):462 标注数量(txt文件个数):462 标注类别…

基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道

作者:尹航 在前文《基于阿里云服务网格流量泳道的全链路流量管理(一):严格模式流量泳道》、《基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道》中,我们介绍了流…

wpf工程中加入Hardcodet.NotifyIcon.Wpf生成托盘

1、在项目中用nuget引入Hardcodet.NotifyIcon.Wpf。如下图所示。 2、在App.xaml中创建托盘界面&#xff0c;代码是写在 App.xaml 里面 注意在application中一定要加入这一行代码&#xff1a; xmlns:tb"http://www.hardcodet.net/taskbar" 然后在<Application.R…

【免费Web系列】JavaWeb实战项目案例七(项目结束)

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 登录认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这…

韩国Neowine推出第三代强加密芯片ALPU-CV

推出第三代加密芯片&#xff1b;是ALPU系列中的高端IC&#xff1b;是一款高性能车规级加密芯片&#xff1b;其加密性更强、低耗电、体积小&#xff1b;使得防复制、防抄袭板子的加密性能大大提升&#xff0c;该芯片通过《AEC-Q100》认证&#xff0c;目前已经在国产前装车辆配件…

亚马逊测评自养号需要什么资源?

亚马逊测评自养号项目需要用到哪些资源呢&#xff1f; 1. 养号系统及软件 2. 代理IP资源 3. 收货地址及注册资料 4. 国外信用卡及礼品卡 5. 邮箱及手机号想做好这个项目以上的资源缺一不可 首先我们来说说养号的环境&#xff0c;养号的环境在以前的文章里也提到过&#x…

基于python的网上挂号预约系统-计算机毕业设计源码89352

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医院当然也不例外。网上挂号预约系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用Py…

软件三班20240605

文章目录 1.创建工程和模块2.添加 web支持3.创建前端代码4.添加servlet 依赖5. 代码6.案例2 1.创建工程和模块 2.添加 web支持 方法1 方法2 3.创建前端代码 4.添加servlet 依赖 5. 代码 <!DOCTYPE html> <html lang"en"> <head><meta c…

【面试干货】SQL中count(*)、count(1)和count(column)的区别与用法

【面试干货】SQL中count&#xff08;*&#xff09;、count&#xff08;1&#xff09;和count&#xff08;column&#xff09;的区别与用法 1、count(*)2、count(1)3、count(column) &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在SQL中&a…

InnoDB存储引擎非常重要的一个机制--MVCC(多版本并发控制)

Mysql是如何实现隔离性的&#xff1f;&#xff08;锁MVCC&#xff09; 隔离性是指一个事务内部的操作以及操作的数据对正在进行的其他事务是隔离的&#xff0c;并发执行的各个事务之间不能相互干扰。隔离性可以防止多个事务并发执行时&#xff0c;可能存在交叉执行导致数据的不…

opencv进阶 ——(十一)基于RMBG实现生活照生成寸照

实现步骤 1、检测人脸&#xff0c;可以使用opencv自带的级联分类器或者dlib实现人脸检测 2、放大人脸范围&#xff0c;调整到正常寸照尺寸 3、基于RMGB算法得到人像掩码 4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可 alpha融合实现 void alphaBlend(cv::Mat&…