本篇文章介紹 Stable Diffusion web UI 採樣方法 (Sampling Method) 的功能和實驗結果,比較效率以及最後總結的建議。

簡介

產生圖片的過程是迭代降噪的運算,而採樣方法就是降噪的方式。降噪比例會分配在每次採樣,所以步數越多,每次降噪比例越少。因此步數 1 的結果,不等於步數 20 的第一步的結果。以下是 Euler a 進行 20 步採樣的過程:

功能區塊

有以下功能區塊:

  1. 採樣方法 (Sampling method)
  2. 採樣步數 (Sampling steps)

功能介紹

採樣方法

有很多不同的方法可以使用,不同的方法會影響到產出的結果和執行的效率。目前有 20 種可以使用,後面以實際的測試來比較這些方法。

採樣步數

生圖的時候採樣的次數,次數太少可能產生不出正常的圖片。這裡可以設定 0 - 150,一般建議是 20 次左右,不過不同的方法需要的步數不同,後面會有測試和比較。

實驗結果

Step124681015202530354045505560708090100110120130140150
LMSLMS Step 1LMS Step 2LMS Step 4LMS Step 6LMS Step 8LMS Step 10LMS Step 15LMS Step 20LMS Step 25LMS Step 30LMS Step 35LMS Step 40LMS Step 45LMS Step 50LMS Step 55LMS Step 60LMS Step 70LMS Step 80LMS Step 90LMS Step 100LMS Step 110LMS Step 120LMS Step 130LMS Step 140LMS Step 150
HeunHeun Step 1Heun Step 2Heun Step 4Heun Step 6Heun Step 8Heun Step 10Heun Step 15Heun Step 20Heun Step 25Heun Step 30Heun Step 35Heun Step 40Heun Step 45Heun Step 50Heun Step 55Heun Step 60Heun Step 70Heun Step 80Heun Step 90Heun Step 100Heun Step 110Heun Step 120Heun Step 130Heun Step 140Heun Step 150
DPM2DPM2 Step 1DPM2 Step 2DPM2 Step 4DPM2 Step 6DPM2 Step 8DPM2 Step 10DPM2 Step 15DPM2 Step 20DPM2 Step 25DPM2 Step 30DPM2 Step 35DPM2 Step 40DPM2 Step 45DPM2 Step 50DPM2 Step 55DPM2 Step 60DPM2 Step 70DPM2 Step 80DPM2 Step 90DPM2 Step 100DPM2 Step 110DPM2 Step 120DPM2 Step 130DPM2 Step 140DPM2 Step 150
DPM++ 2MDPM++ 2M Step 1DPM++ 2M Step 2DPM++ 2M Step 4DPM++ 2M Step 6DPM++ 2M Step 8DPM++ 2M Step 10DPM++ 2M Step 15DPM++ 2M Step 20DPM++ 2M Step 25DPM++ 2M Step 30DPM++ 2M Step 35DPM++ 2M Step 40DPM++ 2M Step 45DPM++ 2M Step 50DPM++ 2M Step 55DPM++ 2M Step 60DPM++ 2M Step 70DPM++ 2M Step 80DPM++ 2M Step 90DPM++ 2M Step 100DPM++ 2M Step 110DPM++ 2M Step 120DPM++ 2M Step 130DPM++ 2M Step 140DPM++ 2M Step 150
LMS KarrasLMS Karras Step 1LMS Karras Step 2LMS Karras Step 4LMS Karras Step 6LMS Karras Step 8LMS Karras Step 10LMS Karras Step 15LMS Karras Step 20LMS Karras Step 25LMS Karras Step 30LMS Karras Step 35LMS Karras Step 40LMS Karras Step 45LMS Karras Step 50LMS Karras Step 55LMS Karras Step 60LMS Karras Step 70LMS Karras Step 80LMS Karras Step 90LMS Karras Step 100LMS Karras Step 110LMS Karras Step 120LMS Karras Step 130LMS Karras Step 140LMS Karras Step 150
DPM2 KarrasDPM2 Karras Step 1DPM2 Karras Step 2DPM2 Karras Step 4DPM2 Karras Step 6DPM2 Karras Step 8DPM2 Karras Step 10DPM2 Karras Step 15DPM2 Karras Step 20DPM2 Karras Step 25DPM2 Karras Step 30DPM2 Karras Step 35DPM2 Karras Step 40DPM2 Karras Step 45DPM2 Karras Step 50DPM2 Karras Step 55DPM2 Karras Step 60DPM2 Karras Step 70DPM2 Karras Step 80DPM2 Karras Step 90DPM2 Karras Step 100DPM2 Karras Step 110DPM2 Karras Step 120DPM2 Karras Step 130DPM2 Karras Step 140DPM2 Karras Step 150
DPM++ 2M KarrasDPM++ 2M Karras Step 1DPM++ 2M Karras Step 2DPM++ 2M Karras Step 4DPM++ 2M Karras Step 6DPM++ 2M Karras Step 8DPM++ 2M Karras Step 10DPM++ 2M Karras Step 15DPM++ 2M Karras Step 20DPM++ 2M Karras Step 25DPM++ 2M Karras Step 30DPM++ 2M Karras Step 35DPM++ 2M Karras Step 40DPM++ 2M Karras Step 45DPM++ 2M Karras Step 50DPM++ 2M Karras Step 55DPM++ 2M Karras Step 60DPM++ 2M Karras Step 70DPM++ 2M Karras Step 80DPM++ 2M Karras Step 90DPM++ 2M Karras Step 100DPM++ 2M Karras Step 110DPM++ 2M Karras Step 120DPM++ 2M Karras Step 130DPM++ 2M Karras Step 140DPM++ 2M Karras Step 150
EulerEuler Step 1Euler Step 2Euler Step 4Euler Step 6Euler Step 8Euler Step 10Euler Step 15Euler Step 20Euler Step 25Euler Step 30Euler Step 35Euler Step 40Euler Step 45Euler Step 50Euler Step 55Euler Step 60Euler Step 70Euler Step 80Euler Step 90Euler Step 100Euler Step 110Euler Step 120Euler Step 130Euler Step 140Euler Step 150
DDIMDDIM Step 1DDIM Step 2DDIM Step 4DDIM Step 6DDIM Step 8DDIM Step 10DDIM Step 15DDIM Step 20DDIM Step 25DDIM Step 30DDIM Step 35DDIM Step 40DDIM Step 45DDIM Step 50DDIM Step 55DDIM Step 60DDIM Step 70DDIM Step 80DDIM Step 90DDIM Step 100DDIM Step 110DDIM Step 120DDIM Step 130DDIM Step 140DDIM Step 150
PLMSPLMS Step 1PLMS Step 2PLMS Step 4PLMS Step 6PLMS Step 8PLMS Step 10PLMS Step 15PLMS Step 20PLMS Step 25PLMS Step 30PLMS Step 35PLMS Step 40PLMS Step 45PLMS Step 50PLMS Step 55PLMS Step 60PLMS Step 70PLMS Step 80PLMS Step 90PLMS Step 100PLMS Step 110PLMS Step 120PLMS Step 130PLMS Step 140PLMS Step 150
UniPCUniPC Step 1UniPC Step 2UniPC Step 4UniPC Step 6UniPC Step 8UniPC Step 10UniPC Step 15UniPC Step 20UniPC Step 25UniPC Step 30UniPC Step 35UniPC Step 40UniPC Step 45UniPC Step 50UniPC Step 55UniPC Step 60UniPC Step 70UniPC Step 80UniPC Step 90UniPC Step 100UniPC Step 110UniPC Step 120UniPC Step 130UniPC Step 140UniPC Step 150
DPM adaptiveDPM adaptive Step 1DPM adaptive Step 2DPM adaptive Step 4DPM adaptive Step 6DPM adaptive Step 8DPM adaptive Step 10DPM adaptive Step 15DPM adaptive Step 20DPM adaptive Step 25DPM adaptive Step 30DPM adaptive Step 35DPM adaptive Step 40DPM adaptive Step 45DPM adaptive Step 50DPM adaptive Step 55DPM adaptive Step 60DPM adaptive Step 70DPM adaptive Step 80DPM adaptive Step 90DPM adaptive Step 100DPM adaptive Step 110DPM adaptive Step 120DPM adaptive Step 130DPM adaptive Step 140DPM adaptive Step 150
DPM2 aDPM2 a Step 1DPM2 a Step 2DPM2 a Step 4DPM2 a Step 6DPM2 a Step 8DPM2 a Step 10DPM2 a Step 15DPM2 a Step 20DPM2 a Step 25DPM2 a Step 30DPM2 a Step 35DPM2 a Step 40DPM2 a Step 45DPM2 a Step 50DPM2 a Step 55DPM2 a Step 60DPM2 a Step 70DPM2 a Step 80DPM2 a Step 90DPM2 a Step 100DPM2 a Step 110DPM2 a Step 120DPM2 a Step 130DPM2 a Step 140DPM2 a Step 150
DPM++ 2S aDPM++ 2S a Step 1DPM++ 2S a Step 2DPM++ 2S a Step 4DPM++ 2S a Step 6DPM++ 2S a Step 8DPM++ 2S a Step 10DPM++ 2S a Step 15DPM++ 2S a Step 20DPM++ 2S a Step 25DPM++ 2S a Step 30DPM++ 2S a Step 35DPM++ 2S a Step 40DPM++ 2S a Step 45DPM++ 2S a Step 50DPM++ 2S a Step 55DPM++ 2S a Step 60DPM++ 2S a Step 70DPM++ 2S a Step 80DPM++ 2S a Step 90DPM++ 2S a Step 100DPM++ 2S a Step 110DPM++ 2S a Step 120DPM++ 2S a Step 130DPM++ 2S a Step 140DPM++ 2S a Step 150
DPM2 a KarrasDPM2 a Karras Step 1DPM2 a Karras Step 2DPM2 a Karras Step 4DPM2 a Karras Step 6DPM2 a Karras Step 8DPM2 a Karras Step 10DPM2 a Karras Step 15DPM2 a Karras Step 20DPM2 a Karras Step 25DPM2 a Karras Step 30DPM2 a Karras Step 35DPM2 a Karras Step 40DPM2 a Karras Step 45DPM2 a Karras Step 50DPM2 a Karras Step 55DPM2 a Karras Step 60DPM2 a Karras Step 70DPM2 a Karras Step 80DPM2 a Karras Step 90DPM2 a Karras Step 100DPM2 a Karras Step 110DPM2 a Karras Step 120DPM2 a Karras Step 130DPM2 a Karras Step 140DPM2 a Karras Step 150
DPM++ 2S a KarrasDPM++ 2S a Karras Step 1DPM++ 2S a Karras Step 2DPM++ 2S a Karras Step 4DPM++ 2S a Karras Step 6DPM++ 2S a Karras Step 8DPM++ 2S a Karras Step 10DPM++ 2S a Karras Step 15DPM++ 2S a Karras Step 20DPM++ 2S a Karras Step 25DPM++ 2S a Karras Step 30DPM++ 2S a Karras Step 35DPM++ 2S a Karras Step 40DPM++ 2S a Karras Step 45DPM++ 2S a Karras Step 50DPM++ 2S a Karras Step 55DPM++ 2S a Karras Step 60DPM++ 2S a Karras Step 70DPM++ 2S a Karras Step 80DPM++ 2S a Karras Step 90DPM++ 2S a Karras Step 100DPM++ 2S a Karras Step 110DPM++ 2S a Karras Step 120DPM++ 2S a Karras Step 130DPM++ 2S a Karras Step 140DPM++ 2S a Karras Step 150
Euler aEuler a Step 1Euler a Step 2Euler a Step 4Euler a Step 6Euler a Step 8Euler a Step 10Euler a Step 15Euler a Step 20Euler a Step 25Euler a Step 30Euler a Step 35Euler a Step 40Euler a Step 45Euler a Step 50Euler a Step 55Euler a Step 60Euler a Step 70Euler a Step 80Euler a Step 90Euler a Step 100Euler a Step 110Euler a Step 120Euler a Step 130Euler a Step 140Euler a Step 150
DPM fastDPM fast Step 1DPM fast Step 2DPM fast Step 4DPM fast Step 6DPM fast Step 8DPM fast Step 10DPM fast Step 15DPM fast Step 20DPM fast Step 25DPM fast Step 30DPM fast Step 35DPM fast Step 40DPM fast Step 45DPM fast Step 50DPM fast Step 55DPM fast Step 60DPM fast Step 70DPM fast Step 80DPM fast Step 90DPM fast Step 100DPM fast Step 110DPM fast Step 120DPM fast Step 130DPM fast Step 140DPM fast Step 150
DPM++ SDEDPM++ SDE Step 1DPM++ SDE Step 2DPM++ SDE Step 4DPM++ SDE Step 6DPM++ SDE Step 8DPM++ SDE Step 10DPM++ SDE Step 15DPM++ SDE Step 20DPM++ SDE Step 25DPM++ SDE Step 30DPM++ SDE Step 35DPM++ SDE Step 40DPM++ SDE Step 45DPM++ SDE Step 50DPM++ SDE Step 55DPM++ SDE Step 60DPM++ SDE Step 70DPM++ SDE Step 80DPM++ SDE Step 90DPM++ SDE Step 100DPM++ SDE Step 110DPM++ SDE Step 120DPM++ SDE Step 130DPM++ SDE Step 140DPM++ SDE Step 150
DPM++ SDE KarrasDPM++ SDE Karras Step 1DPM++ SDE Karras Step 2DPM++ SDE Karras Step 4DPM++ SDE Karras Step 6DPM++ SDE Karras Step 8DPM++ SDE Karras Step 10DPM++ SDE Karras Step 15DPM++ SDE Karras Step 20DPM++ SDE Karras Step 25DPM++ SDE Karras Step 30DPM++ SDE Karras Step 35DPM++ SDE Karras Step 40DPM++ SDE Karras Step 45DPM++ SDE Karras Step 50DPM++ SDE Karras Step 55DPM++ SDE Karras Step 60DPM++ SDE Karras Step 70DPM++ SDE Karras Step 80DPM++ SDE Karras Step 90DPM++ SDE Karras Step 100DPM++ SDE Karras Step 110DPM++ SDE Karras Step 120DPM++ SDE Karras Step 130DPM++ SDE Karras Step 140DPM++ SDE Karras Step 150

