Stable Diffusion原理说明

这篇具有很好参考价值的文章主要介绍了Stable Diffusion原理说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文参考:深入浅出讲解Stable Diffusion原理,新手也能看明白 - 知乎

目录

1、Stable Diffusion能做什么?

2、扩散模型(Diffusion model)

(1)前向扩散(Forward Diffusion)

(2)反向扩散(Reverse Diffusion)

(3)如何训练

 3、Stable Diffusion Model

(1)潜在扩散模型(Latent diffusion model)

(2)变分自编码器(Variational Autoencoder)

(3)为什么潜在空间是可能的?

(4)潜空间的反向扩散

(5)什么是VAE文件

(6)条件(Conditioning)

(6.1)文本条件

 (6.2)分词器tokenizer

(6.3)将嵌入(embeddings)送到噪声预测器

(6.4)交叉注意力机制

4、Stable Diffusion 生成步骤

(1)文本到图像

 (2)图像到图像

5、CFG值

(1)分类器引导(Classifier Guidance)

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

6、Stable Diffusion总结


1、Stable Diffusion能做什么?

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

Stable Diffusion原理说明

2、扩散模型(Diffusion model)

Stable Diffusion是扩散模型(Diffusion model)下的一种模型。

它们是生成式模型,这意味着它们的目的是生成类似于它们训练数据的新数据。对于Stable Diffusion来说,数据就是图像。

 为什么叫扩散模型?

Stable Diffusion原理说明

 分为前向扩散反向扩散两个部分,分别对应上图中的加噪和降噪。

(1)前向扩散(Forward Diffusion)

该过程是将噪声添加到训练图像中,逐渐将其转换为没有特点的噪声图像。前向过程会将任何猫或狗的图像变成噪声图像。最终,将无法分辨它们最初是狗还是猫。

Stable Diffusion原理说明

就像一滴墨水掉进了一杯水里,墨滴在水中扩散,几分钟后,它会随机分布在整个水中,你再也分不清楚它最初是落在中心还是边缘附近。

下面是一个进行前向扩散的图像示例,猫的图像变成随机噪音。

Stable Diffusion原理说明

(2)反向扩散(Reverse Diffusion)

反向过程就像倒着播放视频一样,时光倒流,我们将看到墨滴最初添加的位置。反向过程就是恢复图像。

Stable Diffusion原理说明

 从嘈杂、无意义的图像开始,反向扩散恢复了猫或狗的图像。

每个反向扩散过程都有两部分:一是漂移或定向运动,反向扩散向猫或狗的图像漂移;二是随机运动。

(3)如何训练

为了反向扩散,我们需要知道图像中添加了多少噪声,答案是教神经网络模型来预测增加的噪声。它被称为Stable Diffusion中的噪声预测因子(noise predictor),这是一个U-Net模型。训练如下:

  1. 选择一个训练图像,例如猫的照片
  2. 生成随机噪声图像
  3. 通过将此噪声图像添加到一定数量的步骤中来损坏训练图像
  4. 训练噪声预测器告诉我们添加了多少噪声,这是通过调整其权重并向其显示正确答案来完成的。

Stable Diffusion原理说明

噪声在每一步按顺序添加, 训练后,我们有一个噪声预测器,能够估计添加到图像中的噪声。

现在我们有了噪声预测器,要如何使用呢?

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

Stable Diffusion原理说明

 此时,我们无法控制生成猫或狗的图像。当我们后面谈论条件反射时将解决这个问题。目前图像生成是无条件的。

 3、Stable Diffusion Model

 第2部分讲到的是Diffusion model生成图像的原理,但是不是Stable Diffusion Model的原理。原因是上述扩散过程是在图像空间中,它的计算量非常巨大,无法在任何单个GPU上运行。

图像空间是巨大的,具有三个颜色通道(RGB)的3*512*512图像是一个786,432维的空间。

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

当然用像素空间也有好处,那就是可以比较精确地控制生成地内容,比如显示文字。

Stable Diffusion旨在解决速度问题。

(1)潜在扩散模型(Latent diffusion model)

