精確控制AI影像生成的破冰方案,ControlNet和T2I-Adapter

  • ControlNet 和 T2I-Adapter 的突破性在哪裡?有什麼區別?

  • 其它為 T2I 擴散模型施加條件引導的相關研究
  • ControlNet 和 T2I-Adapter 的實際應用效果如何?
  • 使用體驗上,跟 SD原生支援的 img2img 有什麼區別?
  • ControlNet 在插畫創作上的潛力
  • 多種條件引導的組合使用
  • ControlNet 在3D和動畫創作上的潛力
  • 哪裡可以免安裝且免費玩上?
  • 論文和模型
這幾天 AIGC 社群的興奮程度達到了幾個月內的高峰,快趕上去年 Stable Diffusion 首次釋出的熱鬧勁。主角就是 ControlNet,一個基於 Stable Diffusion 1.5 的輕型預訓模型,能利用輸入圖片(input image)裡的邊緣特徵、深度特徵 或 人體姿勢的骨架特徵(posture skeleton),配合文字 prompt,精確引導影像在 SD 1.5 裡的生成結果。
下圖來自 ControlNet 論文的 demo,使用 Canny 坎尼邊緣檢測提取了輸入圖片裡鹿的輪廓特徵,用 Prompt “a high-quality, detailed, and professional image” 在 SD 1.5 裡生成的 4 張結果圖片。
ControlNet 的預印本 釋出於 2 月 10 日,同時開源了預訓模型的和論文裡所有 input condition detector 的權重。社群迅速在 Huggingface 部署了可以試用的 Demo, 並打包成可在 Stable Diffusion WebUI 裡使用的外掛外掛。
6 天后,騰訊 ARC 也釋出了類似解決方案 T2I-Adapter。

ControlNet 和 T2I-Adapter 的突破性在哪裡?有什麼區別?

拋開如何在擴散模型裡融合額外的模態輸入這樣的技術細節(因為我看不懂

),大面上看,這兩者思路很相近。突破點都是 如何在已有的模型基礎上新增可訓練引數,控制預先訓練好的大型擴散模型,以支援額外的輸入條件 (input condition),達到在新任務上的效果遷移。即使在訓練資料集很小的情況下,也能達到穩健的學習效果。

透過建立一個框架,在保留大型模型從數十億影像中獲得的優勢和能力時,同時擁有快速訓練方法,在可接受的時間和算力資源條件內,利用預訓練的權重,以及微調策略或轉移學習,將大型模型最佳化後用於特定任務。兼顧對泛問題的處理能力和滿足具體任務中使用者對生成控制需求的靈活性最大程度的保留原模型的生成能力。

ControlNet 和 T2I-Adapter 的框架都具備靈活小巧的特徵,訓練快,成本低,引數少,很容易地被插入到現有的文字-影像擴散模型中,不影響現有大型模型的原始網路拓撲結構和生成能力。同時,它倆都能相容其它基於 Stable Diffsuion 的 fine-tune 的影像生成模型,而無需重訓,比如 Anything v 4.0 (二次元風格的 SD 1.5 fine-tune 模型)。

訓練一種新輸入條件模型 (input condition detector model),比如支援一種新的邊緣或深度檢測演算法的模型,在這類框架思路下可以做到和常見 fine-tune 一樣快

ControlNet 在論文裡提到,Canny Edge detector 模型的訓練用了 300 萬張邊緣-影像-標註對的語料,A100 80G 的 600個 GPU 小時。Human Pose (人體姿態骨架)模型用了 8 萬張 姿態-影像-標註 對的語料,  A100 80G 的 400 個 GPU 時。

而 T2I-Adapter 的訓練是在 4 塊 Tesla 32G-V100 上只花了 2 天就完成,包括 3 種引導條件:sketch(15 萬張圖片語料),Semantic segmentation map(16 萬張)和 Keypose(15 萬張)。


