這篇文章想要聊一下,在使用ControlNet的reference_only時,因為原始參考圖實在太過於模糊,造成生產出來的圖片品質不佳的情況下要怎麼使用一些技巧提高參考圖的精細度。
這個方法有個問題,就是精細化之後的人臉,並不一定吻合原始圖片的人臉,所以想要百分之百完全還原一樣的人臉與衣著,這個方法做不到。但是如果是為了製作人物角色的概念插畫,還是可以勉強一用。
最近正在靠著一張大圖產生不同的人物圖樣。擁有較大面積的人物比較好處理,但是離鏡頭太遠,又穿著容易跟背景或人物頭髮混淆的衣物的角色,就會特別難處理,例如這個角色:
由於人物距離鏡頭太遠,加上頭上有非常難以形容的黑色頭飾,混合了黑色長袍與黑色頭髮,在使用ControlNet的reference_only來製作新圖時,出來的效果都非常慘烈,除了人物完全不像之外,畫質也非常低落,出圖跟近視沒啥差別。
在Stable Diffusion裡面,由於reference_only是將參考圖轉化進Latent Space中當作參考源,因此圖會被變成八倍小的高維度抽象像素,如果圖本身的清晰度不夠,也就是說像素與隔壁像素之間的變化不夠大,就無法抽取出太有意義的高維度像素,那這樣出來的成品就會非常模糊。
因此,為了提高出圖品質,最好的方法就是將原始參考圖精細化,從源頭提升,才能改善這一症狀。但因為在精細化的過程中,會改造與增加細節在原始圖上,所以會慢慢偏離原始圖的樣式。這點要不斷改變提示詞來確保我們要的細節不會跑掉太多。
以我的例子,這張圖我最後使用這樣的提示詞來形容人物:
best quality, masterpiece, fantasy,
a 40 years old female with black hair, middle age,
wearing Black Hair Bowknot headband and black veil on her head, long sideburns, (black eyes:1.2), (flat chest:0.9), witch,
wearing black magic robe
在這之前嘗試了一整天不同的提示詞才獲得我感覺是對的效果。
找到可用的提示詞的方法就是先將原始圖片剪下512x512的方形圖,注重在臉部與上半身的位置,然後使用img2img搭配0.2到0.3的denoising strength,搭配上想要測試的提示詞來改造參考圖,並且將出圖尺寸增大到1024x1024,由於圖變大了,所以Stable Diffusion就可以用更多的空間修改出提示詞要的內容。
下面是我最終調整出來的第一階段參考圖:
當有了比較精細的參考圖之後,接下來要生產變化較大的最終參考圖。
首先,使用同樣的提示詞,在txt2img中算圖,但是要打開ControlNet,使用canny或lineart來框定人物的輪廓,在比較之後,我使用lineart來配合算圖:
在重調尺寸的設定上,我使用Resize and Fill,因此來源圖雖然是1024x1024,但我產出的是1152x768的寬圖:
可以看到左右邊Stable Diffsion很聰明地幫我填了還算可以的景。
這時,我們要使用繪圖軟體,將該圖裁剪出512x512的臉部特寫(避免亂七八糟的手指入畫),然後使用img2img配合0.2到0.3的denosing strength放大成768x768,再使用inpaint塗抹臉部範圍,加上masked only來針對面部繼續精細化。
於是我得到了細節足以當做參考圖源的最終參考圖:
在這張參考圖的指引下,就能在txt2img下產出解析度比較高的成品圖了:
從成果圖來看,細節部分已經能掌握到原本角色的一些特徵了,雖然頭髮上的細節跑掉不少,但是糊成一團的問題已經解決,可以用這些圖來做第二次加工了:
例如使用左下角的成品圖當作ControlNet lineart的原始資料,可以做出這樣的成品:
祝大家AI算圖愉快!