当前位置: 首页 > news >正文

AI 绘画Stable Diffusion 研究(八)sd采样方法详解


大家好,我是风雨无阻。


本文适合人群:

  • 希望了解stable Diffusion WebUI中提供的Sampler究竟有什么不同,想知道如何选用合适采样器以进一步提高出图质量的朋友。

  • 想要进一步了解AI绘图基本原理的朋友。

  • 对stable diffusion AI绘图感兴趣的朋友。


本期内容:

  • 什么是采样方法 ?
  • 采样方法的分类有哪些?
  • 采样方法详细介绍
  • 哪个采样器最好?我们该如何选择?

在 Stable Diffusion中目前已经有22种 Sampling method 采样方法 ,不同的采样方法对出图效果有不同的影响。今天,我将详细介绍这22种采样方法,以及如何选择合适的采样方法。


在这里插入图片描述


一、什么是采样 ?


在了解采样之前,我们得先了解 一下Stable Diffusion webui 是如何工作的,建议看看我之前的AI 绘画Stable Diffusion 研究(七)sd webui如何工作这篇文章。


我们知道 sd webui 生成图像,大致会经过以下过程:

1、为了生成图像, Stable Diffusion 会在潜在空间中生成一个完全随机的图像

2、噪声预测器会估算图像的噪声

3、噪声预测器从图像中减去预测的噪声

4、这个过程反复重复 N 次以后,会得到一个干净准确的图像

这个去噪的过程,就被称为采样。


Stable Diffusion 在这个去噪过程中,会生成一个新的样本图像。

采样中使用的方法 被称为 Sampling method (采样方法或者是采样器)。


增加采样步骤 Sampling steps 有什么影响呢?

步骤越多,每个步骤降噪越小 。这样可以减少采样过程中的截断误差。

目前Stable Diffusion 中有 22 个采样器可以使用 。


二、采样器的分类

这些采样器有什么区别呢?

为了便于使用和理解,我们可以将这些采样方法进行分类:


(1)、传统的常微分方程求解器(ODE solvers )

包含:Euler \Heun \LMS

这三个方法历史悠久,被认为是最简单,但是不太准确的采样器。


在这里插入图片描述

(2)、祖先采样器 (名称中有一个字母 a 的)

包含 :Euler a \ DPM2 a \DPM++2S a \DPM2 a Karras \DPM++2S a Karras


这些采样器会在每个采样步骤中,向图像添加噪声 ,这些是祖先采样器,因为在采样结果中

具有一定的随机性。

这些采样器的缺点是,图像不会收敛。


在这里插入图片描述


(3)、最初官方采样器 (最初随sd v1版本发布的采样器)

DDIM、PLMS

DDIM 是为扩散模型设计的第一个采样器, PLMS 则是DDIM 更快速的替代品

在这里插入图片描述


(4)、DPM 和 DPM++ 系列

DPM 和 DPM++ 系列 是2022年发布的用于扩散模型的新采样器 ,它们具有相似的结构,但DPM2比DPM 更准确,不过速度较慢。


DPM++ 是对DPM 的改进,可以自适应地调整步长,但可能会很慢,并且不能保证在规定数量的采样步骤内完成。


在这里插入图片描述


在这里插入图片描述


(5)、带有Karras字样的采样器

在这里插入图片描述

在这里插入图片描述


这些采样器使用了噪声时间表 (noise schedule ),控制每个采样步骤中的噪声水平,并随着采样步骤的增加,减少了截断误差。


(6)、UniPC采样器

这UniPC采样器是2023年发布的新采样器,根据 ode 求解器中预测校正方法的启发,可在5-10步内实现高质量图像生成。


在这里插入图片描述


了解了以上采样器的分类,相信大家对选择采样器,已经可以缩小选择的范围了。


三、采样器方法详解


接下来我们根据 Stable Diffusion WebUI 中采样器的顺序,对每个采样器进行详细介绍。


1、Euler a

祖先采样器的一种 , 类似于 Euler ,但在每个步骤中它会减去比“应该”更多的噪声。并添加一些随机噪声以匹配噪声计划。去噪图像取决于前面步骤中添加的特定噪声。


2、Euler

最简单的采样器,在采样过程中不添加随机噪声,通过噪声计划告诉采样器,每个步骤中应该有多少噪声。并使用欧拉方法减少恰当数量的噪声。以匹配噪声计划,直到最后一步为0 为止。


3、LMS 解决常微分方程的标准方法

LMS采样速度与Euler 相同 。


4、Heum

Heum 是对Euler 更精确的改进,但是需要在每个步骤中预测两次噪声。

因此速度比Euler 慢2倍。


