在AI 圖像生成過程中,要精確控製圖像生成並不是一鍵容易的事情,通常需要通過許多次的圖像生成才可能生成滿意的圖像,但隨著ControlNet 的出現,這個問題得到了很好的解決。
ControlNet 提供了十幾種控製網絡模型,使得我們可以進一步開始控製圖像的風格、細節、人物姿勢、畫面結構等等,這些限定條件讓AI 圖像生成變得更加可控,在繪圖過程中也可以同時使用多個ControlNet 模型,以達到更好的效果。
你可以理解為ContorlNet 是一個翻譯的助手,把我們的參考圖翻譯成AI 可以理解的指令,然後傳遞給AI 模型,讓AI 模型生成符合我們要求的圖像。
比如在這張圖片中,通過輸入一個人物的圖片,通過預處理器提取出人物的控制條件後,然後通過ControlNet 模型的應用,生成了動作一致的人物圖片。
ControlNet 是一種基於擴散模型(如Stable Diffusion)的條件控制生成模型,最早由張呂敏(Lvmin Zhang)與Maneesh Agrawala 等人於2023 年提出。該模型通過引入多模態輸入條件(如邊緣檢測圖、深度圖、姿勢關鍵點等),顯著提升了圖像生成的可控性和細節還原能力。
隨著這幾年ControlNet 的發展以及社區的貢獻,目前ControlNet 已經支持了十幾種控制類型,下面是一些常見的控制類型,每種類型都有其適合的場景
Canny:通過邊緣檢測生成精細線稿,適合精準模仿原圖結構。
MLSD:僅檢測直線,適用於建築、室內設計等場景。
Lineart:新一代線稿識別,比Canny更精細,支持動漫線條提取。
SoftEdge:軟邊緣檢測,優先識別大輪廓線,適合非精準模仿的場景。
Scribble/Sketch:塗鴉控制,支持粗略輪廓識別或手動繪製草圖生成圖像。
Depth:通過亮度區分前後景深度關係,白色區域靠前,黑色區域靠後。
NormalMap:法線貼圖,控制物體表面凹凸質感(如窗戶凹陷效果)。
OpenPose:骨骼姿勢識別,可自動檢測或手動編輯人體姿態。
Segmentation:語義分割,通過顏色對應物品類別生成圖像(如藍色代表天空)。
Inpaint/局部重繪:局部修改圖像,保持與原圖風格一致。
Shuffle:隨機洗牌,打亂參考圖語義元素生成多樣性畫面。
Recolor:黑白圖片重新上色,支持自動或提示詞定義顏色。
IP-Adapter:風格/人臉模仿,保持生成圖像的一致性。
InstructP2P:通過文本指令修改圖片(如讓房子“著火”)。
Instant_ID:AI換臉,保持人臉一致性並支持多圖融合。
Tile/Blur:模糊圖片高清化與細節增強。
不兼容OpenPose面部/手部專用處理器及部分語義分割預處理。
在ComfyUI 中,ControlNet 作為一種條件控制器,通常會涉及以下幾個步驟的處理,當然由於目前ComfyUI 的ControlNet 模型版本很多,所以具體的流程可能會有所不同,這裡我們以目前ControlNet V1.1 版本模型為例進行說明,具體工作流我們在後續的相關教程中繼續補充
1.圖片預處理
我們需要上傳參考圖,ControlNet 的預處理器會提取圖中的關鍵特徵(比如輪廓、線條、姿態)。例如本文開頭的人物圖片輸入變成了Openpose 的控制條件。
2.條件注入
ControlNet 將提取的特徵轉化為“條件信號”,傳遞給採樣器(如K 採樣器)。這些信號會告訴AI:“生成圖片時,要盡量符合參考圖的線條/姿勢/結構”
3.採樣器生成圖像
採樣器(如K 採樣器)在去噪生成圖片的過程中,會參考ControlNet 提供的條件信號,最終輸出既符合文字描述、又與參考圖特徵匹配的圖片。
本部分將介紹一個典型的SD1.5 ControlNet 工作流,不依賴任何第三方插件
為了使用這個工作流,請確保你已經安裝以下內容
1.請前往下載Dreamshaper 8並保存在ComfyUI/models/checkpoints/目錄
2.請前往下載control_v11p_sd15_openpose.pth並保存在ComfyUI/models/controlnet/目錄
在ComfyUI 中,不同版本的繪圖模型對應的ControlNet 模型並不通用,比如SD1.5 的模型就無法使用Flux 的ControlNet 模型,反之亦然。所以我建議你在保存模型時,在對應的目錄下新建一個文件夾用來標識模型版本,這樣在選擇模型時可以更加方便,比如:
1.ComfyUI/models/checkpoints/sd1.5
2.ComfyUI/models/controlnet/sd1.5
請點擊下面的按鈕下載對應的工作流,然後拖入ComfyUI 界面或者使用菜單欄Workflows->Open(Ctrl+O)進行加載
下面這張圖片將作為參考圖,請下載保存
參照圖片中的序號,依次完成對應操作以完成一個這個ControlNet 工作流
1.請確保在Load Checkpoint節點裡已經加載了SD1.5的模型
2.請確保在Load ControlNet Model節點ontrol_v11p_sd15_openpose.pth模型可以被識別並加載
3.在Load Image節點中加載上文提供的參考圖
4.完成以上操作後點擊Queue按鈕,或者使用快捷鍵Ctrl(cmd) + Enter(回車)來進行圖片生成
試著調整Apply ControlNet節點的中的不同參數,進行生成,查看不同強度(Strength)和不同的起始比例(start_percent)和結束比例(end_percent)對生成結果的影響
在上面的流程中,我們把對應的工作流和我們的文生圖工作流進行對比
你會發現最主要的差異就是在原本的文生圖中,我們將對應的條件輸入了Apply ControlNet節點通過這個節點我們增加了對應的控制條件,然後再將對應的輸出條件輸入到了KSampler節點的條件輸入
你可以看到對應的人物很好地生成了,另外在SD1.5 模型中常見的人物肢體錯誤的情況在這個工作流中也沒有出現。
在完成以上操作後你可以嘗試修改一下Empty Latent Image節點的尺寸,比如設置成512x512,然後再次生成來觀察生成的畫面和參考圖的差異
你應該可以看到最後生成的圖像只使用了參考圖的中心區域,另外不同類型的參考圖也需要使用不同類型的ControlNet 模型,比如Openpose 就需要使用control_v11p_sd15_openpose.pth模型,而Canny圖就需要使用control_v11p_sd15_canny.pth模型。
在以上的工作流中,我們可能會有一個問題,我們使用的參考圖(Openpose)並不是那麼常見,那麼我們是否可以採用其他的一些常見的參考圖來生成對應的圖片呢?這時候我們就需要用到預處理器,讓我們接著在下一部分繼續使用預處理器的工作流。
什麼是預處理器呢?
比如在下面的圖中,我們使用了ComfyUI 的Canny 預處理器,它把對應的圖像的輪廓邊緣特徵提取出來了。
這就是預處理器的作用,它把我們提供的參考圖(例如照片、線稿、塗鴉等)轉換為一種結構化的特徵圖,以便ControlNet 模型能夠理解並引導生成結果。
常見的預處理器有很多種比如:
1.線稿預處理器(如canny、lineart):提取圖像邊緣輪廓,生成黑白線稿。
2.深度圖預處理器(如depth_midas):計算圖像中物體的遠近層次,生成灰度深度圖。
3.姿勢預處理器(如openpose):識別人體骨骼關鍵點,生成火柴人骨架圖。
但是在ComfyUI 中,僅僅有Canny 預處理器,所以我們需要依賴其它插件來完成圖片預處理的工作,下面我們將進行對應工作流的內容。
本教程需要使用ComfyUI ControlNet Auxiliary Preprocessors插件
插件安裝的教程可以參考ComfyUI 插件安裝教程
在這個示例中我們保持和之前的部分模型文件一致即可
1.請前往下載Dreamshaper 8並保存在ComfyUI/models/checkpoints/目錄
2.請前往下載control_v11p_sd15_openpose.pth並保存在ComfyUI/models/controlnet/目錄
下載下面的工作流文件
點擊下載SD1.5 OpenPose ControlNet Preprocessor 工作流
在運行ComfyUI 後將工作流拖入或者使用ComfyUI 的快捷鍵Ctrl+O打開這個工作流文件
請下載下面的圖片,並在Load Image 節點中載入使用
1.在1 Load Image 節點中載入輸入圖片
2.在2 Load Checkpoint 節點中選擇你安裝的模型
3.在3 Apply ControlNet 節點中選擇control_v11f1p_sd15_openpose.pth模型。
4.使用Queue 或者快捷鍵Ctrl+Enter運行工作流進行圖片生成
這個工作流和之前的工作流相比,其實就只是多了一部圖像的預處理,我們把對應的圖像輸入到ComfyUI ControlNet Auxiliary Preprocessors提供的預處理器OpenPose Pose節點中,完成了對應的圖片預處理。
那麼以上就是對應的ComfyUI 中ControlNet 的簡單介紹了,在後續的ControlNet 相關教程中,我們將會繼續介紹更多的ControlNet 模型,並給出對應的示例。