Stable Diffusion是一种潜在空间扩散的模型。它不是在高维图像空间中操作,而是首先将图像压缩到潜空间(latent space)中(ps:类似于图像中的centerNet算法,也是在隐藏层512*512->128*128空间中进行训练和推理)。对比原像素空间,潜空间小了48倍,因此速度变得更快。

(2)变分自编码器(Variational Autoencoder)

Stable Diffusion使用变分自编码器实现图像潜空间压缩。变分自编码器神经网络由两部分组成:编码器和解码器,编码器将图像压缩为潜在空间中的低维表示,解码器从潜在空间恢复图像。

Stable Diffusion原理说明

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

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

(3)为什么潜在空间是可能的?

为什么VAE可以将图像压缩到更小的潜在空间而不会丢失信息。原因是:自然图像不是随机的,它们具有很高的规律性:面部遵循眼睛、鼻子、脸颊和嘴巴之间的特定空间关系;狗有4条腿,是一种特殊的形状。

这可能和机器学习里的流形假设(Manifold hypothesis)有关。如果认为自然数据是由低维的流形所表示在空间里,那它本身就是一个假象,可以直接去低维空间中计算它而得到和高维度相似的结果。这种将高维图像压缩到低维去理解,好像恰恰是人类视觉神经的一个运作原理。也就是说,更有助于AI将注意力放在低频段的、总体性的形态上去,相当于让AI把更多的精力放在判断一张图像的整体构造上

不过从输出结果来看,流形假设并不完全正确。因为Latent Diffusion在人脸、手这种在图像整体中占比小的,但细节又不可忽视的地方,表现还不如Dall-E这种像素级的Diffusion。所以这种低维的计算还是有损的,这也是为何Stable Diffusion的VAE解码中,加入了人脸修正等加强模块,更换更好的VAE似乎也是一种增强Stable Diffusion效能的方式。

(4)潜空间的反向扩散

  1. 生成随机潜在空间矩阵
  2. 噪声预测器估计潜在矩阵的噪声
  3. 然后从原始潜空间矩阵中减去估计的噪声
  4. 重复步骤2和3直至特定采样步骤
  5. VAE的解码器将潜空间矩阵转换为最终图像。

(5)什么是VAE文件

VAE文件在Stable Diffusion V1中使用,以改善眼睛和面部的绘画效果。他们是我们刚刚谈到的自编码器的解码器。通过进一步微调解码器,模型可以绘制更精细的细节。

(6)条件(Conditioning)

文本提示(text prompt)在哪里注入到图片?需要用到条件。

条件的目的是引导噪声预测器,以便预测的噪声在从图像中减去后会给出我们想要的东西。

(6.1)文本条件

分词器(Tokenizer)首先将提示中的每个单词转换为标记(token)的数字,然后将每个标记转换为称为Embedding的768值向量,其次Embedding由文本转换器处理,并准备好供噪声预测器使用。

Stable Diffusion原理说明

 (6.2)分词器tokenizer

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

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

Stable Diffusion模型仅限于在提示中使用75个token。

(6.3)将嵌入(embeddings)送到噪声预测器

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

(6.4)交叉注意力机制

文本转换器的输出在整个U-Net中的噪声预测器多次使用,U-Net通过交叉注意力机制消耗它,这就是提示与图像相遇的地方。

以提示"蓝眼睛的男人"为例。Stable Diffusion通过提示中的自注意力机制将“蓝色”和“眼睛”这两个词配对在一起,这样它就会生成一个蓝眼睛的男人,而不是一个蓝衬衫的男人。然后,它使用这些信息,通过提示prompt和图像prompt之间的交叉注意力机制将反向扩散引导到包含蓝眼睛的图像。

Lora模型修改交叉注意力模块的权重以更改样式。仅修改此模块就可以微调Stable Diffusion模型这一事实说明了该模块的重要性。

4、Stable Diffusion 生成步骤

(1)文本到图像

第1步,Stable Diffusion在潜空间中生成随机张量。此时可以通过设置随机数生成器的种子来控制此张量。生成的是潜在空间中的图像,但现在都是噪声。

