Stories

Detail Return Return

stable diffusion 控制空間構圖 -ControlNet Depth - Stories Detail

ControlNet,使得 Stable Diffusion 可以接受條件輸入來指導圖像生成過程,從而開啓了AI生圖的可控時代。其中,開源的 ControlNet 模型包括如 OpenPose 姿勢識別、Canny 邊緣檢測、Depth 深度檢測 等等,每種模型都有其獨特的特性。本文將深入探索 Depth 深度檢測 的工作流程和應用實例,展示其如何幫助我們控制姿勢、轉換性別或物種、修改材質以及創建藝術字等等。

all.jpg

Depth 深度圖

Depth 預處理器可以根據參考圖像估計基本 深度圖,深度圖是對 3D 場景的 2D 灰度表示,每個像素的值對應於從觀察者視點看場景中物體的距離或深度。白色 代表近距離,黑色 則表示遠距離。通過深度圖可以向AI傳遞圖片的空間信息,從而指定構圖、姿勢和3D結構等。在保持原始構圖的同時,可以生成各種新穎創意的圖像。

image.png

相似類型對比

每種 ControlNet 都有其獨特的特性和差異,和 Depth 類似的還有如 法線貼圖(NormalMap)和 語義分割(Seg)等。

huggingface.co_lllyasviel_sd-controlnet-depth.png

法線貼圖

法線貼圖 是將 3D 結構信息映射到 RGB(紅、綠、藍)圖像。通過 ControlNet 推斷並提取法線貼圖,可以在圖生圖的時候保留原圖的三維結構。相較於 DepthNormal Map 可以更為精細地提取不均勻性。

image 1.png

然而,如果想更改臉部或背景等細節,則深度圖可能會更為合適。

image 2.png

語義分割

語義分割 可以在檢測內容輪廓的同時,將畫面劃分為不同的區塊,併為每個區塊賦予語義標註,從而實現更加精準的控圖效果。然而,分割僅提取畫面的平面構成,無法提取 3D 結構信息。因此,在需要重點關注 3D結構 的場景中,建議使用 DepthNormal Map。另一方面,若無需提取 3D 結構,Seg 則是一個更為合適的選擇。

image 3.png

使用步驟和參數

  1. ControlNet 選項卡中上傳參考圖像。
  2. 勾選 “Enable” 並選擇 “Depth” 作為控制類型,選中後 PreprocessorModel 會自動配置為對應的默認項。
  3. 如果想查看預處理的效果,點擊特徵提取按鈕 “💥”,即可提取特徵並顯示結果。

image 4.png

通過從左側的原始圖像中提取景深信息,生成中間的黑白預處理器圖像,在此基礎上進一步生成右側的新圖像。可以看出,depth 在保留參考圖像中的空間信息方面非常有效。

%E4%B8%8B%E8%BD%BD.jpg

控制權重

需要注意的是,使用 Depth 描繪人像可能會帶來一個副作用,即人物和背景間的深度差異會限制人物形象的自由度,使人體的形狀過於固定,甚至可能影響人物的服飾。

%E4%B8%8B%E8%BD%BD-(1).jpg

如果影響到了期望實現的效果,可適當降低 Control Weight,以獲得更靈活的圖像生成結果。

image 5.png

數值越低,效果越弱;數值越高,效果越強。測試下來 0.5 是個較適中的數值,可以在保持較好的控圖效果的同時,保留 lora 模型角色的服飾特徵。此外,還可以選擇將 Control Mode 設置為 “My prompt is more important”,也有助於降低 depth 控圖的限制。

image 6.png

預處理器

