本文帶領大家學習如何調整 Stable Diffusion WebUI 上各種參數。我們以 txt2img 為例,帶大家認識基本設定、Sampling method 或 CFG scale 等各種參數調教,以及參數間彼此的影響,讓大家能夠初步上手,熟悉 AI 算圖!

尚未安裝 Stable Diffusion WebUI 的夥伴可以參考上一篇 如何在 M1 Macbook 上跑 Stable Diffusion?,本篇直接進入主題,說明並討論 WebUI 各項參數。

Stable Diffusion Checkpoint

下拉選單選擇基本算圖模型。當新增 model 時可點按旁邊的 refresh 按紐,讓選單新增選項。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

如何下載以及安裝、模型推薦請參考上一篇 如何在 M1 Macbook 上跑 Stable Diffusion? 文末。

Prompt

輸入關鍵字區域,讓 Stable Diffusion 算出你想像中的畫面。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

關鍵字下法與模型訓練時使用的關鍵字有關,不同模型所用的 prompt 可能大不相同。有些關鍵字可能模型並不認得,導致結果不如預期。建議可以多多參考 Civitai 各種模型的專頁,從上面擷取範例來使用並作變化。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img
Civitai 分享的圖片,大部分會包含 Stable Diffusion 算圖所有參數設置

除了直接下關鍵字,也能使用特殊符號,如小括號 () 來對該關鍵字調整權重,或者中括號 [] 在過程中變換權重。詳細玩法可參考這篇文章的教學。

這邊簡單提示關鍵字方向:

  • 物:畫面中想要呈現的東西,如人物、動物、物品等等。除了告訴 Stable Diffusion 有哪些物品,亦可多加該物的形容詞,如人的穿著、動作、年齡等等描述
  • 地:物體所在地,亦可想像成畫面的背景,讓 Stable Diffusion 知道背景要畫什麼(不然他會自由發揮)
  • 風格:告訴 Stable Diffusion 要以什麼風格呈現圖片,某個畫家?或是照片?需注意的是 不一定 每個模型都有對應風格關鍵詞,有時候直接更換 model 或 LoRA 可能會比較快達成目的
  • 角度:想要「鏡頭」從哪裡拍攝?或是人物視線方向

一開始算出來的圖或許不盡人意,但透過這些原則方向下去組合 Prompt,逐漸迭代出想像中的畫面,也算是一種創作過程 XD。

需注意的是,prompt 會受到資料偏差影響。如 這篇文 中提到,給定藍眼睛和棕色眼睛關鍵詞,畫出來的女性人種也會不同。這是因為資料來源中,藍眼睛大多是歐洲人,棕色眼睛通常是亞洲人導致,因此算圖結果被連帶影響。

Negative Prompt

輸入的字會讓 Stable Diffusion 算圖時, 避免 產生該關鍵字的影像或結果。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

通常大家會下 worst qualitygrayscalelow quality 等等關鍵字,增加算出來的圖像品質。或是一些不想出現的元素,如 fused fingersbad anatomymissing fingers 等等。

Civitai 各模型專頁也有列出 negative prompt,仔細看大部分就是那幾個在換,可以參考貼上。

Sampling method

此參數牽涉到模型設計的數學原理,對使用者來說只要大致了解即可。可以簡單想像他是模型計算中,用不同的方法去逼近答案,因此會影響算出的結果和品質。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

甚至不同 Sampling method 所需的算圖時間也不一樣。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

一般我常用的是 DPM++ 2M Karras、DPM++ SDE Karras 和 Euler。主要是這幾組算法算出來的圖品質比較好,以及大部分模型 demo 圖也是用這幾組參數。大家可以自己多加探索各種選項。

Sampling steps

Stable Diffusion 的原理,可以想成 AI 將一張充滿雜訊的圖(想像古早類比電視沒有訊號的畫面),慢慢 每步 去掉部分雜訊來 畫圖

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

通常來說, 步數畫質細節 有正相關。注意!只是正相關,但不代表步數超高畫質就好,通常落在 15 ~ 30 步區間,步數越大對畫質影響越少,該如何選擇與使用的 Model 和 Sampling method 有關。

步數愈多,所需時間愈多,而且不同的 Sampling steps 可能算出不同的圖(如角色姿勢差異,後面章節會討論)。

實務上需要多少步數,除了上述原則,蠻多在於經驗和感覺,可以多參考 Civitai 網友分享的參數。

以下是 Sampling steps = 10、15、20、25 的圖,其中 10 的圖有明顯缺陷,15 開始趨向正常,20、25 基本上只有細節差異,畫質肉眼幾乎分不出來。

Width 和 Height

