[Python] 圖像處理 – Stable Diffusion 002 – Better Prompting

【前言】

在圖像生成中,最重要的莫過於詠唱的咒語。那究竟如何透過賦予提詞讓生成更加符合預期呢?

【重點整理】

  1. 提詞的先後順序會影響權重(強度)

【預計內容】

  1. 提詞的概念 — 正向與負向
  2. 提詞的權重 — 順序
  3. 題詞的權重 — 標記
  4. 提詞的組合 — AND 與 OR
  5. 提詞的時機 — 提詞切換點
  6. 提詞的時機 — 起始與結束幀

【主要內容】

1. 提詞的概念 — 正向與負向

在提詞中,分有正向與負向兩種,那正向就是所希望出現的內容,反之,負向為不想要的內容。那最常見的正向詞有 masterpiece, best quality, 4k, ray tracing 透過以上這些都能大幅度的提升精細的程度,而常見的負向詞莫過於 nsfw 來避免色圖。

而提詞的形式,可以混合多個單詞,或是句完整的敘述。

2. 提詞的權重 — 順序

權重簡單來說就是強度或占比,並且提詞的順序也會影響,因此越優先的題詞通常會放到越前面。那在下方我透過固定 seed(亂數的生成碼),來比對不同提詞的先後變化。那我所使用的基底為 v1.5 的 OrangeMixs 3 模型,更好的生成動漫風格。

ray tracing, masterpiece, best quality, angry, tightened jaw, squinted eyes, and raised eyebrows, (dark brown hair), brown ears, aqua shining eyes, anime girl with long hair holding a sword in front of a fire, [cyan:0.7 AND black:1] coat
ray tracing, masterpiece, best quality, (dark brown hair), brown ears, aqua shining eyes, anime girl with long hair holding a sword in front of a fire, [cyan:0.7 AND black:1] coat, angry, tightened jaw, squinted eyes, and raised eyebrows,

看完兩張圖,相信各位都覺得表情幾乎沒有差別,但可以看到,在右圖中更強調場景與人物的精緻度。所以透過各種嘗試,我們漸漸的能統整出那些細節其實能放在尾巴。

3. 題詞的權重 — 標記

但一定要把優先的題詞放到最前面嗎?每次都還要調整順序可麻煩了,或者,我希望提詞更加顯眼 / 減少出現。因此,標記的語法更為重要,透過調整詞彙的權重,順暢的打字又能刻劃更多的細節。

我個人統一使用 ( ) 進行標記,就不用記算比如 [] = 0.952 與 ((( ))) = 1.331 這類麻煩的數學 [2]。假設你想要強調就 x > 1,想要減少就 1 > x > 0,想要避免就 0 >= x,假設用法如 (masterpiece:1.2),代表 * 1.2 的權重。那要注意那你沒有設定數值,( ) 預設為 * 1.1 的權重。但一般設限在 2 > x > -2 之間,越多的權重變化越容易造成變質,生成許多的噪點(noise)。

(aqua shining eyes:2)
(aqua shining eyes:1.2)
(aqua shining eyes:0)
(aqua shining eyes:-2)

4. 提詞的組合 — AND 與 OR [3]

在多數情況下,我們會遇到組合的情況,包含「共存與混和」或「隨機」,則分別就要使用 AND 與 OR 來做處理。

(dark brown hair AND red AND blonde) hair
(dark brown hair OR red OR blonde) hair

5. 提詞的時機 — 提詞切換點

若我們依靠開始與結束幀來判斷不同題詞的切換時間會浪費大量的字數,因此 Automatic1111 實際上有提供 [prompt1:prompt2:z] 該語法,代表在第 z 幀時切換只生成 prompt2,而在此前會使用 prompt1。

[red eyes:blue eyes:11],可以看到前期有紅眼,而到 11 幀後開始混合藍眼,最終生成偏黯淡的眼睛

6. 提詞的時機 — 起始與結束幀

我決定把這項功能移到最後,雖然這是我們少會動的功能之一,但最主要是我在測試上一直出問題,但官方文件 [4] 又說有這功能,讓火大又趕著睡覺的我只好介紹但無法正常呈現。

那前面我們說到建議統一用括號,因為在這邊又會用到 [ ] 表示法,單冒號的 [ :x] 代表從第 x 帧開始,而說冒號 [ ::y] 代表從第 y 幀移除。

[[cat::12]:10], walking in the train station,但可以看到分明在 Step 6 就已經出現動物的形體

【後話】

透過以上這些小技巧,都能提升精細度與工作效率。那在下期,我們就會開始介紹實用的兩個插件,最終,再以外部模型來做收尾。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.