Stable Diffusion原理说明

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

Stable Diffusion原理说明

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

Stable Diffusion原理说明

 步骤2和3重复一定数量的采样步骤,比如20次。

第4步,VAE的解码器将潜在图像转换回像素空间。这是运行Stable Diffusion后获得的图像。

Stable Diffusion原理说明

 (2)图像到图像

图像到图像是SDEdit方法中首次提出的一种方法,SDEdit可以应用于任何扩模型,所以有Stable Diffusion的图像到图像的功能。

输入图像和文本提示作为图像到图像的输入提供,生成的图像将由输入图像和文本提示调节。例如,使用这幅素人画和提示“photo of perfect green apple with stem, water droplets, dramatic lighting”作为输入,图像到图像可以将其变成专业绘图。

Stable Diffusion原理说明

第1步,输入图像被编码为潜在空间

Stable Diffusion原理说明

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

Stable Diffusion原理说明

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

Stable Diffusion原理说明

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

Stable Diffusion原理说明

步骤3和4重复一定数量的采样步骤,例如20次。

第5步,VAE解码器将潜在图像转换回像素空间,这是运行图像到图像后获得的图像。

Stable Diffusion原理说明

 总结,图像到图像所做的只是设置带有一点噪声和一点输入图像的初始潜在图像。将降噪强度设置为1等效于文本到图像,因为初始潜在图像完全是随机噪声。

5、CFG值

 CFG:Classifier-Free Guidance无分类器引导,这是AI艺术家每天调来调去的值。

(1)分类器引导(Classifier Guidance)

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

分类器指导强度(classifier guidance scale)是用于控制扩散过程应与标签保持多近的参数。

假设有3组带有标签“猫”、“狗”和“人类”的图像。如果扩散是无指导的,模型将从每个组的总数据中(有点“均匀”的意思)提取样本,但有时它可能会绘制适合两个标签的图像,例如男孩抚摸狗。

Stable Diffusion原理说明

在高分类器指导下,扩散模型生成的图像将偏向极端或明确的例子。如果你向模型询问一只猫,它将返回一个明确的猫的图像,没有别的。

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

 尽管分类器指导实现了破记录的性能,但它需要一个额外的模型来提供该指导,这给训练带来了一些困难。

无分类器指导是一种实现“没有分类器的分类器指导”的方法,文本提示以文本到图像的形式提供此指导。

他们将分类器部分作为噪声预测器U-Nett的条件,在图像生成中实现所谓的“无分类器”(即没有单独的图像分类器)指导。

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

6、Stable Diffusion总结


1、它使用扩散模型,分为前向扩散和反向扩散两部分,对应加噪和降噪的过程
2、前向扩散:类似墨滴在水中扩散,变成随机噪声;反向扩散:恢复图像。
3、训练:教神经网络U-Net预测噪声
4、潜在空间的反向扩散:
(1)生成随机潜在空间矩阵
(2)噪声预测器估计潜在矩阵的噪声
(3)从原始潜在空间矩阵减去估计的噪声
(4)重复步骤(2)和(3)直至特定采样步骤
(5)VAE的解码器将潜在空间矩阵转换为最终图像
5、文生图的步骤
(1)在潜空间中生成随机张量
(2)噪声预测器将潜在噪声图像和文本提示作为输入,并预测噪声
(3)从潜在图像中减去潜在噪声得到新的潜在图像
(4)重复步骤(2)和(3)直至特定采样步骤 
(5)VAE的解码器将潜在空间矩阵转换为最终图像
6、图生图的步骤
(1)输入图像被编码为潜在空间,噪声被添加到潜在图像中。
(2)噪声预测器将潜在噪声图像和文本提示作为输入,并预测噪声
(3)从潜在图像中减去潜在噪声得到新的潜在图像
(4)重复步骤(2)和(3)直至特定采样步骤 
(5)VAE的解码器将潜在空间矩阵转换为最终图像
7、CFG:classifier-free guidance无分类器引导,指的是不需要单独分类模型而使用文本提示来进行引导,该值用于控制文本提示对扩散过程的调节程度文章来源地址https://www.toymoban.com/news/detail-503993.html

