全面理解Stable Diffusion采样器

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

全面理解Stable Diffusion采样器

原文:Stable Diffusion Samplers: A Comprehensive Guide

在 AUTOMATIC1111 的 SD webui 中,有许多采样器(sampler),如 Euler a,Heun,DDIM,… 什么是采样器?他们如何工作?他们之间的区别是什么?我们应该用哪种采样器?本文将带给你答案。

什么是采样?

在生成图片时,Stable Diffusion 会先在隐层空间(latent space)中生成一张完全的噪声图。噪声预测器会预测图片的噪声,将预测出的噪声从图片中减去,就完成了一步。重复该过程,最终将会得到清晰的图片。

由于 Stable Diffusion 在每一步都会产生一个新的图像样本,因此去噪的过程被也被称为采样。采样过程所使用的方法被称为采样方法或采样器。

全面理解Stable Diffusion采样器,stable diffusion

采样器负责执行去噪步

采样只是 Stable Diffusion 模型中的一部分。如果想理解完整的 Stable DIffusion,推荐阅读 How does Stable Diffusion work? 。

下面是一个采样过程的动态展示,采样器逐渐地产生越来越干净、清晰的图像。

全面理解Stable Diffusion采样器,stable diffusion

每一步去噪之后的图像动态展示

虽然整体框架是相同的,但是有许多不同的方法来执行具体的去噪过程。这通常需要速度和准确度之间两相权衡。

Noise Schedule

我们已经介绍过,在 Stable Diffusion 中,噪声图像是每步减去模型预测出的噪声,一点一点变成干净图像的。noise schedule 就是用来控制在每个采样步中噪声的强度的。噪声在第一步最大,慢慢降低,直到最后一步降为0。

在每一步中,采样器的工作就是根据 noise schedule 中对应的该步的噪声强度,减去对应的噪声,来产生该步的去噪图像。如果我们增大采样步数会有什么影响呢?每一步噪声下降的会更少,这有助于减少采样过程中的截断误差。

下面是 15 步和 30 步的 noise schedule 的对比。

总步数 15 30
noise schedule 全面理解Stable Diffusion采样器,stable diffusion 全面理解Stable Diffusion采样器,stable diffusion

采样器总览

到本文写作时,SD webui 共支持 19 中采样器,而且随着时间的推移越来越多。那么,不同的采样器之间有何区别呢?

目前为止,SD webui 支持的采样器:

Euler a、Euler、LMS、Heun、DPM2、DPM2 a、DPM++ 2S a、DPM++2M、DPM++ SDE、DPM fast、DPM adaptive、LMS Karras、DPM2 Karras、DPM2 a、Karras、DPM++2S a Karras、DPM++ 2M Karras、DPM++ SDE Karras、DDIM、PLMS。

本文后半部分会详细介绍,技术上细节很多。所以这里先提供一个总览的视角,帮助大家对各种采样器有一个大致的了解。

Old-School ODE Solvers

我们先来看最简单的一类,这些采样器中的发明时间都已经超过一百年了,它们是就老式的常微分方程(ODE)求解器(solver)。

  • Euler:最简单的求解器;
  • Heun:比 Euler 更准确,但也更慢
  • LMS(Linear Multi-Step method):和 Euler 一样快,但(应该会)更准确

Ancestor Samplers

你是否注意到某些采样器名字里带了一个字母 a

  • Euler a
  • DPM2 a
  • DPM++ 2S a
  • DPM++ 2S a Karras

他们就是祖先采样器。祖先采样器会在每个采样步对图像添加噪声。祖先采样器都是随机(stochastic)采样器,因为他们的采样结果具有随机性。但是,注意也有其他的名字中不带 a 随机采样器。

祖先采样器有一个缺点,就是其采样结果图片不会收敛。以下是 Euler 和 Euler a 的采样过程对比:

采样器 Euler 采样结果收敛 Euler a 采样结果不收敛
采样过程实例 全面理解Stable Diffusion采样器,stable diffusion 全面理解Stable Diffusion采样器,stable diffusion

可以看到,Euler a 的采样结果不收敛,而 Euler 的采样结果收敛得很好。考虑到可复现性,我们通常更喜欢可以收敛的结果。当然,如果想要稍微有些变化,可以使用 variational seed。

Karras noise schedule

名字中带有 Karras 的采样器,是使用了 Karras 的论文中推荐的 noise schedule。如果仔细观察可以发现,Karras 推荐的 noise schedule 中,接近终点附近的的几步值会更小,他们发现这种策略会有更好的生图质量。

