【StableDiffusion】采样方法对比优缺点及评估,采样器 & 调度器(目前已有的 采样器介绍与评估)

采样器 Sampler

采样方法 决定了 如何从 噪声 生成 图像 的过程,也就是去噪过程如何进行

在这里插入图片描述

· 包含 DPM 的采样方法(逆转扩散采样)

DPM → Diffusion Probabilistic Models(扩散概率模型)

DPM、DPM2

包含 DPM 的采样方法 是 逆转扩散采样,也是 DPM 第一代 的 采样方法。

而 DPM2 则是第二代 逆转扩散采样方法。

DPM++(DPMPP)

DPM++,又被称为 DPMPP,是 DPM2 的再升级版本。

· 包含 2M、3M 的采样方法(2 multi-step、3 …)

无论是二阶多步法,还是三阶多步法,它们都更好地提高了图片的精度和细节,

所以带有 M 的采样方法要比不带有的好。

2M 采样方法,所谓的 二阶多步法,指的是在采样过程中添加了“预测器”和“矫正器”

3M 采样方法,在 二阶多步 的基础上,再添加了一个“修整器”,用于修正预测信息和中间计算。

理论上来说,3M 要好于 2M,在细节和精度上(但注意,如果我们是生成动漫图片,那么太高的精度可能会带来相反的效果,需要根据模型和生成效果进行自行判断)

· 包含 a 的采样方法

“a”指的是 ancestral,也就是“祖先”

通过使用带有 ancestral(adj.)的采样方法,能够在 迭代 中 保持图片的原有特征和性质,

让图片不容易发生突变。

· 包含 SDE 的采样方法

SDE → Stochastic Differential Equations(随机 微分 方程)

包含 SDE 的采样方法就是添加了 随机微分方程 的采样方法,它们能够提升性能

· 包含 Heun 的采样方法(可独立 或 作为后缀使用)

Heun 没什么特殊的含义,但是这是个很重要的采样方法

能明显地 增加图像细节 并且提高质感 提升饱和度

· 包含 Restart 的采样方法

通过不断重启来迅速得到比较好的图像结果,是个速度派

· 包含 DDIM 的采样方法

DDIM 是极速流,是最快的采样方法,但是会牺牲质量

· PLMS、UniPc、LCM 采样方法

PLMS:垃圾

UniPc:强大,速度快,精度较高,稳定性强

LCM:专门配合 LCM 模型来使用的采样方法



调度器 Scheduler type

调度器的作用是 控制“如何”(以什么样的方式)减少噪声

在这里插入图片描述

Karras

最佳梯度下降法,效果稳定优秀

Uniform

均匀算法

古早的方法,匀速去除噪声,效果不太好

SGM Uniform

stochastic gradient markov uniform(随机梯度马尔可夫 均匀算法)

因为增加了 sgm,所以效果比 uniform 要好得多

Exponential

迅速去除大部分噪声,然后再精修

低步数 的 时候,可以快速完善图像

高步数 的 时候,可以精修图像(重要),效果在高步数体现

PolyExponential

和 Exponential 很像,速度比 Exponential 快,但效果不如。

### Stable Diffusion采样方法调度器 #### 采样方法的工作原理 在图像生成过程中,不同的采样模式会影响最终的结果质量。扩散去噪算法通过逐步去除噪声来生成高质量的图像[^1]。每一步迭代都会减少一定的噪声量,直到达到预定的标准或步数。 对于可重复性的需求来说,收敛采样器是一个不错的选择,因为它能够确保每次运行得到相同的结果;而当目标是创建具有细微差异的新颖样本时,则更适合采用随机采样器[^2]。 #### 调度器的作用机制 Karras noise schedule 是一种特定类型的调度策略,在训练期间调整加到数据上的高斯白噪音水平。这种安排有助于提高模型稳定性并改善视觉效果的质量。此外,“sgm uniform scheduler”也被提及作为适用于某些版本(如SDXL-Lightning models)的一种均匀分布式的调度方案[^3]。 #### 使用教程 为了更好地理解如何应用这些概念于实践中: - **安装环境**:首先确认已经正确设置了Python开发环境以及必要的依赖库。 - **加载预训练权重文件**:下载官方发布的稳定扩散模型参数,并将其放置在一个易于访问的位置以便后续调用。 - **配置超参数设置**:根据项目文档说明设定好学习率、批次大小等重要变量值。 - **定义采样函数**:编写一段简单的脚本来实现上述提到的不同种类的采样逻辑。例如下面展示了一个基于PyTorch框架下的简化版代码片段用于执行单次前向传播操作: ```python def sample(model, input_tensor, steps=50, eta=0., sampler='convergent'): """ 执行一次完整的采样过程 参数: model (nn.Module): 训练好的神经网络实例. input_tensor (Tensor): 输入张量. steps (int): 总共经历多少轮更新,默认为50. eta (float): 控制探索程度的比例因子,默认关闭即eta=0表示完全遵循给定路径. sampler (str): 指明使用的采样方式 ('convergent' 或 'random'). 返回: Tensor: 输出预测结果. """ # 初始化一些辅助结构体... if sampler == "convergent": pass # 实现收敛型采样的细节 elif sampler == "random": pass # 定义随机化行为的具体做法 else: raise ValueError(f"未知的采样类型 {sampler}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MicroLindb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值