到了这里,关于Stable Diffusion原理说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stable Diffusion动态加载Lora过程中的实验、原理与说明

    使用 StableDiffusionXLPipeline.from_pretrained() 方法SDXL半精度加载显存占用约7G左右。 使用 load_lora_weights() 加载了5个Lora模型后显存提升到8G,平均每个Lora的大小在200M左右。 使用 unload_lora_weights() 后显存没有发生变化,还是8G,说明该方法不会清空已经加载到显存的Lora模型,但 这时

    2024年02月04日
    浏览(44)
  • 深入浅出 -- 系统架构之微服务架构选型参考图

    技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分: 1. 项目名称和描述:简要介绍项目的背景和目标。 2. 技术栈:列出项目中使用的主要技术和工具,如编程语言、框架、数据库等。 3. 组件关系:用箭头表示各个组

    2024年04月09日
    浏览(49)
  • 论文解读:Bert原理深入浅出

    摘取于https://www.jianshu.com/p/810ca25c4502 任务1:Masked Language Model Maked LM 是为了解决单向信息问题,现有的语言模型的问题在于,没有同时利用双向信息,如 ELMO 号称是双向LM,但实际上是两个单向 RNN 构成的语言模型的拼接,由于时间序列的关系,RNN模型预测当前词只依赖前面出

    2024年02月11日
    浏览(45)
  • 深入浅出:Zookeeper的原理与实践

    在当今的信息时代,分布式系统的应用越来越广泛,而其中一个至关重要的组成部分就是Zookeeper。作为一个分布式协调服务,Zookeeper在保障分布式系统的一致性、可靠性和可用性方面发挥着不可替代的作用。本博客旨在深入浅出地探讨Zookeeper的原理与实践,帮助读者全面理解

    2024年04月11日
    浏览(44)
  • 深入浅出Java中参数传递的原理

    今天,想和大家聊聊关于java中的参数传递的原理,参数的传递有两种,值传递和引用传递。 值传递 :是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递 :是指在调用函数时将实际参数的地址传递到

    2024年02月01日
    浏览(64)
  • 深入浅出讲解自动驾驶 - 激光雷达原理和结构简介

    💂 个人主页 : 同学来啦 🤟 版权 : 本文由【同学来啦】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助, 欢迎关注、点赞、收藏和订阅专栏哦 激光雷达最先应用于海洋深度探测领域,其实现思路是通过相同回波之间的时间差实现海洋深度测算。后来不断演

    2024年02月16日
    浏览(41)
  • 深入浅出——零基础一文读懂DeepSORT(原理篇)

    本文是笔者对DeepSORT算法学习的阶段性总结,基于笔者接触到的所有开源学习资料,辅以个人理解进行重新编排而成,力求清晰,使非专业的读者也能迅速对该算法原理有较为透彻的理解,便于后续代码学习。 笔者本人为非cs相关专业,论述不当之处欢迎指出。文中引用的博

    2023年04月09日
    浏览(44)
  • 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)

    本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! ​个人主页:有梦想的程序星空 ​个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等

    2024年02月03日
    浏览(45)
  • 深入浅出Nginx的基本原理和配置指南「负载均衡篇」

    6.1 四层负载均衡 6.1.1 四层负载均衡与七层负载均衡的区别 四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。四层负载均衡不识别域名,而七层负载均衡识别域名。 6.1.2 四层负载均衡配

    2024年02月09日
    浏览(47)
  • 【深入浅出Spring Security(三)】默认登录认证的实现原理

    由默认的 SecurityFilterChain 为例(即表单登录),向服务器请求 /hello 资源Spring Security 的流程分析如下: 请求 /hello 接口,在引入 Spring Security 之后会先经过一系列过滤器(一中请求的是 /test 接口); 在请求到达 FilterSecurityInterceptor 时,发现请求并未认证。请求被拦截下来,并

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包