全面理解Stable Diffusion采樣器
原文:Stable Diffusion Samplers: A Comprehensive Guide
在 AUTOMATIC1111 的 SD webui 中,有許多采樣器(sampler),如 Euler a,Heun,DDIM,… 什么是采樣器?他們?nèi)绾喂ぷ??他們之間的區(qū)別是什么?我們應該用哪種采樣器?本文將帶給你答案。
什么是采樣?
在生成圖片時,Stable Diffusion 會先在隱層空間(latent space)中生成一張完全的噪聲圖。噪聲預測器會預測圖片的噪聲,將預測出的噪聲從圖片中減去,就完成了一步。重復該過程,最終將會得到清晰的圖片。
由于 Stable Diffusion 在每一步都會產(chǎn)生一個新的圖像樣本,因此去噪的過程被也被稱為采樣。采樣過程所使用的方法被稱為采樣方法或采樣器。
采樣只是 Stable Diffusion 模型中的一部分。如果想理解完整的 Stable DIffusion,推薦閱讀 How does Stable Diffusion work? 。
下面是一個采樣過程的動態(tài)展示,采樣器逐漸地產(chǎn)生越來越干凈、清晰的圖像。
雖然整體框架是相同的,但是有許多不同的方法來執(zhí)行具體的去噪過程。這通常需要速度和準確度之間兩相權(quán)衡。
Noise Schedule
我們已經(jīng)介紹過,在 Stable Diffusion 中,噪聲圖像是每步減去模型預測出的噪聲,一點一點變成干凈圖像的。noise schedule 就是用來控制在每個采樣步中噪聲的強度的。噪聲在第一步最大,慢慢降低,直到最后一步降為0。
在每一步中,采樣器的工作就是根據(jù) noise schedule 中對應的該步的噪聲強度,減去對應的噪聲,來產(chǎn)生該步的去噪圖像。如果我們增大采樣步數(shù)會有什么影響呢?每一步噪聲下降的會更少,這有助于減少采樣過程中的截斷誤差。
下面是 15 步和 30 步的 noise schedule 的對比。
總步數(shù) | 15 | 30 |
---|---|---|
noise schedule | ![]() |
![]() |
采樣器總覽
到本文寫作時,SD webui 共支持 19 中采樣器,而且隨著時間的推移越來越多。那么,不同的采樣器之間有何區(qū)別呢?
目前為止,SD webui 支持的采樣器:
Euler a、Euler、LMS、Heun、DPM2、DPM2 a、DPM++ 2S a、DPM++2M、DPM++ SDE、DPM fast、DPM adaptive、LMS Karras、DPM2 Karras、DPM2 a、Karras、DPM++2S a Karras、DPM++ 2M Karras、DPM++ SDE Karras、DDIM、PLMS。
本文后半部分會詳細介紹,技術(shù)上細節(jié)很多。所以這里先提供一個總覽的視角,幫助大家對各種采樣器有一個大致的了解。
Old-School ODE Solvers
我們先來看最簡單的一類,這些采樣器中的發(fā)明時間都已經(jīng)超過一百年了,它們是就老式的常微分方程(ODE)求解器(solver)。
- Euler:最簡單的求解器;
- Heun:比 Euler 更準確,但也更慢
- LMS(Linear Multi-Step method):和 Euler 一樣快,但(應該會)更準確
Ancestor Samplers
你是否注意到某些采樣器名字里帶了一個字母 a
?
- Euler a
- DPM2 a
- DPM++ 2S a
- DPM++ 2S a Karras
他們就是祖先采樣器。祖先采樣器會在每個采樣步對圖像添加噪聲。祖先采樣器都是隨機(stochastic)采樣器,因為他們的采樣結(jié)果具有隨機性。但是,注意也有其他的名字中不帶 a
隨機采樣器。
祖先采樣器有一個缺點,就是其采樣結(jié)果圖片不會收斂。以下是 Euler 和 Euler a 的采樣過程對比:
采樣器 | Euler 采樣結(jié)果收斂 | Euler a 采樣結(jié)果不收斂 |
---|---|---|
采樣過程實例 | ![]() |
![]() |
可以看到,Euler a 的采樣結(jié)果不收斂,而 Euler 的采樣結(jié)果收斂得很好??紤]到可復現(xiàn)性,我們通常更喜歡可以收斂的結(jié)果。當然,如果想要稍微有些變化,可以使用 variational seed。
Karras noise schedule
名字中帶有 Karras
的采樣器,是使用了 Karras 的論文中推薦的 noise schedule。如果仔細觀察可以發(fā)現(xiàn),Karras 推薦的 noise schedule 中,接近終點附近的的幾步值會更小,他們發(fā)現(xiàn)這種策略會有更好的生圖質(zhì)量。
DDIM和PLMS
DDIM (Denoising Diffusion Implicit Model) 和 PLMS (Pseudo Linear Multi-Step method) 是 SDv1 帶的兩種采樣器。DDIM 是第一批轉(zhuǎn)為擴散模型設計的采樣器之一,而 PLMS 是 DDIM 更新、更快的版本。
這兩種采樣器現(xiàn)在看來已經(jīng)有些過時了,一般不再廣泛使用。
DPM和DPM++
DPM (Diffusion probabilistic model solver) and DPM++ 是一系列發(fā)布于 2022 年的新型擴散模型采樣器。他們代表了一些具有類似結(jié)構(gòu)的求解器。
DPM 和 DPM2 很類似,但是 DPM2 是二階的,更準確但是更慢。
DPM++ 是 DPM 的優(yōu)化版本。
DPM adaptive 可以自適應地調(diào)整每一步的值。它可能會非常慢,因為他并不確保擴散過程在某個確定的采樣步數(shù)內(nèi)能完成。
UniPC
UniPC (Unified Predictor-Corrector) 是一種發(fā)布于 2023 年的新型采樣器。靈感來自于 ODE 求解器中的 predictor-corrector 方法,可以在 5-10 步采樣出高質(zhì)量的圖片。
k-diffusion
最后,你可能聽說過 k-diffusion 并好奇這是什么東西。它其實就是指 Katherine Crowson 的 GitHub 倉庫: k-diffusion,該倉庫實現(xiàn)了 Karras 論文中提到的諸多采樣器。
實際上,SD webui 中除了 DDIM、PLMS 和 UniPC 外的其他所有采樣器都是使用的 k-diffusion 倉庫的實現(xiàn)。
評估采樣器
如何選擇采樣器?本節(jié)將會進行一些客觀的對比,來幫助你選擇。
Image Convergence
本小節(jié)將會使用不同的采樣器生成相同的圖片,最大采樣步數(shù)為 40。在第 40 步的最后一張圖片將作為參考,來評估采樣器收斂的速度。Euler 將作為參照。
Euler, DDIM, PLMS, LMS Karras and Heun
首先我們看一下 Euler, DDIM, PLMS, LMS Karras and Heun 這幾個采樣器,他們是老式的 ODE 求解器或者是擴散模型原始的求解器。
可以看到,DDIM 與 Euler 的收斂步數(shù)差不多,但是變動更大,這是因為 DDIM 會在采樣步中注入隨機噪聲。
PLMS 在本次測試中表現(xiàn)不佳,收斂性最差。
Heun 收斂得很快,但采樣速度實際要慢兩倍,因為它是一種二階的方法。所以我們應該對比 Heun 第 30 步的結(jié)果與 Euler 第 15 步的基準結(jié)果。
Ancestral Samplers
如果你的目標是產(chǎn)生穩(wěn)定、可復現(xiàn)的采樣結(jié)果,那么你不應該使用祖先采樣器。因為他們都帶有隨機性,且不會收斂。
DPM and DPM2
在 DPM 系列采樣器中,DPM fast 無法很好地收斂,DPM2 和 DPM2 Karras 的收斂性看起來比 Euler 要好,但別忘了,它們也是二階的方法,速度要慢兩倍。
DPM adaptive 看起來很好,但他是用的自己的自適應步數(shù),實際可能非常慢。
DPM++ Solvers
DPM++ SDE 和 DPM++ SDE Karras 與祖先采樣器有相同的問題,他們不僅不收斂,而且隨著步數(shù)的變化,圖片質(zhì)量也會波動。
DPM++ 2M and DPM++ 2M Karras 收斂性不錯。 在步數(shù)足夠大時,Karras 的策略會收斂得很快。
UniPC
UniPC 收斂得比 Euler 稍慢,但也還不錯。
Speed
雖然前面看到,DPM adaptive 收斂性很不錯,但速度這里可以明顯看到他是最慢的。
除了 DPM adaptive 外,可以看到剩下的采樣器分為了兩組。分別差不多是一倍時間和兩倍時間。這反映出的是求解器的階次,一階求解器更快,二階求解器更準確,但是速度要慢兩倍,因為需要過兩遍去噪 UNet 模型。
Quality
當然,如果生成圖片的質(zhì)量看起來很矬,收斂性和速度都沒有意義。以下是不同采樣器結(jié)果的對比:
采樣器 | 采樣結(jié)果 |
---|---|
Euler、Heun、DDIM | ![]() |
PLMS、LMS Karras、Euler a | ![]() |
DPM2、DPM2 a、DPM2 a Karras | ![]() |
DPM2 Karras、DPM++ 2M Karras、DPM++ 2S a Karras | ![]() |
DPM++ 2S a、DPM++ adaptive、DPM++ fast | ![]() |
DPM++ SDE、Karras、DPM++ SDE、UniPC | ![]() |
從結(jié)果來看,DPM++ fast 是明顯質(zhì)量稍差的。另外,各個祖先采樣器沒有收斂到其他采樣器收斂的結(jié)果。祖先采樣器收到一致 kitten,而其他采樣器收斂到一只 cat。
生成結(jié)果的主觀感知這里沒有明顯的哪個比哪個好,自己看著好就行。
Perceptual Quality
即使沒有收斂,生成圖像的質(zhì)量也可能已經(jīng)不錯了。這節(jié)我們看一下各個采樣器需要多少步能夠得到高質(zhì)量的生成結(jié)果。
這里我們采用的指標是 BRISQUE (Blind/Referenceless Image Spatial Quality Evaluator),它反映了自然圖像的質(zhì)量,數(shù)值越低,圖像質(zhì)量越高。
在第一組中,DDIM 這里表現(xiàn)得出乎意料的好,只需要 8 步,就生成了質(zhì)量最高的圖像。
第二組對比的是祖先采樣器的結(jié)果,除了一兩個例外之外,大多數(shù)祖先采樣器的質(zhì)量與 Euler類似。
DPM2 采樣器系列比 Euler 稍好。
在本節(jié)的生成質(zhì)量對比中,DPM++ SDE and DPM++ SDE Karras 的表現(xiàn)最好。
UniPC 在小步數(shù)時比 Euler 稍差,在大步數(shù)時差不多。
So … which one is the best
在對比了各個采樣器在多個維度的表現(xiàn)之后,推薦如下:
- 如果想要速度快、收斂性好、質(zhì)量也不錯,且想試試新東西的話,最好選擇:
- DPM++ 2M Karras、20-30 步
- UniPC、20-30 步
- 如果想要比較好的質(zhì)量,同時不在意是否收斂的話,可以選擇:
- DPM++ SDE Karras、10-15 步 (注意該采樣器比較慢)
- DDIM、10-15 步
- 如果想要穩(wěn)定、可復現(xiàn)的結(jié)果,不要用任何帶有隨機性的采樣器,比如祖先采樣器
- 如果想生成一些簡單的結(jié)果,可以用 Euler 或 Heun。在使用 Heun 時,可以調(diào)低一些步數(shù)來節(jié)省時間。
采樣器簡介
SD webui 中有各種采樣器的相關(guān)信息。這些采樣器的內(nèi)部工作原理需要大量數(shù)學知識來理解。這里將詳細解釋一下最簡單的 Euler,簡略介紹其他采樣器,它們也與 Euler 有許多共通點、
Euler
Euler 可能是最直接的采樣器,其數(shù)學本質(zhì)就是用于解決常微分方程的歐拉方法。Euler 采樣器是完全確定的,也就是說,在采樣過程中不會引入任何的隨機噪聲。
以下是逐步拆解采樣過程:
- 第一步:在隱層空間中,噪聲預測器估計出圖像中的噪聲
- 第二步:根據(jù) noise schedule,計算出需要被減掉的噪聲系數(shù),這在每一步是不同的
- 第三步:將第一步的噪聲與第二步的系數(shù)乘起來,從隱層圖片中減掉的該噪聲量
重復上述步驟,直到 noise schedule 結(jié)束。
但是我們怎么知道每一步的噪聲系數(shù)應該是多少呢?實際上,這就是我們需要告訴采樣器的 noise schedule。
noise schedule 告訴采樣器每一步的噪聲應該是多少。噪聲預測器根據(jù)應該存在的噪聲總量來估計隱層圖像中的噪聲。
在第一步的噪聲量是最高的,然后噪聲會隨著步數(shù)的增加不斷降低,直到在最后一步降至 0。改變采樣步數(shù),就會對應的改變 noise schedule。比如我們增大采樣步數(shù),那么每一步噪聲下降的會更少,這有助于減少采樣過程中的截斷誤差。
為什么確定性的 ODE 求解器能夠求解隨機采樣問題呢?這稱為概率流(probability flow),我們不是解決樣本如何演化(evolve),而是解決其概率分布的演化。也就是說,求解隨機過程中的概率分布而不是樣本軌跡。
與漂移過程(drift process)對照,ODE 求解器的對應關(guān)系如下:
- Time → noise
- Time quantization → noise schedule
- Position → latent image
- Velocity → Predicted noise
- Initial position → Initial random latent image
- Final position → Final clear latent image
采樣示例
下面是使用 Euler 采樣進行文生圖的一個示例。noise schedule 指示了每一步中的噪聲強度。采樣器的工作就是在每一步中,根據(jù) noise schedule 的設定,和 UNet 噪聲預測網(wǎng)絡的輸出,從噪聲圖中減掉適量的噪聲,直到最終噪聲為 0。
Euler a
Euler ancestral (Euler a) 采樣器與 Euler 采樣器類似。區(qū)別在于,Euler a 會在每一步減掉更多的噪聲,然后它會在采樣一些隨機噪聲加回到噪聲圖中,這樣與 noise schedule 中設定的噪聲強度匹配。Euler a 中的去噪圖與之前的步數(shù)中加入了什么樣的噪聲有關(guān),因此它被稱為祖先采樣器(ancestral sampler )。由于在過程中加入了額外的噪聲,所以祖先采樣器兩次的采樣結(jié)果會是不同的。
DDIM
Denoising Diffusion Implicit Models (DDIM) 是最先被提出的擴散模型采樣器之一。它的核心想法是每一步的圖片可以通過添加以下三個東西來近似:
- 最終的圖片
- 圖像方向指向當前步驟的圖像
- 隨機噪聲
可是在抵達最后一步之前,我們怎么知道最終的圖片呢?DDIM 采樣器是使用去噪圖片來對最終圖片進行估計。類似的,圖片的方向也是通過噪聲預測器預測出的噪聲來近似。
LMS and LMS Karras
與 Euler 方法類似,linear multistep method (LMS) 方法也是用于解決 ODE 的一種標準方法。他通過巧妙利用之前時間步的值來提升準確度。SD webui 默認使用至多前 4 步的值。
LMS Karras 使用了 Karras 的 noise schedule。
Heun
Heun’s method 比 Euler 方法更準確,但是它在每步需要預測兩次噪聲,所以它比 Euler 慢兩倍。
DPM Solvers
Diffusion Probabilistic Model Solvers (DPM-Solvers) 是一系列新提出的擴散模型求解器。在 SD webui 中,包含以下幾種:DPM2,DPM2 Karras,DPM2 a,DPM2 a Karras,DPM Fast,DPM adaptive,DPM Karras。
DPM2 就是 DPM-Solver 論文中的 DPM-Solver-2 (Algorithm 1),是一種精確到二階求解器。
DPM2 Karras 和 DPM2 基本相同,但是使用了 Karras 的 noise schedule。
DPM2 a 也與 DPM2 基本相同,但是作為一種祖先采樣器,它在每一步添加了額外的噪聲。
DPM2 a Karras 是在 DPM2 a 的基礎(chǔ)上再使用了 Karras 的 noise schedule。
DPM Fast 的 noise schedule 是均勻的。它精確到一階,比 DPM2 系列快兩倍。
DPM adaptive 也是一階的 DPM Solver,其 noise schedule 是自適應的,它會無視我們設置的去噪步數(shù),并自適應地自行決定步數(shù)。
DPM++ 采樣器是 DPM 的優(yōu)化版本。
UniPC
UniPC (Unified Predictor Corrector method) 是 2023 年新提出的一種采樣器。它包含兩部分:文章來源:http://www.zghlxwxcb.cn/news/detail-761635.html
- Unified predictor (UniP)
- Unified corrector (UniC)
它支持任何求解器,任何噪聲預測器。文章來源地址http://www.zghlxwxcb.cn/news/detail-761635.html
延伸閱讀
- k-diffusion GitHub page – Katherine Crowson 的 diffusion 庫. 許多 SD webui 中的采樣器就是使用的這個庫中的實現(xiàn)
- Elucidating the Design Space of Diffusion-Based Generative Models (Karras 2022) – k-diffusion 中實現(xiàn)的采樣器就是根據(jù)該論文的描述
- Progressive Distillation for Fast Sampling of Diffusion Models – Fast sampling progressive distillation can generate images in as few as 4 steps. It needs model-level training.
- Pseudo Numerical Methods for Diffusion Models on Manifolds (Liu 2022) – PLMS 論文.
- DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps (Lu 2022) – DPM 和 DPM2 求解器論文.
- DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models (Lu 2022) – DPM++ 求解器論文.
- Denoising Diffusion Implicit Models (Song 2020) – DDIM 論文.
- Score-based generative modeling through stochastic differential equations (Song 2020) – 提出 reverse diffusion. 我們現(xiàn)在能使用 ODE 求解器就是由于作者在該論文中提出的替代概率流公式。
- Pseudo Numerical Methods for Diffusion Models on Manifolds (Liu 2022) – PLMS 采樣器論文.
- 這個 Reddit 評論 對采樣器進行了很好的總結(jié)
到了這里,關(guān)于全面理解Stable Diffusion采樣器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!