這篇要用Controlnet去達成多人構圖的目標。
來源圖片一樣透過Copilot生成,事實上Copilot非常適合用來抽圖,但是目前只能用文字控制,另外一天的免費加速額度有限,用完後生成速度會慢很多,要等上一天才可以再獲得加速額度,但肢體正確度與文字理解能力都非常強。
Scribble的預處理器會將來源圖片處理成草稿形式,如下圖中間,然後再生成圖片。
仔細看的話生成的圖片出現嚴重的肢體錯誤,因為模型非常不擅長處理倒過來的人臉。
我測試時使用的是 ComfyUI's ControlNet Auxiliary Preprocessors提供的Fake Scribble Lines (aka scribble_hed)節點,這個節點在處理高完成度的來源圖片時會產生比較像草稿的控制圖,如果來源圖片本身是手稿類草稿的話,可以使用Scribble Lines做預處理。
下圖左邊就是做為靈魂繪手的我,為了測試而犧牲小我畫出來的參考圖,中間是經過Scribble Lines處理過的參考圖,右邊是生成的圖片。
當然,為了達到右邊生成的圖片效果,還是必須要在文字提示詞放入詳細的描述跟調整其他參數,如下圖將end_percent調整到0.3才獲得比較好的效果。
Openpose應該是最多人使用的Controlnet功能,透過偵測人臉跟肢體,很大程度的控制了生成圖片的人物姿勢,又不會受到來源圖片的元素影響。
下圖中間是使用Openpose pose預處理器處理後的控制圖,只偵測臉部的話生成的圖片跟來源圖片動作差異甚大,而且無法偵側倒過來的人臉。
下圖中間是讓預處理器偵測手、身體、臉再次生成的圖片,一樣無法偵測到倒過來的人臉,生成的圖片動作跟來源圖片非常相近。
下圖是將預處理器處理過的控制圖在繪圖軟體中處理拼接後,做為控制圖使用,雖然加入了倒立的人,但臉部跟肢體都崩壞了。
Openpose的優點是專注在姿勢上,缺點就是預處理器無法處理倒過來的人臉,而非正面的臉會畫崩應該是StableDiffusion模型本身的侷限。
下圖是使用Canny的效果。
Canny的預處理節點數值調整效果如下圖。
使用Canny時因為會很高程度地採用原圖的線條,所以在繪製倒過來的人臉時也比較不容易崩壞掉,但同時細節也受到更高程度的限制,如果調整套用時的強度跟百分比,又會與控制圖差異過大,人數會產生變化,所以Canny比較常見使用在線稿轉彩稿的應用上。
下圖是使用Lineart的效果。
Lineart的效果跟Canny差不多,倒立的人臉也不太會崩壞,但是生成的圖片偏暗一點。
可能是受到搭配的模型在訓練時的資料影響。
本篇簡單測試了幾個Controlnet的功能,雖然都可以在512*512的生成尺寸達到多人構圖的目標,但是共通的缺點是倒過來的人臉跟肢體容易崩壞掉,而不易崩壞掉的功能又會因為控制強度過高,使生成圖片跟參考圖片差異過小。
如果想要更好的控制構圖跟畫面品質,則必須搭配IPAdapter或FaceSwap等節點,工作流又會過於複雜.......。
看來探索的旅程還沒結束。