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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/96428.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11并发与多线程笔记(10) future其他成员函数、shared_future、atomic

C11并发与多线程笔记(10) future其他成员函数、shared_future、atomic 1、std::future 的成员函数1.1 std::future_status 2、std::shared_future:也是个类模板3、std::atomic原子操作3.1 原子操作概念引出范例:3.2 基本的std::at…

LangChain手记 Chains

整理并翻译自DeepLearning.AILangChain的官方课程:Chains(源代码可见) Chains 直译链,表达的意思更像是对话链,对话链的背后是思维链 LLM Chain(LLM链) 首先介绍了一个最简单的例子&#xff0c…

Blender 混合现实3D模型制作指南【XR】

本教程分步展示如何: 减少 3D 模型的多边形数量,使其满足 Microsoft Dynamics 365 Guides 和使用 Microsoft Power Apps 创建的应用程序中包含的混合现实组件的特定性能目标的性能需求。将 3D 模型的多种材质(颜色)组合成可应用于…

react-vite-antd环境下新建项目

vite 创建一个react项目 1. 安装vite并创建一个react项目1. 我使用的 yarn安装,基本配置项目名字, 框架react ,js2. cd vite-react进入项目目录安装node包并启动项目 2. 安装引入Ant Design引入依赖(我用的yarn,没有安装的也可以使…

C++之atomic_load与atomic_store原子操作实例(一百八十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

QGraphicsView 实例3地图浏览器

主要介绍Graphics View框架&#xff0c;实现地图的浏览、放大、缩小&#xff0c;以及显示各个位置的视图、场景和地图坐标 效果图: mapwidget.h #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QLabel> #include <QMouseEvent> #include <QGraphicsView&…

2021年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&#xff…

android resoure资源图片颜色值错乱

最近androidstudio开发&#xff0c;添加一些颜色值或者drawable资源文件时&#xff0c;运行app,颜色值或者图片对应不上&#xff0c;暂时找不到原因&#xff0c;望告知。 暂时解决方法&#xff1a;

32.Netty源码之服务端如何处理客户端新建连接

highlight: arduino-light 服务端如何处理客户端新建连接 Netty 服务端完全启动后&#xff0c;就可以对外工作了。接下来 Netty 服务端是如何处理客户端新建连接的呢&#xff1f; 主要分为四步&#xff1a; md Boss NioEventLoop 线程轮询客户端新连接 OP_ACCEPT 事件&#xff…

Azure创建自定义VM镜像

创建一个虚拟机&#xff0c;参考 https://blog.csdn.net/m0_48468018/article/details/132267096&#xff0c;入站端口开启80&#xff0c;22 进行远程远程连接 使用CLI命令部署NGINX,输入如下命令 sudo su apt-get update -y apt-get install nginx git -y最后的效果 4. 关闭…

RocketMQ部署 Linux方式和Docker方式

一、Linux部署 准备一台Linux机器&#xff0c;部署单master rocketmq节点 系统ip角色模式CENTOS10.4.7.126Nameserver,brokerMaster 1. 配置JDK rocketmq运行需要依赖jdk&#xff0c;安装步骤略。 2. 下载和配置 从官网下载安装包 https://rocketmq.apache.org/zh/downlo…

Docker碎碎念

docker和虚拟机的区别 虚拟机&#xff08;VM&#xff09;是通过在物理硬件上运行一个完整的操作系统来实现的。 每个虚拟机都有自己的内核、设备驱动程序和用户空间&#xff0c;它们是相互独立且完全隔离的。 虚拟机可以在不同的物理服务器之间迁移&#xff0c;因为它们是以整…

【C++ 记忆站】引用

文章目录 一、引用概念二、引用特性1、引用在定义时必须初始化2、一个变量可以有多个引用3、引用一旦引用一个实体&#xff0c;再不能引用其他实体 三、常引用四、使用场景1、做参数1、输出型参数2、大对象传参 2、做返回值1、传值返回2、传引用返回 五、传值、传引用效率比较六…

服务器数据恢复-EqualLogic存储RAID5数据恢复案例

服务器数据恢复环境&#xff1a; 一台DELL EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。存储存放虚拟机文件&#xff0c;采用VMFS文件系统&#xff0c;划分了4个lun。 服务器故障&检测&分析&#xff1a; 存储设备上有两个硬盘指示灯显示黄色&#xff0c;存储…

虫情测报灯

在农业生产过程中&#xff0c;农作物的虫害问题永远都是放在首位的。随着现代生活科技的发展和社会进步&#xff0c;人们对物质也有了新的要求。伴随农作物品种的增加&#xff0c;农药和化肥的使用也在导致农业虫害问题日益加剧&#xff0c;在这种不良的耕作状态下&#xff0c;…

Vue初识别--环境搭建--前置配置过程

问题一&#xff1a; 在浏览器上的扩展程序上添加了vue-devtools后不生效&#xff1a; 解决方式&#xff1a;打开刚加入的扩展工具Vue.js devtools的允许访问文件地址设置 问题二&#xff1a;Vue新建一个项目 创建一个空文件夹hrsone&#xff0c;然后在VSCode中打开这个空文件夹…

HCIP第五节------------------------------------------ospf

一、OSPF基础 1、动态路由分类 2、距离矢量协议 运行距离矢量路由协议的路由器周期性地泛洪自己的路由表。通过路由的交互&#xff0c;每台路由器都从相邻的路由器学习到路由&#xff0c;并且加载进自己的路由表中&#xff0c;然后再通告给其他相邻路由器。 对于网络中的所有…

Docker:Windows container和Linux container

点击"Switch to Windows containers"菜单时&#xff1a; 提示 然后 实际上是运行&#xff1a;com.docker.admin.exe start-service

七夕特辑——3D爱心(可监听鼠标移动)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

sql面试题

user登陆表数据如下&#xff0c;求出连续登录3天及以上的用户 方法1&#xff1a;排序&#xff0c;dt列求出本行和前面第2行的日期差&#xff0c;等于2则三天连续 SELECT DISTINCT uid FROM (SELECT uid,dt,lag(dt,2) over(PARTITION BY uid ORDER BY dt) AS lag_dt FROM USER…