Stable Diffusio——采样方法使用与原理详解
简介
当使用稳定扩散(Stable Diffusion)技术生成图像时,首先会生成一张带有噪声的图像。然后,通过一系列步骤逐渐去除图像中的噪声,这个过程类似于从一块毛坯的白色大理石开始,经过多日的精细雕刻,最终雕塑出一尊如米开朗基罗的大卫般的精美雕像。
在这个过程中,涉及到几种不同的算法。首先是“采样器”(sampler)算法,它从使用的模型中获取样本,并将噪声预测器估算出的噪声应用于这些样本。接着,算法从正在处理的图像中减去这些带噪声的样本,就像每一次雕刻都在精雕细琢地塑造大理石一样。
采样器算法负责控制去噪的具体操作,而另一个名为“噪声调度器”(noise scheduler)的算法则负责调节去噪的程度,决定每一步去除多少噪声,以确保整个过程高效又精准。
若噪声减少是线性的,则在图像处理的每一步中,变化程度都将是相同的,可能导致图像出现突兀的变化。使用斜率为负的噪声调度器可以在初期快速去除大量噪声,加速整个过程,然后逐渐减少去噪量,以精细调整图像的小细节。
若继续以大理石雕刻为比喻,在雕刻的初期,使用较大力度快速敲除大块部分是有益的,可加快雕塑的整体进展。而在雕塑的末期,需要极其细致和谨慎地处理,精确雕琢出细节,以防雕塑出现破损。
收敛性是这个过程中的关键要素。当采样算法达到某个阶段,继续进行更多步骤不再改善结果时,则认为图像已经达到了收敛状态。
有些算法能够快速收敛,适用于快速验证创意和想法。其他一些算法可能需要更长时间或更多步骤才能收敛,但通常能提供更高质量的结果。还有一些算法因为没有设定极限,永远不会收敛,为创新和创造性提供更多空间。