兩者的差異:ControlNet 目前提供的預訓模型,可用性完成度更高,支援更多種的條件引導(9 大類)。

而 T2I-Adapter“在工程上設計和實現得更簡潔和靈活,更容易整合和擴充套件”(by 讀過其程式碼的 virushuo)此外,T2I-Adapter 支援一種以上的引導條件,比如可以同時使用 sketch 和  segmentation map 作為輸入條件,或 在一個蒙版區域 (也就是 inpaint ) 裡使用 sketch 引導
另外值得一提的是,這兩篇論文的首作都是年輕的華人 AI 研究者,ControlNet 的首作 Lvmin Zhang,21 年本科畢業,現為斯坦福 PHD,2018 年大二時便一作發表了 ACM Graphics 的高引論文,被視為 AI 領域在本科階段就有獨立科研能力的“天才”。他之前最為著名的專案是  Style2paints, 利用 Enhanced Residual U-net 和 Auxiliary Classifier GAN 為灰度動漫線稿上色。他作為這個小型研究組織的創始人,一直在關注 AI 在二次元風格影像生成方向的模型訓練、語料庫整理及工具開發。
而釋出 T2I-Adapter 的騰訊 ARC 是騰訊關注智慧媒體相關技術的事業群,以視覺、音訊和自然語言處理為主要方向。
其它為 T2I 擴散模型施加 Input condition 引導的相關研究

當然,這年頭沒有什麼 ML 的解決方案是橫空出世的,去年 12 月,Google 就釋出了論文 Sketch-Guided Text-to-Image Diffusion Model,使用了 classifier guidance 的思路,設計了一個稱為 latent edge predictor 的框架,能夠在 Stable Diffusion 的 noisy latent vector 上預測每步的生成是否匹配輸入圖片裡探測到的 sketch 邊緣。再將預測結果用於引導 擴散模型的生成。

但這一框架最大的問題在於邊緣的生成(梯度引導)是不考慮文字資訊且不存在任何互動的。獨立引導造成的結果可以讓生成結果裡影像的邊緣與引導輸入相吻合,但與所對應的語義資訊並不能很好地貼合。

https://arxiv.org/abs/2211.13752
今年 1 月釋出的另一篇論文 GLIGEN: Open-Set Grounded Text-to-Image Generation。“以一個類似於 NLP 領域 transformer-adapter 的 parameter efficient 的思路來微調 Stable-Diffusion 模型(即固定已有模型的引數,只訓練在模型裡額外新增的元件),併成功使得 SD 模型可以參考 bounding box 的位置資訊,來對不同實體進行生成 ”。
https://arxiv.org/abs/2301.07093
這篇論文裡的放出了可執行的 demo,效果得到了實證。知乎上的 NLP 演算法工程師 中森 在認為這篇論文論證了“已有的預訓練文生圖大模型的高度可拓展性,並且在開源模型上新增各種模態控制資訊做繼續訓練的高度可行性”。
demo:https://huggingface.co/spaces/gligen/demo
對於這3篇論文裡成果的比較,請移步他的專欄文章:https://zhuanlan.zhihu.com/p/605761756

ControlNet 和 T2I-Adapter 的實際應用效果如何?


對於 Stable Diffusion, 論引導效果,一百句 Text prompt 可能都比不上一張 input image 來得準確和高效。要觀察實戰效果,一千行文字介紹也比不上幾組結果圖片更清晰明瞭。

 (除了標註了引用出處的圖片外,其它都是作者生成的 raw outcome,基本都是未經挑選的單次生成結果)

人像類:

Input image
ControlNet 測試:將原圖轉化為 HDE map(Holistically-nested edge detection,一種整體巢狀式邊緣檢測的 DL 模型,精度比 Canny Edge 高不少),捕捉其邊緣特徵用於引導。
Prompt:portrait, half body, wearing a delicate shirt, highly detailed face, beautiful detail, sharp focus, by H.R. Giger
Prompt:portrait, half body, wearing a delicate shirt, highly detailed face, beautiful detail, sharp focus, by 不記得誰了
Prompt:portrait, half body, wearing a delicate shirt, highly detailed face, beautiful detail, sharp focus, by Alphonso Mucha