這個最簡單,就如字面上涵義,決定算圖結果的長寬。看似簡單,卻會有其他影響或限制。如:

  • 因模型設計的限制,最低長寬需要設定 512 x 512。通常將其中一邊改成 768 變成 2:3 的圖片
  • 同樣也是模型的限制,若長寬給定太大,或長寬比例懸殊,有可能會出現多頭怪。若需要高清圖片,此時可先將大小調至適當算圖範圍內,再用之後介紹的 Hires. fix 解決。或算圖後用 Extra 頁面裡的 Upscalling 功能放大圖片
最詳細的 Stable diffusion WebUI 操作教學 - txt2img
引用自 reddit

延伸閱讀:如何用 Stable Diffusion 產生高解析度的圖?

Batch size 和 Batch count

兩個參數名稱有點相似,他們的差異是:

  • Batch size 調整 一次計算過程中,需要同時產出幾張圖片 (一次計算可以視為一個 Batch)
  • Batch count 調整 按下算圖後,總共要跑幾次計算 (幾次 Batch)

簡單想像,當 Batch size 越大,GPU 同時算的圖愈多,越吃記憶體,但可以同時算出好幾張不同的結果。如果你的顯卡記憶體夠,可以考慮拉高 Batch count,增加每次算圖結果的選擇性,又不浪費時間。假設不夠,只能以時間換取空間,拉高 Batch size,讓他花時間重複跑,多生幾張給你選。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

CFG Scale

這個參數是在設定 AI 要多聽你的話(Prompt),通常範圍如下:

  • 1:根本不鳥你,AI 自己亂畫
  • 3:AI 會加入一些自己的想法
  • 7:平衡 AI 的自主性和你給定的 Prompt
  • 15:AI 放棄治療,開始聽你的話
  • 30:完全照你說的畫

實測如下,從左自右分別是 CFG Scale = 3、7、11。若以 Prompt

<lora:Moxin_10:0.7>, masterpiece, (1girl), little girl, smile, Look at the camera Through mirror reflection, black hair, big eyes, ((medium hair)), t shirt, Sitting in front of the mirror,  soft light, (illustration:1.1),(best quality), 8k wallpaper, highly detailed, official art

最左邊 AI 算圖時自動加了奇怪的人偶在右上角,girl 也變成兩位。中間 7 畫面比較接近 Prompt,但他並不是透過鏡子看著鏡頭。11 算最接近 Prompt 要求,但畫質就沒有 CFG Sacle = 3 和 7 好。也就是說,CFG Scale 過高會讓畫質衰減,產生高對比過飽和的影像。

另外,有些 LoRA (如 Moxin),不同的 CFG Scale 還會影響 風格 。如下分別是 CFG Scale 為 2、4、7、10,會發現隨著 CFG Scale 數值上升,風格從隨興變得更為工筆,對比與飽和度也逐漸上升。

因此若要讓算圖結果接近你想要的畫面,建議以調整 Prompt 為主,CFG Scale 為輔。多換幾個關鍵字,或多下幾個更明確的關鍵字來達成目標。CFG Scale 則保持在 7 附近的數值(不要極端大或過小),畫面品質比較好。

Seed

學術角度來說,Seed 是在 latent space 中產生初始 random tansor 用的值。簡單直觀的想像,可以把 Seed 看成是 構圖 的來源。同樣的 Prompt、CFG Scale、Width、Height 等等參數,只要改變 Seed,就能產生完全不一樣的圖。

以下三張都是不同的 Seed,但其他參數固定所算出的圖

Stable Diffusion WebUI 預設 Seed = -1,意思是每次算圖都自動產生不同的 Seed 值,方便使用者用同樣的 Prompt 產生不同構圖以供選擇。

最詳細的 Stable diffusion WebUI 操作教學 – txt2img

假設今天算出一張圖不錯,想要固定構圖,並調整其他參數時,可以點 Seed 輸入框旁邊的「回收」按紐,WebUI 會填入此次 Seed value 並固定,此時畫面就能維持 相似 的構圖。

最詳細的 Stable diffusion WebUI 操作教學 – txt2img
最詳細的 Stable diffusion WebUI 操作教學 – txt2img
點按重複使用後的 Seed 值,與上一次算圖用的一樣

註:固定 Seed 只能說 增加構圖相似性,因為算圖過程中有隨機性,畫面細節可能每次略有不同。外加動其他參數也可能影響構圖,使用時需多試幾次找到操控的感覺

如下圖,固定所有參數,包含 Seed,算出的圖片還是有微小的不同