image 7.png

  • Depth Midas:默認選項,是經典的深度信息估算預處理器,在細節方面相對較少。適用於具有較大縱深的風景畫面,能夠更好地表示出遠近關係。它更注重近景內容的提取,雖然也包含遠景內容,但整體細節不太豐富。
  • Depth Zoe:中等細節水平的預處理器,其細節程度介於 Midas 和 Leres 之間。結合了相對深度估計和度量深度估計的新算法,可廣泛應用於不同領域,相較於其他預處理器,具有更少的誤差和更準確的結果。在較大縱深的場景下,它的遠景效果優於 Midas。
  • Depth Leres:相比前面兩種預處理器,具有更豐富的細節表現。其成像焦點在中間景深層,這樣的優勢在於可以獲得更廣泛的景深範圍,且中距離物體的邊緣更清晰,但近景圖像的邊緣可能會相對模糊。此外,其微調選項的能力有所增強,這對於控制將對象放置在“近處”或“遠處”特別有用。
  • Depth Leres++:生成最多細節且效果最為精細的。可以將其看作是 Depth Leres 的改進版本,在細節表現和處理效果上都有所提升。
  • Depth Anything:由香港大學和字節跳動提出的旨在處理各種任務環境下任意圖像,簡單且強力的基礎深度模型,相對較新,適用於廣泛的場景。
  • Depth Hand Refiner:專為改善深度圖中的手部細節而設計的預處理器,特別適用於手部定位至關重要的場景。可以獲得更精確的手部深度信息,從而在圖像生成過程中實現更高質量的手部表現。

%E4%B8%8B%E8%BD%BD1.jpg
需要根據具體需求和應用場景來選擇適合的 Depth 預處理器,主要取決於希望新圖像與原始圖像的接近程度,以及所需的細節強度。

a1d49337680190223bbdb0501af44706_720.jpg

Remove Near/Background %

  • Remove Near%:逐漸從最近處(白色)到最遠處將畫面中不同深度的人物/物體移除深度,直到完全變為白色(平面無深度)。
  • Remove Background%:逐漸從最遠處(黑色)到最近處將畫面中不同深度的人物/物體移除深度,直到完全變為黑色(平面無深度)。

%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_e877d997-7e64-4e86-945a-3c2a317e1006.png

Remove Near% 會將較亮的區域處理為全白色,有效地將圖像中較近的部分"壓平",就像卡通人物撞到玻璃一樣。數值越高,深度圖中近處部分的效果就越趨於扁平化。

Remove Background% 會將較暗的區域處理為全黑色,使其在陰影中消失。數值越高,深度圖中遠處部分消失得越多。這對於去除背景中不需要的元素非常有用。相反,降低數值可以呈現更多的背景細節。

111.jpg

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 模型。若為空,可以嘗試點擊右下角的 🔄 刷新圖標。

image 8.png

從出圖結果來看,small 版本具有更快的生成速度和更高的自由度,適合快速創作和較低細節要求的場景;full 版本生成速度較慢,但能夠保留原圖的細節最多,適用於對畫面控制要求較高的場;而 mid 版本介於兩者之間,可根據實際需求進行選擇。

1.jpg

ComfyUI

除了使用 Stable Diffusion Web UI,同理地可以在 ComfyUI 中設置工作流程,使用 SDXLControlNet 生圖。

image 9.png

ControlNet應用

關鍵節點一個是 ControlNet應用,負責接收預處理圖像的信息,並根據加載的模型來實現各項控制要素。普通版的節點上只有一個參數 強度,用於控制 ControlNet 的權重。值越大,生成的圖像越貼近參考效果。

image 10.png

如果想進一步控制它的開始、結束時間,則需要使用標有 高級(Advanced)的進階節點。

image 11.png

ControlNet加載器

另一個關鍵節點是 ControlNet加載器,其參數為 ControlNet名稱,用於加載所需的模型。正如前面強調的,這裏的 ControlNet 模型版本,需要與所選的 Checkpoint 模型版本相匹配。

image 12.png

預處理器

注意, 圖像 的輸入需要連接到預處理器,ControlNet 的預處理器種類非常多,和 Stable Diffusion Web UI 一樣,在選擇時,需確保所選預處理器與加載的 ControlNet 模型相匹配。

image 13.png

或者,可以使用多合一的自定義節點,例如 Aux集成預處理器,包含了各種控制類型,且在持續迭代更新,可以更方便地選擇和使用。

image 14.png

整個工作流:

image 15.png

應用

空間場景