采样器
DDPM
DDPM(Diffusion Probabilistic Models)是最早期的采样器之一,它使用明确的概率模型来消除图像中的噪声。然而,这种方法需要执行大量的处理步骤才能获得满意的结果。但现在很多算法都以不再提供这个采样器了。
DDIM
DDIM采用的是隐式概率模型。与DDPM相比,DDIM能够通过更少的处理步骤取得更佳的效果,使其成为一个更高效快速的采样器,同时基本保持图像质量。
隐式概率模型的优势在于它们通常更加灵活和高效,能够以更少的步骤生成高质量的图像。相比之下,明确概率模型(如DDPM)可能需要更多的处理步骤来达到相似的效果。这种改进使得DDIM成为一个更具吸引力的选择,特别是在需要快速生成高质量图像的情况下。
虽然DDIM在性能和效率方面表现出色,但它仍然建立在隐式概率模型的基础上,这意味着它可能具有一些独特的特性和限制。DDIM为稳定扩散技术提供了一个更快速、高效的采样器选项,同时保持了图像质量。
PLMS
与DDIM不同,它不能通过较少的步骤清除噪声。然而,在进行了50到100个步骤之后,PLMS已经能够提供良好的结果。
虽然PLMS可能需要更多的处理步骤来达到满意的效果,但一旦执行了足够数量的步骤,它仍然能够产生高质量的图像。这种方法可能更适合那些能够容忍稍长处理时间的应用场景,或者需要更高质量图像输出的情况。
PLMS虽然不能通过较少的步骤来清除噪声,但在执行足够的步骤后,仍然能够提供良好的结果,这使得它在某些情况下仍然是一个有用的采样器选项。
Euler
Euler方法是一种简单直接的采样器,基于普通微分方程(ODE)。它的特点是在每一步处理中都以固定的比例逐渐减少噪声。尽管在精确度上可能存在一些不足,但由于其简单性和快速处理速度,Euler方法被广泛应用。
简单来说,Euler方法通过在每一步处理中以固定的步长向前推进系统状态来逼近微分方程的解。在稳定扩散技术中,这意味着在每一步中以固定的比例减少噪声,直到达到所需的图像质量水平。
尽管Euler方法可能不如其他更复杂的算法在处理质量方面表现得那么优秀,但由于其快速处理速度,它仍然是许多应用中首选的采样器之一。特别是在需要迅速生成图像或者对计算资源有限的情况下,Euler方法可以提供一种简单而有效的解决方案。
Euler算法非常快速,即使在较少的步数内也能够得出良好的结果。其优势在处理30到50步之间尤为明显。
Heun
Heun方法可以被视为对Euler方法的一个更精细的改进。与Euler方法仅使用线性近似不同,Heun方法在每个处理步骤中执行两个任务,因此被称为二阶采样器。它首先使用线性近似做出一个预测,然后通过非线性近似进行校正。这种方法在提高精确度的同时也确保了更高的图像质量。
Heun方法的精确度得到了提升,但这种改进也带来了一个小代价:处理时间大约是Euler方法的两倍。虽然处理时间增加了,但相对于其提供的更高的图像质量和更精确的结果,这种额外的计算成本通常是可以接受的。
Heun方法通过在每个处理步骤中执行预测和校正两个步骤来提高精确度,从而确保了更高的图像质量。虽然处理时间比Euler方法长,但对于那些需要更高精度的应用场景,Heun方法提供了一个更为可靠的选择。
在10个步骤中仍然可能存在一些噪点,但随着步数的增加,这些噪点会逐渐消失。在30个步骤中,Heun方法提供了高质量的图像,尽管在50个步骤中会提供更多细节层次。然而,在100个步骤中,图像几乎不会改变,因此等待结果可能不值得。
LMS
LMS(Locally-Meaningful Sampling)可以被视为PLMS的一个变种,区别在于LMS使用的是数值方法,而非PLMS中的概率方法(从PLMS中去掉概率因素“P”就得到了LMS)。
与Euler和Heun不同的是,LMS方法会利用前几个步骤中的信息来在每一步减少噪声。这样的处理方式虽然提高了图像的精度,但相应地也增加了计算需求,导致处理速度较慢。
使用几个步骤,可以得到一个能够生成模仿药物效果的迷幻图像的采样器。这是一个不值得的采样器,因为尽管速度很快,但需要大约100个步骤才能提供一些体面的东西。
DPM 模型家族
DPM(Diffusion Probability Model)是一种概率模型,它在DDPM的基础上做了一系列改进。DPM2可以被看作是DPM的升级版,它在原有模型的基础上进行了进一步的改良和优化。使用10个步骤,就可以得到令人印象深刻的图像质量(不要尝试5个步骤,结果可能不尽如人意)。大约30到50个步骤是理想的。通常情况下,增加更多的步骤并不一定值得。
另一个基于DPM的改进版本是DPM++。DPM++采用了一种混合方法,结合了确定性和概率方法进行采样以及后续的噪声减少。在Automatic1111中,并没有单独实现这个采样器,而是将它与其他方法相结合。具体的结合方式和效果,我们将在下一部分详细探讨。
因此,DPM衍生出了两个重要的改进版本:DPM2和DPM++,每个都具有其独特的特点和优势。
更快的 DPM 模型(DPM-Solver 和 UniPC)
扩散概率模型(DPM)是基于概率原理的一种方法,与确定性数值方法如Euler、Heun或LMS等不同。它在每一步中使用近似方法来处理问题,以实现尽可能准确的采样。
在这些模型中,求解器是一个关键组成部分,它在计算和近似采样的概率分布过程中起着至关重要的作用。DPM-Solver 是一种新技术,在每一步的采样过程中有效地减少了时间。
一些版本的 DPM,如 DPM fast 或 DPM++ 2S/DPM++ 2M,采用了更快速的求解器,因此在采样过程中节省了时间。它们可能会很快(虽然不是非常快),但当使用少量步骤时,它们可能无法提供令人满意的结果。有趣的是,它们提供了与其他采样器不同的结果,并且在电影效果方面更加明显。
在 DPM++ 2S/DPM++ 2M 中,“2”表示它们是二阶模型,结合了预测器和校正器两种机制,以更精确地逼近最终结果。在这两种模式下,DPM++ 2S 和 DPM++ 2M 的求解器比标准 DPM 模型求解器运行得更快。
UniPC 是一个由统一预测器(UniP)和统一校正器(UniC)组成的求解器。它的目标是在尽可能少的步骤中达到最高的采样质量。UniPC 可以与任何 DPM 模型集成,甚至在几个步骤内生成高质量的图像。
因此,无论是单步骤还是多步骤的 DPM 模型,UniPC 都能够与之媲美,并在效率上提供更优秀的结果。 UniC 校正器也可以与这些采样算法集成,进一步提高采样效率。
在一些例子中,10步是不足以生成没有噪点的图像的,但在15或20步之后可能会得到。在30步时,图像质量非常出色,不再需要继续增加步骤,尽管仍然存在改进的空间。
更准确的DPM模型(自适应)
DPM自适应模型是对标准DPM模型的一种扩展,其主要特点是能够根据问题的难度自动调整处理步骤的大小。
具体而言,这意味着算法会自动调整采样步骤的数量,直到达到最优的收敛效果,而不是依赖于预设的步骤数量。这种方法可以生成更高质量的图像,但可能需要相对较长的时间来完成(它是所有采样器中速度最慢的一个)。
在这种情况下,与其他采样器相比,所需时间可能是其三倍或四倍,但最终的结果却是令人惊叹的。图像构图与所有其他采样器都不同,并且更像是DPM fast。
采样器选择与总结
初始采样器的变体
当一个采样器包含字母“A”,通常表示该采样器属于“祖先”变体类别。这类变体的特点是,在每个新的处理步骤中,它们会添加之前步骤中产生的随机变量。可以想象成,在每个步骤清除噪声之后,又会有一部分先前的噪声被重新引入。
由于每一步都会增加新的随机噪声,带有这一特性的采样器永远不会达到收敛状态。如果总有新噪声需要处理,就总能继续进行下一步。
这使得这些采样器具有更高的创造性。增加额外的处理步骤并不一定会提高图像质量,而是可能产生另一种类似的结果。
如果你在尝试复现使用Stable Diffusion生成的图像时失败了,即使你使用了相同的种子和参数,那可能是因为使用了一个祖先采样器。这是正常现象!因为每一步重新加入的噪声都是随机的,不同的实现或采样器版本几乎肯定会产生不同的结果。
Karras 变体
含有“Karras”(或简写为“K”)字样的变体,是指由 Nvidia 工程师 Tero Karras 所领导的一系列工作。这项工作为某些采样器带来了重要的改进,旨在提高输出质量和采样过程中计算效率。
采用了这些改进的采样器包括:LMS Karras、DPM2 Karras、DPM2 A Karras、DPM++ 2S A Karras、DPM++ 2M Karras 和 DPM++ SDE Karras 等。这些采样器利用了 Karras 的创新技术,以提升其整体性能和效率。
像DPM++ 2M一样,这个采样器在30到50步之间提供非常好的结果,但是Karras版本具有在较少的步骤中提供更好结果的优势。
Stochastic 变体
SDE(随机微分方程)变体采用了随机微分方程。简而言之,这类微分方程的使用使得噪声的建模方式更为复杂和精确,它能够利用之前步骤中的信息。原则上,这种方法能够生成更高质量的图像,但相应的代价是处理速度较慢。由于采用了随机方法,SDE 变体永远不会达到收敛状态。因此,增加处理步骤的数量并不会提高图像质量,而是会产生更多样化的结果,这一点类似于祖先采样器。
截至本文发表时,我们已经有了几种 SDE 变体,包括 DPM++ SDE、DPM++ 2M SDE、DPM++ SDE Karras 和 DPM++ 2M SDE Karras。
图像质量
如果追求高质量的图像,那么着重考虑达到收敛是至关重要的。这是获得最高图像质量的关键。如果不想牺牲太多生成速度,可以跳过像DDIM这样需要成百上千步才能收敛的采样器。虽然Heun和LMS Karras提供了不错的结果,但使用DPM++ 2M或其Karras版本可能会更好。
如果不关注生成时间,可以尝试DPM自适应或UniPC。使用上述提到的采样器,可以在20-30步内获得良好的结果,尽管尝试更多步骤也无妨。
生成速度
如果只是测试tag,并且不想花太多时间等待结果:
-
DPM++ 2M 或 UniPC:这两种采样器适用于快速测试变化。使用10-15步,就能得到非常体面的图像。
-
Euler A:如果不介意结果的可重复性,并且只是想快速测试变化,Euler A是一个快速且质量不错的祖先采样器。这可能是你的最佳选择!
创造力和灵活性
这部分专门针对祖先和随机采样器。它们既不提供低质量的输出,也不慢,只是有所不同。
这些采样器的特点(或优势,视角而定)是,如果有一个在40步中生成的图像,那么在50步中做出的图像可能会更好或更差。需要不断尝试。而这种不确定性使得这些采样器更具创造性,因为你可以通过改变步骤数量来获得细微变化。
当然,在这里Euler A和DPM++ SDE Karras特别值得一提。尝试在15步、20步、25步等不同步骤下生成图像,并观察结果如何变化。
总结
-
Ancestral (带A的采样器):
- 特点:较为古老,采样随机性高,但无法有效去除噪点。
- 缺点:关键词识别可能不如其他采样器准确。
-
Karas:
- 特点:去噪速度比默认方式快。
- 优势:能够有效去除噪点。
-
DM和PMS:
- 特点:早期采样方式,后续采样器吸收了它们的优点并改进了缺点。
-
T2MS:
- 特点:LMS的升级版,渲染速度更快,更清晰。
-
DPMDM++s de:
- 特点:应用广泛,尤其适用于人物渲染。
- DPM2在关键词识别方面较为准确,但渲染速度较慢。
评价采样器的优劣可以从两个方面考虑:步数和渲染质量。步数越少、图像越清晰则说明采样器效果越好。
例如,对于 d PM fast,它的渲染速度非常快,但需要较多的步数才能呈现出清晰的图像。另一方面,d PM adaptive 则非常强大,仅需少量步数就能渲染出清晰的图像,并且在40步时与之后步数的差异不大。
相关文章:
Stable Diffusio——采样方法使用与原理详解
简介 当使用稳定扩散(Stable Diffusion)技术生成图像时,首先会生成一张带有噪声的图像。然后,通过一系列步骤逐渐去除图像中的噪声,这个过程类似于从一块毛坯的白色大理石开始,经过多日的精细雕刻…...
小米14 ULTRA:重新定义手机摄影的新篇章
引言 随着科技的飞速发展,智能手机已经不仅仅是一个通讯工具,它更是我们生活中的一位全能伙伴。作为科技领域的佼佼者,小米公司再次引领潮流,推出了全新旗舰手机——小米14 ULTRA。这款手机不仅在性能上进行了全面升级&am…...
【leetcode热题】路径总和 II
难度: 中等通过率: 38.7%题目链接:. - 力扣(LeetCode) 题目描述 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: …...
ChatGPT在数据处理中的应用
ChatGPT在数据处理中的应用 今天的这篇文章,让我不断体会AI的强大,愿人类社会在AI的助力下走向更加灿烂辉煌的明天。 扫描下面二维码注册 数据处理是贯穿整个数据分析过程的关键步骤,主要是对数据进行各种操作,以达到最终的…...
微服务-Alibaba微服务nacos实战
1. Nacos配置中心 1.1 微服务为什么需要配置中心 在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此&…...
Linux Driver | 设备树开发之初识设备树
Linux Driver | 设备树开发之初识设备树 时间:2024年2月22日20:35:13 文章目录 **Linux Driver** | 设备树开发之初识设备树参考1.设备树开发2.`Linux`设备树的由来3.`Linux`设备树的由来-为什么会有设备树4.设备树的由来5.快速编译设备树---**DTC** (`device tree compiler`)…...
2月24日(周六)比赛前瞻:曼联 VS 富勒姆、拜仁 VS 莱比锡
大家好,博主将持续更新胜负14场前瞻,此处每日赛事间歇更新,胃信号每日更新。 精选赛事:曼联 VS 富勒姆 曼联近期状态显著提升,上一轮联赛客场2-1战胜卢顿,连续7场正赛取得6胜1平的成绩,保持不败…...
React18源码: task任务调度和时间分片
任务队列管理 调度的目的是为了消费任务,接下来就具体分析任务队列是如何管理与实现的 在 Scheduler.js 中,维护了一个 taskQueue, 任务队列管理就是围绕这个 taskQueue 展开 // Tasks are stored on a min heap var taskQueue - []; var timerQueue …...
【工具类】阿里域名关联ip(python版)
获取代码如下 # codingutf-8import argparse import json import urllib import logging# 加载 ali 核心 SDK from aliyunsdkcore.client import AcsClient from aliyunsdkalidns.request.v20150109 import (DescribeSubDomainRecordsRequest,AddDomainRecordRequest,UpdateDo…...
STM32自学☞输入捕获测频率和占空比案例
本文是通过PA0口输出PWM波,然后通过PA6口捕获PWM波的频率和占空比,最终在oled屏上显示我们自己设置的频率和占空比。由于和前面的pwm呼吸灯代码有重合部分所以本文中的代码由前者修改而来,对于文件命名不要在意。 pwm_led.c文件 /* 编写步…...
[yolov9]使用python部署yolov9的onnx模型
【框架地址】 https://github.com/WongKinYiu/yolov9 【yolov9简介】 在目标检测领域,YOLOv9 实现了一代更比一代强,利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 正式发布一年多以后,YOLOv9 终于来了&a…...
ShellExecute的用法
1、标准用法 ShellExecute函数原型及参数含义如下: function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall; ●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将…...
蓝桥杯:递增三元组
题目 递增三元组(2018年蓝桥杯真题) 题目描述: 给定三个整数数组 A [A1, A2, … AN], B [B1, B2, … BN], C [C1, C2, … CN], 请你统计有多少个三元组(i, j, k) 满足: 1 < i, j, k < N Ai < Bj &…...
目标检测卷王YOLO卷出新高度:YOLOv9问世
论文摘要:如今的深度学习方法重点关注如何设计最合适的目标函数,使得模型的预测结果能够最接近真实情况。 同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。 现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。 本文将深…...
华为---RSTP(二)---RSTP基本配置示例
目录 1. 示例要求 2. 网络拓扑图 3. 配置命令 4. 测试终端连通性 5. RSTP基本配置 5.1 启用STP 5.2 修改生成树协议模式为RSTP 5.3 配置根交换机和次根交换机 5.4 设置边缘端口 6. 指定端口切换为备份端口 7. 测试验证网络 1. 示例要求 为防止网络出现环路…...
【Python笔记-设计模式】装饰器模式
一、说明 装饰器模式是一种结构型设计模式,旨在动态的给一个对象添加额外的职责。 (一) 解决问题 不改变原有对象结构的情况下,动态地给对象添加新的功能或职责,实现透明地对对象进行功能的扩展。 (二) 使用场景 如果用继承来扩展对象行…...
二十八、图像的高斯模糊操作
项目功能实现:对一张图片进行高斯模糊操作 按照之前的博文结构来,这里就不在赘述了 更多的图像模糊操作原理可参考博文:七、模糊操作,里面有详细原理讲解,只不过代码是python写的。 一、头文件 gaussian_blur.h #p…...
开源分子对接程序rDock的安装及使用流程
欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 前言 本文介绍开源分子对接程序rDock在Linux Ubuntu 22.04系统上的conda安装、编译安装过程及程序使用流程。 一、rDock是什么? rDock来源 rDock是一个快速、多功能的开源对接程序,可用…...
【JavaEE】_tomcat的安装与使用
目录 1. Tomcat简介 2. Tomcat安装 2.1 下载Tomcat并解压缩 2.2 启动Tomcat 2.2.1 Tomcat乱码问题 2.2.2 Tomcat闪退问题 2.3 访问Tomcat欢迎页面 3. 使用Tomcat部署前端代码 3.1 路径匹配 3.2 文件路径访问与网络访问 4. 静态页面与动态页面 5. 基于tomcat的网站后…...
实现一个Windows环境一键启停Oracle的bat脚本
Oracle数据库有许多优点,其中一些最重要的包括: 可靠性和稳定性: Oracle数据库经过长期的发展和测试,被广泛认为是非常可靠和稳定的数据库管理系统。它在大型企业和关键业务环境中被广泛应用,能够处理高负载和大规模的数据。 高性能: Oracle数据库具有优化的查询处理器和…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
python数据结构和算法(1)
数据结构和算法简介 数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。 算法:解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想,对于算法而言&a…...
