首页 > 其他分享 >由浅入深:Stable-Diffusion 原理解析01 —— 基本概念的介绍

由浅入深:Stable-Diffusion 原理解析01 —— 基本概念的介绍

时间:2023-07-20 18:01:27浏览次数:52  
标签:Diffusion 01 模型 图像 噪声 Stable 扩散 SD

由浅入深:Stable-Diffusion 原理解析01 —— 基本概念的介绍

由于实习工作需要,最近一段时间的学习,自己也对 Stable-Diffusion 有了一些基础的理解,在学习和阅读论文的过程中,发现信息比较碎片化,于是决定产出一个 SD 原理的系列解析。

本系列相比于本人之前的代码阅读系列没那么“硬核”,内容也更容易理解一些。

希望各位大佬多多批评指正。


什么是Stable Diffusion?它是怎么组成的?

image

Stable Diffusion就是一种深度学习模型(后文简称SD模型)。它是由几个模块组成的

  • Text Encoder

    这一部分的主要功能是,把提示词(prompt)转化成计算机能够理解的一种数学表示,是一种 Clip 模型,在后面系列中会重点介绍 Clip 模型,在这里只是做一个功能上的诠释。自己书写的提示词最终生成图像,肯定离不开AI对提示词的“理解”,而 Clip 就是一种能够支持多模态输入的模型。

    需要注意的是,在谷歌的 Imagen 模型中提到,语言模型比图像生成模型更关键

    image

    Imagen 是由谷歌公司提出的一种 txt2img 的 Diffusion 模型,它和Stable在根本原理上大体一致,都是一种扩散(Diffusion)模型。他们原理上的区别在后面再详细说,从小白的角度,SD模型是开源的,也就是大家都可以看到代码,而Imagen是闭源的,我们无法了解更详细的信息。

  • Image Information Creator

    在收获了提示词等引导信息后,SD模型需要根据这些提示词抽象成的数学信息,来对一张随机的图(它看起来只是纯随机的像素点,也称为噪声 noise )进行一些“改变”,最终得到一个结果。而这个“改变的过程”,我们使用的方法是“扩散(Diffusion)”,这也就是这个模型名字的由来。当然,这个过程实际上很复杂,也有许多优化的地方,在后面会更详细的介绍。

    图像信息创建器(Image Information Creator)是整个SD模型的核心所在,也是它的性能比其他模型更好的关键所在。从技术角度来说,它由UNet神经网络和调度算法组成,在后面文章中也会进行详细介绍。而本文的关键也是介绍图像的改变(扩散)过程。

  • Image Decoder

    在上文得到了一个结果之后,利用图像解码器,将结果图像(其实更应该称为一组低维度的信息)转化为最终生成的图像。

    这里的 Decoder 模型只会运行一次,将“潜空间”的图(4*64*64)转化为人类能够欣赏的 RGB 的图像(3*512*512)(这里默认生成一张512*512大小的图)

    当然,如果您能够欣赏高维空间,或者您的视网膜可以识别更多原色,那么这里的转化也会改变。让我们脱下人类的伪装再次相认!

扩散模型(Diffusion model)

image

注意,这里还没有提到本文的主角 SD,我们这里只是介绍它的“前身”。

扩散模型是一种深度学习模型,它是一种生成式模型。于是它也离不开基本的结构:拿一些数据集进行训练,最终“学会”一些技能。

为什么叫扩散模型呢,因为在它的数学原理上,很像一种扩散,而我们能够进行训练和生成的根源在于:扩散可以进行前向扩散反向扩散,这两种扩散

具体的逆向扩散转化为前向扩散的数学过程非常神奇且优美,在后续文章中会进行论文和数学推导层面的详解

而让扩散模型本身与 VAE,GAN这些同样是生成式模型不同的,也就是它的扩散:在前向扩散阶段,对图像逐渐添加噪声,直到图像完全变成高斯噪声。在逆向扩散阶段,让受过训练的预测器预测一些噪声,将完全随机的噪声图像逐渐去噪,最终还原

这个过程听起来十分匪夷所思,听起来就像是违反了自然界的熵增定律,对此,本人有不成熟的一种解释:

从深度学习的几何层面来说,有一个定律叫流形分布定律,它描述了自然界中,同一种类别的高维数据,往往可以集中在某个低维的某个流形结构里。

而同一个类别的高维数据,在不同的子类中对应了这个流形结构的不同概率分布,而可以通过这些概率分布对子类进行区分

而深度学习本身就是从数据中学习这种流形结构和概率分布。同样还可以发现,现实中,自然界的图像信息基本都符合流式分布,不是随机的,无论是人脸还是花草树木,一切的图像特征都能在某个低维度的某个流形附近分布,所以我们可以通过深度学习的方式最终得到结果