5、DPM2

dpm2 是Katherine Crowson在K-diffusion项目中自创的 ,灵感来源Karras论文中的DPM-Solver-2和算法2 ,受采样器设置页面中的 sigma参数影响。


6、DPM2 a

祖先采样器的一种,使用 DPM2 方法 ,受采样器设置中的ETA参数影响 。


7、DPM++2S a

随机采样器一种

在K-diffusion实现的2阶单步并受采样器设置中的ETA参数影响。


8、 DPM++2M

在Kdiffusion实现的2阶多步采样方法,在Hagging face Diffusers中被称作已知最强调度器。在速度和质量的平衡最好。这个代表m的多步比上面的s单步,在采样时会参考更多步,而非当前步,所以能提供更好的质量,但是也更复杂。


9、 DPM++SDE

DPM++的SDE版本,DPM++ 原本是0DE 求解器及常微分方程在Ktifusion实现的版本,代码中调用了随机采样方法,所以受采样器设置中的ETA参数影响。


10、 DPM fast

在Ktifusion实现的固定步长采样方法 ,用于steps小于20的情况。受采样器设置中的ETA参数影响。


11、 DPM adaptive

在K-diffusion 实现的自适应步长采样方法,DPM-Solver-12 和23,受采样器设置中的ETA参数影响。


12、带有Karras字样的6种采样器

LMS karras 、DPM2 karras 、DPM2 a karras 、DPM++ 2S a karras 、DPM++2M karras、DPM++ SDE karras 、DPM++2M SDE karras

这些含有Karras名字的采样方法 都是相当于 Karras噪声时间表的版本。


13 、DDIM

官方采样器之一,使用去噪后的图像来近似最终图像,并使用噪声预测器估计的噪声,来近似图像方向。


14、PLMS

官方采样器之一,PLMS则是DDIM的新版且更快速的替代品。


15、unipc

最新添加的采样器,应该是目前最快最新的采样方法,10步内实现高质量图像。


四、哪个采样器最好?我们该如何选择?


以下是我的建议:

  • 如果想快速生成质量不错的图片,建议选择 DPM++ 2M Karras (20 -30步) 、UNIPC (15-25步)
  • 如果想要高质量的图,不关心重现性,建议选择 DPM++ SDE Karras (10-15步 较慢) ,DDIM(10-15步 较快)
  • 如果想要简单的图,建议选择 Euler,Heun(可以减少步骤以节省时间)
  • 如果想要稳定可重现的图像,请避免选择任何祖先采样器(名字里面带a或SDE)
  • 相反,如果想要每次生成不一样的图像,可以选择不收敛的祖先采样器(名字里面带a或SDE)

相关文章:

AI 绘画Stable Diffusion 研究(八)sd采样方法详解

大家好,我是风雨无阻。 本文适合人群: 希望了解stable Diffusion WebUI中提供的Sampler究竟有什么不同,想知道如何选用合适采样器以进一步提高出图质量的朋友。 想要进一步了解AI绘图基本原理的朋友。 对stable diffusion AI绘图感兴趣的朋…...

线程池满了如何处理

某天搬砖时遇到一个问题,我创建了一个线程池执行任务,刚开始的时候还是一切,结果第二天发现有些任务没有正常执行。一看日志才发现是高峰期时线程池给我占用慢了,任务被丢掉了。 ​ 举个例子,我创建了一个线程池&#…...

Java多线程编程中的线程间通信

Java多线程编程中的线程间通信 基本概念: ​ 线程间通信是多线程编程中的一个重要概念,指的是不同线程之间如何协调和交换信息,以达到共同完成任务的目的。 线程间通信的目的 ​ 是确保多个线程能够按照一定的顺序和规则进行协作&#xff…...

write javaBean error, fastjson version 1.2.76

fastjson JSON.toJSONString 报错: > [0] JavaBeanSerializer.java->541: com.alibaba.fastjson.serializer.JavaBeanSerializer->write()> [1] JavaBeanSerializer.java->154: com.alibaba.fastjson.serializer.JavaBeanSerializer->write()>…...

Tomcat的部署及优化(多实例和动静分离)

目录 绪论 1、tomact 1.1 核心组件 1.2 什么是 servlet 1.3 什么是 JSP? 1.4 Tomcat 功能组件结构 1.5 Tomcat 请求过程 2、Tomcat 服务部署 2.1 tomcat自身优化: 2.2 内核优化 2.3 jvm 2.3.1 jvm配置 2.3.2 Tomcat配置JVM参数 2.3.3 jvm优化 3、tom…...

品牌推广革新之道:海外网红与内容营销的融合

