天天看點

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

作者:快樂愛生活的凡哥

今天來介紹Stable Diffusion腳本Script中,用來判斷提示詞性質,甚至是除錯的好用工具--提示詞矩陣(Prompt matrix)。

前言

很多時候,從網上擷取的一大串提示詞在某些模型表現良好,但是換了個模型就走樣。有時一些提示詞看似無用,移除了之後畫面的感覺又變得怪怪的,不清楚到底是哪裡被影響了。有時整個圖爛掉或功能壞掉,但是不管怎麼調提示詞,圖依然是壞掉的。這時候就可以請出Prompt matrix來追根究底。

功能

Prompt matrix用起來的感覺跟之前介紹的X/Y/Z plot篇很類似,都是能跑出一整組的圖,但是設定畫面差很多:

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

Prompt matrix設定

在設定頁面中,我們可以指定是要以正面或者負面提示詞為主來構築矩陣。構築的提示詞字串要以|符号隔開提示詞,Automatic1111就會分組生成圖檔,這概念好像很難懂,讓我用一個範例來講解。

今天你想要算一隻貓的圖,但是不知道各種提示詞對貓咪的影響是怎麼樣,例如你想測試吼叫(roaring)、毛茸茸(fluffy)跟生氣(angry)分别套上去的效果,就能用Prompt matrix來實驗:

digital painting of cat,

(extremely detailed CG unity 8k wallpaper),

best quality, masterpiece , hdr, ultra highres |

roaring |

fluffy |

angry

在上面的正面提示詞,開頭的前三行,會被當作基本提示詞,用在每一張圖上,四、五、六行被| 符号分組的提示詞們會變成交錯添加的元素,産生一個成果組合圖:

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

Prompt matrix成果圖

左上角的第一張圖,就是什麼額外提示詞都沒加的狀态,它第二列的圖,則全都是添加了憤怒這個提示詞的效果。第二行則是都增加了怒吼提示詞的效果。而最右下的,就是憤怒、毛茸茸與怒吼全部提示詞都有的效果。

這樣你就能很清楚地看到,各種提示詞互動疊加起來的效果。例如憤怒這個提示詞,不僅改變了貓的表情,連姿勢跟背景都被影響了。因為AI在解釋提示詞時,并沒有真的了解了「憤怒」這個概念是什麼,它隻是被訓練出了關聯性,把憤怒這個字,與憤怒的表情、令人害怕的背景顔色還有讓人感到威脅的攻擊姿勢關聯起來而已。

同時,你也能觀察到有關聯的提示詞疊加起來也有更強化的效果,例如怒吼這個詞,單獨使用其實一點氣勢都沒有,但是與憤怒跟毛茸茸疊加起來,效果就很明顯,真的能表達出貓咪殺氣騰騰時全身的毛倒豎起來的效果。

提示詞矩陣不隻一次能組合一個詞,而是可以一串提示詞為一組來使用,例如:

digital painting of 1girl, white dress |

red hat, red shoes |

holding flowers, smiling |

from behind

這樣就能配出紅帽紅鞋一組,微笑與捧花一組,背後視角獨一組,共三組提示詞組合的矩陣了:

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

多提示詞一組的矩陣

這個功能跟X/Y/Z plot有點像,但是它隻能改變提示詞,其他更複雜的設定就不如X/Y/Z plot那麼寬廣。但是這個功能在某些時候特别好用,以下舉兩個我會用到的場合。

提示詞檢驗

當我們對某些定義很模糊的提示詞有疑慮時,通常會産生兩張圖檔來比對,有時候這樣有用,但某些很詭異的提示詞,兩張圖看不太出來差别,但是拿掉了又覺得好像不一樣了,這時候就能用Prompt matrix來大規模生圖來确認。

例如我在檢查某個從網上擷取的正面提示詞時,發現了兩個我看不懂的提示詞:

extremely luminous bright design(極亮鮮豔設計),以及autumn lights(秋天光影)。每個字都懂,組合起來卻想不出會是什麼樣的效果,出了好幾張圖來比較檢查也是看不出什麼名堂,真的跟咒語一樣。

但是在Prompt matrix底下,就能很明顯看出差别:

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

用Prompt matrix檢查意義不明的提示詞

在這張組合圖中,極亮鮮豔設計出現在二、四、六、八行裡面,秋天光影出現在右半邊的所有圖上。這樣一比對下來,馬上就能看出所謂的極亮鮮豔設計,其實是在人物附近産生鮮豔的熒光光斑,但是在與秋天光影一起出現時會被壓制。而秋天光影,則是一種淡黃色的暖色系光,帶來秋天夜晚的感覺,而且人物的衣着也會被影響,變成長袖秋裝,連背景都變成秋天街道的夜景!

除錯

第二個場合就是除錯,有時候你的提示詞因為互相沖突,而造成整個畫面變得非常奇怪,或者讓某些外挂功能失效,這時候就要靠Prompt matrix把提示詞分組過濾出有問題的提示詞,才能順利算圖。

這種事情尤其容易發生在負面提示詞上,因為通常我們都是從大神那裡直接拷貝下來用在所有地方,但其實在某些複雜設定下,這種超長萬用提示詞反而容易出錯。

舉個例子,當我在用Latent Couple這個外挂,想要把兩個人物放進同一張圖時,使用官網提供的範例可以正常運作,但是當我把非常複雜的提示詞放進去的時候,反而隻能繪出一個人。

為了追根究底,我開始測試各種組合:

  • 複雜的正面提示詞配上少少的負面提示詞:出現兩個人物,但是非常醜
  • 簡單的正面提示詞配上複雜的負面提示詞:出現一個漂亮的人物

由此可見,是某些負面提示詞造成問題。但是我的負面提示詞長達225個tokens,是哪些負面提示詞破壞了外挂的功能呢?這時候就是用Prompt matrix解決問題的時候了!

由于這個問題可能是好幾個提示詞一起影響造成的,我将全部的負面提示詞分成四組之後跑圖比對:

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

四組提示詞

這邊可以發現,第一行不管什麼情況都能出現兩個人,而其他組合一率隻有一個,換句話說,問題出在其他三組提示詞上。于是我将第一組提示詞合并進基本組,然後繼續測試,找出沒問題的提示詞組就合并進基本組,直到最後變成了這樣:

AI繪圖|Stable Diffusion進階實戰——提示詞矩陣(Prompt matrix)

最後結果

到了這種程度,已經可以确定是這幾個提示詞有問題,但是當我無論怎麼調換順序想要抓出到底是哪幾個提示詞在搞怪時,卻發現全都有問題。但是從提示詞的含義來看,根本不像會影響到一個人或多個人的生成。是以問題出在哪邊呢?

這時候我注意到了,沒問題的那串提示詞,總長度都在75個token以下,超過75個token就會出問題。于是我在75與76的長度反複測試了幾個無關痛癢的提示詞,證明了是提示詞長度的問題,Latent couple碰到長度超過75 tokens的正面或負面提示詞,很容易癱瘓!

這是靠着Prompt matrix快速測試大量提示詞的功能遇到的問題,如果用其他方法,可能會跟瞎子摸象一樣難以掌握全局。

繼續閱讀