固定所有參數,包含 Seed, 只改變 Sampling steps , 從左至右分別是 20、25、30 步,發現整體畫面是大致相似的,但細節如臉部表情和衣著、姿勢則是有變化。

延伸閱讀:兩階段解決 Stable Diffusion 臉崩問題

Restore faces

有時算圖結果人物臉部五官很詭異,此時可勾選這個選項嘗試解決。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img
引用自 Stable Diffusion prompt: a definitive guide

Restore faces 有細部設定,需切換到 Settings tab 裡,點選左邊 Face restoration 選項,於畫面中間選擇 CodeFormer ,下方拉 Bar 可以調整 restore 的強度。

需注意的是, 0 表示最強 restore 效果 ,1 反而是最弱的。預設 0.5,可以依需求調整。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

更多 Sampling steps 和 Seed 的討論

如前所述,通則上來說

  • Sampling steps:控制算圖的步數,與畫質正相關外,還會影響構圖或細節
  • Seed:控制 latent space 中產生初始 random tansor 用的值,與構圖有關

一開始以為 Sampling steps 改變構圖的過程,是在算圖過程中 累積步數時逐漸改變 的。但經過幾次實驗後發現並不是這樣!而是在初期就影響了整體畫面!

也就是說,在調整參數時,除了 Seed 能控制構圖外,Sampling steps 在某些 Sampling method 和模型的搭配下,也可能大幅的影響畫面。

如 ChilloutMix model + Moxin LoRA + DPM++ SDE Karras,設定 Sampling step = 10、15 、20、25 算出的圖,基本上 10 、 15 和 20、25 比是大不相同。20 和 25 大方向還算是相似

若改用其他參數都不變,改用 Sampling method Euler ,一樣 10、 15、20、25 ,畫面幾乎一致,只有微小細節不同

若改 ChilloutMix model + Korean Doll Likeness LoRA + DPM++ SDE Karras,Sampling step = 15、20、25、30 相對前例使用 Moxin 來說基本上還算接近,但背景、衣著、角度還是有些不同

若改用其他參數都不變,改用 Sampling method Euler ,一樣 15、20、25、30 ,畫面幾乎一致,只有微小細節不同

這行為會遇到什麼問題呢?比如說想透過調整 Sampling steps 取得不同的畫面品質或細節,該怎麼辦?

遇到這種情況,我想到的 workaround 是去 Stable Diffusion WebUI 的 Settings Tab 裡,在 Live previews 子 Menu 中,將

  • Show new live preview image every N sampling steps 調小,比如說 2
  • Image creation progress preview mode 設成 Full
最詳細的 Stable diffusion WebUI 操作教學 - txt2img

這樣每算 2 步,他就會把目前的運算結果以 完整的輸出算法 輸出一張圖到 WebUI 上,此時右鍵下載即可。

但這方法也有極限,只能擷取 Sampling steps 比第一次小的圖 ,若要增加 Sampling steps 就無法,只能希望算出來的圖畫面不要差太多。

Extra Seed Option

在上一篇 最詳細的 Stable diffusion WebUI 操作教學 – txt2img | Part 1 我們解釋過 Seed 的設定與原理,但他還有隱藏設定!

勾選旁邊的 Extra 後,下方會長出 Variation seedVariation strengthResize seed from 等選項,以下我們一一討論。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

Variation Seed

首先來看 Variation seedVariation strength 。假設一個情境,首先固定 Prompt 和其他參數,但改變 Seed 生了兩張圖如下:

我覺得這兩張圖各有優點,想要把兩張合併成一張,此可以使用 Variation seed 功能!我們再看一次設定介面

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

上左圖的 Seed 是 2986424963 ,因此 Seed 欄位保持不變,在 Variation seed 填入上右圖的 Seed 442495300

接下來告訴他混合比例,透過 Variation strength 拉霸,越往右拉,value 越大,算出的圖會越像填入 Variation seed 的圖(此例為上右圖),反之亦然。

以下分別是 Variation seed = 0、0.33、0.66、1 的算圖結果,能夠明顯觀察出臉部、姿勢、服裝、背景等等漸變過程。

Resize seed from

Stable diffusion 算圖時,height 和 width 除了影響最終圖片大小外,也會影響圖片的內容!

實測如下,原圖是 512 x 768,分別將其高改成 728 和 856,728 右手變成舉起來,856 除了衣服改變,還多生了一隻手!

難道一開始沒設定好寬高就沒救了嗎?此時 Resize seed from 即可派上用場!

我們回到剛剛討論 Variation seed 的區塊,此時先把 Variation strength 調為零,關閉融合兩張圖片的功能。

