AI 绘画Stable Diffusion 研究(八)sd采样方法详解_sd采样方法有什么区别


大家好,我是风雨无阻。


本期内容:

  • 什么是采样方法 ?
  • 采样方法的分类有哪些?
  • 怎么选择合适的采样方法?

在 Stable Diffusion中目前已经有很多采样方法 ,不同的采样方法,出图效果不同。这里将详细介绍这些采样方法,以及在使用 Stable Diffusion 的过程中,怎么选择合适的采样方法。

一、什么是采样方法 ?


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


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

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

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

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

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

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

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


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

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


二、采样方法的分类

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


(1)、经典ODE求解器

包含:Euler \Heun \LMS。

Euler采样器:欧拉采样方法。
Heun采样器:欧拉的一个更准确但是较慢的版本。
LMS采样器:线性多步法,与欧拉采样器速度相仿,但是更准确。


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

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


这些采样器会在每个采样步骤中,向图像添加噪声,因此具有一定的随机性。

注意:部分采样器的名字中虽然没有明确标识属于祖先采样器,但也属于随机采样器。



(3)、DDIM、PLMS(已过时,不再使用)

  • DDIM :去噪扩散隐式模型, 是为扩散模型设计的第一个采样器。
  • PLMS:伪线性多步方法, 则是DDIM 更快速的替代品 。

当前这两种采样方法都不再广泛使用。


(4)、DPM 和 DPM++ 系列

DPM 和 DPM++ 体系结构的求解器系列, 是2022年发布的用于扩散模型的新采样器 ,它们具有相似的结构。

DPM的缺点:由于DPM会自适应调整步长,不能保证在约定的采样步骤内完成任务,整体速度可能会比较慢。

DPM的优点:对Tag的利用率较高,在使用时建议适当放大采样的步骤数以获得较好的效果。


DPM++ 是对DPM 的改进,采用二阶方法,其结果更准确,但是相应的也会更慢一些。




(5)、UniPC采样器

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


(6)、K-diffusion 采样器

当前常用的采样器中,除了DDIM、PLMS与UniPC之外的采样器均来自于k-diffusion, 通常这些采样器都带有 Karras 字样。



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


三、采样器方法详解


接下来我们根据 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)

### 回答1: stm32是一款高性能、低功耗的微控制器,可以用于数据采集和处理。当我们需要将采集到的数据保存到SD卡时,我们可以使用stm32的SPI或SDIO接口来实现。 首先,我们需要连接SD卡到stm32的相应接口,例如SPI接口的SD卡接口包括SD_CLK、SD_CMD、SD_D0、SD_D1、SD_D2、SD_D3等引脚。然后,我们需要在代码中配置和初始化SPI或SDIO接口,并设置通信速率。通过读取和写入SPI或SDIO接口的寄存器,我们可以实现与SD卡的通信。 接下来,我们需要进行SD卡的初始化,在代码中发送SD卡初始化命令,例如发送CMD0的复位命令和CMD8的发送电压命令。然后,我们可以发送CMD55和ACMD41来判断SD卡是否准备好使用。如果SD卡准备好,我们可以通过读取SD卡返回的响应来确认初始化是否成功。 一旦SD卡初始化成功,我们可以开始进行数据的采集和保存。首先,我们需要采集传感器数据并将其存储在缓冲区中。然后,我们可以使用SD卡的写入命令来将缓冲区的数据写入到SD卡中。写入数据时,我们需要按照SD卡的要求发送相应的命令和数据。 同时,我们也需要实现错误处理机制,例如检查SD卡的返回响应和数据写入是否成功。如果出现错误,我们可以重新尝试写入或执行其他错误处理操作,以确保数据的完整性。 最后,在数据采集和保存完成后,我们需要进行适当的关闭和卸载操作。通过发送相应的命令,我们可以关闭SD卡的读写操作,并释放使用的资源。 总的来说,STM32可以通过SPI或SDIO接口实现数据采集保存到SD卡的功能。通过合适的配置、初始化、数据采集和保存以及错误处理,我们可以有效地实现数据的可靠保存。 ### 回答2: STM32是一种32位的微控制器芯片,可以实现各种功能,包括数据采集和保存到SD卡。以下是关于如何使用STM32进行数据采集和保存的步骤: 1. 配置SD卡模块:首先,需要将SD卡插入到STM32开发板的SD卡槽中。然后,通过引脚连接将SD卡模块与STM32芯片连接起来。接下来,需要通过SPI或SDIO总线控制器来配置和初始化SD卡模块。 2. 初始化ADC模块:使用STM32的模拟数字转换模块(ADC),可以将模拟信号转换为数字信号。首先,配置输入引脚并设置ADC通道。然后,择适当的ADC分辨率和采样速率,以满足数据采集的要求。最后,初始化ADC模块。 3. 数据采集:开始数据采集前,需要配置ADC的触发方式和DMA传输。触发方式可以择软件触发或外部触发。如果择外部触发,需要将触发信号连接到相应的引脚。配置DMA传输可以实现直接将采集到的数据写入内存或SD卡,提高效率。 4. 数据保存到SD卡:采集到的数据可以通过FATFS文件系统库将其保存到SD卡上。首先,需要创建一个新文件来存储数据。然后,将采集到的数据写入到文件中。最后,关闭文件并卸载SD卡。 5. 相关注意事项:在进行数据采集和SD卡保存时,需要注意一些问题。例如,考虑采样率和存储容量之间的平衡,以避免数据丢失或存储空间不足的问题。此外,还应该定期检查SD卡的可用空间,并根据需要进行文件的切换和管理。 总的来说,使用STM32进行数据采集和保存到SD卡是一个相对简单的过程。通过合理的配置和初始化,可以实现高效、可靠的数据采集与存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值