本篇基於2023/07/30,Leonardo.Ai官方DC中文區的MasterClass大師課實況精華影片的內容來整理,目標對象是使用過AI繪圖工具,但對其底層邏輯沒有概念的朋友。特別針對Leonardo.Ai的用戶。用盡量簡單的方式來講述,深淺結合幫助你在使用上能獲得更高的掌控度。
基於 Stable Diffusion 開發的各家AI繪圖工具大同小異,即使平常不是使用Leo的朋友,相信這些基本概念多少也能幫助到你。
對完整版有興趣的朋友也可以到 Leonardo.Ai 官方YouTube頻道觀看VOD!
文章內容的排列順序與精華會有些微不同,並且省略大量實操部分,想觀看時操範例的朋友可以點選影片章節分段來看,希望可以達成方便閱讀的目的,歡迎在閱讀後留下你的建議!
今天會介紹除了基礎控制項之外的,兩種我稱之為增幅器的功能,Prompt Magic 魔法提示詞、Alchemy 煉金術;以及兩種在生成後可以繼續對成品進行調整修飾的方法,Seed 種子、Canvas 畫布。
但首先,我們先來回顧一下、補充上次沒有說完的,關於 diffusion model 底層邏輯的概念。
為什麼會用diffusion這個字來取名,有可能是因為它的那個計算方式的結果,是一個分布性的結果。
上圖可以看到它左邊的生成工作流程,我的prompt只說了我要一隻在奔跑的狗,有時候我們的prompt不會包含整個畫面裡面所有的東西。
畫面裡面的訊息量是很大的,包含背景、主體、時間、風格、動態等等,一個畫面能表述的細節太多太多,但你的prompt就是沒有那麼大訊息量,剩下的部分,就要靠AI來去做生成。
它的資料庫裡面可能原本在訓練的時候,會有很多很多的不太相同的「奔跑的狗」,所以對我們現在用的AI生圖模型來說,它沒有「唯一標準答案」這種東西,它的答案是一個分佈性的結果,AI會從這個結果裡面,去盡量找出它認為是貼合這個答案分佈範圍的結果,來呈現給你的成品。
比方說:
你的 pormpt 是a oriental beauty
,你心中已經有個想像,可能是林志玲,可能是林黛玉,結果AI給你吐出來一罐烏龍茶包裝的成品。
正在你覺得WTF的時候,仔細一看發現罐子上面印有歪七扭八的美女圖。
但當你換個模型再算一次,可能會是一幅山水美景的照片,沒人,也沒茶葉。
這是為什麼AI生成圖片永遠不會重複的其中一個原因,然後也是為什麼有時候,你會覺得它生出來的東西,跟你想要的不一樣的其中一個原因。
它的這個公式 P(x|y) 讀作 P of x given y,當給定y時x的條件概率,那個y就是你給出去,去做雜訊干涉的那些指令,包含 controlnet、prompt、包含你選的模型裡面原本訓練的內容,x則是它吐出來的生成結果。
有這概念會稍微幫助你理解,為什麼AI會出這樣的東西給你?有時候可能是你的 你給的干涉不夠準確,有時候多算幾次,讓那個分佈結果他再多跑幾次,也許有可能會把你想要的東西調出來。
接下來就開始介紹,Leo 裡效果顯著的兩大增幅器:Prompt Magic 跟 Alchemy。(實況時間點以後上線的 PhotoReal 等新功能這篇就暫不提及)
還在絞盡腦汁寫不出精美又豐富的畫面嗎?怎麼寫prompt人物都不夠好看嗎?畫面灰灰糊糊顏色不夠飽和嗎?想要的風格不知道該如何寫成英文嗎?不想再查資料,不想學英文,也不想另外開著GPT了嗎?
只想在忙碌生活中,刷幾張美圖開心一下的你,打開PM就對了。如果你在Leo有付費,那麼你還可以點開 Alchemy,搭配PM一起使用,讓快樂輕鬆加倍!
現在,你只需要告訴AI最簡單的幾個提示,剩下的交給它就行了。
你不需要想太多,也不應該想太多。
簽下去,就對了。(不
作為增幅器,他們的功能強大,卻也蠻橫,有時候結果固然漂亮,卻不是你想要的,因此多多練習去掌握它們、熟悉它們,對使用者們而言是非常必要的。而閱讀接下來的介紹,可以讓你更快地了解這兩項功能。
Prompt Magic
先從這個東西的基礎開始講,下面這張圖是從它原始插件的發佈者 Gustavosta 給的那個範例上面摳下來的。
PM它就是幫你去補後面的東西,你會看到它有可能會是補出來這樣三種結果,不一定會是甚麼風格,隨機補出一堆prompt。
那它本身是什麼?它本身是一個語言模型,被訓練用來產生prompt的語言模型,用來讓AI更知道要從哪一個範圍內去找答案分布,進而獲得更穩定或更精美的圖像。
如果你把那個PM的那個數值開得太大的話,你原本寫的prompt可能會被它後面補進去的prompt蓋掉,這個原因是每個詞的權重不一樣。也許你想要的那個風格,它本身的權重就偏低了,它的資料量就偏少了,然後PM幫你補的東西,如果說它補了一個風格很強的,它資料量很大的,就有機會把你的蓋過去。
它的原始版本是用大約8萬組從一個叫 Lexica 的網站上面去提取prompt的數據來訓練的,簡言之,它是用了大量別人生出來穩定的prompt,來去做這個語言模型的訓練。
然後目前Leo的PM已經到了第3版了嘛。
我不知道是不是這樣,但是我感覺現在2版跟3版,應該是官方用我們本身(用戶)社群生成的這些prompt,來去訓練的語言模型。它可能會更適合Leo,所以2版跟3版用起來的效果非常好。
PM它這些補的東西會跟著這張圖的 seed 走,所以如果你用同樣的seed+同樣的prompt,原本有開PM,你再開的時候,它一樣會算出同樣的東西,因為補進去的prompt是一樣的。
沒有鎖定seed的話,它每次補進去的東西是隨機的。
在Leo通常我比較建議你在開PM的時候,開著算幾輪後,可以把它關掉再算個一兩輪,對比看一下你現在的prompt,如果沒有靠它來補的話大概會是什麼樣子。順便可以思考一下PM可能補了那些詞進去,這會幫助你提升寫prompt的能力。
這樣的作法僅限於Leo。
因為如果你在 SDwebui 上使用,生成資訊裡是會顯示它補了啥的。我其實不是很明白Leo選擇不顯示PM補詞內容的決定。
Leo上面有一個東西叫作 Prompt Generation,它其實也是語言模型,但是它跟PM的強度完全不一樣。
它只是把你輸進去的東西——不管你用什麼語言——它會幫你翻成英文,但它通常轉出來的會是句子類型的描述性文本,也就是自然語言。但目前幾乎基於SD1.5 訓練的所有模型,它們的文字編碼器都不吃自然語言,因此建議PG轉完後還是稍微手動整理一下。
講 Alchemy 的話,不可避免要先跟各位聊一下,什麼是 Pipeline?
這一整個生成過程就稱作 Pipeline。
這些東西放在什麼樣的位置,安排的是什麼樣的內容,這個就是pipeline。所以其實我們平常在用的,那個文生圖的部分,它也屬於一種pipeline。
然後我們再回到 alchemy 那邊,它有很多的很多的預設置可以選,可能在你的prompt 進模型之前,會經過一些……比如說更接近自然語言的 text encoder,或者是它可能會在前面加上一些什麼樣的顏色、什麼樣的風格,也有可能是加在出圖之前,中間卡了一些東西,所以它的風格才可以即便你不去寫、不去指定,也會有肉眼可見的強化。
因為 Leonardo 對他們提供的這些 pipeline 內容結構並不公開,所以以上屬於我個人的不負責任猜測XD。
這樣有看得出來差異嗎?用的模型是 Absolute Reality v1.6。
如果我用 Photography 的這個這個預設的話,它的成品質感就會很真實。prompt 沒有更動的情況下,如果我是用 Anime,像背景的部分,它就會多少帶一點很有細節的動畫的感覺。這樣的效果就是靠那個 alchemy 給你的那些preset 它幫你去做出來的。
我自己在算人像,或者是需要景比較遠一點、人物稍微全身一點的那種構圖時,通常都是用那個 Environment 在算的。
如果是已經有使用過的人,應該有發現到,它在人像的表現上,有很大程度的提升。它的穩定度是很高的,一方面是因為它做了很多的 preset,一方面是因為它會自動放大(upscale)。
當你的像素越高的時候,AI可以做到的精細度就會越高,這是為什麼 alchemy 它成圖會比較穩定的其中一個原因。
有一個按鈕叫 Expanded Domian,開啟的時候它會讓AI比較根據你的 prompt寫的東西來生成,關掉就是讓它本身的 preset 發揮更多的功用。
因為你開 alchemy 的情況下你不能調GS嘛,所以它其實有點類似GS的感覺。
然後那個 Contrast Boost……這個東西呢,官方說明是說它影響的是畫面的動態,我自己的感覺是,如果把它開到 1 啊,你的人很大幾率就是站著,它會比較僵硬,單純算景或是動物都還好,算人物會蠻明顯。
如果你有特別希望指定的動態,比方說跳舞、跳躍,可以試著把它關 0.5 或者是關掉,人物比較不會站得跟柴(ㄘㄚˊ)頭(ㄊㄠˊ)一樣。
假設你今天是想要加入一些畫家的風格,如果你有測試到風格很容易被吃掉的畫家的時候,我會比較建議你用 Illustration 或 None 的 preset,然後把Resonance 調在大概5以下,再把這個 expanded domain 開起來,它會儘量照著你的prompt來走。
如果是你用攝影啊、或者是 filmmaker 這些風格的話,因為這些風格本來就比較偏寫實,就不一定要用上述的 illustration 這個 preset。
預設的 Resonance 是 15,官方建議是設在 13 到 15,目前我個人體感,10 以上通常風格固化比較嚴重,5 以下在斜線描繪上偶爾變成一段一段的(見下圖),請依需求斟酌調整參數。如果你在prompt裡寫有非常想要的風格,比較不建議開超過 10。
還有一個辦法是,如果你開 alchemy 時它真的就是被吃的很嚴重的時候,你就把這個prompt,搬到前面 > 框起來 > 然後下個權重,千萬不要浪費了 alchemy 可以設權重的這一點。
下到 1.5 其實就很重了,除非你很確定會有什麼結果,或是你很想嘗試就是東西一直出不來,你想嘗試再壓高一點,不然不建議下超過 1.5。因為你往上去壓的話,它可能會發生過擬合的情況畫面,不會變得更好,只會變得更糟。
(下次有時間再講過擬合('・ω・'))
有時候我也會組合著用。當你需要很強烈的光影效果,可是生不出來的時候,可以考慮進去 alchemy 轉一圈,讓 alchemy 幫你做對比、幫你做光影,再出來用其他的模型去 run 一遍,消掉 alchemy 的固化風格。
擴散的擴,是……🤔
這邊再多講一下,擴散的這個東西,固定 Seed 為什麼可以去修正圖?為什麼它可以去微調圖?
這個就是擴散模型在做的事情。
它在想它有的那個雜訊可以變成甚麼,在一定的步數之前,那還是很糊的一個畫面,當AI一步一步剔下去在做細節的時候,它就是在想這個東西看起來很像什麼?跟它資料庫裡面學過的東西,去比對,像是什麼?它就朝那個方向去算。
就比方說你現在看到這朵雲……你覺得它像什麼?
如果今天你是AI、或我是AI,假設這朵雲是雜訊,我要去想,如果要把東西再做得更具象一點的時候,它可能會是什麼……實況的時候收到的答案大部分是河馬跟佩佩豬,這是我沒有料想到的。難道不是鱷魚嗎?
同樣的畫面,AI會去做不一樣的嘗試,這就是當你固定 seed 的時候,你可以去讓它去微調的東西,它會想辦法,根據你給的干涉,再去做一些別的嘗試,但不改變它原本的初始雜訊。
Seed
你的每一張圖、AI的每一次計算,它都會有一個 Seed,可以這樣說,Seed 是它的生成軌跡,記錄AI的思考方式。
上次有講到說,我們成圖是怎麼樣成的嘛。
Seed 記錄的就是AI怎麼去思考,要剔哪些東西?要留哪些東西?這格像素要留下什麼顏色,它旁邊的像素要留下什麼顏色。它記的是這樣的過程。
所以為什麼用同樣的prompt、同樣的設定,你只要鎖定 seed 它就可以100%還原出那張圖,因為它是把整個過程整個記錄再copy回去,復原了那次生成的整個過程。
假設我現在算了一張圖出來,我覺得構圖很好,但是我可能有些細節想要調整,這個時候就可以利用seed來做。不需要一直重算,因為重算的時候可能會差距太大,遠沒有原本那張只有小瑕疵的圖讓你滿意。
再換個說法,就是我告訴AI說:「你這次的想法不錯。但是有一些小地方,你可能再重新想一下。」大概是這樣的感覺。
在Leo這邊可以從生成頁面,已生成的最右邊找到三點圖標的按紐,點開有個 copy seed,或者是你在圖片的資訊裡面也會看到它的seed。
在SD則會直接顯示在圖片資訊裡,透過PNG info也可以查到。
那為什麼我們在固定 seed 的時候,它可以去做微調?
假設我今天輸入了一組prompt進去,然後它就開始找路,走到底就生出了一張圖,而這個生成結果是A。
然後我改了一點東西,例如在prompt裡加了一些斜線,它有可能會變成結果 B。
你改動的東西越小越少,它跟原本出來的那個結果 A,就會越接近,但是你改動的東西越多越大,它就有可能從這個小微調的 B,變成差很多的 C。
改動的東西如果太多,任何東西——任何干涉手段,假設你有放一張圖進去 i2i,在固定 seed 的情況下,你把圖拔掉了,或者是你原本畫布尺寸是640x832 你把它改成1024x768,這都屬於超大改動。
改動太大的時候,它就直接會去走別的路。
所以,我會建議,你想要固定 seed 去微調,或者是想要試試看固定seed後,可以做到什麼的時候,起碼要做到三件事情:
上次在講基本原理的時候,我有講過一個很重要的事情,你的那個畫布尺寸,是最直接影響到你初始雜訊的分佈。所以如果今天你把一個圖從 3:2,改成 9:16,它整個初始雜訊都不一樣了,你固定那個seed就沒有意義了。
這次精華下集裡,我也說到最嚴重的是模型不一樣這件事情……其實嚴格來說,這三件事都一樣嚴重,都超級嚴重。
模型不一樣,seed報廢;
初始雜訊有變,seed報廢;
prompt全換掉(甚至我可以說,只要prompt的變動超過10%),seed報廢。
這個就是seed的功用,它除了鎖定它當時的想法之外,就沒有別的了。
更準確的解釋應該是,它代表初始雜訊的隨機碼,但我自己在剛學的時候發現,用思考過程來解釋AI算圖的 seed,對我而言更容易理解一點。
歡迎跟我分享你是如何理解 seed 的。
有時候你甚至還可以去……其實這個意義不是很大,但我有時候會這樣玩,譬如說現在有張圖的seed尾數是78,我可能會把它加到88,手動更改 seed,然後看看他會給我什麼。
我有時候算出來的東西,確實不是很好的時候,我可能會開始去玩那個seed的數字。
應該蠻多Leo用戶有注意到,在Leo同一批算了四張圖時,長得不一樣,那就應該表示說,這四張圖的思考模式是不一樣的,也就是說 seed 就應該不一樣。
但是我回到Personal feed去看它的資料,這四張圖在顯示的時候,是一樣的seed,這沒有道理啊?🤔
其實,是因為Leo它對 seed 的顯示,有一些奇怪的問題。實際上這四張的 seed 是不一樣的,它顯示出來這個seed,是這一批的第一張圖的 seed。
第一張是你最右手邊那一張,那個是第一張。
那其他的怎麼辦?如果我喜歡的是第三張好了,我要怎麼去找到它的seed?
這個就要感謝,我們中文區的大家,一堆人很努力地研究出來了,到底怎麼辦!
插播廣告:
Leonardo.Ai官方Discord群組的中文區非常活躍且豐富,每天都有主題挑戰讓你不會創作枯竭的同時還能學習新詞,版務義工三班制無論何時都有活人在線與你交流,走過路過進來喝杯茶(?)唷!
它實際上是這樣:
它把第一張當作這整批的一個代表,然後他的 seed 就是 +1 +1 加過去,算八張 就是一路從第一個號碼一直加,加到你要的那一張,實際上每一張的 seed 還是不一樣。
Canvas
它是一個類似於簡易 Photoshop/AI小畫家的東西,現在它有四個模式可以用。t2i 跟 i2i 應該概念都有吧,跟一般的生成是一樣的!我們著重講一下另外的兩個模式。
*(實況大超時,所以 canvas 的內容下次會繼續講完)
畫面上這個框啊,就是你的畫布,你這邊設多大,這個東西就多大,然後它的那個gen按下去之後,它作用只會作用在這個框有框到的位置。
我會稱之為工作框。
這個東西很重要!不管你要做什麼,在 canvas 裡面,這個工作框的位置非常重要!按下生成前一定要檢查工作框人在哪,有沒有框到你要操作的範圍。
跟工作框緊密相關的一項控制條,叫作 Render Density,這個東西啊,它數值拉得越大,工作框就會變得越小,實際上畫布的尺寸設定是沒有變的,它就是把你設好的這個畫布尺寸,維持這樣子的像素量、解析度,然後把那個選取範圍縮小。
它會有點像是,你在畫圖的時候把畫面拉大,視窗尺寸是沒有變的,但是可以更細緻的去刻一些細節。
再講一個東西,也是比較重要一點的,就是你 download 的時候,它是整個畫面DL下來,會像這樣子。
這個時候就需要你自己去裁切,如果你不想切,或是手上沒有工具可以切的話,盡量一次還是只處理一張圖,或是下載前把畫面整理一下。
Leo這個 canvas 現在很方便,其實你可以全程待在 canvas 裡面做,你的prompt可以直接在這裡生圖。但只有文生圖的這個模式,算出來的東西才會進到你的那個 Personal feed,其他模式只要不手動保存,就不會儲存。
inpaint/outpaint,就是針對遮罩(mask)的部分,遮罩類似框選範圍嘛,就是框你要更改的地方。這個是屬於 inpaint,就是我剛框的位置,是在這張圖的邊界以內,我修改的內容也在這張圖的邊界以內。
然後 outpaint 就是,今天如果我的工作框,框到一些在圖面之外,什麼東西都沒有的部分,超過了原圖的尺寸,然後旁邊 outpaint 開關打開,AI就會對圖面進行擴展。
理論上是這樣,但不知道為什麼Leo那個開關,不管開沒開都會把框到的空白區域填上內容。
你在用 outpaint 去擴外面的時候 要記得兩件事情:
針對 in/outpaint 的小技巧還有一個,實況時差點變成放送事故的「擦邊」。
不是那個擦邊🤪,是把你要融合或擴展的圖的邊邊用橡皮擦工具,擦出一些不規則形,不要用直線直接去算,融合起來效果會好一點。
我是一個比較喜歡看看源頭的人,不是特別強烈的那種研究學者型,但是感興趣的東西會更希望盡自己所能,去多了解,而不只是照做。
做影片跟寫成文章,是希望可以幫助到像我一樣,完全沒有這方面的底子、在AI大爆之前可能連英文都不是很好、看到算式跟方程式大腦就死機的……卻還是想再多了解一點AI工具的朋友。
使用工具一直是人在這個世界上與其他物種有所區分的重要能力,AI也只是一種新的工具,而非新的物種,讓我們一起成為學習使用工具的人吧!
希望這篇文章有幫助到你,有任何問題歡迎底下留言。