Stable diffusion取樣器詳解

flydean發表於2024-06-04

在我們使用SD web UI的過程中,有很多采樣器可以選擇,那麼什麼是取樣器?它們是如何工作的?它們之間有什麼區別?你應該使用哪一個?這篇文章將會給你想要的答案。

什麼是取樣?

降噪步驟

Stable Diffusion模型透過一種稱為“去噪”的過程來生成影像,這個過程涉及到在潛在空間中逐步從隨機噪聲中提取出有意義的影像特徵。

  • 模型首先在潛在空間中生成一個完全隨機的噪聲影像。這個影像是隨機的,不包含任何有意義的資訊。
  • 噪聲預測器(也稱為去噪函式)估計這個隨機影像中的噪聲。這個預測器是模型的一部分,它學習如何從噪聲中恢復出清晰的影像。
  • 模型從初始的隨機噪聲影像中減去預測的噪聲,以便逐步揭示出隱藏在噪聲下的影像內容。
  • 這個過程會重複多次(通常是十幾次),每一步都會生成一個新的取樣影像。這些取樣影像逐漸從隨機噪聲轉變為越來越清晰的影像。
  • 經過多次迭代後,最終得到的影像是一個乾淨的、去噪後的影像,它反映了文字提示中描述的內容。

下面是一個實際的取樣過程。取樣器逐漸產生越來越乾淨的影像。

image-20240411194651145

Noise schedule

在Stable Diffusion模型的去噪過程中,噪聲表(noise schedule)扮演著至關重要的角色。

噪聲表是一個預先定義的計劃,它決定了在每一步取樣過程中應用的噪聲水平。

  • 在去噪過程的第一步,影像充滿了高噪聲,這是因為初始影像是完全隨機的噪聲影像。在這個階段,噪聲水平最高,影像看起來是不連貫和隨機的。
  • 隨著去噪過程的進行,噪聲表會逐步降低每個取樣步驟中的噪聲水平。這種降低是按照預定的計劃進行的,旨在逐漸從噪聲中提取出有意義的影像特徵。
  • 在去噪過程的最後一步,噪聲水平降低到零,此時影像應該是清晰且與文字提示相匹配的。理想情況下,最終影像應該幾乎沒有噪聲,且細節豐富,準確地反映了文字描述的內容。

下面是一個Noise schedule的基本工作原理:

穩定擴散取樣器的噪聲時間表

如果我們增加取樣步驟數,那麼每個步驟之間的降噪幅將會變小。這有助於減少取樣的截斷誤差。

可以比較一下 15 個步驟和 30 個步驟的噪音時間表。

不同的取樣器

webUI自帶了很多不同的取樣器,並且這個取樣器的個數還在不停的增加,那麼這些取樣器都有些什麼不同呢?

image-20240411195254916

老式ODE solvers

讓我們看一下最簡單取樣器。這些取樣器演算法已經被發明很久很久了。它們是常微分方程 (ODE) 的老式取樣器。

Euler– 最簡單的取樣器。

Heun– 更準確但更慢的 Euler 版本。

LMS(線性多步法) – 與 Euler 的速度相同,但(據說)更準確。

Ancestral取樣器

如果你注意觀察的話,可以看到某些取樣器的名稱上帶有一個字母'a'。 比如:

  • Euler a

  • DPM2 a

  • DPM++ 2S a

  • DPM++ 2S a Karras

他們是Ancestral取樣器。Ancestral取樣器在每個取樣步驟中都會向影像新增噪聲。它們是隨機取樣器,因為取樣結果具有一定的隨機性。

當然也有很多隨機取樣器的名字上是不帶a的。

使用Ancestral取樣器的缺點是影像不會收斂。也就是說你有可能不會得到相同的結果。

還是剛剛的例子,我們比較一下使用 Euler a 和 Euler 生成的影像。(為了便於對比,我們加入了另外一個收斂的取樣器)

image-20240411200323697

可以看到Euler和DMP++ 2M Karras最終生成的圖片其實是大致一樣的,但是他們兩個跟Euler a的結果不太相同。