此時,我們原圖是 512 x 784,想要改成 512 x 728:

  • 先將 Resize seed form widthResize seed from height 改成原圖數值 512 和 784
  • 再回頭把 WidthHeight 調成新圖大小 512 和 728
最詳細的 Stable diffusion WebUI 操作教學 - txt2img

算圖結果如以下,第一張是原圖,第二張高 728,第三張高 856。雖然和原圖還是有些許差異,但相對於直接修改算圖高度,不使用 Resize seed from 功能的結果相比更為接近原圖。

此功能看似美好,但也可能算出失敗的圖。我嘗試把 width 改大成 600,height 保持 784,結果算圖結果人好像被壓縮了一樣XD。實作的時候可能要多嘗試幾種比例來找到適合的結果,或是之後再進 PS 裁切。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img
resize 成 600 x 784 時人像發生擠壓

延伸閱讀:LoRA 是什麼?如何使用?| Stable Diffusion

Tiling

此功能讓算圖結果可以無限重複無縫堆疊。常用情境可能是產生花紋的基本元素,或是 2D 遊戲的佈景單元圖。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

Tiling 勾選起來,算出的結果如下:

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

Tiling 功能,我們可以將該圖自己用 PS 重複堆疊成一張更大的圖而沒有破綻

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

Hires. fix

此功能勾選後,Stable Diffusion 依照寬高設定結果算圖後,再透過 Upscaler 選定的方法,將其解析度放大 Upscale by 設定的倍率。

以下圖為例,原先設定為 512 x 784,開啟 Hires. fix ,選用 Latent 方法將解析度放大 1.5 倍成 1049 x 1607。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

可以透過

  • Hires steps 設定算圖步數(類似 Sampling steps 的概念)
  • Denoising strength 設定和原圖的相似性,數值 越高越不像原圖 ,但過低,如小於 0.5,圖片可能開始變得模糊

由於我的 M1 筆電記憶體限制 (32 GB),算超過 1000 以上的圖就會爆記憶體,這邊無法提供算圖結果參考,引用 AUTOMATIC1111 GUI: A Beginner’s Guide 文中的範例:

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

由於 Hires. fix 放大的原理類似 image to image

  • 先將原圖轉成 latent space (想像圖片被 Stable Diffusion 編碼成一串我們看不懂的數字)
  • 再透過多次算圖步驟生出大圖(如 text to image 算圖步驟)

不是透過 PS 補差點的方法,因此放大的結果可能與原圖有差異。

觀察上圖,能發現在 Denoising strength 為 0.4 時與原圖最相近,但因為數值設定過小,已經發生模糊現象。0.9 與原圖差異最大,0.65 則是畫圖與差異性的平衡。

好用小技巧

以上就是 txt2img tab 內所有常用可調參數的細節介紹。以下另外提供一些小技巧,讓迭代 Prompt 的過程更為輕鬆

自動儲存

Stable Diffusion WebUI 預設開啟自動儲存,就算過程中忘記將算圖結果另存下載,WebUI 也會自動幫我們把每張圖存到設定的位置。

切換到 Settings tab,點左邊 Saving images/grids,確認 Always save all generated images 有勾選。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

再點左邊 Paths for saving ,設定自動儲存圖片的位置。預設會存到 Stable Diffusion WebUI 原始碼根目錄下的 outputs 資料夾中。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

實際去資料夾中查看,可以發現 WebUI 會依照設定將不同算圖方式分資料夾存放,裡面還會再以日期作子資料夾歸類檔案,非常棒!

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

查看圖片 Prompt

如果之前某張算圖結果感覺不錯,想要繼續調整,但卻沒記下當時的 Prompt 和其他設定怎麼辦?

別擔心,Stable Diffusion WebUI 會自動把各項參數寫入 PNG Info 中,只需要切換到 PNG Info tab,將想查看的圖片拉進 Source 區塊,右邊就會出現各項詳細參數。也能直接點按下方快速鍵,將參數帶入 txt2imgimg2img 等 tab,作更進一步的調整修改。

最詳細的 Stable diffusion WebUI 操作教學 - txt2img

以上就是 Stable Diffusion WebUI txt2img 的入門介紹,相信你已經有了整體概念,接下來只剩下多練習,就能掌握下魔法的技術了!

延伸閱讀

如何在 M1 Macbook 上跑 Stable Diffusion?
LoRA 是什麼?如何使用?| Stable Diffusion
如何用 Stable Diffusion 產生高解析度的圖?
不用顯卡也能玩 Stable Diffusion WebUI – 使用 AWS 架設
如何安裝 CUDA、cuDNN 到 Ubuntu 20.04
使用 Face Recognition 套件快速建立自己的人臉辨識系統!

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。