全面理解Stable Diffusion采样器,stable diffusion

默认noise schedule与Karras noise schedule的对比

DDIM和PLMS

DDIM (Denoising Diffusion Implicit Model) 和 PLMS (Pseudo Linear Multi-Step method) 是 SDv1 带的两种采样器。DDIM 是第一批转为扩散模型设计的采样器之一,而 PLMS 是 DDIM 更新、更快的版本。

这两种采样器现在看来已经有些过时了,一般不再广泛使用。

DPM和DPM++

DPM (Diffusion probabilistic model solver) and DPM++ 是一系列发布于 2022 年的新型扩散模型采样器。他们代表了一些具有类似结构的求解器。

DPM 和 DPM2 很类似,但是 DPM2 是二阶的,更准确但是更慢。

DPM++ 是 DPM 的优化版本。

DPM adaptive 可以自适应地调整每一步的值。它可能会非常慢,因为他并不确保扩散过程在某个确定的采样步数内能完成。

UniPC

UniPC (Unified Predictor-Corrector) 是一种发布于 2023 年的新型采样器。灵感来自于 ODE 求解器中的 predictor-corrector 方法,可以在 5-10 步采样出高质量的图片。

k-diffusion

最后,你可能听说过 k-diffusion 并好奇这是什么东西。它其实就是指 Katherine Crowson 的 GitHub 仓库: k-diffusion,该仓库实现了 Karras 论文中提到的诸多采样器。

实际上,SD webui 中除了 DDIM、PLMS 和 UniPC 外的其他所有采样器都是使用的 k-diffusion 仓库的实现。

评估采样器

如何选择采样器?本节将会进行一些客观的对比,来帮助你选择。

Image Convergence

本小节将会使用不同的采样器生成相同的图片,最大采样步数为 40。在第 40 步的最后一张图片将作为参考,来评估采样器收敛的速度。Euler 将作为参照。

Euler, DDIM, PLMS, LMS Karras and Heun

首先我们看一下 Euler, DDIM, PLMS, LMS Karras and Heun 这几个采样器,他们是老式的 ODE 求解器或者是扩散模型原始的求解器。

可以看到,DDIM 与 Euler 的收敛步数差不多,但是变动更大,这是因为 DDIM 会在采样步中注入随机噪声。

PLMS 在本次测试中表现不佳,收敛性最差。

Heun 收敛得很快,但采样速度实际要慢两倍,因为它是一种二阶的方法。所以我们应该对比 Heun 第 30 步的结果与 Euler 第 15 步的基准结果。

全面理解Stable Diffusion采样器,stable diffusion

Euler, DDIM, PLMS, LMS Karras and Heun 采样结果收敛性对比 (越低越好)

Ancestral Samplers

如果你的目标是产生稳定、可复现的采样结果,那么你不应该使用祖先采样器。因为他们都带有随机性,且不会收敛。

全面理解Stable Diffusion采样器,stable diffusion

祖先采样器均无法收敛

DPM and DPM2

在 DPM 系列采样器中,DPM fast 无法很好地收敛,DPM2 和 DPM2 Karras 的收敛性看起来比 Euler 要好,但别忘了,它们也是二阶的方法,速度要慢两倍。

DPM adaptive 看起来很好,但他是用的自己的自适应步数,实际可能非常慢。

全面理解Stable Diffusion采样器,stable diffusion

DPM++ Solvers

DPM++ SDE 和 DPM++ SDE Karras 与祖先采样器有相同的问题,他们不仅不收敛,而且随着步数的变化,图片质量也会波动。

DPM++ 2M and DPM++ 2M Karras 收敛性不错。 在步数足够大时,Karras 的策略会收敛得很快。

全面理解Stable Diffusion采样器,stable diffusion

UniPC

UniPC 收敛得比 Euler 稍慢,但也还不错。

全面理解Stable Diffusion采样器,stable diffusion

Speed

虽然前面看到,DPM adaptive 收敛性很不错,但速度这里可以明显看到他是最慢的。

除了 DPM adaptive 外,可以看到剩下的采样器分为了两组。分别差不多是一倍时间和两倍时间。这反映出的是求解器的阶次,一阶求解器更快,二阶求解器更准确,但是速度要慢两倍,因为需要过两遍去噪 UNet 模型。

全面理解Stable Diffusion采样器,stable diffusion

Quality

当然,如果生成图片的质量看起来很矬,收敛性和速度都没有意义。以下是不同采样器结果的对比:

采样器 采样结果
Euler、Heun、DDIM 全面理解Stable Diffusion采样器,stable diffusion
PLMS、LMS Karras、Euler a 全面理解Stable Diffusion采样器,stable diffusion
DPM2、DPM2 a、DPM2 a Karras 全面理解Stable Diffusion采样器,stable diffusion
DPM2 Karras、DPM++ 2M Karras、DPM++ 2S a Karras 全面理解Stable Diffusion采样器,stable diffusion
DPM++ 2S a、DPM++ adaptive、DPM++ fast 全面理解Stable Diffusion采样器,stable diffusion
DPM++ SDE、Karras、DPM++ SDE、UniPC 全面理解Stable Diffusion采样器,stable diffusion

从结果来看,DPM++ fast 是明显质量稍差的。另外,各个祖先采样器没有收敛到其他采样器收敛的结果。祖先采样器收到一致 kitten,而其他采样器收敛到一只 cat。

生成结果的主观感知这里没有明显的哪个比哪个好,自己看着好就行。

Perceptual Quality

即使没有收敛,生成图像的质量也可能已经不错了。这节我们看一下各个采样器需要多少步能够得到高质量的生成结果。

这里我们采用的指标是 BRISQUE (Blind/Referenceless Image Spatial Quality Evaluator),它反映了自然图像的质量,数值越低,图像质量越高。

在第一组中,DDIM 这里表现得出乎意料的好,只需要 8 步,就生成了质量最高的图像。

全面理解Stable Diffusion采样器,stable diffusion

第二组对比的是祖先采样器的结果,除了一两个例外之外,大多数祖先采样器的质量与 Euler类似。

全面理解Stable Diffusion采样器,stable diffusion

DPM2 采样器系列比 Euler 稍好。

全面理解Stable Diffusion采样器,stable diffusion

在本节的生成质量对比中,DPM++ SDE and DPM++ SDE Karras 的表现最好。

全面理解Stable Diffusion采样器,stable diffusion

UniPC 在小步数时比 Euler 稍差,在大步数时差不多。

全面理解Stable Diffusion采样器,stable diffusion

So … which one is the best

在对比了各个采样器在多个维度的表现之后,推荐如下:

  1. 如果想要速度快、收敛性好、质量也不错,且想试试新东西的话,最好选择:
    • DPM++ 2M Karras、20-30 步
    • UniPC、20-30 步
  2. 如果想要比较好的质量,同时不在意是否收敛的话,可以选择:
    • DPM++ SDE Karras、10-15 步 (注意该采样器比较慢)
    • DDIM、10-15 步
  3. 如果想要稳定、可复现的结果,不要用任何带有随机性的采样器,比如祖先采样器
  4. 如果想生成一些简单的结果,可以用 Euler 或 Heun。在使用 Heun 时,可以调低一些步数来节省时间。

采样器简介

SD webui 中有各种采样器的相关信息。这些采样器的内部工作原理需要大量数学知识来理解。这里将详细解释一下最简单的 Euler,简略介绍其他采样器,它们也与 Euler 有许多共通点、

Euler

Euler 可能是最直接的采样器,其数学本质就是用于解决常微分方程的欧拉方法。Euler 采样器是完全确定的,也就是说,在采样过程中不会引入任何的随机噪声。

以下是逐步拆解采样过程:

  1. 第一步:在隐层空间中,噪声预测器估计出图像中的噪声
  2. 第二步:根据 noise schedule,计算出需要被减掉的噪声系数,这在每一步是不同的
  3. 第三步:将第一步的噪声与第二步的系数乘起来,从隐层图片中减掉的该噪声量

重复上述步骤,直到 noise schedule 结束。

但是我们怎么知道每一步的噪声系数应该是多少呢?实际上,这就是我们需要告诉采样器的 noise schedule。

noise schedule 告诉采样器每一步的噪声应该是多少。噪声预测器根据应该存在的噪声总量来估计隐层图像中的噪声。

全面理解Stable Diffusion采样器,stable diffusion

在第一步的噪声量是最高的,然后噪声会随着步数的增加不断降低,直到在最后一步降至 0。改变采样步数,就会对应的改变 noise schedule。比如我们增大采样步数,那么每一步噪声下降的会更少,这有助于减少采样过程中的截断误差。

为什么确定性的 ODE 求解器能够求解随机采样问题呢?这称为概率流(probability flow),我们不是解决样本如何演化(evolve),而是解决其概率分布的演化。也就是说,求解随机过程中的概率分布而不是样本轨迹。

与漂移过程(drift process)对照,ODE 求解器的对应关系如下:

  • Time → noise
  • Time quantization → noise schedule
  • Position → latent image
  • Velocity → Predicted noise
  • Initial position → Initial random latent image
  • Final position → Final clear latent image

