Stable Diffusion学习

目录

参考链接

Stable Diffusion基础

扩散模型(Diffusion model)

前向扩散(Forward diffusion)

反向去噪

Stable Diffusion Model

潜在扩散模型(Latent diffusion model)

变分自编码器(Variational Autoencoder)

条件(Conditioning)

文本条件(Text conditioning)

分词器(tokenizer)

嵌入/标签(Embedding)

将嵌入(embeddings)馈送到噪声预测器(noise predictor)

交叉注意力机制(Cross-attention)

Stable Diffusion Step-by-Step

文本到图像(Text-to-image)

图像到图像(Image-to-image)

附录

什么是CFG值?

分类器引导(Classifier Guidance)

无分类器指导(Classifier-free guidance)

Stable Diffusion v1 与 v2模型之间的差异

模型差异(Model difference)

训练数据差异(Training data difference)

结果差异(Outcome difference)

文生图基本原理


参考链接

http://t.csdnimg.cn/RQR4V

http://t.csdnimg.cn/l1ko3

百度安全验证

Stable Diffusion基础

Stable Diffusion是2022年发布的深度学习文本到图像生成模型,它是一种潜在扩散模型,它由创业公司Stability AI与多个学术研究者和非营利组织合作开发。目前的SD的源代码和模型都已经开源,在Github上由AUTOMATIC1111维护了一个完整的项目,正在由全世界的开发者共同维护。由于完整版对网络有一些众所周知的需求,国内有多位开发者维护着一些不同版本的封装包。

在最简单的形式中,Stable Diffusion是一种文本到图像模式。给它一个文本提示(Text Prompt)。 它将返回与文本匹配的图像。

Stable Diffusion将文本提示转换为图像。

扩散模型(Diffusion model)

Stable Diffusion属于一类称为扩散模型(diffusion model)的深度学习模型。它们是生成模型,这意味着它们的目的是生成类似于它们训练数据的新数据。对于Stable Diffusion来说,数据就是图像。
为什么叫扩散模型?因为它的数学看起来很像物理学中的扩散。

在这里不详细赘述扩散模型的数学公式及原理,讲一下基本的思想吧。扩散模型分为前向扩散(Forward diffusion)和反向去噪的过程。我们生成图像主要使用的就是反向去噪的过程。

前向扩散(Forward diffusion)

前向扩散过程将噪声添加到训练图像中,逐渐将其转换为没有特点的噪声图像(一般是高斯噪声)。前向过程会将任何猫或狗的图像变成噪声图像。最终,您将无法分辨它们最初是狗还是猫。就像一滴墨水掉进了一杯水里。墨滴在水中扩散。几分钟后,它会随机分布在整个水中。你再也分不清它最初是落在中心还是边缘附近。
下面是一个进行前向扩散的图像示例。猫的图像变成随机噪音。

猫图像的前向扩散。

反向去噪

假设我们现在有了一张高斯噪声的图像,我们的目标是将他还原为原始图像。一个神奇的思想就是预测在前向扩散过程当中添加的噪声,然后将原始图像减去这个噪声,迭代进行操作,最终可以得到原始的输入图像。

但重要的问题是,“怎么能做到呢?”为了反向扩散,我们需要知道图像中添加了多少噪声。答案是教神经网络模型来预测增加的噪声。预测每一步前向过程中添加的噪声分别及噪声量;这个任务通常由一个U-Net模型来完成。

当我们训练好了一个U-Net网络作为噪声预测器,要如何使用呢?

我们首先生成一个完全随机的图像,并要求噪声预测器告诉我们噪声。然后,我们从原始图像中减去这个估计的噪声。重复此过程几次。你会得到一只猫或一只狗的图像。

反向扩散的工作原理是从图像中连续减去预测的噪声。

 注意:这个时候我们无法控制生成猫或狗的图像。目前,图像生成是无条件的

Stable Diffusion Model

以上谈论的并不是Stable Diffusion的工作原理!原因是上述扩散过程是在图像空间中。它在计算上非常非常慢。 您甚至无法在任何单个GPU上运行,更不用说笔记本电脑上蹩脚的GPU了。

图像空间是巨大的。想一想:具有三个颜色通道(红色、绿色和蓝色)的 512×512 图像是一个 786,432 维的空间!

