2023-06-11|閱讀時間 ‧ 約 9 分鐘

不想老畫出同樣的臉?那就多加幾道功夫吧 - AI繪圖 Stable Diffusion

前言

  已經玩SD好一陣子的人應該已經發現,很多名字帶有「Mix」且比較有名的checkpoint模型基本上就是在互相「抄來抄去」,而且在女角方面很多只使用了極少的人物重點訓練,導致算出來的臉常常「都長一個樣」。
  雖然可以透過使用LoRA模型、Textual Inversion等局部改變風格,然而無論是自己製作的還是他人製作的,往往都參雜了一些副作用在裡頭,例如更加扭曲的手指、太過寫實、太過不寫實等,時不時還會蓋掉所使用的checkpoint模組原本的優點,而且如果一次使用超過一個LoRA/Textual Inversion,它們彼此之間還會「打架」,產生非常難以預判效果的成品。
  所以到底該怎麼辦呢?

現階段而言,人工介入仍非常必要

  最近筆者在做一個30張高解析度(3072*6144)女角畫冊的計畫,因為不想每張的女角看起來都像同一個人,所以摸索出了一些心得:

一、慎選checkpoint模組
  有的checkpoint模組因為作者本身的喜好而非常「固執」,比方說筆者想繪製一張具有非裔臉部特徵的綠皮膚半獸人,先使用SweetMix算出一張384*768的小圖:
SweetMix 384*768,還不賴!
SweetMix 384*768,還不賴!
  接著,筆者原本想使用neverendingDreamNED模組來進行Image2Image的第一次2倍放大(768*1536),結果在提示詞保有「Green skin」(綠皮膚)、「Orc」(半獸人)、「thick lips」(厚嘴唇)且使用((加重權重)),並使用ControlNet的tile_resample的情境下,該模組硬是畫出了下面結果:
neverendingDreamNED死都不肯畫出綠皮膚和厚唇
  而筆者最近常用的fantasticMix雖然在CIVITAI上的範例圖也有明顯的女角偏好,但仍成功「解讀」和保有了半獸人的特徵,並成功畫出了非裔特徵的五官:
Good job,fantastic!
  找對幫手,才會事半功倍!

二、手動合併不同Denoising Strength的圖
  然而,筆者會想嘗試使用neverendingDreamNED,是因為fantasticMix在超高解析度(3072*6144)會畫出太多不必要的細節而造成原本沒有的錯誤,尤其在皮膚處理方面特別糟糕
Denoising Strength 0.5 畫出來的超奇怪膝蓋和小腿
  雖然可以調低Denoising Strength來避免過多的細節與錯誤,但會導致其模糊程度細節缺乏度和使用extras放大圖片時相差無幾,而且使用0.5+的Denoising Strength時,fantasticMix常會畫出筆者想要的五官細緻度,所以也無法完全捨棄。
  有鑑於此,原本筆者想在第一、第二放大階段使用沒有這麼強調細節的checkpoint模組,到最後階段再使用fantasticMix收尾,然而正如前段所示,這個嘗試在半獸人主題上以失敗告終。
  那到底該怎麼辦?用Inpaint?——其實手動後製會更有效率。
  在繪圖軟體中手動處理,現階段仍是不可或缺的過程,特別是在處理手、腳、人體錯誤時,與其不停inpaint重算碰運氣,不如手動人工處理更快,而且不需要專業的繪畫技巧,只需要簡單的模糊(blur)、圖層遮罩疊加,以及粗略的手繪。
  以筆者的套圖製作過程為例,在進行3072*6144這個最終放大階段時,會在繪圖軟體中整合不同的Denoising Strength算出的2~4張圖,且有時會再搭配以extras放大2倍的1536*3072圖(*註1&2)或tile_resample的圖(在detected_maps資料夾中),挑選一張筆者認為錯誤度最低的圖為基底,在其上用遮罩疊加其他版本的圖片,並配合調整色調、對比等
筆者使用的是Clip Studio Paint
  另外,筆者通常會在中等解析度階段(768*1536或1536*3072)處理手腳指畸形和臉部的問題,使用粗略的手繪協助SD判讀,進而在放大時算出更理想的成果:
簡單多加幾筆,SD就能算出更佳的成果
  最終成品的縮小版本如下(真正的解析度vocus不支援,敬請期待套圖完成):
1024*2048的縮小版本
*註1:extras的放大(Upscale)請參閱子不語的 Stable Diffusion基礎 -- 智慧放大功能(Upscale) 一文。但寫實風的話筆者並不推薦坊間常推的4x-UltraSharp放大演算法,因為該演算法的成果太過「平滑」。筆者使用的放大演算法是4x_NMKD-Superscale-SP_178000_G.pth*此為直接下載連結)
*註2:A1111和Vlad webui的Image2Image在一般情況有解析度硬上限,但在Vlad使用插件「Multi Diffusion」的「Tiled Diffusion」並勾選「Keep input image Size」可突破該硬上限。Multi Diffusion的使用方法請參閱筆者 放大/多道提示詞的好幫手:MultiDiffusion插件 - Stable Diffusion 一文中「好了!開始進入正題」的部分。

三、其他心得彙整
1. ControlNet的tile_resample功能在階段性放大過程中時常扮演重要的角色,但有時會有反效果,會有需要關掉的情況,例如用Inpaint修正手指、五官時。
2. 使用Inpaint時需要關閉MultiDiffusion的Tiled Diffusion和Tiled VAE功能,不然會出錯。
3. 384*768 → 768*1536階段時(初始小圖首次放大2倍)如果使用ControlNet的tile_resample功能,Denoising Strength可放大膽使用0.75→1,個人經驗是成果往往相當好。另一方面,後續放大時Denoising Strength的值基本要在0.5以下才比較容易有好成果。
4. 好比筆者需要使用「Orc」、「green skin」、「thick lips」才能畫出非裔特徵,如果不給種族、膚色、相貌、人物名等相關提示詞,那麼checkpoint模組往往還是會往同一種臉和身形靠攏——而且虛構的種族、相貌、人物的提示詞也常有效果。
5. A1111不確定,但Vlad在Settings>Stable Diffusion選單下有「Apply color correction to img2img results to match original colors.」選項,在放大圖片時會自動套用色調調整。我會同時勾選Settings Image Options選單中的「Save a copy of image before applying color correction to img2img results」,讓SD同時保留色調整前後的兩張圖,因為有時候調整前的較佳,有時候調整後的較佳。
6. 後續嘗試用不同的checkpoint模型運算超高解析度時,筆者注意到在Denoising Strength 0.5+時基本上都會出現亂畫的問題,這可能是目前SD的極限,因為訓練時使用的圖片解析度大多在768以下,導致SD不曉得該怎麼正確填滿高解析度的圖片。
祝大家算圖愉快!

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.