以上的解释也只是我的个人理解,希望各位能够批评指正。

从结果证明,深度学习模型确实可以掌握一些图像关系,也能从完全随机的高斯噪声中生成符合自然界图像规律的图像(虽然有些也很鬼畜)。我们暂且放下对深度学习这件“反直觉”事情的不信任,来看扩散的过程。

image

前向扩散(Forward diffusion)

前向扩散就是将高斯噪声加入到用来训练的图像中,让他变得越来越没有特点,就像是熵增过程,图像本身的有序性和规律性会随着噪声的不断增加而越来越弱。

反向扩散 (Reverse diffusion)

反向扩散的前提是一张完全随机的高斯噪声,而为了最终能够得到一张我们想要的图片,我们需要知道图像中添加了多少的噪声,这就是扩散模型的关键所在,噪声预测因子noise predictor,拿大量的图片和数据来训练这样一个噪声预测器,最终得到一个能够预测噪音的工具。

image-20230720174845994

在 SD 模型中,使用Unet神经网络

最终,我们不断地在纯随机的噪声图片内,不断减去预测的噪声,就可以得到一张图片。

可以看到,噪声预测器是和训练的数据高度相关的,这是因为我们在训练时,让预测出来的噪声是倾向于接近“训练集内原始图片添加噪声后的结果”的。所以在图片中把预测出来的噪声去掉后,最后得到的清晰图片与训练集的原图有着相同的信息分布规律。

Stable Diffusion 模型的原理

您可能会在下文中看到许多模型的名称!

我们上文提到了众多概念,都仍只是“开胃菜”,因为真正要介绍的重点是 SD 模型,之前提到的扩散和预测等过程,本质上都是数学计算。而目前来说,我们的独立计算机算力都是难以支持这些扩散模型的。(至少在量子计算机商用之前),而 SD 模型,主要就是解决了计算速度的问题。

潜在扩散模型(latent diffusion)

image

计算量大的一大原因就在于图像本身过大,比如512*512的图片,光挨个像素过一遍(包括RGB)都需要78万的计算/访问次数,SD 模型可以将图像压缩在潜空间(latent space)中,(4*64*64)相比于原空间,小了48倍,所以计算速度可以提升许多。

变分自编码器(VAE,Variantional Autoencoder)

对 SD 模型作图比较熟悉的可以了解,VAE 在图像生成时可以接近“滤镜”的效果,在效果层面作用不如Lora,而在原理上,VAE 就重要的多,它是 SD 可以将模型转化到潜空间的保障。

image

所以,SD 模型并没有在原本的像素空间内生成噪声去破坏训练图像,而是在潜空间内,用潜在噪声破坏“图像在潜空间的表示”

这样是不是听起来对于那些作为训练集的小猫小狗没有这么残忍了?

而把图像压缩为潜在空间而不会丢失信息,原因还是前文提到的流形假设,在高维空间的信息表示中,往往存在着冗余,这也就意味着他们存在“被转化为低维空间信息表示同时不丢失太多信息”的机会。

就像如果用三维坐标去表示球面某个坐标,那么有太多的坐标属性都被浪费了,他们可能在球内可能在球外。无论如何,这种高维表示方法的信息密度较低,而学过初中地理的我们就可以知道,在地球上,只需要经度和纬度就可以表示一个球面的位置,此时信息的表示维度就降低了。

而许多其他模型,如Imagen模型,选择在像素空间内直接进行推理,当然也有模型自己独特的加速手段。

提示条件的引入

image

至此,本文已经基本介绍了 SD 模型的工作原理,但是仍未涉及 SD 模型的一个核心点 —— 提示词(Prompt),这部分也是十分值得深入的,在后续的文章中,也会详细介绍。

我们之前在扩散模型中,对于噪声预测器进行了介绍,而其实噪声预测器的输入除了当前的潜空间内的图片,还有提示词的作用。

在 Clip 模型中,将每一个提示词固定在一个嵌入向量里。最后在文本转换器(Text transformer)内进一步处理嵌入,最后影响 Noise perdictor

嵌入(Embedding)也是一个十分关键的机制,整个馈送的过程需要仔细阅读代码才可以完全理解,本系列后续文章中也会提到,同时对此感兴趣可以阅读代码分析系列文章

Img2Img

SD 模型的另一核心功能,Img2Img,是SDEdit方法中首次提到的方法,它主要做的工作是,不再完全随机地在潜空间内生成一个噪声,而是在输入图片本身添加一定的噪声,添加噪声的程度和设置的参数有关。

总结

至此,本文介绍了 SD 模型的基础流程和概念,本着互联网的开源精神做出技术分享。

因为篇幅受限,还有许多十分有价值的内容没有介绍。无数学者和从业者在该领域做出的创新,比如采样器(Sampler),超网络(HyperNetwork),Lora等。这些内容都会在后续的文章中,逐步深入地介绍。