像谷歌的Imagen和Open AI的DALL-E这样的扩散模型都在像素空间中。他们使用了一些技巧来使模型更快,但仍然不够。

因此,Stable Diffusion出现了。

潜在扩散模型(Latent diffusion model)

Stable Diffusion旨在解决速度问题。方法如下:
Stable Diffusion是一种在潜在空间扩散(latent diffusion)的模型。它不是在高维图像空间中操作,而是首先将图像压缩到潜空间(latent space)中。对比原像素空间,潜空间(latent space)小了 48 倍,因此它获得了处理更少数字的好处,这就是为什么它要快得多。

变分自编码器(Variational Autoencoder)

Stable Diffusion使用一种称为变分自编码器(Variational Autoencoder)的技术来实现图像潜空间压缩。

变分自编码器(VAE:Variational Autoencoder)神经网络由两部分组成:(1)编码器和(2)解码器。编码器将图像压缩为潜在空间中的低维表示。解码器从潜在空间恢复图像。

Variational autoencoder transforms the image to and from the latent space.

 Stable Diffusion模型的潜空间为4x64x64,比图像像素空间小48倍。我们在SD谈到的所有正向和反向扩散实际上是在潜在空间中完成的。

因此,在训练过程中,它不会生成噪声图像,而是在潜在空间中生成随机张量(潜在噪声)。它不是用噪声破坏图像,而是用潜在噪声破坏图像在潜在空间中的表示。这样做的原因是它的速度要快得多,因为潜在空间更小。

条件(Conditioning)

前面的说明仍然不完整,缺了最重要的一块拼图:文本提示(text prompt)在哪里注入到图片?没有这部分内容,Stable Diffusion就不是文本到图像(text-to-image)模型。你会随机得到一只猫或一只狗的图像,但你没法控制Stable Diffusion为你生成猫或者狗的图像。
这就是条件(conditioning)的用武之地。条件的目的是引导噪声预测器,以便预测的噪声在从图像中减去后会给出我们想要的东西。

文本条件(Text conditioning)