随着数字时代的来临,品牌推广的方式正在经历着革命性的变化。传统的广告手段逐渐失去了吸引力,而内容营销正成为品牌推广的新宠儿。尤其是海外网红的崛起,不仅改变了推广方式,更重新定义了品牌与消费者之间的互动关系。本文Nox聚星…...

【 BERTopic应用 02/3】 分析卡塔尔世界杯推特数据

摄影:Fauzan Saari on Unsplash 一、说明 这是我们对世界杯推特数据分析的第3部分,我们放弃了。我们将对我们的数据进行情绪分析,以了解人们对卡塔尔世界杯的感受。我将在这里介绍的一个功能强大的工具包是Hugging Face,您可以在…...

TypeScript教程(三)变量声明

一、变量声明 变量是一种使用方便的占位符,用于引用计算机内存地址,可以将变量看做存储数据的容器 命名规则: 1.变量名称可以包含数字和字母 2.除了下划线_和美元$符号外,不能包含其他特殊字符,包括空格 3.变量名…...

【数据结构】堆的实现,堆排序以及TOP-K问题

目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1.堆的概念及结构 …...

释放马氏距离的力量:用 Python 探索多元数据分析

一、说明 马哈拉诺比斯距离(Mahalanobis Distance)是一种测量两个概率分布之间距离的方法。它是基于样本协方差矩阵的函数,用于评估两个向量之间的相似程度。Mahalanobis Distance考虑了数据集中各个特征之间的协方差,因此比欧氏距…...

【不限于联想Y9000P电脑关盖再打开时黑屏的解决办法】

不限于联想Y9000P电脑关盖再打开时黑屏的解决办法 问题的前言问题的出现问题拟解决 问题的前言 事情发生在昨天,更新了Win11系统后: 最惹人注目的三处地方就是: 1.可以查看时间的秒数了; 2.右键展示的内容变窄了; 3.按…...

策略模式实战应用

场景 假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现 代码实现 策略模式的核心思想就是对扩展开放,对修改关闭…...

JAVA集合-Map

// 【Map】:双列集合,键值对形式存储,映射关系(kay,value) // 实现:HashMap // 子接口:SortedMap Map的子接口 // 实现类:TreeMap // HashMap // 1。可以插入null // …...

利用Simulink Test进行模型单元测试 - 1

1.搭建用于测试的简单模型 随手搭建了一个demo模型MilTestModel,模型中不带参数 2.创建测试框架 1.模型空白处右击 测试框架 > 为‘MilTestModel’创建 菜单 2.在创建测试框架对话框中,点击OK,对应的测试框架MilTestMode_Harness1就自动…...

深入探讨代理技术:保障网络安全与高效爬虫

1. Socks5代理与IP代理的区别与应用 Socks5代理和IP代理是代理技术中的两个重要方面,它们有着不同的特点和应用场景。Socks5代理是一种协议,支持TCP和UDP流量传输,适用于需要实时数据传输的场景,例如在线游戏或实时通信应用。而I…...

HDMI接口的PCB布局布线要求

高清多媒体接口(High Definition Multimedia Interface),简称:HDMI,是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。随着技术的不断提升,HDMI的传输速率也不断的提升&#…...

Linux tar包安装 Prometheus 和 Grafana(知识点:systemd Unit/重定向)

0. 介绍 用tar包的方式安装 Prometheus 和 Grafana Prometheus:开源的监控方案Grafana:将Prometheus的数据可视化平台 Prometheus已经有了查询功能为什么还需要grafana呢?Prometheus基于promQL这一SQL方言,有一定门槛!Grafana基于浏览器的操作与可视化图表大大降低了理解难…...

【Vue框架】用户和请求

前言 在上一篇 【Vue框架】Vuex状态管理 针对Vuex状态管理以getters.js进行说明,没有对其中state引入的对象进行详细介绍,因为整体都比较简单,也就不对全部做详细介绍了;但其中的user.js涉及到获取用户的信息、前后端请求的token…...

NGINX组件(rewrite)

一、location匹配的规则和优先级(*) URI:统一资源标识符,是一种字符串标识,用于标识抽象的或者是物理资源;如:文件、图片、视频等 nginx中的URI匹配的是:网址”/“后的路径 如&…...

网页显示摄像头数据的方法---基于web video server

1. 背景: 在ros系统中有发布摄像头的相关驱动rgb数据,需求端需要将rgb数据可以直接在网页上去显示。 问题解决: web_video_server功能包,相关链接: web_video_server - ROS Wiki 2. 下载,安装和编译&a…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

xmind转换为markdown

文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...

基于Python的气象数据分析及可视化研究

目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...