前言
AIGC蔚然成風一段時間了陕截,利用閑散時間整理了如下知識點和實踐經(jīng)驗,以供查閱覆糟。
一句話定義
ControlNet是一種神經(jīng)網(wǎng)絡(luò)模型,它工作在穩(wěn)定擴散模型上馋记,通過在特定階段給予生成網(wǎng)絡(luò)額外的訓練條件以影響和修正擴散效果号坡。
簡單工作原理
ControlNet 的工作原理是將可訓練的神經(jīng)網(wǎng)絡(luò)模塊(trainable network modules)附加到穩(wěn)定擴散模型的各個噪聲預(yù)測器(U-Net)上,直接影響穩(wěn)定擴散模型的各個解碼階段輸出抗果,如下圖所示筋帖。由于 Stable Diffusion 模型的權(quán)重是鎖定的,因此它們在訓練過程中是不變的冤馏,會改變的僅是附加的ControlNet模塊的權(quán)重(下圖右側(cè))日麸。在帶有ControlNet的圖像訓練過程中,一共有2種條件會作用到生成圖像上逮光,其一是提示詞(prompt)代箭,另一個就是由ControlNet引入的各種自定義條件(Condition)。
ControlNet1.1及以后對附屬模型的命名規(guī)則:
注意版本號后面的質(zhì)量標識符是否為p涕刚,以及對應(yīng)的控制方法是什么即可
ControlNet總覽
主要模型(預(yù)處理模型/模型)詳解
Invert
Invert 用于檢測用戶上傳的圖像。預(yù)處理器和模型通常需要在黑色圖像上使用白線來檢測(也就是灰度圖)杜漠。但如果你的圖是白色圖像上的黑線极景,就必須使用這個工具來切換顏色了,不然controlNet模型會無法正確識別輸入圖中的信息驾茴。注意這種情況在涂鴉模式和線稿填色場景中非常常見盼樟。
對應(yīng)模型:無 -> Invert是預(yù)處理器,沒有對應(yīng)的ControlNet模型
Canny
Canny 通過使用邊緣檢測器提取圖像中的所有重要輪廓線锈至。通過調(diào)節(jié)閾值晨缴,可以使線條捕捉到非常詳細的信息,但也會因此讓圖像背景中固有的干擾信息影響你的目標物體峡捡,所以在必要時可通過設(shè)置邊緣檢測閾值達到過濾出特定邊緣信息的目的击碗。注意,對于一些細節(jié)豐富的訓練圖可能并不適合使用Canny提取邊緣们拙。
對應(yīng)模型:control_v11p_sd15_canny
Lineart_XXX
Lineart_XXX: 是Canny的替代者稍途,但是能夠比canny更加精準的提取二次元(使用anime后綴),或真實照片(使用realistic后綴)圖片的線稿睛竣。具體效果參考下方圖示晰房。
說明: 如果使用自己的線稿,想進行填色也可以單獨應(yīng)用 lineart 模型射沟,具體方法是:
在ControlNet中輸入原始線稿,一般是白底黑線 -> 先使用Invert預(yù)處理器將線稿反色以便能夠讓lineart模型識別出線稿中的白色線條 -> 將從提詞器中獲取到的線稿Prompt發(fā)送至文生圖与境,同時也補全反向提示詞 -> 按需求增加有關(guān)顏色的正向提示詞 -> 開始輸出迭代验夯。
注意,按照上述方法生成時有概率輸出黑白或彩色的填色圖(參考下面圖示)
備注:如果要提高出彩色填色的概率摔刁,除了在正向提示詞里添加顏色關(guān)鍵詞外挥转,還可以在反向提示詞欄中填寫諸如【greyscale】這樣的黑白色關(guān)鍵詞 ??
對應(yīng)模型:control_v11p_sd15_lineart
Softedge_XXX
Softedge_XXX:對應(yīng)了以前的HED(Holistically-nested Edge Detection),既軟邊緣檢測,它可以在物體周圍創(chuàng)建清晰和精細的邊界绑谣,輸出類似于Canny党窜,但減少了噪聲和更柔軟的邊緣。它的有效性在于能夠從復(fù)雜的細節(jié)中捕捉(過濾出)需要的輪廓信息借宵,同時也保留了一定量的細節(jié)特征(面部表情幌衣、頭發(fā)、手指等)壤玫。同Canny豁护,我們一般用此預(yù)處理器保留原圖線條輪廓,修改風格和顏色欲间。
對應(yīng)模型:control_v11p_sd15_softedge
Openpose_XXX
Openpose_XXX: 這個預(yù)處理器的基礎(chǔ)款用于生成了一個基于節(jié)點和連線的骨骼火柴人的形象楚里。相較于其他固定角色姿勢的controlnet方案來說,這種技術(shù)的優(yōu)勢是支持多個 OpenPose 骨架組合成一個圖像猎贴,達到精確控制多角色同屏的效果班缎。此外由于還支持通過插件手動調(diào)節(jié)骨骼節(jié)點,也就便利了喜歡自已定義動作的同學她渴。所有這些輔助骨骼信息會形成ControlNet的輸入條件(condition)從而影響和引導穩(wěn)定擴散模型的生成過程达址,獲得符合預(yù)設(shè)姿勢的生成圖。
新版增加了對手部和臉部的支持惹骂,現(xiàn)在使用“openpose_full”可以得到姿勢+手部+臉部的全貌信息苏携,具體參考如下圖示。
備注:當選擇openpose_full時需注意对粪,此模型在運行時會需求大量顯存右冻,注意控制分辨率
對應(yīng)模型:control_v11p_sd15_openpose
Depth_XXX
Depth_XXX: 這個預(yù)處理器有助于生成輸入圖像的深度估計。深度通常用于控制圖像內(nèi)物體的空間定位著拭。depth模型在固定角色姿勢輪廓的同時還能起到固定場景透視效果的作用纱扭。淺色區(qū)域意味著它離用戶更近,而深色區(qū)域則離用戶更遠儡遮。注意在處理角色圖像時它可能會丟失部分內(nèi)部細節(jié)(面部表情等)乳蛾。
Depth Leres(++) 傾向于圖片中捕獲更多信息,參考下圖鄙币,對背景和人物體表的起伏比較敏感
Depth Zoe 則相反肃叶,傾向保留物體的輪廓,并盡可能忽略極遠處的景深信息十嘿,適合引導出更加隨機的風格
對應(yīng)模型:control_v11f1p_sd15_depth
MLSD
MLSD: 最適合生成各種朝向的直線條因惭,經(jīng)MLSD輸出的線條能較好的貼合物體上的各種直線輪廓,尤其適合勾勒建筑物和其他規(guī)則的幾何造型物品绩衷。但是另一方面蹦魔,MLSD不適用于提取圖像中的各種彎曲線條激率。基于上述特性勿决,該模型常用于生成室內(nèi)外渲染圖乒躺,或者具有簡約直線條風格的藝術(shù)/工藝作品。通過簡單橫豎線條固定下場景的基調(diào)低缩,由穩(wěn)定擴散模型填充/創(chuàng)作具體細節(jié)嘉冒,以達到同設(shè)計替換風格的效果。
對應(yīng)模型:control_v11f1p_sd15_mlsd
Normal
Normal: 法線圖使用三種顏色通道來表示一個垂直于像素點表面的朝向(法向)信息表制。法線圖能很好的還原大塊物體面的朝向健爬,這有利于光照,形狀和體積(透視/景深)的還原么介。同時得益于細節(jié)的保留娜遵,使用法線圖也可以間接反應(yīng)物體表面的粗糙度和光滑程度。
對應(yīng)模型:control_v11f1p_sd15_normalbae
Scribble
Scribble: 涂鴉的目的是從簡單的黑白線條畫和草圖中生成圖像壤短,一般可作為通過草圖快速迭代尋找靈感的工具设拟。用戶使用“Open new Canvas”選項創(chuàng)建特定大小的空白畫布,可以直接動手繪制(當然也可以直接上傳圖像)久脯。注意如果草圖或上傳的繪圖是由白色背景上的黑線組成纳胧,則需要選中開頭提到的“Invert”預(yù)處理器。
對應(yīng)模型:control_v11f1p_sd15_scribble
Seg_xxx
Seg_xxx: 分割預(yù)處理器通過檢測和識別圖像不同區(qū)塊的屬性帘撰,并依據(jù)屬性將圖像分割歸納到不同的區(qū)段跑慕。下圖展示了將具有包豪斯建筑風格的照片經(jīng)過 seg_ofade20k 預(yù)處理器處理前后的狀態(tài)。
注意上圖右側(cè)內(nèi)各種輸出區(qū)段的顏色不是胡亂標記的摧找,它們符合ADE20K分類定義核行,參考下側(cè)表格截圖,如需全表從備注鏈接中下載獲取蹬耘。
備注: [ADE20K顏色表]
如果想直接看到分割后不同區(qū)塊代表的語義可以使用如下網(wǎng)站:OneFormer 提供的Segmenation(分割)服務(wù)芝雪,操作時請在Task Token處選擇“the task is semantic” 這代表我們需要輸出色塊內(nèi)含的語意;Model(模型)則選擇ADE220K综苔。最終輸出參考如下包豪斯建筑截圖惩系。
使用Seg預(yù)處理器 + 模型主要用于輸出布局相同,但是風格不同的各類場景設(shè)計圖如筛”つ担可以說同MLSD模型的作用類似,但是相比使用線條約束杨刨,Seg通過色塊能更好的控制出圖布局悴侵。
當然我們還可以直接動手在分割圖上繪制(粘貼)任何我們想要的事物剪影(比如一個人物角色的剪影),利用控制色塊屬性和形狀進行深度定制化拭嫁!參考下方圖示可免,背景為照片提取的室內(nèi)場景圖,左側(cè)暗紅色人物是通過截取相片中人物剪影做粤,重新填上ADE20K中人物對應(yīng)顏色(96053D)獲得的浇借,人物在原始背景上并不存在。同時為了便于控制人物姿勢(單純色塊無法給出姿勢的約束)怕品,一般還可以開啟第二套ControlNet妇垢,選擇Openpose定位角色姿勢。最后輸出成品參考下面第二張圖示肉康,可見出圖結(jié)合了場景的布局和人物以及對應(yīng)姿勢闯估,而風格則是依靠底模或lora提供吼和。
對應(yīng)模型:control_v11f1p_sd15_seg
Ip2p
[僅模型] Ip2p : 全稱 Instruct Pixel to Piexl(像素對像素指令)涨薪,該模型會自動識別像素對應(yīng)提示詞與新輸入提示詞的關(guān)系,并選擇性的向新提示詞遷移炫乓。從宏觀角度來看刚夺,就是可以幫助我們固定大部分圖像屬性,只修改少量屬性末捣,這些修改的屬性可以是全局屬性(如光照明暗之類)侠姑,也可以是局部屬性(如物體狀態(tài),顏色箩做,姿勢等)莽红。具體實現(xiàn)方式參考如下:
首先開啟ControlNet并導入原圖,不使用任何預(yù)處理器邦邦,點選完美像素模式安吁,模型選擇control_v11e_sd15_ip2p(如果后續(xù)該模型有升級,則選擇最新的即可)圃酵×希控制權(quán)重保持為1,引導介入為0郭赐,終止為1薪韩,控制模式注意只能選擇“均衡”(我試過其他模式,出圖會變得極為不穩(wěn))捌锭,縮放模式一般“直接調(diào)整大小”即可俘陷。
然后是文生圖的提示詞,注意只需要輸入你想要的特性观谦,比如我想把圖片的光照調(diào)暗拉盾,讓白天變?yōu)橐雇恚敲次視谡蛱崾驹~中加入:(make it night:1.3), (night:1.3)豁状,這2個即可捉偏;為了加強影響還可以在反向提示詞里填寫提示詞:day倒得。
接下來調(diào)整圖像長寬比以適應(yīng)原圖長寬,否則點對點處理放大會出問題夭禽。
而最后需要調(diào)整的是提示詞引導系數(shù)(CFG Scale)霞掺,經(jīng)過測試,這個值不易過卸锴(2以下)否則會導致輸入的提示詞效果不明顯菩彬,也不可過大(5以上),否則此模型會變得極不穩(wěn)定潮梯,出完全隨機的圖骗灶。
全部調(diào)整完畢后所出的圖參考圖示如下,分別是左側(cè)的原圖和經(jīng)過調(diào)暗處理后的右圖秉馏。
如果需要配合其他controlnet模型使用耙旦,建議搭配lineart_anime提取輪廓,但是修改后的圖像變換也更加隨機了(參考下方圖示)
對應(yīng)模型:control_v11f1p_sd15_ip2p
Tile
Tile_resample: tile模型原本是為了放大圖片而設(shè)計的沃饶,具體來講需要先將原圖分割為一塊一塊的小區(qū)域(叫做Tile或瓦塊)母廷,然后分別對每個瓦塊進行圖生圖放大,最后集合所有放大后的瓦塊糊肤,拼成完整的大圖琴昆。之所以采用局部放大后拼接的模式是為了減少顯存占用。但是這樣放大圖片也有弊端馆揉,那就是必須要求每個小圖在圖生圖時重繪幅度不能太大业舍,因為本質(zhì)上每個小圖使用的也是全圖提示詞,當重回幅度過高時升酣,老版本tile模型很可能會在每個小圖里生成全圖提示詞所描繪的全部內(nèi)容舷暮。
ControlNet1.1版本后的Tile模型更加強大,它具有2點特性:
- 能識別并忽略圖像中的細節(jié)噩茄,同時生成新的細節(jié)
- 如果當前瓦塊中識別到的語義或提示詞與全局不符下面,那么模型將忽略全局提示詞,同時依據(jù)當前局部環(huán)境構(gòu)造新的監(jiān)督擴散(既創(chuàng)建新的局部提示詞并以此引導擴散模型)
Tile的放大流程:
- 原圖由打標器(WD1.4)打標并發(fā)送到圖生圖
- 開啟ControlNet绩聘,選擇tile_resample預(yù)處理器(可不選任何預(yù)處理器)沥割,選擇tile模型,其他保持默認即可
- 向下找到腳本框凿菩,點選Ultimate SD upscale机杜,目標尺寸類型一般可選從圖像尺寸縮放,而后在右側(cè)填選放大倍數(shù)衅谷,放大算法我一般使用R-ESRGAN 4X+椒拗,但是差別不大
- 調(diào)節(jié)重繪幅度,一般而言放大倍數(shù)越大,重繪幅度越小才好蚀苛,對于二次元風格化差異較大的圖片來說在验,如果基模風格與目標圖片不同,那么建議調(diào)小重繪幅度到0.5以內(nèi)
- 啟動重繪枉阵!
Tile用于增強(取代)傳統(tǒng)圖生圖:
利用Tile自身的理解能力译红,在保持原始構(gòu)圖的前提下去風格化或者替換局部特征。
- 使用生成原圖的基模 -> 將原圖由打標器(WD1.4)打標并發(fā)送到文生圖 -> 添加合適的負面提示詞 -> 開啟ControlNet并選擇tile模型兴溜,選擇“更傾向于讓ControlNet自由發(fā)揮”-> 調(diào)低CFG值到3左右 -> 這樣做獲取到的就是保持構(gòu)圖,保持畫風耻陕,同時增加額外細節(jié)的新圖
- 切換其他基模 -> ControlNet中選擇“提示詞更重要” -> 調(diào)整CFG值到7左右 -> 其他同上 -> 這樣出來的圖能保持構(gòu)圖拙徽,去畫風化,且細節(jié)有大量迭代
[說明1] “更傾向于讓ControlNet自由發(fā)揮”就是原來的無提示詞模式诗宣,ControlNet-Tile模型會基于自己的強大理解膘怕,盡力保持原圖的語義構(gòu)成,同時忽略用戶自定義的“額外”提示詞召庞。因此當使用此模式時岛心,務(wù)必調(diào)低CFG值(既降低提示詞相關(guān)性) ,不然可能引發(fā)Tile模型與提示詞之間的沖突篮灼,導致畫面邊形忘古,或者線條過粗,顏色過飽和等問題诅诱。
[說明2] 基模(或畫風Lora)對Tile的影響非常大髓堪,很大程度上決定了畫風。參考右側(cè)風格遷移圖示娘荡,左側(cè)為原圖干旁,右側(cè)為去除人物面貌特征提示詞,并替換角色風格Lora后的出圖效果炮沐,可以看到争群,人物頭像完全替換成了其他角色,但是整體構(gòu)圖和色調(diào)保持不變(如果使用原圖的基模的話)
[說明3] 關(guān)于如何從完全服從原圖到完全創(chuàng)新的過渡大年,除了上述提到的幾點外换薄,還可以通過調(diào)節(jié)ControlNet自帶參數(shù)“控制權(quán)重”,“介入/終止步數(shù)”鲜戒,以及“降采樣比例(Down Sampling Rate)”來控制专控。基本上控制權(quán)重越高遏餐,介入步數(shù)越低伦腐,終止步數(shù)越高 -> 會導致Tile模型的權(quán)重越高,而降采樣率越高失都,會導致Tile模型效果越低柏蘑,既創(chuàng)造性越高幸冻。
對應(yīng)模型:control_v11f1p_sd15_tile
Shuffle
Shuffle:洗牌,重新組織圖像咳焚。具體來說shuffle通過使用隨機流的方式來洗牌原圖像洽损,在控制穩(wěn)定擴散的前提下重構(gòu)出新圖。
經(jīng)過洗牌的生成圖與原圖風格統(tǒng)一革半,色調(diào)統(tǒng)一碑定,也就是說洗牌模型能夠在固定圖片風格的前提下,較大幅度的重構(gòu)原圖又官。一般可以配合動態(tài)提示詞等插件快速獲取具有輸入原圖風格的多張不同設(shè)計稿延刘,以便尋找靈感。
典型洗牌流程:
- 原圖由打標器(WD1.4)打標并發(fā)送到圖生圖
- 圖生圖加載原圖
- 開啟ControlNet六敬,加載原圖碘赖,模型和預(yù)處理器都選擇shuffle,控制模式選擇提示詞更重要
- 啟用動態(tài)提示詞(Dynamic Prompts)
- 開啟Magic prompt外构,選擇合適的Magic prompt model
- 連續(xù)出圖效果
出圖效果參考下方圖示:第一幅是輸入圖為藝術(shù)風格鮮明的半身像雕塑作品普泡,后面則是對應(yīng)的9張輸出圖,可見圖像保留了原圖的色調(diào)和基本風格审编,同時借由動態(tài)提示詞追加的內(nèi)容進行了作品設(shè)計上的變換撼班。
作為對比,下面圖示是在不開啟dynamic prompts前提下僅通過shuffle模型獲得到的割笙,可見風格和色調(diào)同樣得到了保留权烧,同時用戶輸入的提示詞也得到了很好的遵守,變化和創(chuàng)新大多在各種細節(jié)上伤溉,相比之下不會產(chǎn)生角色形象上的較大遷移般码。
參考提示詞:shoes, gloves, sneakers, simple background, solo, white gloves, split, 1robot, disconnected arm, no legs, crown, blue eyes, portrait, profile, black background, border
[tips]使用秋葉大佬的sd整合包安裝dynamic_prompts可能會在啟動時,控制臺面板遇到“ModuleNotFoundError: No module named 'dynamicprompts'”的報錯,從而導致進入SD無法訪問dynamicprompts乱顾,此時關(guān)閉SD板祝,用管理員模式開啟powershell,并使用如下命令:
你的路徑\sd-webui-aki-v4\py310> .\python.exe -m pip install 'dynamicprompts[attentiongrabber, magicprompt]==0.25.2'
手動安裝目標依賴走净,完成后重啟秋葉大佬的啟動器即可(參考資料)
對應(yīng)模型:control_v11e_sd15_shuffle
inpaint
inpaint_global_harmonious:主要用于局部(遮罩部分)重繪券时,在原生基于圖生圖的重繪模式上加入了ControlNet的控制,從而讓inpaint能夠更加準確的預(yù)測重繪細節(jié)伏伯。但是注意橘洞,和普通局部重繪不同,ControlNet的inpaint模型除了重繪遮罩部分外说搅,遮罩以外的地方也會發(fā)生微小變化(重繪)炸枣,這樣做帶來的好處是它能夠更好地將重繪區(qū)域與整體畫面融合,讓整體出圖更加和諧統(tǒng)一。當然你也能將ControlNet引導權(quán)重調(diào)節(jié)到最大(2)适肠,此時ControlNet-inpaint模型將盡可能得保持遮罩區(qū)域以外的畫面不發(fā)生變化霍衫。
比較傳統(tǒng)圖生圖的局部重繪:如下方圖示,原圖蒙版重繪部分往往會出現(xiàn)與周圍環(huán)境不相容的獨立景物侯养,無法統(tǒng)一整體布局敦跌。
典型inpaint構(gòu)圖流程:
- 提取原圖提示詞,注意去除蒙版部分原有內(nèi)容逛揩,替換為你期望的內(nèi)容(可選)
- 將提示詞導入文生圖
- 開啟ControlNet柠傍,預(yù)處理器和模型都選擇inpaint,適當調(diào)整控制權(quán)重(一般1.2 ~ 1.7之間效果都不錯)息尺,控制模式選擇提示詞更重要
- 調(diào)整出圖比例和尺寸携兵,直接出圖
效果參考下方圖示,可以看到對比傳統(tǒng)圖生圖的局部重繪搂誉,inpaint模型能在統(tǒng)一整體效果的前提下,補全蒙版部分的內(nèi)容静檬,同時遮罩外部分的輪廓和細節(jié)也得到了較好的保留炭懊。
參考提示詞:scenery, outdoors, sky, day, petals, cloud, cherry blossoms, architecture, east asian architecture, blurry, blue sky, stairs,cherry blossoms
對應(yīng)模型:control_v11p_sd15_inpaint
TODO
有新的模型會在此追加...
對Control Mode效果理解
借用網(wǎng)上大佬的圖示:
提示詞更重要 -> 增大提示詞控制權(quán)重,出圖傾向于提示詞內(nèi)容拂檩,(就是Stable Diffusion加載的主模型對提示詞的理解)侮腹,這會削弱ControlNet的控制力
ControlNet更重要 -> 傾向于ControlNet模型的介入,更多利用非提示詞約束條件(深度稻励,輪廓父阻,姿勢等你選擇的ControlNet模型),當約束條件與全局提示詞沖突時傾向于約束條件(或者直接出錯XD)
均衡 -> 字面意思望抽,但是實際應(yīng)用中發(fā)現(xiàn)有的ControlNet模型只有在此檔能穩(wěn)定工作加矛。