對於需要生成富有空間感的多層次場景圖像,Depth 尤為有用,例如以下參考圖所示的建築內部空間。相較於直接使用 圖生圖,Depth 能夠更準確地傳遞參考圖的空間信息,從而實現更為精確的生成效果,能夠更好地保留原始構圖的空間層次感。

1 1.jpg

風格轉換

可使用 img2img 在保持相同構圖的同時進行風格轉換,例如最常見的 2D 轉 3D 等。如果想增強轉換的風格程度,可搭配各類 LoRA 模型,例如 blindbox 手辦風格、goldcarvingcd 黃金雕像、DUANMAO 毛絨玩具等。

00002-556030009.jpg

以下是可供參考的一些參數:

  • 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 的準確性可能會降低。

tmpf0pd3kk5.jpg

增加權重(Control Weight)可在一定程度上提高姿勢控制的效果。

xyz_grid-0000-2394376217.png

結合深度圖可以清晰地獲取肢體前後的結構,這使得 AI 能夠更好地理解動作的層次關係和空間信息。因此,當 Openpose 無法準確地還原動作時,可以嘗試結合 Depth,以實現更精確的動作還原。

tmpf0pd3kk5 1.jpg

另外,還可以使用 Magic Poser 等 3D 模型創作工具,允許用户操縱 3D 人偶模型,從而創建出各種想要的姿勢。

image 16.png

矯正手指

手部畸形、手指缺失或多餘等手部問題,可通過結合 depth 修復。

image 17.png

方法1: Depth Library

  1. 點擊 Add Background Image 選擇要修改的圖像;
  2. Hands 模型庫中選擇適當的添加;
  3. 通過移動和旋轉調整手部對象的大小、角度和適當位置;
  4. 點擊 Save PNG 保存。

%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A120240925-1610142x.jpg

回到文生圖和原圖保持相同的參數:

  1. 勾選 Enable 以開啓 ControlNet;
  2. 在選項卡中上傳剛保存的手部參考圖像;
  3. Control Model 選擇 depth
  4. Starting Control Step 調整至 0.3

WeCom20240928-2149152x.png

修復後效果對比:

2.jpg

方法2: 局部重繪 ➕ depth_hand_refiner

  1. 切換到 img2imginpaint 面板;
  2. 手動塗抹需要修改的手部區域;
  3. 勾選 “Enable” 並選擇 “Depth” 作為控制類型,選中後 PreprocessorModel 會自動配置為對應的默認項。
  4. 選擇 depth_hand_refiner 作為預處理器。

WeChatWorkScreenshot_9c837b70-900c-43e6-bedb-8d7c4c34c122.jpg

修復後效果對比:

2 1.jpg

方法3: ADetailer ➕ depth_hand_refiner

  1. 勾選 Enable 以開啓 ADetailer;
  2. 模型選擇 hand_yolov8n.pt 或者 PitHandDetailer-v1-seg.pt(C站上下載);
  3. Inpaint denoising strength 調整到 0.4 ~ 0.7
  4. ControlNet model 選擇 depth
  5. ControlNet module 選擇 depth_hand_refiner

WeChatWorkScreenshot_bf1f1e8d-1d7b-44b4-a066-72f0a9acbb05.jpg

修復後效果對比:

2 2.jpg

logo / 藝術字

可以生成基於文本的圖像,即獨特而富有創意的視覺效果的藝術字:

  1. 使用 PS 或其他圖形處理工具創建黑白素材圖;
  2. 將黑白素材圖導入 ControlNet 中並選擇 All
  3. Preprocessor 選擇 invert (from white bg & black line)
  4. Model 選擇 depth 類型的模型;
  5. 適當調低 Control Weight 以使圖像背景與文字相融合。

image 18.png

另外,需要注意不同的字體對於某些實體元素可能效果更好,而對於其他則相反。例如 細長的字體 比較適合搭配纖細的元素比如麪條、巧克力、燈管等物品。而 粗壯的字體 比較適合岩石、冰塊、餅乾等塊狀的元素。

00017-1289841435.jpg

總結

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

Add a new Comments

Some HTML is okay.