Stable Diffusion 教學 - Hires. fix
本篇文章介紹 Stable Diffusion web UI 的 Hires. fix 功能,用來提升圖片的解析度。
原理說明
Hires. fix 的原理其實很簡單,利用文生圖產生的圖片,進行放大之後再進行一次圖生圖,流程如下圖所示:
功能區塊
在文生圖的頁面,採樣方法的下面可以找到 Hires. fix 的選項,勾起來就可以使用。同時下方會出現一些額外選項:
Upscaler
這是圖片放大時使用的方法,目前有以下的方法可以選擇
Latent, Latent (antialiased), Latent (bicubic), Latent (bicubic antialiased), Latent (nearest), Latent (nearest-exact), None, Lanczos, Nearest, ESRGAN_4x, LDSR, R-ESRGAN 4x+, R-ESRGAN 4x+ Anime6b, ScuNET, ScuNET PSNR, SwinIR_4x
後面會有實驗結果參考。
Hires steps
這是在進行圖生圖階段時使用的 Sampling steps,0 表示使用和文生圖一樣的步數。
Denoising strength
這是在進行圖生圖階段時使用的參數,作用和圖生圖時一樣,請參考 Stable Diffusion 教學 - web UI 圖生圖 (img2img)。
Upscale by
這設定是要把文生圖的結果放大多少倍,原本是 512x512,這裡設定 2 的話就是變成 1024x1024。範圍為 1 - 4,預設為 2。這個設定和後面的兩個設定同時只會套用一個。
Resize width / height to
這是直接指定放大到明確的尺寸。範圍 0 - 2048,預設為 0。當兩個值都為 0 的時候使用 Upscale by。
實驗結果
這次使用的原圖為
以下為不同 Upscaler 和 Denoising Strength 的結果
Denoising Strength | 0.0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 |
---|---|---|---|---|---|---|---|---|---|---|
Latent | ||||||||||
Latent (antialiased) | ||||||||||
Latent (bicubic) | ||||||||||
Latent (bicubic antialiased) | ||||||||||
Latent (nearest) | ||||||||||
Latent (nearest-exact) | ||||||||||
None | ||||||||||
Lanczos | ||||||||||
Nearest | ||||||||||
ESRGAN_4x | ||||||||||
LDSR | ||||||||||
R-ESRGAN 4x+ | ||||||||||
R-ESRGAN 4x+ Anime6b | ||||||||||
ScuNET | ||||||||||
ScuNET PSNR | ||||||||||
SwinIR_4x |
從上面的結果可以觀察到幾點現象
- Denoising strength 超過 0.7 和原圖差異過大,大部分方法在 0.5 效果都不錯。
- 最後三種方法 ScuNET, ScuNET PSNR, SwinIR_4x 會產生奇怪的色塊,造成後面差異過大。
- Latent 系列的放大都會變糊,Denoising strength 小於 0.4 都是糊的。
結論建議使用下面設定
Upscaler: None, Lanczos, Nearest, ESRGAN_4x, LDSR, R-ESRGAN 4x+, R-ESRGAN 4x+ Anime6b
Denoising strength: 0.3 - 0.7