Samplers
Diffusion Samplers (Solvers) 详解
一句话概括
如果把生成图片比作下山(从高噪声山顶到无噪声平地):
- Model 是向导,告诉你当前脚下的坡度(梯度)。
- Scheduler 是地图,规划了路线的长短和陡峭程度(时间 step 的分布)。
- Sampler 是走路的方式:是小碎步走直线(Euler)、还是看一步走一步(Heun)、还是参考之前的步伐跨大步(DPM++)。
- Sampler 是走路的方式:是小碎步走直线(Euler)、还是看一步走一步(Heun)、还是参考之前的步伐跨大步(DPM++)。
0. 发展演变路线 (Evolution Timeline)
Sampler 的发展几乎就是一部 “追求速度与质量平衡” 的历史:
- 开荒时代 (2020): DDPM。作为祖师爷,必须走满 1000 步 Markov Chain,慢到令人发指。
- 加速时代 (2020 late): DDIM。发现可以用 ODE 描述扩散,支持跳步 (Skip steps)。20-50 步出图成为可能。
- 高阶求解时代 (2022): DPM-Solver / DPM++。引入数学上的高阶 ODE 求解器,用更聪明的方式拟合曲线。进一步压缩到 20 步以内。
- 随机性回归 (2022 late): DPM++ SDE。发现纯 ODE 生成的图太“油”,重新把 SDE 的随机噪声加回来,为了更好的细节和写实感。
- 蒸馏时代 (2023): LCM / Turbo。不再只靠 Sampler 努力,而是让模型自己“跳级”。通过蒸馏 (Distillation),让模型学会 4 步甚至 1 步出图。
- 直线回归时代 (2024 - Now): Flow Matching (Euler)。FLUX.1 和 SD3 出现。只要路径训练得足够直,最简单的 Euler 反而是最好的。我们又回到了原点,但这次是螺旋上升。
1. Sampler 的核心分类逻辑
我们可以根据两个维度对 Samplers 进行分类:
A. 确定性 vs 随机性 (ODE vs SDE)
- ODE Solvers (常微分方程求解器):
- 代表:
Euler,Heun,DPM++ 2M,DDIM - 特点: 确定性。给定相同的种子(Seed)和相同的初始噪声,无论跑多少次,每一步的轨迹都完全一样。收敛性好。
- 用途: 视频生成(不闪烁)、图生图(变化可控)、Inpainting。
- 代表:
- SDE Solvers / Ancestral (随机微分方程求解器):
- 代表:
Euler a(Ancestral),DPM++ 2M SDE,DPM++ SDE - 特点: 随机性。每走一步,都会算完去噪后,额外再注入一点新的随机噪声 ($x_{t-1} = \text{Denoise}(x_t) + \sigma \cdot z$)。
- 用途: 创造性生成、补充细节(如皮肤纹理、毛发)。如果不加噪声,图像往往会趋于“平均化”而显得平滑(Plastic look)。
- 代表:
B. 阶数 (Order)
- 一阶 (1st Order):
Euler,DDIM. 简单粗暴,仅利用当前梯度线性外推。速度快,但步长大了误差大。 - 二阶/高阶 (High Order):
Heun,DPM++. 利用了历史梯度信息或预判未来梯度,拟合更准确的曲线。可以用更少的步数(Steps)达到高质量。
2. 常用 Sampler 深度解析
(1) Euler (欧拉法)
- 类型: 1st Order ODE
- 逻辑: 最简单的线性外推:$x_{t-1} \approx x_t - \Delta t \cdot \text{Model}(x_t)$。
- 特点:
- 计算量最小(1 NFE/step)。
- Flow Matching 时代的王者: 对于 FLUX.1, SD3,因为它们的路径被训练成了直线(Rectified Flow),用最简单的 Euler 走直线效果最好且最快。
(2) Euler Ancestral (Euler a)
- 类型: 1st Order SDE
- 逻辑: 先用 Euler 算出“干净”的 $x_{t-1}$,然后把上一帧的噪声并没有完全减干净,而是减一部分,再加一部分新的随机噪声进去。
- 特点: 不收敛(步数越多画面一直在变),但艺术感强,适合二次元或需要朦胧感的场景。
(3) DPM++ 2M (DPM-Solver++ 2M)
- 类型: 2nd Order ODE (Multistep)
- 逻辑: **多步(Multistep)**思想。在计算 $t \to t-1$ 时,利用历史动量(Momentum,即 $t+1$ 时刻的斜率)来拟合曲线。
- 特点:
- 极快且稳: SDXL 和 SD1.5 的默认首选。20-30 步就能获得极高质量。
- 收敛性极好,增加步数画面只会变锐利,构图稳定。
(4) DPM++ 2M SDE
- 类型: 2nd Order SDE (Multistep + Stochastic)
- 逻辑: 结合了 DPM++ 2M 的精准轨迹拟合,同时在每一步末尾引入了布朗运动噪声。
- 特点: 目前最强写实采样器。兼顾了生成的稳定性和细节的丰富度(胶片颗粒感、皮肤毛孔)。
3. 可视化原理解析
假设我们要从 $x_t$ 走到 $x_{t-1}$:
Euler (直男走路)
graph LR
A[起点 Xt] -->|看一眼梯度| B[计算方向]
B -->|直接迈一步| C[终点 Xt-1]Heun (谨慎走路 / Predictor-Corrector)
graph LR
A[起点 Xt] -->|看梯度| B[预判一步到 X']
B -->|在 X' 处再看一次梯度| C[修正方向]
C -->|取平均方向迈步| D[终点 Xt-1](注:Heun 会导致计算量翻倍,慢)
DPM++ 2M (老司机走路)
graph LR
A[起点 Xt] -->|看当前梯度| B[结合上一步的动量]
B -->|拟合曲线| C[精准滑行到 Xt-1]4. 总结:如何选择?
| Sampler 名称 | 类别 | 推荐场景 | 备注 |
|---|---|---|---|
| Euler | ODE (1阶) | FLUX.1, SD3, 快速预览 | Flow Matching 首选,直线路径无需复杂拟合 |
| Euler a | SDE (1阶) | 创意插画, 二次元 | 画面随步数变化,不收敛,有随机美感 |
| DPM++ 2M | ODE (2阶) | SDXL, SD1.5 通用 | 最稳,视频生成必备,20-30步即可 |
| DPM++ 2M SDE | SDE (2阶) | 写实人像, 高精摄影 | 细节最丰富,稍慢,适合追求质感 |
| DDIM | ODE (1阶) | Inpainting, 视频一致性 | 早期采样器,现在用得少了 |
| LCM / Turbo | Distilled | 实时生成 (4-8步) | 需配合特定 LoRA 或模型 |
Flow Matching 特别提示
如果你在玩 FLUX.1 或 Stable Diffusion 3,请把之前的经验忘掉,无脑选 Euler(或者 Simple)。
因为这些新模型的数学假设就是“直的”,不需要 DPM++ 这种复杂的曲线拟合器,用了反而会画蛇添足产生伪影或变慢。