從實驗結果有以下幾點發現:

  • 有些方法產圖會在一定步數之後收斂穩定,有些沒有。
  • 產出圖片最後風格可以分成三類。
  • LMS Karars 步數太高效果反而越差。
  • DPM adaptive 無視步數設定,他會自動判斷用多少步數,測試時他在 45 步停下。

我們以此結果整理一份比較表

方法收斂風格每步時間(s/it)看起來正常的步數時間(秒)備註
LMSOA1.674575.15
HeunOA3.191547.85
DPM2OA3.281549.20
DPM++ 2MOA1.582031.60
LMS KarrasOA1.632540.75步數太高效果反而越差
DPM2 KarrasOA3.661554.90
DPM++ 2M KarrasOA1.661016.60風格 A 中效率較高
EulerOA1.791526.85
DDIMOA1.63813.04風格 A 中效率較高
PLMSOA1.743052.20
UniPCOA1.711525.65
DPM adaptive?B4.6645209.70無視步數設定,他會自動判斷用多少步數,測試時他在 45 步停下。
DPM2 aXB3.041030.40產出結果和 DPM++ 2S a 很相似
DPM++ 2S aXB3.07824.56
DPM2 a KarrasXB3.212064.20產出結果和 DPM++ 2S a Karras 很相似
DPM++ 2S a KarrasXB3.18619.08風格 B 中效率較高
Euler aXB1.75814.00風格 B 中效率較高
DPM fastXB1.554062.00
DPM++ SDEXC3.19825.52
DPM++ SDE KarrasXC3.37826.96

如果以收斂的結果為目標來比較的話,整理出以下比較表

方法每步時間(s/it)開始收斂步數開始收斂時間(秒)收斂步數收斂時間(秒)備註
LMS1.674575.1560100.20
Heun3.191547.852579.75
DPM23.281549.202582.00
DPM++ 2M1.582031.604063.20
LMS Karras1.632540.753048.90效率較高
DPM2 Karras3.661554.902073.20
DPM++ 2M Karras1.661524.903558.10效率較高
Euler1.792544.754580.55
DDIM1.633048.9090146.70
PLMS1.743052.205595.70
UniPC1.711525.655594.05

以效率比較結果做個總結:

  • 建議使用:DPM++ 2M Karras、DDIM、DPM++ 2S a Karras、Euler a
  • 建議步數:10 - 35 步

延伸閱讀

上一篇 Stable Diffusion 教學 - PNG Info
下一篇 Stable Diffusion 教學 - 檢查點 (Checkpoint)