雖然有了圖生圖讓我們除了文字描述外,能利用圖片參照的方式對Stable Diffusion生成結果進行引導,但它仍然還有許多不足的地方。有些時後我並不想整張圖都完全參照,只是想提取出參考圖中單一/部分的特定元素(構圖、人物/物體間空間關係、配色、肢體動作、外觀輪廓……等)來對生成的圖像結果進行約束/影響。而ControlNet的出現就很好地滿足了這項需求,我們可以更明確地”畫出重點”告訴SD,只要針對圖片中我所指定的元素做為生成圖片時的參考就行。
安裝
關於ControlNet外掛程式的安裝,可參考之前文章 :
→ AI繪圖-Stable Diffusion 007- 外掛擴充 Extensions 的安裝、更新、移除與備份
模型下載
模型下載網址 :
→ https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main
這裡只需要下載所有的".pth"檔,每個模型同名對應搭配的".yaml"檔在安裝外掛時就會自動下載好,這邊不用再重複下載。pth模型檔下載完後,放到 ..\extensions\sd-webui-controlnet\models 資料夾裡就可以。
基本認識
目前ControlNet官方/原作者所提供使用的模型共有14個,其中11個為已完成模型,3個還在實驗性階段。關於官方模型的命名規則如下圖所示,可以從檔名中了解到所下載模型的相關資訊。
(圖片來源 : https://github.com/lllyasviel/ControlNet-v1-1-nightly)
完成安裝及下載好ControlNet各種約束類型所需的對應模型後,我們可以先到 Settings/ControNet 找到同時能開啟幾個ControlNet模型數量的設定。
使用ControlNet時,我們是可以同時提取數張不同參照圖裡的元素進行生圖。一般照自己常用需求去設定數量即可。
ControlNet的功用就是能把參考圖片中的各種特定元素/特徵分別提取出來。之後讓SD把這個單一,或是多個(同時啟用多個ControlNet Unit)元素/特徵做為出圖結果的參照/約束引導。最終達成讓我們能對AI繪圖成像結果有更強的控制能力。
ControlNet的參數介面功能,這邊我們先以OpenPose(提取人物姿勢動作)為例來說明。
1. 將參考圖片置入
2.
Enable : 開啟ControlNet,這邊要有勾選ControlNet才會對生圖產生作用影響。
Low VRAM : 如果你的顯卡顯存較低的話(8G以下),這邊可以勾選使用,雖然出圖速度會變慢,但至少在低顯存配備下也能跑得動正常使用不會爆顯存。
Pixel Perfect : 這邊如果沒有勾選時,介面中會出現Preprocessor Resolution的選項。數值愈低愈不佔顯存,但所產生出來的預處理圖效果愈差,反之對畫面特徵提取可以有較精準的控制,一般設定在512~1024間,或是直接就都勾選Pixel Perfect就好。下圖我們拿Canny預處理效果來看比較清楚好理解差別。
Allow Preview : 開啟Preprocessor Preview/預處理圖的預覽視窗
3.
Control Type : 選擇約束類型,這邊要針對人物的動作姿勢做提取,選擇OpenPose。
Preprocessor : 選擇好約束類型後,針對不同約束類型,會有1~多個預處理器可供選擇使用(IP2P除外,IP2P不需要預處理器)。不同的預處理器,對特徵的提取分別會有各自不同的程度/效果。每個預處理器在第一次使用時,後台一樣會需要先下載預處理器的模型檔案,所以會要等較久的時間,如果下載途中意外中斷或是失敗時,則可直接上網下載後,將檔案放到執行視窗裡所提示的資料夾位置裡。
爆炸icon : 選定預處理器後,點擊中間這個爆炸icon,開始對參考圖進行預處理(提取圖片特徵)
Model : 經過預處理後的特徵圖SD是看不懂的,所以這裡還要選擇一個與約束類型/預處理器能夠相對應配合的模型來解讀/處理這張特徵圖,讓SD能理解代表的意義為何。一般如果模型的資料夾裡有對應可用的模型時,在選擇好預處理器時就會自動幫你代入對應的模型。
4.
Control Weight : ControlNet的權重,數值愈低,ControlNet對最後生成圖片的約束/影響效果就愈低。
Starting & Ending Control Step : 控制ControlNet在圖片生成的採樣/迭代步數中,效果影響/引導介入開始與結束的時機點。0.1代表總採樣步數的10%。(PS. 在採樣步數中,愈前面的步數對圖片大抵整體成形狀態影響愈大,愈靠後面的步數則偏向細節上的變化。所以如果想要ControlNet的效果愈明顯/有效,盡量設定成愈靠前的步數進行介入)
5.
Control Mode : 出圖結果是要偏重提示詞內容、ControlNet,或是兩者取平衡。
上面範例中,我們利用ControlNet的OpenPose來提取參考圖片中人物角色的肢體動作,之後就可利用這張提取出來的人物骨架圖來對新生成圖片中人物的動作進行定型控制。像這類動作的控制,平時光是用提示詞的描述是很難/不太可能完全實現到如此高度的相似。
這張圖的提示詞為 : a man in business suit with office background,完全不需要對人物的動作姿勢做描述。
a man in swimming suit, beach background
目前ControlNet官方提供的主要約束型態依功能我把它主要分成5大類 :
至於最後一個T2IA開頭的則為第三方的預處理器與模型,先把官方原有的這些搞清楚如何操作使用後,感興趣的人也可以再另外下載來測試看看,其本邏輯原理都一樣,從它模型的名稱裡大約也就能看出是屬於哪一類型的約束功能與該如何使用。
關於ControlNet的基本認識介紹就先到這裡,後續接著會再一一來實作討論每一個ControlNet模型的約束功能/效果程度,以及每個預處理器間的差異。