ComfyUI系列教程(1)--Stable Diffusion基本原理

1.Stable Diffusion文生图基本原理

1.1Stable Diffusion原理介绍

        文生图主要基于Stable Diffusion大模型进行。SD的基本结构图如下图所示,主要包括3个部分。其中1是CLIP图像文本对,将图像、文本来自不同模态的信息映射到同一个编码空间,使相对应的文本和图像特征向量接近,不对应的文本和图像向量远离。CLIP的主要作用就是让大模型理解用户输入的提示词、图像等信息。2是SD的核心部分扩散模型,在训练时,SD对原始图像进行加噪,然后再一步一步去噪得到原图,推理阶段直接从噪声图像开始去噪,并使用不同的采样器加速去噪过程。3是变分编码器VAE,主要作用是将扩散过程编码到更小的潜空间进行操作,生成图像后再从潜空间解码,得到人类能够理解的像素空间的图像,这一步可以加速文生图的过程、提升文生图的质量。

Stable Ddiffusion原理图         

由于SD大模型训练成本较高,为了弥补SD大模型的一些缺点,比如不能生成指定角色的特征、不能生成指定风格等,使用训练成本低的LoRA对大模型进行微调,给大模型增加一些补充知识,常见的LoRA有工具性(修手、增加细节)、画风类型(水墨风、油画风)、角色类型。

1.1.1Diffusion Model 扩散模型

        Diffusion Model是SD等生成模型的核心部分,常见的扩散模型有DDPM、DDIM等。以最简单的DDPM为例,简要介绍Diffusion Model的原理。        

        扩散模型定义了一个基于马尔科夫链的扩散过程。包括正向和逆向两个过程,正向扩散过程从真实数据分步采样,逐步向样本添加高斯噪声,最终逐渐趋近于纯高斯噪声。该过程服从高斯分布。

 扩散正向过程

        扩散的逆过程,从一个随机噪声开始,还原数据原貌(不能在反向过程中通过随机噪声去噪)。去噪扩散模型(Denoising Diffusion Probabilistic Models,DDPM)简化了损失函数,将训练目标转化成预测当前步添加的噪声信息,降低了训练难度。将网络的FCL替换成Unet,提升表达能力。Improved DDPM和DDIM(Denoising Diffusion Implicit Models)、DPM-Solver对之前的模型进行了优化和加速。

        DDPM(Denoising Diffusion Probabilistic Models)是DALLE、SD常用的Diffusion结构。DDPM的逆过程的输入包括噪声、Denoise的次序、输入的文字。

DDPM的逆过程 

        Denoise的次数是提前设置的,每一步的序号也表示了噪声的严重程度,每一步的噪声图片与最终输出的图片大小一致。在process过程中,每一次都随机产生噪声加在图片上,而每次产生的噪声也作为reverse process中对应步数的真值,用于训练Noise Predictor。

        在训练过程中,DDPM算法每次Add noise的图像都是一步得到,而非一次一次累加的。想象中,对于加噪的图像进行Noise predictor,减去噪声得到噪声较少的图;实际上Denoise把input和t当作输入,直接得到混入的噪声。

 Stable Diffusion模型训练和推理的过程

Training训练时(包括扩散正逆向过程)重复:

  1. 每次从数据集中随机抽取一张图片。
  2. 随机从 1 至 1000 中选择一个时间步 t。
  3. 随机生成一个高斯噪声。
  4. 根据上述加噪环节的公式,一次计算直接得到第 t 步加噪的结果图像。
  5. 将时间步 t 和加噪图像作为 UNet 的输入去预测一个噪声值。
  6. 使用第五步预测的噪声值和第三步随机生成的噪声值,计算数值误差,并回传梯度。

Sampling推理时(包括扩散的逆向过程)重复:

  1. 初始随机生成一个高斯噪声,作为第 1000 步加噪之后的结果。后期为当前噪声图。
  2. 将这个噪声和时间步 1000 作为已经训练好的 UNet 的输入,预测第 999 步引入的噪声。
  3. 使用采样器在步骤 1 的高斯噪声中去除步骤 2 预测的噪声,得到一张干净一点的图像。