下面概述了如何处理文本提示(Text Prompt并将其输入噪声预测器。分词器(Tokenizer首先将提示中的每个单词转换为称为标记(token的数字。然后将每个标记转换为称为Embedding的 768 值向量。然后,Embedding由文本转换器处理,并准备好供噪声预测器使用。

如何处理文本提示并将其馈送到噪声预测器中以引导图像生成。

接下来让我们仔细看看每个部分的详细内容。

分词器(tokenizer)

分词器。

 文本提示首先由 CLIP 标记器进行标记化。CLIP是由Open AI开发的深度学习模型,用于生成任何图像的文本描述。Stable Diffusion v1使用CLIP的分词器。

令牌化(Tokenization)是计算机理解单词的方式。我们人类可以阅读单词,但计算机只能读取数字。这就是为什么文本提示中的单词首先转换为数字的原因。

分词器只能对它在训练期间看到的单词进行分词。例如,CLIP 模型中有“dream”和“beach”,但没有“dreambeach”。Tokenizer将“dreambeach”这个词分解为两个标记“dream”和“beach”。所以一个词并不总是意味着一个令牌

另一个细则是空格字符也是令牌(token)的一部分。在上述情况下,短语“dream beach”产生两个标记“dream ”和“[空格]beach”。这些token与“dreambeach”产生的token不同,“dream beach”是“dream”和“beach”(beach前没有空格)。
Stable Diffusion模型仅限于在提示中使用 75 个令牌。(现在你知道它和75个字不一样了!)

嵌入/标签(Embedding)

嵌入。

Stable Diffusion v1 使用 Open AI 的 ViT-L/14 CLIP模型。嵌入是一个 768 个值的向量。每个令牌都有自己唯一的嵌入向量。嵌入由 CLIP 模型固定,该模型是在训练期间学习的。


为什么我们需要嵌入(Embedding)?这是因为有些词彼此密切相关。我们希望利用这些信息。例如,mangentleman 和 guy 的嵌入几乎相同,因为它们可以互换使用。莫奈、马奈和德加都以印象派风格作画,但方式不同。这些名称具有接近但不相同的嵌入。

这与我们讨论的用于触发带有关键字的样式的嵌入相同。嵌入可以产生魔力。科学家们已经证明,找到合适的嵌入可以触发任意的对象和样式,这是一种称为文本反转的微调技术。

将嵌入(embeddings)馈送到噪声预测器(noise predictor)

从嵌入到噪声预测器。

 在馈入噪声预测器之前,文本转换器需要进一步处理嵌入。变压器就像一个用于调节的通用适配器。在这种情况下,它的输入是文本嵌入向量,但它也可以是其他东西,如类标签、图像和深度图。转换器不仅进一步处理数据,而且还提供了一种包含不同调节模式的机制

交叉注意力机制(Cross-attention)

文本转换器的输出由整个 U-Net 中的噪声预测器多次使用。U-Net通过交叉注意力机制消耗它。这就是提示与图像相遇的地方。
让我们以提示“蓝眼睛的男人”为例。Stable Diffusion将“蓝色”和“眼睛”这两个词配对在一起(提示中的自注意力机制),这样它就会生成一个蓝眼睛的男人,而不是一个蓝衬衫的男人。然后,它使用这些信息将反向扩散引导到包含蓝眼睛的图像。

Stable Diffusion Step-by-Step

文本到图像(Text-to-image)

在文本到图像中,您向Stable Diffusion提供文本提示(prompt),它会返回一个图像。
第 1 步。Stable Diffusion在潜空间中生成随机张量。您可以通过设置随机数生成器的种子来控制此张量。如果将种子设置为某个值,您将始终获得相同的随机张量。这是你在潜在空间中的图像。但现在都是噪音。

随机张量在潜在空间中生成。

第 2 步。噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测噪声,也在潜在空间(4x64x64 张量)中。

 第 3 步。从潜在图像中减去潜在噪声。这将成为您的新潜在图像

 步骤 2 和 3 重复一定数量的采样步骤,例如 20 次。
第 4 步。最后,VAE的解码器将潜在图像转换回像素空间。这是运行Stable Diffusion后获得的图像。

图像到图像(Image-to-image)

图像到图像是SDEdit方法中首次提出的一种方法。SDEdit可以应用于任何扩散模型。所以我们有Stable Diffusion的图像到图像的功能。
输入图像和文本提示作为图像到图像的输入提供。生成的图像将由输入图像和文本提示调节。例如,使用这幅素人画和提示“photo of perfect green apple with stem, water droplets, dramatic lighting”作为输入,图像到图像可以将其变成专业绘图:

图像到图像

 现在这是分步介绍:
第 1 步。输入图像被编码为潜在空间。

 第 2 步。噪点被添加到潜在图像中。降噪强度控制添加的噪声量。如果为 0,则不添加噪声。如果为 1,则添加最大噪声量,以便潜在图像成为完整的随机张量。

 第 3 步。噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测潜在空间(4x64x64 张量)中的噪声。

 第 4 步。从潜在图像中减去潜在噪声。这将成为您的新潜在图像

步骤 3 和 4 重复一定数量的采样步骤,例如 20 次。
第5步。最后,VAE的解码器将潜在图像转换回像素空间。这是运行映像到映像后获得的图像。 

 所以现在你知道什么是图像到图像:它所做的只是设置带有一点噪声和一点输入图像的初始潜在图像。将去噪强度设置为 1 等效于文本到图像,因为初始潜在图像完全是随机噪声。

附录

什么是CFG值?

如果不解释无分类器引导(Classifier-Free Guidance,CFG),这篇文章将是不完整的,这是AI艺术家每天调来调去的值。要了解它是什么,我们需要首先触及它的前身,分类器引导(Classifier Guidance)。

分类器引导(Classifier Guidance)

分类器引导是一种在扩散模型中合并图像标签的方法。您可以使用标签来指导扩散过程。例如,标签“猫”引导反向扩散过程生成猫的照片。


分类器指导强度(classifier guidance scale)是用于控制扩散过程应与标签保持多近的参数。
假设有 3 组带有标签“猫”、“狗”和“人类”的图像。如果扩散是无指导的,模型将从每个组的总数据中(译者:我觉得这里应该有“均匀”的意思)提取样本,但有时它可能会绘制适合两个标签的图像,例如男孩抚摸狗。

 分类器指南。左:无指导。中:小引导尺度。右:大引导比例尺。

高分类器指导下,扩散模型生成的图像将偏向极端或明确的例子。如果你向模型询问一只猫,它将返回一个明确的猫的图像,没有别的。
分类器指导强度(classifier guidance scale)控制遵循指导(guidance)的紧密程度。在上图中,右侧的采样具有比中间的分类器指导量表更高的分类器指导量表。实际上,此刻度值只是具有该标签的数据的漂移项的乘数。

无分类器指导(Classifier-free guidance)

尽管分类器指导实现了破纪录的性能,但它需要一个额外的模型来提供该指导。这给培训带来了一些困难。
用作者的话来说,无分类器指导是一种实现“没有分类器的分类器指导”的方法。他们没有使用类标签和单独的模型作为指导,而是建议使用图像标题并训练一个条件扩散模型,就像我们在文本到图像中讨论的那样。
他们将分类器部分作为噪声预测器U-Net的条件,在图像生成中实现所谓的“无分类器”(即没有单独的图像分类器)指导。
文本提示以文本到图像的形式提供此指导。

CFG 值
现在我们通过条件反射有一个无分类器的扩散过程,我们如何控制应该遵循多少指导?
无分类器引导 (CFG) 刻度是一个值,用于控制文本提示对扩散过程的调节程度。当图像生成设置为 0 时,图像生成是无条件的(即忽略提示)。较高的值将扩散引导向提示。

Stable Diffusion v1 与 v2模型之间的差异

模型差异(Model difference)

Stable Diffusion v2 使用 OpenClip 进行文本嵌入。Stable Diffusion v1使用Open AI的CLIP ViT-L/14进行文本嵌入。此更改的原因是:

  • OpenClip 的规模扩大了五倍。较大的文本编码器模型可提高图像质量。
  • 尽管Open AI的CLIP模型是开源的,但这些模型是使用专有数据训练的。切换到 OpenClip 模型使研究人员在研究和优化模型时更加透明。更有利于长远发展。
训练数据差异(Training data difference)

Stable Diffusion v1.4 训练使用

  • 在 laion237B-en 数据集上以分辨率 256×256 执行 2k 步。
  • 高分辨率分辨率 194×512 的 512k 步长。
  • 在“laion-aesthetics v225 512+”上以 512×2 处执行 5k 步,
    文本条件下降 10%。

Stable Diffusion v2 训练

  • 在 LAION-550B 子集的分辨率下以 5k 步长过滤露骨的色情材料,使用 LAION-NSFW 分类器和美学分数 >= 。256x256punsafe=0.14.5
  • 在具有分辨率的图像上,在同一数据集上的分辨率下以 850k 步长。512x512>= 512x512
  • 在同一数据集上使用 v 目标的 150k 步。
  • 在图像上恢复了另外 140k 步。768x768

Stable Diffusion v2.1 在 v2.0 上进行了微调

  • 同一数据集上的额外 55k 步骤(使用punsafe=0.1)
  • 另外 155k 额外步骤punsafe=0.98

所以基本上,他们在最后的训练步骤中关闭了NSFW过滤器。

结果差异(Outcome difference)

用户通常发现使用Stable Diffusion v2 来控制风格和生成名人更难。虽然稳定性 AI 没有明确过滤掉艺术家和名人的名字,但它们的效果在 v2 中要弱得多。这可能是由于训练数据的差异。Open AI的专有数据可能有更多的艺术品和名人照片。他们的数据可能经过高度过滤,因此所有内容和每个人都看起来很好,很漂亮。

文生图基本原理

当用户输出一段提示词之后,比如说宇航员骑狗,其首先会被解析为两个特征向量宇航员、狗。然后去对应的数据库之中找到对应的图像,之后将这一部分特征向量信息传递到图像编码器之中。图像编码器会从潜在空间之中选取一张初始噪声图片。然后U-net卷积神经网络会根据特征向量预测出不需要的噪声,与原噪声相减得到一张新的噪声图,如此不断往复,之后会得到一张满足需求的特征图像,最终由图像解码器将其解析为呈现给用户的最终图像。

潜在空间:反映的是原始数据经过“中介空间”后的特征

文件格式

  • 大模型被称为checkpoint,一般3-7GB,也有小的模型,后缀名为safetensors,一般1-2GB
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值