【前言】
ControlNet 是對 Stable Diffusion 影響急劇的模型,概念是為生圖設立更多的限制,由於功能眾多我只以常用的為例,那這期為線搞生圖與骨架參考兩項,試著參考原圖生成相似的圖樣。
【重點整理】
- 圖生圖對於 ControlNet 線搞轉圖顏色較淡,因此推薦用文字生圖
- Open-Pose + Reference + IP-Adapter 能生成較相像的圖像
【重要設定】
請先透過選單中的 Extensions >> Install from URL 下載 ControlNet for WebUI
https://github.com/Mikubill/sd-webui-controlnet.git
完成後重新啟動程式,應該會發現生成設定中多出一個選單

【預計內容】
- Sketch to Image — Canny Edge Detection
- Skeleton — Open-Pose
【主要內容】
1. Sketch to Image — Canny Edge Detection
對於不擅上色的人們總夢想著有自動上色的功能,然而現實很殘酷,圖生圖是透過參考圖的內容來生成而非延伸其內容,因此常有全身白且場景白的狀態,並與原圖架構不一致,那麼究竟如何解決這項問題呢?


透過 ControlNet 我們執行 Canny Edge Detection,便能夠依賴該插件用原圖的邊線做限制來達成。
Step. 1 — 點開設定介面,首先將線搞傳入,並按下 Enable 啟用這個單元,最後選擇 Canny 邊線預測。

Step. 2 — 再來選用 Canny 的模型,我所使用的是作者提供的原模型。【模型下載處】

完成之後,讓我們看看成品如何吧!很明顯參考了原本的線搞架構,十分地成功。


但在圖生圖與文字生圖的對照很明顯,相同的 seed 與 prompt 下,後者的效果更加理想。那我個人認為的原因,是圖生圖同時參考了白底,導致顏色偏淡,而形成不同的畫風。


2. Skeleton — Open-Pose
Open-Pose 目前有很多尷尬的境遇是:他是參考骨架生成新的圖,因此難保留原始風貌。接著,由於其是透過區塊分割做判斷,因此線搞圖一般是無法判斷出骨架的。最重要的,這個模型本身針對真人真物,因此動漫的圖也很常偵測不到。
那在 Preprocessor,我習慣上是以最精準的 full 為主,那其中還有針對動物的 animal_openpose 可使用。





那我接著用人形的圖操作下去,點擊 Show Preview >> Run Preprocessor 就會跳出右側的黑框,接著按下 Edit 能開啟介面修改姿勢,這邊我簡單將骨架向右移動。姿勢不錯,但結果在衣著或臉型都完全不同。


那有個辦法能讓圖更相像,便是透過 Reference 提取整張原圖的信息,並傳遞給 Open-Pose(兩個 Unit)。那我這時會建議 Reference Only 搭配 ControlNet is More Important,強化原圖訊息的占比。




那在這之上,我們能再依靠 IP-Adapter 更進一步,簡單說類似於圖片轉提詞的模型,那也因此要搭配 Reference 做使用,那我所使用的是 plus 加強版,但對於 GPU 不足的電腦代價是超級久的生成時間( 測試時 20sec→12min)。另外推薦將 Reference 改回 Balanced,避免明顯的重疊片段。

.

+ IP-Adapter

+ IP-Adapter
那為了測試是否有必要用到最高規格,我又分別測試了 base 與 light 版來做對照(兩者都 17sec)。但結果出來真的是天壤之別,看來有必要空出 GPU 用量了。



【後話】
那這期先利用參考圖去做類似的生成就到這邊為止,那再下一篇我應該會以邊線的模型進行介紹,那我們下期再會拉。
【參考資料】
[1] 範例用圖 — 胡桃 by あんべよしろう
https://www.pixiv.net/artworks/93870151
[2] ControlNet: A Complete Guide
https://stable-diffusion-art.com/controlnet/