Stable Diffusion算法、结构全流程概述

Stable Diffusion能力强、功能多、插件广,本文拟概述SD的全流程,方便梳理算法各结构的关系

SD发展的重点论文

  • Denoising Diffusion Probabilistic Models(首次提出去噪扩散模型DDPM)
  • Diffusion Models Beat GANs on Image Synthesis(OpenAI 改进UNet,DM超越GAN,Classifier Guidance)
  • High-Resolution Image Synthesis with Latent Diffusion Models(提出隐变量扩散模型LDM,是SD的第一版)
  • CLASSIFIER-FREE DIFFUSION GUIDANCE(Classifier-free Guidance)
  • Scalable Diffusion Models with Transformers(一种基于Transformer架构的新型扩散模型DiT)

SD原理

SD整体流程

SD是一个基于latent扩散模型的文本生成图像模型。SD的核心来源于Latent Diffusion这个工作,常规的扩散模型是基于像素的生成模型,而Latent Diffusion是基于隐变量的生成模型。它先采用一个autoencoder将图像压缩到latent空间,然后用扩散模型来生成图像的latents,最后送入autoencoder的decoder模块就可以得到生成的图像。

基于latent的扩散模型的优势在于计算效率更高效,因为图像的latent空间要比图像pixel空间要小,这也是SD的核心优势。文生图模型往往参数量比较大,基于pixel的方法往往限于算力只生成64x64大小的图像,比如OpenAI的DALL-E2和谷歌的Imagen,然后再通过超分辨模型将图像分辨率提升至256x256和1024x1024;而基于latent的SD是在latent空间操作的,它可以直接生成256x256和512x512甚至更高分辨率的图像。

SD三大流程为

  • 前向扩散过程:生成噪声图片训练集
  • 后向训练过程:去噪训练DDPM等
  • 后向推理过程:推理采样器生成AI图像,如DDIM、PLMS、Euler A、DPM++和UniPC等

SD模型的主体结构如下图所示,主要包括三个模型:

  • Autoencoder:encoder将图像压缩到latent空间,而decoder将latent解码为图像;常用变分自编码器VAE
  • CLIP text encoder:提取输入text的text embeddings,通过cross attention方式送入扩散模型中作为condition;
  • UNet 或者 DiT:扩散模型的主体,用来实现文本引导下的latent生成。2024年初推出的Sora和SD3均使用DiT扩散模型。此外扩散模型还包含采样器等部件

在这里插入图片描述

采样器:采样器类型和采样步数(去噪步数)相匹配

1、DDPM:必须掌握的前向扩散过程与反向采样过程
DDPM参考链接

扩散模型包含两个过程:前向扩散过程和反向生成过程,前向扩散过程是对一张图像逐渐添加高斯噪音直至变成随机噪音,而反向生成过程是去噪音过程,我们将从一个随机噪音开始逐渐去噪音直至生成一张图像,这也是我们要求解或者训练的部分。
在这里插入图片描述
训练过程学习的是每一步的噪声预测函数,采样过程则从标准高斯分布开始采样,然后减去预测噪声,不断迭代生成新样本。

在这里插入图片描述

2、DDIM:改进DDPM的采样过程
DDPM与DDIM源码解读

在DDPM的实现中,一般会有一个类专门维护扩散模型的α这个加噪变量。我们这里把这个类称为DDPMScheduler。此外,DDPM会用到一个U-Net神经网络unet,用于计算去噪过程中图像应该去除的噪声eps。准备好这两个变量后,就可以用randn()从标准正态分布中采样一个纯噪声图像xt。它会被逐渐去噪,最终变成一幅图片。去噪过程中,时刻t会从总时刻T遍历至1(总时刻T一般取1000)。在每一轮去噪步骤中,U-Net会根据这一时刻的图像xt和当前时间戳t估计出此刻应去除的噪声eps,根据xt和eps就能知道下一步图像的均值。除了均值,我们还要获取下一步图像的方差,这一般可以从DDPM调度类中直接获取。有了下一步图像的均值和方差,我们根据DDPM的公式,就能采样出下一步的图像。反复执行去噪循环,xt会从纯噪声图像变成一幅有意义的图像。

DDIM对DDPM的采样过程做了两点改进:1) 去噪的有效步数可以少于T步,由另一个变量ddim_steps决定;2) 采样的方差大小可以由eta决定。

3、其他采样器介绍

其他采样器使用的介绍链接

  1. 如果只是想得到一些较为简单的结果,选用欧拉(Eular)或者Heun,并可适当减少Heun的步骤数以减少时间
  2. 对于侧重于速度、融合、新颖且质量不错的结果,建议选择:
    DPM++ 2M Karras, Step Range:20-30
    UniPc, Step Range: 20-30
  3. 期望得到高质量的图像,且不关心图像是否收敛:
    DPM ++ SDE Karras, Step Range:8-12
    DDIM, Step Range:10-15
  4. 如果期望得到稳定、可重现的图像,避免采用任何祖先采样器。
    名称中带有a标识的采样器表示这一类采样器是祖先采样器。这一类采样器在每个采样步骤中都会向图像添加噪声,采样结果具有一定的随机性(如Euler a、DPM2 a、DPM++ 2S a、DPM++ 2S a Karras)。

补充概念

补充1:CFG Scale

理解:CFG Scale指的是classifier-free guidance,被称为提示词强度,相反的就是classifier guidance。如果CFG Scale越大,输出将更符合输入提示和/或输入图像,但会失真。另一方面,CFG Scale 值越低,越有可能偏离提示或输入图像,但质量也越好。

原理:Classifier-Free Guidance的核心是通过一个隐式分类器来替代显示分类器,且根据贝叶斯公式,分类器的梯度可以用条件生成概率和无条件生成概率表示。训练时,Classifier-Free Guidance需要训练两个模型,一个是无条件生成模型,另一个是条件生成模型。推理时,最终结果可以由条件生成和无条件生成的线性外推获得,生成效果可以用引导系数cfg scale调节,控制生成样本的逼真性和多样性的平衡。

补充2:负面提示词的原理

对于不想要的内容,请将其置于负面提示中,而不是在正向提示词中否定!!!

在Stable Diffusion中,负面提示词(Negative Prompt)是一种强大的工具,它能够指导模型生成符合用户需求的图像。其工作原理主要基于劫持无条件采样

首先,让我们了解一下什么是无条件采样。在Stable Diffusion中,算法首先通过文本提示进行有条件采样,对图像进行轻微去噪。然后,采样器通过无条件采样对同一图像进行轻微去噪。这个过程是无引导的,就像不使用文本提示一样。这意味着无条件采样是独立于文本提示的,不受其影响。

然而,当使用Negative Prompt时,情况发生了变化。Negative Prompt的作用是告诉模型你不想要什么样的风格或元素。通过劫持无条件采样,Negative Prompt能够引导扩散远离它。这意味着在扩散过程中,模型会朝着正面提示的方向迈出一步,然后远离负面提示。这种原理使得Stable Diffusion能够实现高质量的图像生成,同时保持对文本提示的响应。

补充3:StableDiffusion为什么能够生成不同形状的图片

  1. 首先原始的Unet支持一部分可变尺寸输入,如下图所示
    在这里插入图片描述
  2. 其次StableDiffusionWebUI中会对图片进行像素范围限制,每8个像素生成的图像都不同&
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值