SD理论-WEBUI
2024-06-25 18:02:38 0 举报
AI智能生成
登录查看完整内容
SD理论-WEBUI是一个基于SD理论的设计框架,它提供了一个全面的指南,帮助开发者创建出更加高效、易用和美观的Web应用程序。这个理论强调了组件的可重用性、模块间的低耦合性以及用户界面的直观性。通过应用SD理论-WEBUI,开发者可以减少开发时间,降低维护成本,提高用户体验。
作者其他创作
大纲/内容
基于对抗网络实现
生成速度快,主要是不需要进行下一步预测
GAN
2022-04
直接文本表征到图像表征的显式转换
unClip
扩散先验模型
主要技术
逻辑支持不好
生成文字不行
缺点
DALL-E 2 (OpenAI)
2022-05
只要文本模型足够大,就不需要扩散先验模型
https://arxiv.org/abs/1910.10683
没有使用 CLIP的文本和图像编码器, 使用的是文本大模型 T5来完成文本编码任务
Imagen 没有使用 unCLIP 结构,而是直接把文本表征输入给图像解码器,生成目标图像。
Imagen 对扩散模型预测的噪声使用了动态阈值的策略,提升了 AI 绘画效果的稳定性。
可以看到,文本描述经过文本编码器得到文本表征(Text Embedding),该文本表征不仅用于引导低分辨率图像的扩散生成,也用于指导连续的两个超分模块发挥作用。和我们前面学的 DALL-E 2 类似,Imagen 首先会生成 64x64 分辨率的低分辨率图像,然后经过连续两次基于扩散模型的超分模块,将图像分辨率提升至 256x256、1024x1024。
训练过程中,首先要将文本表征、初始噪声作为扩散模型的输入,去噪后的图像作为目标输出,就得到了低分辨率扩散模型;然后将低分辨率图像、文本表征作为输入,去噪后的图像作为目标输出,得到更高分辨率的扩散模型。
工作原理
Imagen (google)
2023-04
依赖 Imagen 进行改进
DeepFloyd (StabilityAI)
SD1.X系列
SD 新模型
历史脉络
第一是不能通过 prompt 指令来完成 AI 绘画,而是从纯噪声出发,绘画过程有点类似于开盲盒
第二是加噪和去噪的过程都是在图像空间完成,使用高分辨率训练扩散模型,会占用较多的显存
原始扩散模型的两个短板
潜在扩散模型的前身便是扩散模型,它一方面将扩散过程从图像空间转移到了潜在空间,通过使用 VAE 变分自编码器来压缩和恢复图像,大大提高了速度和效率;另一方面利用 CLIP 等模型的文本编码器,将文本信息转化为文本表征,并通过交叉注意力机制将这些文本信息融入到图像信息空间中,最终实现文本生图。
文本生图
整体方案
潜空间,超分模块 64x64 -> 512x512
VAE
一起预测噪声
UNet
提取文本表征
CLIP编码器
注意力机制(Tranformer)
去除噪声
采样器
组成模块
VAE 0.084B
CLIP 文本编码器 0.123B
UNet 0.86B
总共大概 1B的参数量
SD1.X
模型参数
简单串联
Stable Diffusion
历史
关键词使用逗号分割
关键词分割
使用|混合提示词
混合提示词
使用 [关键词1关键词2:百分比]
渐变
[cat|dog] in a field
[关键词 1|关键词 2]
交替
杰作
masterpiece
最好的质量
best quality
巧用标签强化效果
使用()
让单词产生1.1倍的强度
(dog)
1.1 x 1.1 倍的强度
((dog))
直接指定倍率
(dog:1.5)
1.3
不建议该权重超过 1.3
<lora: 模型文件名: 权重 >
0 - 1
0 不启作用
权重范围
LoRA
添加 LoRA
增强提示词权重
低分辨率
lowres
解刨结构不好
bad anatomy
手指多余
extra digits
质量不高
low quality
负面提示词
强化形态
cinematic lighting (电影光)
dynamic lighting (动感光)
光线
looking at viewer
looking at another
looking away
looking back
looking up
视线
sketch
画风
dynamic angle
from above
from below
wide shot
视角
控制类
prompt
negative prompt
通用反义词
举个例子
真实例子
Prompt
子主题
高清修复
图生图则是在你原有的基础上加噪声,噪声权重自己控制,webui界面是不是有个重绘幅度,就是这个
30
采样步数
0.6
重绘强度
一般情况这些配置会产生不错的效果
重绘幅度(denoising strength)
迭代次数就是我们webui界面的采样步数
迭代次数
随机种子seed就是我们初始随机得到的一个噪声图,所以如果想要复刻得到一样的图,seed要保持一致
随机种子seed
Euler a
DDIM
DPM
采样器类型
采样器是什么
各种不同的采样器,在表现形式上便是不同的 xt−1 计算公式
采样器如何运作
有哪些区别
引导权重越大,生成的图像与给定的文本越相关
最终噪声 = w * 条件预测 + (1 - w) * 无条件预测
文生图的引导无分类器引导提示词相关性
CFG (7左右)
反向引导词,避免生成不想要的内容
Negative Prompt
为了获得更靠近原始文本的特征,能让 AI绘画模型更听话
CLIP Skip = 2
界面功能
stable-diffusion-webui / models / Stable-diffusion
模型Models
stable-diffusion-webui / models / Lora
lora
扩展插件
extensions-builtin/sd-webui-controlnet/models
controlNet
目录
SD-WebUI
这个技巧对应的就是 webui 中我们使用的 CFG Scale
具体做法是训练一个图像分类器,这个分类器需要在加噪之后的数据上进行训练。在文生图的过程中,每一步去噪都需要使用这个分类器计算梯度,用该梯度修正预测的噪声(对应 DDIM 采样),或者用来修正去噪后的图像(DDPM 采样)
有分类器引导的方案需要训练额外的分类器,并且文本对于图像生成的控制能力不强,因此,它逐渐被无分类器引导的方法取代
有分类器(Classifier Guidance)
为什么要做两次预测呢?这是因为两次预测有着不同的目的:一次完成有条件的预测,一次完成无条件的预测。我们通过控制有条件预测和无条件预测的插值,便能更好地平衡生成图像的随机性、多样性和图文一致性。
无分类器引导技术巧妙地引入了一个 Guidance Scale 参数,无需训练额外的分类器,就能实现文本对图像生成的控制。具体来说,在每次扩散模型预测噪声的过程中,我们需要使用 UNet 预测两次。
无分类器(Classifier Free Guidance)
文本引导图像生成的过程采用了无分类器引导(Classifier Free Guidance)
最终噪声
文本引导图片生成原理探秘
SD 的扩散模型是一个 0.86B 的 UNet,我们在第 11 讲曾经说过,对于 512x512 分辨率的训练数据,经过 VAE 模块之后,我们可以得到 64x64x4 维度的潜在表示。使用这个潜在表示作为 UNet 的输入,可以得到同样维度的输出,预测的是需要去除的噪声值。你可以点开图片了解这里的 UNet 结构。
对于 UNet 的编码器部分,潜在表示分别经过 3 个连续的 CADB(CrossAttnDownBlock2D)模块,分辨率从 64x64x4 降采样到 8x8x1280,得到了对应的特征。接着,这些特征被送入一个不带注意力机制的 DB(DownBLlock2D)模块和一个 MBCA(MidBlock2DCrossAttn)注意力模块。这样,就完成了 UNet 的特征编码。UNet 的解码器部分与编码器部分完全对应,只不过用上采样计算替代了编码器部分的降采样计算。编码器和解码器之间存在跳跃连接,这是为了进一步强化 UNet 模型的表达能力。
介绍
Unet
那么,prompt 的文本表征和时间步 t 的编码是如何起作用的呢?用显微镜看看 CADB 模块的内部结构。
prompt 时间步t 起作用时机
注意力机制原理
图生图计算过程
方向提示词Negative Prompt
CLIP Skip = 2
方向描述词作用机制Negative Prompt 和 CLIP Skip
关键技术揭秘
模型体积比较大 几G
基础模型
只能选一个
SD 1.4
SD 1.5
SDXL (SD2.0)
常见
CheckPoint(ckpt)
Diffusers
Hugging Face 推出自己的存储格式,比 ckpt格式加载速度更快,更安全
Safetensors
模型提交比较小,几百M
规定一张脸的样式
规定一类风格
或者规定一些精细的部分
ke
LoRa
模型分类
https://civitai.com/
Civitai
https://huggingface.co/spaces/huggingface-projects/diffusers-gallery
Hugging Face
模型提供方
二次元
novelai
国风 3
guofeng3
逼真,仿mid
dreamlike
真人风格
protogen
https://civitai.com/models/131800/xlmoyouartificialpersonxl
幽墨人造人 SDXL 1.0
https://civitai.com/models/86232/moyouartificialperson
幽墨人造人 SD1.5
https://civitai.com/models/4468?modelVersionId=57618
可以生成比较精美的漫画形象
CounterFeit
https://civitai.com/models/30240?modelVersionId=125771
可以生成很好看的美漫风格
ToonYou
常见大模型
单精度浮点数
FP32
半精度浮点数
FP16
(Brain Float16) 是 FP32尾数截断
BF16
模型转换
将不同模型独特的风格和擅长的方面融合
模型融合
模型
扩散
Diffusion
稳定扩散
关键词
Lineart
Canny
Tile
OpenPose
ControlNet
大致理解为提示词对扩散过程的指导强度。CFG yued
CFG Scale
Denoising Strength
扫盲
Model文件
输出结果
预测=》
模型==》
训练算法-》
训练数据-》
训练过程图示
clip会把文本对应一个词表,每个单词标点符号都有相对应的一个数字,我们把每个单词叫做一个token,之前stablediffusion输入有限制只能75个单词(现在没了),也就是75个token,看上面你可能发现6个单词怎么对应8个token,这是因为还包含了起始token和结束token,每个数字又对应这一个768维的向量
Clip
具体步骤
机器学习过程
生成对抗模型
变分自动编码器
Flow based Model
流模型
加噪去噪的过程
Diffusion Model
扩散模型
四大主流生成模型
扩散模型的灵感源自 “热力学”扩散效应
图片多步加噪变为噪声,噪声多步去噪变为干净图像
原理都是从模糊到清晰
基本认知
参数化马尔科夫链将干净的图片逐步变成纯噪声
每一步的加噪结果仅依赖于上一步的加噪结果和一个加噪过程
对于一张干净的图像,可以通过一次计算得到任意 T步加噪声的结果
加噪
训练一个 UNet模型来预测噪声值
预测噪声
DDPM
根据加噪图像和噪声值,使用采样器去除噪声
从噪声出发,逐步预测噪声并去除噪声
去噪
随机抽取一张图
随机采样时间步
随机生成一个噪声
一步计算加噪结果
使用 UNet预测噪声
计算第 5 步和第3 步的噪声误差
训练过程 6 步走
获取当前噪声图
使用UNet预测噪声值
使用采样器去除噪声
推理过程 3 步走
细节探究
扩散模型 VS GAN
1. 提升去除噪声的效果
2. 是实现 prompt控制图像内容的关键技术
3. Transformer结构也是 GPT系列工作的核心模块之一
注意力模块通常作为一个子结构嵌入到更大的模型中,作用是提供全局上下文信息的感知能力。
作用
Add & Norm
Feed Forward
Multi-Head Attention
图像分类
目标检测
解决空间数据问题
卷积神经网络
CNN
解决时序数据问题
长短时记忆网络
LSTM
循环神经网络
RNN
并行计算
长时依赖
2017 年由 Google 提出的 Transformer,是一种基于自注意力机制(self-attention)的模型,它有效解决了 RNN 类方法的并行计算和长时依赖两大痛点
来源
编码器负责处理输入序列。它会根据全局上下文,提取输入数据中的有用信息,并学习输入序列的有效表示。
编码器
解码器则会根据编码器输出的表示,生成目标输出序列。它会关注并利用输入序列的表示以及当前位置的上下文信息,生成输出序列中每个元素的预测。
解码器
6层编码器,6 层解码器
Transformer 结构包括编码器(Encoder)和解码器(Decoder)两个部分
通过这两个部分完成对输入序列的表示学习和输出序列的生成
组成
AI绘画
ChatGPT
应用领域
AI绘画中也是复用了注意力机制来实现 prompt 对图像内容的控制。
源序列就是输入的文本序列。例如待翻译的文本
源序列
目标序列是输出的文本序列。例如翻译后的文本,通常就是目标语言
目标序列
Token是文本序列中的最小单位,可以是单词、字符等形式。文本可拆分为一系列的 tokens
Token(词符)
词嵌入的目标是把每一个 token转换为固定长度的向量表示,这些向量可以根据 token ID 在训练好的词嵌入库(例如:Word2Vec)中拿到。
在 Transformer中,编码器和解码器的输入都是序列经过 token 化之后得到的词嵌入。
词嵌入示例
词嵌入(Word Embedding)向量
四个关键概念
Attention(注意力)机制
包含注意力模块、Feed-Forward神经网络、残差链接、层归一化等
TransFormer
初识序列任务解决方案
Scaled Dot-Product Attention
用于两个矩阵之间的乘积。在注意力机制中,我们通常会有查询(Q)、键(K)和值(V)这三个矩阵,它们通过矩阵乘法来相互作用。
这代表矩阵乘法(Matrix Multiplication)
MatMul
通常在机器学习模型的输出层使用,可以将一个向量转换为一个概率分布。在注意力机制中,SoftMax用于赋予不同的输入不同的权重,这些权重会决定在输出中每个输入的重要性
激活函数
SoftMax
这是一个可选的步骤,用于“掩码”或者忽略某些不应该影响注意力权重的数据。例如,在处理序列数据时,掩码可以用来避免未来的信息“泄露”到模型。
Mask(opt)
缩放是对矩阵乘法的结果进行缩放处理,通常是为了控制梯度的大小。在这种情况下,它通常通过除以键向量维度的平方根来实现,这有助于稳定训练过程
Scale
这些分别代表“Query(查询)”、“Key(键)”和“Value(值)”。在注意力机制中,我们计算查询和所有键之间的相似度,然后用这些相似度的软最大化版本作为权重,来加权对应的值,从而得到输出。
源自同一个输入序列
Wq
Wk
Wv
实现过程
自注意力机制(Self-Attention)
将 prompt描述经过 CLIP模型得到的特征向量作为源序列,得到 K和 V
从源序列产生 K和 V向量
将 Zt视为目标序列,得到 Q
从目标序列产生 Q向量
源自目标序列
交叉注意力 (Cross-Attention)
单向注意力(Unidirectional Attention)
双向注意力(BidirectionalAttention)
因果注意力(Causal Attention)
并行处理输入序列
实现
多头注意力(Multi-Head Attention)
编码器-解码器注意力
单向注意力
双向注意力
因果注意力
巧用 Mask模块
注意力机制探究
处理长序列数据时速度更快,更易于并行计算
直接关注序列中任意距离的依赖关系,不再受制于之前的隐状态传递
优点
训练通常需要大量的数据
对内和计算资源的需要较高
TransFormer优缺点
使用 UNet网络预测每一步的噪声
UNet是一种 U型的全卷积神经网络,存在一个明显的编码、解码过程并且编码器和解码器中间存在特征融合。
已经提出,便成为处理图像分割任务的经典模型
说明
1. 文本表征
2. 上一步去噪后的潜在表示
3. 时间步t的编码
标准UNet输入
1. image_embeds图像表征
UNet的输入
左侧是编码器
右侧是解码器
对于图像分割任务,编码器的输入是原始图像,解码器的输出是分割结果。
1. 独特的 U型结构。
UNet 的编码器由连续的卷积层和池化层交替组成,每个卷积层用于提取更深层次的图像特征,通常在卷积之后使用非线性激活函数(如 ReLU)以引入非线性。随后,池化层(如最大池化)用于进行降采样,以减小每一层的空间尺寸。经过编码器阶段后,高分辨率的输入图像就转化成了具备较低空间尺寸的特征图。
2. 基于编码器 - 解码器设计思想。
3. 编码器与解码器之间存在跳跃连接。
基本结构
https://chat.openai.com/share/699213d5-3dfe-414c-9ea6-e801a7ff3e4d
chatgpt4
文档介绍
UNet(预测噪声)
任何图像都可以通过不断添加噪声,变成完全被噪声覆盖的图像。反过来,一张噪声图像通过逐步去除噪声,可以变得清晰可辨。在这个去除噪声的过程中,起到关键作用的正是今天课程里的“主角”——采样器。
主打去噪
简言之,UNet 负责预测噪声,采样器负责“减去”噪声。这个过程反复迭代,我们就能从噪声图 xt 得到 xt−1,然后得到 xt−2,最终得到 x0,也就是清晰可辨的图像。
各种不同的采样器,在表现形式上便是不同的 xt−1 计算公式
可以看作是最简单的求解器。
Euler
比欧拉法更准确但速度较慢。
Heun
与欧拉法速度差不多,但(据说)更准确。
LMS (Linear multi-step method)
求解随机微分方程
求解常微分方程
你可能注意到还有一些采样器的名称中也有一个字母 a 它们都属于祖先采样器(ancestral samplers)。祖先采样器会在每个采样步骤中向图像添加噪声。因为采样结果有一定的随机性,所以它们是随机采样器。
DPM2 a
DPM++ 2S a
DPM++ 2S a Karras
随机采样器
它们采用了 Karras 文章中推荐的噪声策略。在接近去噪过程结束时,将噪声步长变小。研究人员发现这可以提高图像的质量。
带有Karras标签的采样器
DPM(扩散概率模型求解器)
DPM++ 采样器
专为扩散模型设计的新采样器
采样器选择
文字表征提取, 使用文本、图像数据对进行训练
CLIP 通过巧妙的设计利用了图像模态和文本模态的对应关系。CLIP 分别构造了一个图像编码器和一个文本编码器,将图像及其文本描述映射到一个特征空间,比如我们可以映射到 512 维度的特征空间。简言之,一张图或者一个文本描述,经过映射都是 512 个浮点数。那么此时,我们需要设计一个监督信号,利用图文成对的关系,驱动两个编码器模型学习到有效的特征提取能力。该怎么做呢?
监督信号
原理
我们输入的 prompt 首先会经过 tokenizer 完成分词,得到每个分词的 token_id。之后在预训练的词嵌入库中根据 token_id 拿到词嵌入向量,并将这些词嵌入向量拼接在一起,输入到 CLIP 的文本编码器。接着,经过 CLIP 文本编码器提取到的文本表征,便可以通过交叉注意力机制控制图像生成。
文本表征输入到交叉注意力UNet
输入到CLIP文本编码器得到文本表征
从预训练词库中根据token_id拿词嵌入向量
tokenizer(分词)得到每个分词的token_id
工作过程
CLIP
图像进行潜空间表示,以及从潜空间恢复到原图尺寸的能力
解码后得到的便是 512x512
潜空间分辨率常用的为 64x64
ip2p
shuffle
tile
depth
canny
inpaint
lineart
mlsd
normalbae
openpose
scribble
seg
softedge
lineart_anime
支持的功能
训练
老的边缘检测算法
现代边缘检测算法
HED
提取图像的直线轮廓
MLSD
涂鸦生成图像
Scribble
法线
Normal
提取图像深度信息
Depth
提取肢体关键点
图像分割处理
Seg
支持的模型
sd15标识训练这个 ControlNet的基础模型是 SD1.5
Canny便是 ControlNet的控制条件是 Canny算子,也就是提取原始图像的边缘
control_sd15_canny.pth
命名规范
ControlNet1.0
ControlNet1.1
SD1.x
SDXL
版本
ControlNet
SD的扩散模型
1.文本编码器将输入文本提示投影到潜在空间。
2.VAE的图像编码器部分将输入图像投影到潜在空间。
3.对于给定的时间步长,将少量噪声添加到图像潜在向量中
4.扩散模型使用来自这两个空间的潜在向量以及时间步长嵌入来预测添加到图像潜在的噪声
5.计算预测噪声和步骤3中添加的原始噪声之间的重建损失。
6.使用梯度下降对扩散模型参数进行优化。
在微调期间仅更新扩散模型参数,而(预训练的)文本和图像编码器保持冻结状态。
训练原理
Textual Inversion
Hypernetworks
文本,unet都会修改
整个大模型都会修改
Dreambooth
Embeddings
Hypernetwork
几个关键模型
训练模型
向量
CLIP 是图像编码器和文本编码器的组合,使用两个编码器对数据分别进行编码。然后使用余弦距离比较结果嵌入,刚开始训练时,即使文本描述与图像是相匹配的,它们之间的相似性肯定也是很低的
出处
font color=\"#7bd144\
在许多情况下,我们关心的是数据点之间的方向或角度,而不是它们的大小或长度。例如,在文本分析中,长篇文章和短句子可能指向相同的主题,但它们的向量长度是不同的。通过使用余弦距离,我们可以有效地比较这些向量的方向,而不受它们的大小或长度的影响。
为什么使用余弦距离?
例子
使用
余弦距离
梯度下降
然后针对这些最优解扩大底部粗度,找更多最优解
探索更多局部最优解
损失函数
数学知识
SD
0 条评论
回复 删除
下一页