采样示例

下面是使用 Euler 采样进行文生图的一个示例。noise schedule 指示了每一步中的噪声强度。采样器的工作就是在每一步中,根据 noise schedule 的设定,和 UNet 噪声预测网络的输出,从噪声图中减掉适量的噪声,直到最终噪声为 0。

全面理解Stable Diffusion采样器,stable diffusion

Euler a

Euler ancestral (Euler a) 采样器与 Euler 采样器类似。区别在于,Euler a 会在每一步减掉更多的噪声,然后它会在采样一些随机噪声加回到噪声图中,这样与 noise schedule 中设定的噪声强度匹配。Euler a 中的去噪图与之前的步数中加入了什么样的噪声有关,因此它被称为祖先采样器(ancestral sampler )。由于在过程中加入了额外的噪声,所以祖先采样器两次的采样结果会是不同的。

DDIM

Denoising Diffusion Implicit Models (DDIM) 是最先被提出的扩散模型采样器之一。它的核心想法是每一步的图片可以通过添加以下三个东西来近似:

  1. 最终的图片
  2. 图像方向指向当前步骤的图像
  3. 随机噪声

可是在抵达最后一步之前,我们怎么知道最终的图片呢?DDIM 采样器是使用去噪图片来对最终图片进行估计。类似的,图片的方向也是通过噪声预测器预测出的噪声来近似。

LMS and LMS Karras

与 Euler 方法类似,linear multistep method (LMS) 方法也是用于解决 ODE 的一种标准方法。他通过巧妙利用之前时间步的值来提升准确度。SD webui 默认使用至多前 4 步的值。

LMS Karras 使用了 Karras 的 noise schedule。

Heun

Heun’s method 比 Euler 方法更准确,但是它在每步需要预测两次噪声,所以它比 Euler 慢两倍。

DPM Solvers

Diffusion Probabilistic Model Solvers (DPM-Solvers) 是一系列新提出的扩散模型求解器。在 SD webui 中,包含以下几种:DPM2,DPM2 Karras,DPM2 a,DPM2 a Karras,DPM Fast,DPM adaptive,DPM Karras。

DPM2 就是 DPM-Solver 论文中的 DPM-Solver-2 (Algorithm 1),是一种精确到二阶求解器。

DPM2 Karras 和 DPM2 基本相同,但是使用了 Karras 的 noise schedule。

DPM2 a 也与 DPM2 基本相同,但是作为一种祖先采样器,它在每一步添加了额外的噪声。

DPM2 a Karras 是在 DPM2 a 的基础上再使用了 Karras 的 noise schedule。

DPM Fast 的 noise schedule 是均匀的。它精确到一阶,比 DPM2 系列快两倍。

DPM adaptive 也是一阶的 DPM Solver,其 noise schedule 是自适应的,它会无视我们设置的去噪步数,并自适应地自行决定步数。

DPM++ 采样器是 DPM 的优化版本。

UniPC

UniPC (Unified Predictor Corrector method) 是 2023 年新提出的一种采样器。它包含两部分:

  • Unified predictor (UniP)
  • Unified corrector (UniC)

它支持任何求解器,任何噪声预测器。文章来源地址https://www.toymoban.com/news/detail-761635.html

延伸阅读

  • k-diffusion GitHub page – Katherine Crowson 的 diffusion 库. 许多 SD webui 中的采样器就是使用的这个库中的实现
  • Elucidating the Design Space of Diffusion-Based Generative Models (Karras 2022) – k-diffusion 中实现的采样器就是根据该论文的描述
  • Progressive Distillation for Fast Sampling of Diffusion Models – Fast sampling progressive distillation can generate images in as few as 4 steps. It needs model-level training.
  • Pseudo Numerical Methods for Diffusion Models on Manifolds (Liu 2022) – PLMS 论文.
  • DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps (Lu 2022) – DPM 和 DPM2 求解器论文.
  • DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models (Lu 2022) – DPM++ 求解器论文.
  • Denoising Diffusion Implicit Models (Song 2020) – DDIM 论文.
  • Score-based generative modeling through stochastic differential equations (Song 2020) – 提出 reverse diffusion. 我们现在能使用 ODE 求解器就是由于作者在该论文中提出的替代概率流公式。
  • Pseudo Numerical Methods for Diffusion Models on Manifolds (Liu 2022) – PLMS 采样器论文.
  • 这个 Reddit 评论 对采样器进行了很好的总结

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

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

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

