關於Tile模型,在網路上普遍的教學說法就是它可以”增加畫面細節”、”高清修復放大”,有多神多好用,用了它會讓原圖畫面變更細緻/精緻….等等。但一開始看了很多Youtube上對於tile的教學,我整個印象就是沒能有一個貫通的邏輯性有很明確的指出Tile到底對SD起到的約束/影響是什麼,都叫ControlNet了,到底tile引導控制了什麼,所以才產生了在原圖上增加了比原本更多的細節……。
直到後來我看到下面這2個說明的影片以及把官網的說明耐心從頭到尾看完後才終於豁然開朗,就是要這樣的解釋我才能邏輯有通,了解有到位。
不是單純的那種開啟tile,點這裡,設置這個參數,調整畫布尺寸…..,接著得到一張更大尺寸高清圖,然後結論就說,tile可以”增加畫面細節”、”高清修復放大”…..。到底是tile讓SD去畫更多的細節?還是其實開啟tile以外,你調整的那些其它參數、設置本來就會讓畫面細節變多,而tile的功能只是在過程中解決了某部分過去在同樣生成更多畫面細節所設定的參數時會遇到的問題,tile是用來解決這個問題,而不是用來增加畫面細節本身?
(PS. 我實在不理解這2支影片的流量怎麼這麼低,明明就講得很好。最重要的地方花了很多時間把SD生圖流程原理和tile的功能一起前後連貫加強解釋說明因果關係,而不是直直結論來一句/官網英文說明裡只段章取義得到的結論→tile可以對圖像進行修復或增添細節。雖然最後都同樣得到一張一樣的成像圖,但清楚明白前後邏輯關係和只知道tile開啟+照著教學的參數去設置,長期下來,前者才對學習/學好SD有幫助,以後才能在遇到各種需求狀況時可以靈活應用變通。)
其實直接去看官網裡的說明,也是一直有在強調”Ignore the details in an image and generate new details”,是generate new details 不是 more details !!!! tile模型的功能≠增加細節!!!!
(官網網址 : https://github.com/lllyasviel/ControlNet-v1-1-nightly)
把官網的說明看完再回頭去看一些以前看過的教學影片裡講關於tile的功能,嗯…..,好吧,可能我的理解能力不夠靈活快速,沒能從這些教學所表達的內容中很快地理解出Tile的約束功能原理或是在生圖過程中它所起到的關鍵用處……。
經過這次經驗,從此以後有想要用的模型或外掛,我還是乖乖耐心先把官網說明從頭到尾看完&實測為主。之後有空有必要時,才再拿網上教學當比對參考。不要再圖省事圖快一開始就直接去找教學文。雖然也是有好的/正確說明的教學,但我發現在中文教學影片的市場,熱門高流量在平台上能先被推到我面前的大多都不是我要的,我想要學到的是能貫通的邏輯思路,而不是一個囫圇吞棗的結論,結果只是學到倒果為因的觀念認知。
總結對於tile模型的原理,應該要去了解的就是如官網和影片裡所說的,它的作用/約束方式就是 :
把畫面中出現的物體辨識出來是什麼,然後將它鎖定住(它會忽略掉原圖中的細節,只記憶控制物體所佔的區塊範圍/顏色資訊)。
至於新圖像所生成的畫面/物體有多少細節內容,則是靠你給的提示詞、畫布尺寸大小、以及再加上模型本身的品質。最終就在鎖定住物體的區塊範圍內去畫出/生成新的圖片出來。
所以,那些所謂tile能增加畫面細節的說法就不是這麼準確,少了前因後果的邏輯關係。能讓畫面/物體的細節變多/畫得很細緻靠的不是tile,最直接主要關連的還是”畫面尺寸”大小(可以說影響最重要,之面文章講文生圖的高清修復、圖生圖的放大重繪時也一直有在強調~)、同尺寸下把提示詞寫得很細很細(cfg值拉高),或是再加上你所使用的Checkpoint模型本來的品質所影響。
能夠做到高清修復也是因為生圖過程中,一開始的階段先應用tile鎖定住所辨識出原圖裡的物體後,在圖生圖裡開4k、8k以上放大的畫布重繪時,就算Denoising重繪幅度拉很高,也能達到有了高重繪幅度去細重畫每個分割區塊裡的內容物,同時又不會畫出奇幻的畸型圖來。
下面是我把官網或是網上常見關於tile的範例,在對tile實際產生的作用/約束方式有了重新認識了解下,去實測操作一遍的結果。
原圖是一張64*64模糊不清的小圖(官網上的示範原圖),要放大成512×512尺寸,然後畫面不模糊,可以看清物體該有的細節~
提示詞 : dog on grassland,Denoising重繪幅度 : 1
tile辨識出這張模糊的圖是隻狗,綠色的區塊是草地我想應該也是大致能辨識出來的,於是鎖定住畫面中的物體是”狗”、”草地”,以及各自構圖所佔比例和顏色訊息。之後提示詞也和tile辨識的內容一致,沒有懸念地,最後生成出一張乍看很像一樣的圖,但狗已經不是同一隻、草地也不是同一片草地了。
同樣的原圖,官方示範畫出的狗或是我再換別的Checkpoint模型、採樣法…..等時,都是會畫出長得或多或少不太一樣的一隻狗。而畫面中所呈現出的細節(狗毛畫得的細膩度…),則是取決於現在512×512畫布下,加上我給的提示詞和所使用的Checkpoint模型品質本來就能畫出的細節程度。tile跟畫出更多細節這件事本身沒太大關係,它的功能就是”辨識鎖定物體”、”控制物體構圖所佔比例和顏色訊息”
另外這裡看一下tile三種預處理器的差別,可能和所使用的Checkpoint模型或採樣法不同時對色調的影響程度會有差,但大致上就是如上圖所示 :
讓我選圖來用的話,那還是resample比較好,後製要改變顏色的飽和度太容易,但糊掉軟軟的圖要銳化變清晰卻又能自然沒有塗抹感就非常困難了~
跑了一下各個denoising數值下resample生成的圖的差別,resample的顏色從0.7開始明顯跑掉了….
換個採樣法看看顏色能不能盡量不要跑偏這麼嚴重 :
換不同的採樣法是有稍微改善了,不過只要是用resample的處理器,Denoising愈高,草地顏色都是會開始有偏差。
後來還想說,那提示詞特別註明”green” grassland會不會有機會改變草地顏色的問題,結果反而弄巧成拙……,算了算了,直接Photoshop後製,這樣比較快。
而三種採樣器底下專門對應的參數為何,直接看圖示就很清楚。
tile_resample :
Down Sampling Rate數值如果是2的話,就會把原圖是512×512尺寸的圖縮小成256×256。圖縮的愈小,SD在重繪成大圖時就有更多重新自由發揮的空間。
tile_colorfix :
tile_colorfix_sharp :
原圖是一張512*512失去內容細節/畫崩壞的圖(官網上的示範原圖)
提示詞 : dog on grassland,Denoising重繪幅度 : 1,預處理器 : tile_resample
這裡把各Denoising數值下的演變圖也放出來,大家看這過程是不是有熟悉的感覺~
之前圖生圖裡的sketch塗鴉不就也是一樣,我原圖給它一張手殘的色塊圖,之後只要再給SD一些提示詞說明畫面中物體有些什麼,就一樣能畫出一張修復圖(或者應該說是點石成金的圖給我)。
這裡tile主要就是提供了”辨識鎖定”物體為何的功能(以及記錄構圖所佔比例和顏色訊息),原圖再崩壞,但只要在tile還能辨識出原圖是個什麼物體的情況下,就算不給提示詞也能重繪新生成一張和原圖長得差不多的圖給你。
因此,別再只因為512×512的崩壞原圖和新生成的圖也都是512×512的尺寸,但結果畫面”細節”變多了/修復了崩壞的原圖,就認知成tile模型可以修復原圖/增加細節…..太神奇了….。
以往在圖生圖裡對小圖進行重繪放大時,我們都得要小心注意放大的畫面尺寸超過一定大小後,即便想要對原本的小圖進行更多的變化細節內容時,但重繪幅度也不能拉太高。受限於Stable Diffusion 1.5模型訓練的圖都是512×512,開太大尺寸的畫布來進行繪圖的話,就會出現奇怪/畸形的重疊幻覺圖。
如下圖所示,隨著圖片的倍率愈放大,能畫出正常圖片可使用的重繪幅度值就愈低。
但現在有了tile對原圖進行辨識鎖定以及記錄構圖所佔比例和顏色訊息後,多頭身的奇幻狀況就迎刃而解了,現在即使在高倍率放大下,開再高的Denoising值也沒問題。
理論上,再繼續放大尺寸重繪也是不會有問題的,不過我的顯卡不充許…….。
但問題都是有解的,下面最後一個範例,就是再加上Ultimate SD Upscale腳本功能,幫助我們把圖往4K、8K,16K…的尺寸邁進~
Ultimate SD Upscale這個外掛的功能就是把你要的尺寸大小的圖切割成512×512(或是更小的區塊)去算圖,如此一來,就不用煩惱原本顯卡只能畫出最大圖的極限。SD每次就只畫512×512的圖,之後再拼接成一張大圖的邏輯下,”理論上”畫出來的圖是可以無限放大的(只是愈大張的圖就要花費愈多的時間)。
的確,在一定程度的尺寸時,Ultimate SD Upscale是個好用的工具。但實際使用時總還是會出現一些問題存在…..。
使用Ultimate SD Upscale,要先到extension搜尋安裝Ultimate SD Upscale外掛,外掛安裝相關可參考之前文章 :
→ AI繪圖-Stable Diffusion 007- 外掛擴充 Extensions 的安裝、更新、移除與備份
安裝後就可以在圖生圖介面下的Script處找到新安裝的Ultimate SD Upscale
現在來用Ultimate SD Upscale把這張512×768的原圖放大8倍(4096×6144)先測看看。
前面圖生圖和ControlNet Tile的設定都和範例三一樣,而Ultimate SD Upscale的參數介面設置如下 :
按照網上許多教學的說法,Ultimate SD Upscale再搭配上tile可以高清放大,得到一張以往畫不出的大圖。我原本也想像這樣不就可以輕鬆生成高畫質的大圖來上傳圖庫,但現實總是沒這麼簡單的,可能網上教學的案例都是拿二次元動漫畫風的圖來放大所以感覺不明顯,但如果我主要是想用在真人寫實照片的高清放大時,難免各種缺點很明顯就顯露出來了 :
前面測試開啟tile可以抑制住放大尺寸重繪時,Denoising重繪幅度拉太高出現的多頭身奇幻圖。但現在放大到8倍後,tile的控制度也不太行了,雖然沒有出現多頭身奇幻圖,但畫面中很多地方也開始出現各式幻覺了。所以開啟tile後可拉高重繪幅度的能力,也只能限制在一定大小範圍內,並不是完全沒極限。
即然太高的重繪幅度不行,那我就放棄高重繪幅度,只是單純想把圖按原樣放大就好呢 ?這邊把重繪幅度設置0.2。
但結果就是,得到一張平面塗抺感很重的放大圖,用重繪放大卻不能開高一點的重繪幅度去增畫細節,那還不如直接把原圖拿去Extras附加功能底下去用同一個放大演算法去放大就好。直接用放大演算法放大還更省時間(Time taken: 53.2 sec),不用去繞這一大圈把圖切小塊去重繪組合放大(Time taken: 6 min. 45.9 sec.)
也許再多一點耐心和實驗精神,再去微調整CFG、Denoising、Controlnet權重、提詞再加加減減一下…..等的搭配設定可以比直接放大好些,少點塗抺感。但總體就是這樣,都還是有避不過的極限限制在(遠看還行,拉大近看還是有破綻)。
後來又再好奇比對一下,如果是直接重繪放大4倍(目前我顯卡跑圖尺寸的極限值),和使用Ultimate SD upscale分割畫面區塊再重組也是放大4倍的情況下,所產生出來的圖像會不會有差別,因為都說有了Ultimate SD upscale是低顯卡配備的救星,省錢也能畫大圖。
這次的Denoising值只拉到0.5,同樣都開啟了tile,但有使用Ultimate SD upscale分格畫圖,tile抑制幻覺圖的能力會有所下降。不過在這張Denoising : 0.5的情況下,用Ultimate SD upscale的塗抺感沒這麼重,整體畫面看起來還比直接重繪放大4倍的清晰度/銳利感更好(因為Ultimate SD upscale裡有套用到放大演算法。開低倍率少量使用放大演算法可以改稍微善清晰度/銳利感,但如果倍率開太大同時卻又無法用高重繪幅度畫更多細節的話就只會產生嚴重塗抺感)。
那就稍微再降一點Denoising,可惜有使用Ultimate SD upscale時,直到Denoising降到0.3以下才不存在幻覺的鬼影。但這樣一來,沒有足夠的重繪幅度增添細節,那因為放大演算法的塗抺感又會跑出來了….。
補充 : 在做完上面的測試後,看到國外Youtube介紹使用Ultimate SD upscale時才發現有個好用的小技巧可以一定程度避開上面有開啟tile,使用高重繪幅度情況下,只要一使用Ultimate SD upscale分格算圖就會比直接重繪放大容易產生幻覺圖的問題。
“只要把提示詞裡,有關圖片內容描述的正向提示詞通通拿掉,最多只留一些中性的詞就好(high quality, realistic photo….),又或是全空白。”
用這小技巧我再重測一遍後,如果只是放大4倍,Denoising 0.5,即使用了Ultimate SD upscale還不會出現幻覺鬼影,但如果Denoising到了0.8以上,或是倍數開到8倍以上畫面裡還是一樣會開始出現奇奇怪怪幻覺,或是小部份畫面像是畫圖用力過頭崩壞/畫壞的質感。
後來再重思考想到文章開頭關於tile影片的講解中提到的,圖片過大時,提示詞對大圖中的每個小區塊(512×512)會“分別”產生影響。提示詞與tile間就是你認為和AI認為的拉扯,那麼就讓這裡不要有拉扯,全AI判斷(只要AI對圖片中的內容沒有剛好判斷錯誤~應該機率很小),去掉提示詞會”分別”對每個小區塊產生影響的因素拿掉後就更保險、不易出現幻覺鬼影。所以這裡可以拿掉提示詞或是再拉高tile權重去降低使用Ultimate SD upscale分格算圖時的幻覺鬼影。
這個Youtube – Olivio Sarikas的Stable Diffusion教學,有空可以把他的教學影片都看一遍。
在現有電腦顯卡配置下,想得到一張遠近都能看的高清放大圖,以這張圖我會選擇處理的方式就是,不用Ultimate SD upscale。直接用顯卡極限重繪放大畫一張增加了高重繪幅度細節原圖4倍尺寸的圖(2048×3072),之後再用Extras下的放大演算法去放大2倍(4096×6144)。這樣是目前試出效果最理想也相對省時的方案。
(PS. 不管上網去搜羅哪種超好用的放大演算法,我覺得目前這些放大演算法都只動用到放大2倍就好,再高的倍數都是會有滿滿的失真塗抺感,只能遠觀不能近看~)
如果真的還是要用Ultimate SD upscale的話,也有試過另一種方法就是 :
一次先放大2倍(denoising : 0.3)→丟回img2img再放大2倍(denoising : 0.3)→再丟回img2img再放大2倍(denoising : 0.1)
同樣最後達到原圖的8倍(4096×6144),結果能得到的效果要比一次放大8倍來得好很多。每次的Denoising盡量調低一點(差不多足夠抵掉演算放大法相應倍數的塗抺感就行),不然女孩會隨著一次次的再重繪放大2倍的過程中愈長愈”成熟”(細節過多人像易顯老,連背景,整張圖看起來都會有畫過頭的不自然感)~
不過我覺得Ultimate SD upscale實在還是太麻煩了,每一張圖或許多注意調整各個參數找到一個完美的搭配,可以讓圖有細節的放大沒有塗抺感又不出現幻覺鬼影。可是別忘了還有個邊緣格狀線條痕跡的問題要注意。如果最後放大的圖還是出現格狀線條痕跡的話,那我真的就束手無策了。
這張圖用了Ultimate SD upscale的方式重繪放大後,最終在背景處還是出現了一格一格區塊……@@。白忙一場空~
不過大家別忘了開源的AI繪圖,最大的優點就是一有需要解決的問題時,集眾人之力,很快就會有更優化的更新方式出現。在Ultimate SD upscale之後,又還有一個更強的分格放大繪圖 : Tiled Diffusion with Tiled VAE
官網上說明 : Compare to Ultimate SD Upscale, the algorithm is much more faithful to the original image and produces significantly fewer artifacts.
以及最重要的”Tile Overlap”,每個分格的區塊都會互相重疊一部分,而不是像Ultimate SD upscale是單純的拼接,這樣就可以解決邊緣格狀不自然接縫痕跡(seams)的問題了吧~
這部分就之後另一篇文章再來測試,看能不能把我想要的真人寫實照片也能真的沒有塗抺感的高清放大~