T2I-Adapter 測試:使用 Sketch-guided Synthesis 將原圖裡轉為草稿,捕捉邊緣特徵用於引導。(Adapter 選用的邊緣檢測演算法是一個基於 CNN 模型的輕量級的畫素差異網路 PiDiNet(https://arxiv.org/abs/2108.07009
Prompt:portrait, half body, wearing a delicate shirt, highly detailed face, beautiful detail, sharp focus (以下3張皆是)

建築類:

輸入圖片 (柯布西耶的薩伏伊別墅)
ControlNet 測試:將原圖轉化為 Hough Line。(霍夫變換是一個1962 年發明的專利演算法,最初是為了識別照片中的複雜線條而發明的。擅長用於檢測直線和幾何形狀,適用於捕捉建築類影像邊緣的 )
Prompt: building, super detail, by Giorgio de Chirico
Prompt: building, super detail, by Charles Addams
Prompt: building, super detail, by Alena Aenami
T2I-Adapter 測試:使用 Sketch-guided Synthesis 將原圖裡轉為草稿 (縱橫比被我搞錯了

Prompt:building, super detail, by Giorgio de Chirico  (下同)

風景類:

Input image (由 SD2.0 生成)
ControlNet 測試:將原圖轉化為 semantic segmentation map(語義分割map),捕捉其中的形狀區塊用於引導。
Prompt: artwork by Eyvind Earle, stunning city landscape, street view, detailed
Prompt: artwork by John Berkey, stunning city landscape, street view, detailed
Prompt: artwork by Alphonso Mucha, stunning city landscape, street view, detailed
T2I-Adapter 測試:使用 Sketch-guided Synthesis 將原圖裡轉為草稿,捕捉邊緣特徵用於引導。
在 SD 1.4 裡的生成結果 (T2I-Adapter 的預訓模型裡只支援 PLMS 這一種 sampling,可能會影響它的生成效果):
Prompt: artwork by Eyvind Earle, stunning city landscape, street view, detailed
Prompt: artwork by Eyvind Earle, stunning city landscape, street view, detailed

人體 post skeleton:

Input image
ControlNet 測試:將原圖轉化為 human pose,捕捉其中的姿勢骨骼用於引導
在 SD 1.5 裡的生成結果:
在 Anything 4.0 裡的生成結果:
T2I-Adapter 測試:
使用同一張骨骼引導圖在 SD 1.4 裡的生成結果

用手繪草圖作引導:

最後一組是用 User Scribble(Sketch)作為生成引導的測試。我畫了個吃手章魚貓的草圖
ControlNet 在 SD 1.5 裡的生成結果:
Prompt: Octocat, cat head, cat face, Octopus tentacles, by 忘了是誰

Prompt: Octocat, cat head, cat face, Octopus tentacles, by H.R. Giger
T2I-Adapter 在 SD 1.4 裡的生成結果:
Prompt:  Octocat, cat head, cat face, Octopus tentacles, oil painting

T2I-Adapter 支援一個匹配強度的引數,上圖用了 50% 強度,下圖用了40% 強度,prompt 相同。
上圖與草稿圖裡章魚貓的輪廓更為吻合,而下圖中生成的觸手有更多偏移。

Depth-based 引導

除了 邊緣檢測、草稿和 post 骨骼 這 3 類基礎 input condition ,ControlNet 還支援了另一種非常有用的深度引導。
輸入圖片:
在 ControlNet 裡將原圖轉化為 法線貼圖 Normal Map (一種模擬凹凸處光照效果的技術,是凸凹貼圖的一種實現。相比於深度 Depth Map 模型,法線貼圖模型在保留細節方面似乎更好一些)
Prompt: by H.R. Giger, portrait of Snake hair Medusa, snake hair, realistic wild eyes, evil, angry, black and white, detailed, high contrast, sharp edge
by Alberto Seveso, portrait of Snake hair Medusa, snake hair, photography realistic, beautiful eyes and face, evil, black and white, detailed, high contrast, sharp edge, studio light
by Alphonso Mucha, portrait of Snake hair Medusa, snake hair, beautiful eyes and face of a young girl, peaceful, calm face, black and white, detailed, high contrast, sharp edge

使用體驗上,上面這些引導控制跟 SD 原生支援的 img2img 有什麼區別?

下圖是我用 5 分鐘快速塗抹的草稿,作為 input image 輸入,使用 ControlNet 裡的 Canny edge 邊緣檢測作為輸入條件,生成了 3 張結果。
Prompt:a deer standing on the end of a road, super  details, by Alice Nee
a deer standing on the end of a road, super  details, by C215
a deer standing on the end of a road, super  details, by Canaletto
草稿中鹿後腿的邊緣其實沒有被很好識別出來,但配合 text prompt,所有結果圖片裡都還原了結構良好的鹿。
而下面這幾張是 img2img 引導生成的結果。透過比較輸入圖片和生成結果,很容易發現,img2img 的 input image 提供的引導主要是噪音的分佈,影響構圖和顏色,但對生成物件形狀 (邊緣) 的與輸入圖片的貼合度並不高(鹿角特別明顯)。
Prompt:a vibrant digital illustion of a deer standing on the end of a road, top of mountain, Twilight, Huge antlers like tree branches, giant moon, art by James jean, exquisite details, low poly, isometric art, 3D art, high detail, concept art, sharp focus, ethereal lighting
SD 1.5 裡的生成結果
SD 2.0 裡的生成結果
而 img2img 的 Noise Strength 引數 ( 0.0 – 1.0)會決定 輸入圖片和生成結果的近似程度。引數越大,近似度越高。想要獲得跟輸入圖片更貼合的形狀,就得犧牲掉 擴散模型的“生成能力”。但引導圖片裡的顏色和構圖都能持續保留為。
Input Image
Output: Noise Strength Parameter: 0.8
Output: Noise Strength Parameter: 0.5

ControlNet 條件引導在影像創作上的潛力

下面是一系列社群使用 ControlNet 引導 AI 進行創作生成的實驗和探索。
使用 Post reference 工具生成引導影像,精確控制生成人物的透視及動作。如果只使用  text prompt 引導,這是幾乎完全無法做到的事。
https://www.reddit.com/r/StableDiffusion/comments/113lj38/jumping_from_a_wall_controlnet_is_fun/
另一個用 Post reference 工具(MagicPoser App) 生成引導圖後, 使用 SD fine-tune 模型 Realistic Vision 完成的生成效果。
https://civitai.com/models/4201/realistic-vision-v13
https://www.reddit.com/r/StableDiffusion/comments/1142dtt/controlnet_magicposer_app_realistic_vision/
使用 Control Net 裡的 深度圖引導 (depth map),精確控制透視和場景。
https://twitter.com/cambri_ai/status/1626254897783128064?s=20  
https://twitter.com/toyxyz3/status/1625517492415401985?s=20
用 human post 引導,控制多人角色的生成
https://twitter.com/TomLikesRobots/status/1626013122803781633?s=20
日本推友 @toyxyz3 做了一系列 post skeleton 引導的實驗,非常有價值。

去掉 post skeleton 上的一部分肢體後引導,ControlNet 會引導生成時 將缺失的四肢處理為被遮擋,頭部處理為側面角度 (可能需要 prompt 輔助引導)。

https://twitter.com/toyxyz3/status/1626273906528251904?s=20

改變 post skeleton 裡是四肢的比例,ControlNet 會在引導生成時處理為透視角度。

https://twitter.com/toyxyz3/status/1626138871598821377?s=20

改變 post skeleton 裡的頭身例,ControlNet 會在引導生成時將人物物件處理為不同年齡(或Q版)。

https://twitter.com/toyxyz3/status/1626137567178657792?s=20

改變 post skeleton 裡的肢體數量。。。ControlNet 會在引導生成時將處理為,額~ 半獸人

https://twitter.com/toyxyz3/status/1626977005270102016?s=20

@toyxyz3 還測試了是否能在畫面裡合理容納更多數量人物

https://twitter.com/toyxyz3/status/1626138471256715265?s=20

多種條件引導的組合使用

雖然 Control Net 還不能原生支援多種 input condition, 但加上人工的後期處理,我們可以看見其應用潛力。
使用兩種引導條件分別生成人物和場景
人物使用 post skeleton 引導,場景使用 depth map 引導。分別生成完再進行合成。分開引導效果更好,也讓創作設計更為靈活。(人物合成前需要摳圖。另外別忘了給人物新增投影

https://twitter.com/toyxyz3/status/1626298297211326465?s=20

https://twitter.com/toyxyz3/status/1626594162060718083

同時使用不同引導圖來覆蓋滿足兩種控制需求

Reddit 使用者 Ne_Nel 同時使用兩張引導圖(需要能支援兩張 input image 的 SD 生成工具),一張用於 ControlNet 引導,一張上色後用於 img2img 引導,就可以同時控制生成結果的物件輪廓和顏色/光影

https://www.reddit.com/r/StableDiffusion/comments/115dr9r/more_madness_controlnet_blend_composition_color/

這也是我非常期望擁有的一種引導方式,能同時從輸入影像裡讀取邊緣和顏色這兩種引導條件。基於 ControlNet 和 T2I-Adapter 的框架,說不定我們很快能看到 這樣一種新的引導模型被訓練出來。

下面這個實驗中,@toyxyz3 也試圖實驗 ControlNet 在 讀取 Semantic Segmentation map 的 segments 時是否有可能帶上深度或顏色資訊 (並沒有)

https://twitter.com/toyxyz3/status/1626835630176215045?s=20

但第二天,社群就發現了 Semantic Segmentation 的一個特質。Semantic Segmentation 語義分割是一種深度學習演算法,名字裡有“語義”一詞是有含義的。這種演算法將一個標籤或類別與影像中的每個畫素聯絡起來。被用來識別形成不同類別的畫素集合。例如,常見應用於自動駕駛、醫療成像和工業檢測。比如幫助自動駕駛汽車識別車輛、行人、交通標誌、路面 等不同物件的特徵。而每種標籤都會有一個對應的標記顏色
從 ControlNet 的論文中可知,它使用的 segmentation map model 用的是 ADE20K 的協議。ADE20K 公開了它用於標註不同語義segments的顏色程式碼。

https://www.researchgate.net/figure/Semantic-labels-of-ADE20K-data-set-in-BGR-format_fig2_339839515

這就意味著在設計 Segmentation map 引導圖時,創作者可以反過來用。比如 改變某個 segment 的顏色,使之與 ADE20K 演算法用於標註時的語義一致,比如 ADE20K 用於標註“鐘錶”的是草綠色,把背景那個形狀塊塗成草綠色,生成時,這個形狀塊就更大機率會被引導向生成鐘錶,其實該形狀塊與鐘錶常見的圓形形狀不符。

不得不說,Stable Diffusion 玩家們的 Hacking 能力實在是強大。

https://twitter.com/toyxyz3/status/1627286943783612416?s=20

Google Doc 連結和下圖裡是 ADE20K 用於標註的顏色程式碼。

https://docs.google.com/spreadsheets/d/1se8YEtb2detS7OuPE86fXGyD269pMycAWe2mtKUj2W8/edit#gid=0

ControlNet 條件引導在3D和動畫創作上的潛力


結合 Blender 使用 ContrelNet 創作 3D

Blender 裡面建立的 3D 模型,匯出靜態圖片作為 input image,使用 controlnet 的深度檢測生產影像,再作為貼圖貼回 blender 裡的原模型上,bingo!雖然用於人體這類複雜曲面,效果會比較粗糙,但用於包裝盒或建築這類簡單的幾何體,應該會非常實用。

https://twitter.com/TDS_95514874/status/1626331836459671552?s=20

結合 Blender 使用 ContrelNet 創作動畫

在 Blender 裡生成 3D 模型後,用不同顏色標記各個部位,再把動畫序列匯出後 在 ControlNet 裡作為 Segmentation map condition 輸入,生成的動畫,各部件的結構有更好的穩定性和一致性,特別適用於身體部件之間有遮擋的動作。

https://twitter.com/TDS_95514874/status/1626817468839911426?s=20


使用兩種輸入引導的組合創作動畫

人物動作使用 post skeleton 引導,場景使用 depth map 引導。分別生成完再進行合成。雖然還不是真正的 text to animation 生成,但這種方法已經能獲得比之前都好的效果,更少的 glitch interference (跳幀感),人物動作更流程,背景也更穩定。

https://twitter.com/toyxyz3/status/1627417453734293504?s=20

哪裡可以免安裝且免費玩上 ControlNet 和 T2I-Adapter

  • ControlNet + SD 1.5
https://huggingface.co/spaces/hysts/ControlNet
  • ControlNet + Anything v4.0
https://huggingface.co/spaces/hysts/ControlNet-with-other-models
  • T2I-Adapter + SD 1.4
https://replicate.com/cjwbw/t2i-adapter
  • 整合到 Stable Diffusion WebUI 裡
1. 更新 WebUI 到最新版本, 在 https://github.com/Mikubill/sd-webui-controlnet 下載或安裝,放到 WebUI 的 extensions 資料夾內
2. 在 https://huggingface.co/lllyasviel/ControlNet/tree/main/annotator/ckpts 下載檔案放到外掛目錄下的 annotator 下的 ckpts 目錄
3. 在 https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main 下載模型(700M)
或 https://huggingface.co/lllyasviel/ControlNet/tree/main/models(5.7G)放到外掛目錄下的 models 目錄
可以預見,會有很多整合類似引導控制的外掛、API、細分工具的爆發式出現,比如
https://www.reddit.com/r/StableDiffusion/comments/115eax6/im_working_on_api_for_the_a1111_controlnet/
https://scribblediffusion.com/
https://huggingface.co/spaces/fffiloni/ControlNet-Video

論文和模型   

  • Adding Conditional Control to Text-to-Image Diffusion Models
https://arxiv.org/abs/2302.05543                
https://github.com/lllyasviel/ControlNet
  • T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models
https://arxiv.org/abs/2302.08453
https://github.com/TencentARC/T2I-Adapter

祝大家玩得愉快
意外獲得的鬼畜章魚貓向您問好。

我剛剛釋出了 AIGC 藝術家樣式庫lib.KALOS.art 。一個4人小團隊前後忙了4周。
– 目前全球規模最大,1300+藝術家共3萬餘張 4v1 樣式圖片,
– 覆蓋三個主流影像生成模型
– 為每個藝術家都生成了8~11種常見主題,如 人像、風景、科幻、街景、動物、花卉等主題
藝術家和多種主題的結合,會帶來很多意想不到的結果
後現代舞臺設計師去畫廢土科幻場景?or 立體主義雕塑家去畫一張貓咪?
按人類慣有思維,用肖像畫家去生成肖像,用風景畫家去生成風景,其實限制了AI模型的創作力和可能性。希望 lib.kalos.art 能幫你發掘AIGC的潛力,得到更多創作靈感
點選閱讀原文,訪問最新最全的 AIGC 藝術樣式資料庫

相關文章