ControlNet,使得 Stable Diffusion 可以接受條件輸入來指導圖像生成過程,從而開啓了AI生圖的可控時代。其中,開源的 ControlNet 模型包括如 OpenPose 姿勢識別、Canny 邊緣檢測、Depth 深度檢測 等等,每種模型都有其獨特的特性。本文將深入探索 Depth 深度檢測 的工作流程和應用實例,展示其如何幫助我們控制姿勢、轉換性別或物種、修改材質以及創建藝術字等等。
Depth 深度圖
Depth 預處理器可以根據參考圖像估計基本 深度圖,深度圖是對 3D 場景的 2D 灰度表示,每個像素的值對應於從觀察者視點看場景中物體的距離或深度。白色 代表近距離,黑色 則表示遠距離。通過深度圖可以向AI傳遞圖片的空間信息,從而指定構圖、姿勢和3D結構等。在保持原始構圖的同時,可以生成各種新穎創意的圖像。
相似類型對比
每種 ControlNet 都有其獨特的特性和差異,和 Depth 類似的還有如 法線貼圖(NormalMap)和 語義分割(Seg)等。
法線貼圖
法線貼圖 是將 3D 結構信息映射到 RGB(紅、綠、藍)圖像。通過 ControlNet 推斷並提取法線貼圖,可以在圖生圖的時候保留原圖的三維結構。相較於 Depth ,Normal Map 可以更為精細地提取不均勻性。
然而,如果想更改臉部或背景等細節,則深度圖可能會更為合適。
語義分割
語義分割 可以在檢測內容輪廓的同時,將畫面劃分為不同的區塊,併為每個區塊賦予語義標註,從而實現更加精準的控圖效果。然而,分割僅提取畫面的平面構成,無法提取 3D 結構信息。因此,在需要重點關注 3D結構 的場景中,建議使用 Depth 或 Normal Map。另一方面,若無需提取 3D 結構,Seg 則是一個更為合適的選擇。
使用步驟和參數
- 在 ControlNet 選項卡中上傳參考圖像。
- 勾選 “Enable” 並選擇 “Depth” 作為控制類型,選中後 Preprocessor 和 Model 會自動配置為對應的默認項。
- 如果想查看預處理的效果,點擊特徵提取按鈕 “
💥”,即可提取特徵並顯示結果。
通過從左側的原始圖像中提取景深信息,生成中間的黑白預處理器圖像,在此基礎上進一步生成右側的新圖像。可以看出,depth 在保留參考圖像中的空間信息方面非常有效。
控制權重
需要注意的是,使用 Depth 描繪人像可能會帶來一個副作用,即人物和背景間的深度差異會限制人物形象的自由度,使人體的形狀過於固定,甚至可能影響人物的服飾。
如果影響到了期望實現的效果,可適當降低 Control Weight,以獲得更靈活的圖像生成結果。
數值越低,效果越弱;數值越高,效果越強。測試下來 0.5 是個較適中的數值,可以在保持較好的控圖效果的同時,保留 lora 模型角色的服飾特徵。此外,還可以選擇將 Control Mode 設置為 “My prompt is more important”,也有助於降低 depth 控圖的限制。
預處理器
- Depth Midas:默認選項,是經典的深度信息估算預處理器,在細節方面相對較少。適用於具有較大縱深的風景畫面,能夠更好地表示出遠近關係。它更注重近景內容的提取,雖然也包含遠景內容,但整體細節不太豐富。
- Depth Zoe:中等細節水平的預處理器,其細節程度介於 Midas 和 Leres 之間。結合了相對深度估計和度量深度估計的新算法,可廣泛應用於不同領域,相較於其他預處理器,具有更少的誤差和更準確的結果。在較大縱深的場景下,它的遠景效果優於 Midas。
- Depth Leres:相比前面兩種預處理器,具有更豐富的細節表現。其成像焦點在中間景深層,這樣的優勢在於可以獲得更廣泛的景深範圍,且中距離物體的邊緣更清晰,但近景圖像的邊緣可能會相對模糊。此外,其微調選項的能力有所增強,這對於控制將對象放置在“近處”或“遠處”特別有用。
- Depth Leres++:生成最多細節且效果最為精細的。可以將其看作是 Depth Leres 的改進版本,在細節表現和處理效果上都有所提升。
- Depth Anything:由香港大學和字節跳動提出的旨在處理各種任務環境下任意圖像,簡單且強力的基礎深度模型,相對較新,適用於廣泛的場景。
- Depth Hand Refiner:專為改善深度圖中的手部細節而設計的預處理器,特別適用於手部定位至關重要的場景。可以獲得更精確的手部深度信息,從而在圖像生成過程中實現更高質量的手部表現。
需要根據具體需求和應用場景來選擇適合的 Depth 預處理器,主要取決於希望新圖像與原始圖像的接近程度,以及所需的細節強度。
Remove Near/Background %
- Remove Near%:逐漸從最近處(白色)到最遠處將畫面中不同深度的人物/物體移除深度,直到完全變為白色(平面無深度)。
- Remove Background%:逐漸從最遠處(黑色)到最近處將畫面中不同深度的人物/物體移除深度,直到完全變為黑色(平面無深度)。
Remove Near% 會將較亮的區域處理為全白色,有效地將圖像中較近的部分"壓平",就像卡通人物撞到玻璃一樣。數值越高,深度圖中近處部分的效果就越趨於扁平化。
Remove Background% 會將較暗的區域處理為全黑色,使其在陰影中消失。數值越高,深度圖中遠處部分消失得越多。這對於去除背景中不需要的元素非常有用。相反,降低數值可以呈現更多的背景細節。
SDXL
由於 SDXL 的模型架構相比 SD 1.5 存在明顯的變更,因此無法兼容以往的 ControlNet 模型。要解決這個問題,首先需將 Stable Diffusion Web UI 更新至 v1.6.0 或更高版本,同時將 ControlNet 擴展更新至 v1.1.400 或更高版本。
git pull
從 Hugging Face 下載任意 Depth XL 模型,其中前三個模型是由 diffusers 團隊發佈的,該團隊是一個非盈利組織,由多名 AI 熱衷者自發組建而成,發佈過多款與 diffusion 相關的模型。
- diffusers_xl_depth_full.safetensors
- diffusers_xl_depth_mid.safetensors
- diffusers_xl_depth_small.safetensors
- kohya_controllllite_xl_depth.safetensors
- kohya_controllllite_xl_depth_anime.safetensors
- sai_xl_depth_128lora.safetensors
- sai_xl_depth_256lora.safetensors
- sargezt_xl_depth.safetensors
- sargezt_xl_depth_faid_vidit.safetensors
- sargezt_xl_depth_zeed.safetensors
- t2i-adapter_diffusers_xl_depth_midas.safetensors
- t2i-adapter_diffusers_xl_depth_zoe.safetensors
下載完成後,把文件移動到 webui/models/ControlNet 模型文件夾中。使用的基本方法與 SD1.5 相同,首先,在 checkpoint 中確保選擇了 SDXL 大模型。然後,Control Type 選擇 Depth ,此時下拉菜單會自動篩選出 Depth XL 模型。若為空,可以嘗試點擊右下角的 🔄 刷新圖標。
從出圖結果來看,small 版本具有更快的生成速度和更高的自由度,適合快速創作和較低細節要求的場景;full 版本生成速度較慢,但能夠保留原圖的細節最多,適用於對畫面控制要求較高的場;而 mid 版本介於兩者之間,可根據實際需求進行選擇。
ComfyUI
除了使用 Stable Diffusion Web UI,同理地可以在 ComfyUI 中設置工作流程,使用 SDXL 和 ControlNet 生圖。
ControlNet應用
關鍵節點一個是 ControlNet應用,負責接收預處理圖像的信息,並根據加載的模型來實現各項控制要素。普通版的節點上只有一個參數 強度,用於控制 ControlNet 的權重。值越大,生成的圖像越貼近參考效果。
如果想進一步控制它的開始、結束時間,則需要使用標有 高級(Advanced)的進階節點。
ControlNet加載器
另一個關鍵節點是 ControlNet加載器,其參數為 ControlNet名稱,用於加載所需的模型。正如前面強調的,這裏的 ControlNet 模型版本,需要與所選的 Checkpoint 模型版本相匹配。
預處理器
注意, 圖像 的輸入需要連接到預處理器,ControlNet 的預處理器種類非常多,和 Stable Diffusion Web UI 一樣,在選擇時,需確保所選預處理器與加載的 ControlNet 模型相匹配。
或者,可以使用多合一的自定義節點,例如 Aux集成預處理器,包含了各種控制類型,且在持續迭代更新,可以更方便地選擇和使用。
整個工作流:
應用
空間場景
對於需要生成富有空間感的多層次場景圖像,Depth 尤為有用,例如以下參考圖所示的建築內部空間。相較於直接使用 圖生圖,Depth 能夠更準確地傳遞參考圖的空間信息,從而實現更為精確的生成效果,能夠更好地保留原始構圖的空間層次感。
風格轉換
可使用 img2img 在保持相同構圖的同時進行風格轉換,例如最常見的 2D 轉 3D 等。如果想增強轉換的風格程度,可搭配各類 LoRA 模型,例如 blindbox 手辦風格、goldcarvingcd 黃金雕像、DUANMAO 毛絨玩具等。
以下是可供參考的一些參數:
- checkpoint:revAnimated
- Denoising strength:1
-
ControlNet
-
Depth
- Preprocessor:depth_anything
- Control Weight:單獨用 1.2,搭配其他 ControlNet 可適當降低
-
Tile(可選搭配),控制顏色,如果是黃金或者玻璃材質等則忽略
- Preprocessor:tile_colorfix
- Control Weight:0.3
-
Canny(可選搭配),加強邊緣和細節控制
- Preprocessor:canny
- Control Weight:0.5
-
人體透視
通常情況下,我們使用 OpenPose 來進行動作還原,是一種知名度較高的開源人體姿態估計系統,能夠從圖像或視頻中準確地檢測並估計人體的關鍵點位置。然而,當涉及肢體交疊或人體透視等複雜場景時,OpenPose 的準確性可能會降低。
增加權重(Control Weight)可在一定程度上提高姿勢控制的效果。
結合深度圖可以清晰地獲取肢體前後的結構,這使得 AI 能夠更好地理解動作的層次關係和空間信息。因此,當 Openpose 無法準確地還原動作時,可以嘗試結合 Depth,以實現更精確的動作還原。
另外,還可以使用 Magic Poser 等 3D 模型創作工具,允許用户操縱 3D 人偶模型,從而創建出各種想要的姿勢。
矯正手指
手部畸形、手指缺失或多餘等手部問題,可通過結合 depth 修復。
方法1: Depth Library
- 點擊 Add Background Image 選擇要修改的圖像;
- 在 Hands 模型庫中選擇適當的添加;
- 通過移動和旋轉調整手部對象的大小、角度和適當位置;
- 點擊 Save PNG 保存。
回到文生圖和原圖保持相同的參數:
- 勾選 Enable 以開啓 ControlNet;
- 在選項卡中上傳剛保存的手部參考圖像;
- Control Model 選擇
depth; - 將 Starting Control Step 調整至
0.3。
修復後效果對比:
方法2: 局部重繪 ➕ depth_hand_refiner
- 切換到 img2img 的 inpaint 面板;
- 手動塗抹需要修改的手部區域;
- 勾選 “Enable” 並選擇 “Depth” 作為控制類型,選中後 Preprocessor 和 Model 會自動配置為對應的默認項。
- 選擇
depth_hand_refiner作為預處理器。
修復後效果對比:
方法3: ADetailer ➕ depth_hand_refiner
- 勾選 Enable 以開啓 ADetailer;
- 模型選擇
hand_yolov8n.pt或者PitHandDetailer-v1-seg.pt(C站上下載); - Inpaint denoising strength 調整到
0.4 ~ 0.7; - ControlNet model 選擇
depth; - ControlNet module 選擇
depth_hand_refiner。
修復後效果對比:
logo / 藝術字
可以生成基於文本的圖像,即獨特而富有創意的視覺效果的藝術字:
- 使用 PS 或其他圖形處理工具創建黑白素材圖;
- 將黑白素材圖導入 ControlNet 中並選擇
All; - Preprocessor 選擇
invert (from white bg & black line); - Model 選擇 depth 類型的模型;
- 適當調低 Control Weight 以使圖像背景與文字相融合。
另外,需要注意不同的字體對於某些實體元素可能效果更好,而對於其他則相反。例如 細長的字體 比較適合搭配纖細的元素比如麪條、巧克力、燈管等物品。而 粗壯的字體 比較適合岩石、冰塊、餅乾等塊狀的元素。
總結
Depth 深度檢測在 Stable Diffusion 的 ControlNet 中扮演着至關重要的角色,它不僅能夠傳遞空間信息以指導圖像生成,還廣泛應用於多種場景,如空間場景生成、風格轉換、人體透視、矯正手指以及藝術字創作等。通過合理選擇預處理器和控制權重,可以在保持原始構圖的同時,實現高度可控且富有創意的圖像生成效果,為我們提供了更多的可能性和靈感。
參考
https://www.youtube.com/watch?v=qG6OI7zmkxg
https://creatixai.com/controlnet-depth-tutorial-stable-diffus...
https://kindanai.com/manual-controlnet-depth/
https://huggingface.co/lllyasviel/sd-controlnet-depth
https://ai-illust-kouryaku.com/?p=12450
https://www.ipentec.com/document/software-stable-diffusion-cr...
https://www.bilibili.com/video/BV1Ds4y1e7ZB/
https://civitai.com/articles/6559/comfyui-sdxl-control-net-de...
https://kurokumasoft.com/2023/09/05/stable-diffusion-xl-contr...
https://www.wehelpwin.com/article/4223
https://www.runcomfy.com/zh-CN/tutorials/mastering-controlnet...
https://www.cnblogs.com/joy99/p/18402051
https://ai-wonderland.com/entry/cntrolnetguide#depth
https://github.com/Mikubill/sd-webui-controlnet/discussions/2400