所以為了可重複性,那就用收斂取樣器。如果要生成細微的變化,那麼可以考慮使用隨機取樣器。

Karras noise schedule

帶有“Karras”標籤的取樣器使用 Karras 文章中推薦的 noise schedule。和傳統的取樣器相比,你會發現噪聲步長在接近尾聲時變小了。這樣的變化據說可以提高影像的質量。

卡拉斯噪音時間表

DDIM 和 PLMS

DDIM(去噪擴散隱式模型)和 PLMS(偽線性多步法)是原始 Stable Diffusion v1 附帶的取樣器。DDIM是首批為擴散模型設計的取樣器之一。PLMS 是 DDIM 的更新、更快的替代方案。

這兩個取樣器已經過時了,我們通常不會使用他們。

DPM 和 DPM++

DPM(擴散機率模型求解器)和 DPM++ 是專為 2022 年釋出的擴散模型設計的新取樣器。它們表示具有類似體系結構的求解器系列。DPM 和 DPM2 相似,但 DPM2 是二階的(更準確但更慢)。DPM++ 是對 DPM 的改進。

DPM adaptive是自適應調整步長。所以它可能很慢,並且不能保證在取樣步驟數內完成。

UniPC

UniPC(統一預測器校正器)是 2023 年釋出的新取樣器。受常微分方程求解器中預測變數-校正器方法的啟發,它可以在 5-10 個步驟內實現高質量的影像生成。

怎麼選擇取樣器

那麼這麼多的取樣器,我們應該如何選擇呢?我想我們可以從取樣演算法是否收斂,取樣的速度和最終生成圖片的質量這幾個方面來具體考量需要使用什麼樣的取樣器。

是否收斂

首先,對Euler、DDIM、PLMS、LMS Karras 和 Heun這些老式的常微分方程求解器或原始擴散求解器來說,PLMS和LMS Karras收斂效果不佳。Heun收斂得更快。

對於所有的Ancestral取樣器來說,都是不收斂的。這些取樣器有:Euler a, DPM2 a, DPM++ 2S a, DPM2 a Karras, DPM++ 2S a Karras。

DPM++ SDEDPM++ SDE Karras 與Ancestral取樣器存在相同的缺點。它們不僅不會收斂,而且影像也會隨著步數的變化而顯著波動。

DPM++ 2MDPM++ 2M Karras 表現良好。當步數足夠高時,karras變體收斂得更快。

UniPC 收斂速度比 Euler 慢一點,但還不錯。

取樣速度

下圖是使用不同取樣器的取樣速度:

雖然 DPM adaptive在收斂方面表現良好,但它也是最慢的。

其餘的渲染時間可以分為兩組,第一組花費的時間大致相同(約 1 倍),另一組花費的時間大約是兩倍(約 2 倍)。時間花費2倍的是因為他們用的是2階求解器。

二階求解器雖然更準確,但需要對去U-Net進行兩次評估,所以它們花費的時間大概是2倍。

質量

當然,前面講的收斂和速度都是次要的,如果最終生成的圖片質量不好,那麼收斂和速度也就無從談起了。

我們比較一下常用的一些取樣器的最終圖片效果:

image-20240411204217415image-20240411204237846image-20240411204253314

大家覺得哪幅圖更好?事實上,哪幅圖更好是一個主觀上的標準,每個人的審美觀點不同,最後可能選出來不同的結果。

所以......哪一個是最好的?

我不能說哪個是最好的,但是我可以給點我的建議。

如果您想快速、有創造力並且質量不錯,那麼可以這樣選擇:

  • DPM++ 2M Karras,20-30 步
  • UniPC,20-30 步。

如果您想要高質量的影像並且不關心收斂性,那麼可以這樣選擇:

  • DPM++ SDE Karras,10-15 步(注意:這是一個較慢的取樣器)

  • DDIM,10-15 步。

如果您喜歡穩定、可重現的影像,請避免使用任何Ancestral取樣器。

EulerHeun也是不錯的選擇.

點我檢視更多精彩內容:www.flydean.com

相關文章