相关文章

  • 使用WebDriver采样器将JMeter与Selenium集成

    第一步: 在JMeter中添加Selenium / WebDriver插件 第二步: 创建一条测试计划–添加线程组 添加配置元素 - jp@gc - WebDriver Sampler 添加配置元素 - jp@gc - Chrome Driver Config 并且添加监听器查看结果树 第三步: 下载 chromedriver.exe 如上图所示在 Chrome Driver Config 中Path to Chrome Driver 位置填写

    2024年02月11日
    浏览(22)
  • VR渲染器怎么用之自适应图像采样器,可解决渲染黑图问题

    大家好,相信刚接触到vr渲染器时,会vr的图像采样器感到迷茫,如何使用图像采样器?图像采样器有何用呢? 今天便为大家讲解vr中的自适应DMC图像采样器的运用。 说明:高版本渲染器中的 渲染块 整合了原有的“固定”“自适应”和“自适应采样”三种模式于一体,通过“

    2024年02月04日
    浏览(50)
  • R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...

    指数分布是泊松过程中事件之间时间的概率分布,因此它用于预测到下一个事件的等待时间,例如,您需要在公共汽车站等待的时间,直到下一班车到了 ( 点击文末“阅读原文”获取完整 代码数据 )。 相关视频 在本文中,我们将使用指数分布,假设它的参数 λ ,即事件之

    2024年02月09日
    浏览(31)
  • 【扩散模型】万字长文全面理解与应用Stable Diffusion

    Stable Diffusion是一个强大的文本条件隐式扩散模型(text-conditioned latent diffusion model),它具有根据文字描述生成精美图片的能力。它不仅是一个完全开源的模型(代码,数据,模型全部开源),而且是它的参数量只有 1B 左右,大部分人可以在普通的显卡上进行推理甚至精调模

    2024年01月22日
    浏览(80)
  • Stable Diffusion中不同的采样方法

            在 Stable Diffusion 模型中,采样方法是从学习到的概率分布中生成图像的算法。采样方法影响生成图像的质量、样式、速度以及过程的控制程度。以下是一些采样方法的概述和它们对图像生成可能产生的影响: DPM++系列 DPM++ 2M / 3M : 这些是扩展的扩散概率模型,其中数

    2024年01月21日
    浏览(24)
  • AI 绘画Stable Diffusion 研究(八)sd采样方法详解

    大家好,我是风雨无阻。 本期内容: 什么是采样方法 ? 采样方法的分类有哪些? 怎么选择合适的采样方法? 在 Stable Diffusion中目前已经有很多采样方法 ,不同的采样方法,出图效果不同。这里将详细介绍这些采样方法,以及在使用 Stable Diffusion 的过程中,怎么选择合适的

    2024年02月12日
    浏览(41)
  • stable diffusion插件controlnet1.1全面升级,大幅提高出图质量

    哈喽,各位小伙伴们大家好,有一段时间没更新了,最近的AI绘画圈呀,可谓是一天一个黑科技。这不,最近controlnet插件更新了,我也是马上就下载下来用了一下。 好家伙,不用不知道啊,一用吓一跳。废话不多说,直接上才艺,这是我用最新的版本,也就是controlnet1.1版本

    2024年02月16日
    浏览(85)
  • 当下最强的 AI art 生成模型 Stable Diffusion 最全面介绍

    目录 模型生成效果展示(prompt 全公开) 如何注册 Stable Diffusion 使用 SD(dreamstudio.ai )的收费标注如何 SD 提供哪些参数可以设置 如何使用种子来改进一张作品 我用 SD 创作的图片著作权如何归属,可以拿来商用吗? Stable Diffusion 背后的研发团队 SD 是如何训练出来的? SD 是开

    2024年02月03日
    浏览(40)
  • AI绘画:使用Stable Diffusion ComfyUI进行换脸:IPAdapter FaceID全面教程

            在数字艺术和媒体编辑领域,换脸技术已经成为一种流行且强大的工具。它允许创作者将一个人物的面部特征无缝地转移到另一个人物上,创造出令人信服的视觉作品。Stable Diffusion ComfyUI提供了一个高效的平台,让用户能够轻松地实现换脸。本文将详细介绍如何使用

    2024年04月09日
    浏览(128)
  • 通俗理解DDPM到Stable Diffusion原理

    🤗关注公众号 funNLPer 畅度阅读🤗 代码1:stabel diffusion 代码库 代码2:diffusers 代码库 论文:High-Resolution Image Synthesis with Latent Diffusion Models 模型权重:runwayml/stable-diffusion-v1-5

    2024年02月11日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包