当前位置: 首页 > 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…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...