1.1.2CLIP

        CLIP 利用了图像模态和文本模态的对应关系。CLIP 分别构造了一个图像编码器和一个文本编码器,将图像及其文本描述映射到一个特征空间,比如我们可以映射到 512 维度的特征空间。一张图或者一个文本描述,经过映射都是 512 个浮点数。

        CLIP使用对比学习,计算图像特征向量和文本特征向量之间的余弦距离,余弦距离的范围是 -1 到 1,越大表示距离越接近。CLIP 的训练目标是让对应的图像、文本得到的特征向量靠近,也就是余弦距离越大越好,让不对应的图像、文本得到的特征向量远离,也就是余弦距离尽可能小。

        训练过程分为四步:提取表征、映射和归一化、计算距离和更新模型权重(交叉熵损失函数)。经典的图像分类任务通常需要使用人工标注的标签数据来训练,训练完成后只能区分训练时限定的类别。由于 CLIP 见过 4 亿图文,拥有海量的知识,我们便可以直接通过跨模态检索的方式直接进行分类。

1.1.3VAE

        我们可以通过神经网络,在保留原始数据的关键信息的条件下,将输入的原始数据压缩到一个更低维度的空间,得到一个低维的向量表示,并且这个低维的向量表示可以通过解码恢复出原始的数据。这里的低维空间就是潜在空间(latent space,也称为隐空间),低维的向量也叫潜在表示(latent representation)。

        VAE变分自编码器将输入转换成对隐层空间的概率分布估计。同时训练一个概率解码器,实现从隐层空间分布到真实数据分布的映射。在 VAE 中,编码器的输出是某种已知概率分布的均值 μ 和方差 σ,比如最常用的高斯分布。根据均值、方差和一个随机噪声 ϵ,最终的潜在表示z=e^σ×ϵ+μ。VAE 中计算潜在表示的过程便是大名鼎鼎的重参数化技巧,解决了梯度不能直接通过随机采样操作进行传播的问题。同时使用重构损失和 KL 散度损失来训练 VAE。

        VAE 不仅可以有效地压缩和重构图像,它得到的潜在表示还可以进行插值编辑。即可以叠加图像潜空间表示再解码,得到介于图像之间的图像。

1.1.4SD1.5 SDXL SD3模型介绍

      SD模型通常指基于神经网络结构和大量数据集训练得到的权重文件(safetensor或者checkpoint文件),有时也会指代不同版本的神经网络结构(代码)。在使用时,需要注意神经网络结构和权重文件需要匹配,比如使用SD1.5版本的神经网络结构推理SD1.5版本的权重文件。

SD1.5

        SD1.5是最早的、生态最为全面的SD结构。基于官方发布SD1.5模型权重文件,爱好者或者企业进行微调训练,得到了很多基于SD1.5网络结构的,适用于不同风格的基础模型。

SDXL

        SDXL本质是由两个SD结构拼接而成,对应使用了两个模型。Base模型和Refiner模型分别在原本的SD结构上进行微调。该类模型对显卡要求提高,但表现能力有很大的改进,整体生态也在逐步完善。Base结构:和Stable Diffusion一致,具备文生图,图生图,图像inpainting等能力。(由U-Net,VAE,CLIP Text Encoder(两个)三个模块组成)。Refiner结构:对Base模型生成的图像Latent特征进行精细化,其本质上是在做图生图的工作。(由U-Net,VAE,CLIP Text Encoder(一个)三个模块组成)

 SDXL模型结构

SD3

        SD3使用MMDiT架构,在文字表现、空间位置等方面有突出表现,但其在商业许可、肢体表现等各个方面为人诟病。Stable Diffusion 3 Medium 是一个拥有20亿参数的模型。基于Rectified Flow 构建生成模型,基于DiT模型替换Unet,并且构建了更高效的生成模型架构。

常用于下载SD模型的网站有:

  1. Civitai:https://civitai.com/
  2. LiblibAI:LiblibAI-哩布哩布AI - 中国领先的AI创作平台
  3. Huggingface:https://huggingface.co/ 镜像地址:HF-Mirror
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值