本人也是AIGC领域的初学者,希望前辈们多多指教!

希望对有所帮助。


附录

参考文章:

  1. The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)
  2. 【Stable Diffusion】之原理篇 - 知乎 (zhihu.com)
  3. [2006.11239] Denoising Diffusion Probabilistic Models (arxiv.org)
  4. 深入浅出讲解Stable Diffusion原理,新手也能看明白 - 知乎 (zhihu.com)
  5. [2205.11487] Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (arxiv.org)
  6. Stable Diffusion原理解读 - 知乎 (zhihu.com)

标签:Diffusion,01,模型,图像,噪声,Stable,扩散,SD
From: https://www.cnblogs.com/ZzTzZ/p/17569187.html

相关文章

  • 01、低噪声放大电路设计——ATF-54143
    内部包含低噪声放大器电路设计所需的atf54143模型以及ATC公司电容电感S2P文件-嵌入式文档类资源-CSDN文库https://download.csdn.net/download/weixin_42340855/858819100、知识储备一个低噪声放大器(LNA)的核心指标就是噪声系数和增益以及稳定性,在整个有用频率范围内不会振荡,且......
  • ASEMI快恢复二极管MURF20100CT特性及应用解析
    编辑-Z本文主要介绍MURF20100CT二极管的基本特性及其在电路设计中的应用。首先介绍该二极管的基本结构和特性参数,然后重点讲解其应用场景和具体的电路设计方法。最后总结MURF20100CT二极管的优势和使用注意事项。 一、MURF20100CT二极管的基本特性MURF20100CT二极管是一种具......
  • ASEMI二极管MURF20100CTR参数, MURF20100CTR特征
    编辑-ZMURF20100CTR参数描述:型号:MURF20100CTR最大峰值反向电压(VRRM):1000V最大RMS电压(VRMS):700V最大直流阻断电压(VDC):1000V平均整流正向电流(IF):20A非重复峰值浪涌电流(IFSM):200A工作接点温度和储存温度(TJ,Tstg):-50to+150℃最大热阻(RθJC):3℃/W正向电压(VF):1.9V......
  • Origin 2017科研绘图软件下载和安装教程
    Origin是由OriginLab公司开发的一个科学绘图、数据分析软件,支持在MicrosoftWindows下运行。Origin支持各种各样的2D/3D图形。Origin中的数据分析功能包括统计,信号处理,曲线拟合以及峰值分析。Origin中的曲线拟合是采用基于Levernberg-Marquardt算法(LMA)的非线性最小二乘法拟合。Orig......
  • Git问题集,20190511
    来自 1、error: src refspec master does not match any执行命令git push origin master,报错,如上。http://stackoverflow.com/questions/827351/push-origin-master-error-on-new-repositoryTheerrormessageleadstotheconclusionthatyoudonothavea master......
  • 代码随想录训练营 Day01- 数组(上)
    概述第一天主要学习的是数组相关的内容,相关学习的内容包括数组的基本特性的学习,二分搜索方法的学习。数组特点数组的基本特点包括:下标从0开始内存连续性(Java中定义数组需要直接声明其空间大小)数组元素不可以删,只能覆盖ArrayList底层是数组实现,其实际上应该叫一......
  • ORA-01555错误详解
    ORA-01555错误详解 ORA-01555(快照过旧)问题让很多人感到十分头痛。最近我们的生产系统上也报出了ORA-01555错误。就结合这次案例将ORA-1555问题作个案例分析,并浅析产生原因和各种解决办法。如果要了解1555错误产生的原因,就需要知道ORACLE的两个特性:一致性读(ConsistentGet)和延......
  • 01-工作流 workflow
    title:01-工作流workflowdate:2023-7-1922:06:43tags:-Flowable状态机解决流程问题工作流:就是一个可以处理复杂情况的状态机。例如,员工请假这个流程:首先员工提交请假申请,假设有项目经理进行审批,审批有两种结果:通过或者拒绝。实现上面这个需求:创建一张请假表,表中......
  • JavaScript学习笔记01(包含ES6语法)
    Js简介什么是Js?Js最初被创建的目的是“使网页更生动”。Js写出来的程序被称为脚本,Js是一门脚本语言。被直接写在网页的HTML中,在页面加载的时候自动执行脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JINcompiler)Js不仅可以在浏览器中执行,也可以......
  • 在英特尔 CPU 上微调 Stable Diffusion 模型
    扩散模型能够根据文本提示生成逼真的图像,这种能力促进了生成式人工智能的普及。人们已经开始把这些模型用在包括数据合成及内容创建在内的多个应用领域。HuggingFaceHub包含超过5千个预训练的文生图模型。这些模型与Diffusers库结合使用,使得构建图像生成工作流或者对不......