本文從實(shí)際存在的問(wèn)題出發(fā),對(duì)代碼框架不兼容、模型加載受限等問(wèn)題率先提出了自研解決方案,快速幫助開(kāi)發(fā)者更容易地開(kāi)發(fā)。
在 ChatGPT 出圈不久,ControlNet 的橫空出世很快在英文和中文互聯(lián)網(wǎng)收獲了眾多開(kāi)發(fā)者和普通用戶,甚至有用戶宣傳 ControlNet 的出現(xiàn)將 AI 創(chuàng)作帶入了直立行走的時(shí)代。不夸張地說(shuō),包括 ControlNet 在內(nèi),同期的 T2I-Adapter、Composer, 以及 LoRA 訓(xùn)練技巧,可控生成作為 AI 創(chuàng)作最后一道高墻,極有可能在可預(yù)見(jiàn)的時(shí)間內(nèi)有進(jìn)一步突破,從而極大地降低用戶的創(chuàng)作成本,提高創(chuàng)作的可玩性。距離 ControlNet 開(kāi)源僅僅過(guò)去兩周,其官方 Star 就已經(jīng)超過(guò) 1 萬(wàn),這種熱度無(wú)疑是空前的。
與此同時(shí),開(kāi)源社區(qū)也極大地降低了用戶的使用門(mén)檻,如 Hugging Face 平臺(tái)提供了基礎(chǔ)模型權(quán)重以及通用的模型訓(xùn)練框架 diffusers,stable-diffusion-webui 開(kāi)發(fā)了完善的一套 Demo 平臺(tái),Civitai 貢獻(xiàn)了海量風(fēng)格化 LoRA 權(quán)重。


盡管 webui 作為目前最受歡迎的可視化工具,已經(jīng)快速地支持了近期推出的各種生成模型,并且支持眾多選項(xiàng)供用戶設(shè)置。由于其重點(diǎn)考慮了前端界面的易用性,背后代碼結(jié)構(gòu)其實(shí)十分復(fù)雜,對(duì)于開(kāi)發(fā)者而言不夠友好。比如 webui 盡管支持了多種類(lèi)型的加載和推理,但卻無(wú)法支持不同框架下的轉(zhuǎn)換,也無(wú)法支持模型的靈活訓(xùn)練。我們?cè)谏鐓^(qū)討論中發(fā)現(xiàn)了許多現(xiàn)有開(kāi)源代碼暫未解決的痛點(diǎn)。
首先,代碼框架不兼容,目前熱門(mén)的模型,如 ControlNet、T2I-Adapter,與主流的 Stable Diffusion 訓(xùn)練庫(kù) diffusers 不兼容,ControlNet 預(yù)訓(xùn)練的模型無(wú)法直接在 diffusers 框架中被使用。
其次,模型加載受限,目前模型保存格式多樣,如.bin、.ckpt、.pth、.satetensors 等,除了 webui 外,目前 diffusers 框架對(duì)于這些模型格式的支持還有限,考慮到 LoRA 大部分模型以 safetensors 保存為主,用戶很難直接將 LoRA 的模型加載到已有的基于 diffusers 框架訓(xùn)練的模型中。
第三,基礎(chǔ)模型受限,目前 ControlNet、T2I-Adapter 均基于 Stable-Diffusion-1.5 進(jìn)行訓(xùn)練,且僅開(kāi)源了 SD1.5 下的模型權(quán)重,考慮到特定場(chǎng)景,已經(jīng)存在諸如 anything-v4、ChilloutMix 等優(yōu)質(zhì)動(dòng)漫模型,即使引入了可控信息,最終生成結(jié)果仍然受限于 SD1.5 中 UNet 的能力。
最后,模型訓(xùn)練受限,目前 LoRA 已經(jīng)被廣泛驗(yàn)證是風(fēng)格遷移、保持特定形象 IP 最有效的方法之一,但 diffusers 框架目前僅支持 UNet 的 LoRA 嵌入,無(wú)法支持 text encoder 的嵌入,會(huì)限制 LoRA 的訓(xùn)練。
我們和開(kāi)源社區(qū)討論后,了解到 diffusers 框架作為通用代碼庫(kù),正計(jì)劃同時(shí)適配近期不斷推出的生成模型;由于涉及較多底層接口重寫(xiě),仍然需要一段時(shí)間更新。為此,我們從以上實(shí)際存在的問(wèn)題出發(fā),率先提出了對(duì)于每一個(gè)問(wèn)題的自研解決方案,快速幫助開(kāi)發(fā)者更容易地開(kāi)發(fā)。
LoRA、ControlNet、T2I-Adapter 到 diffusers 的全適配方案
LoRA for diffusers
本方案是為了在 diffusers 框架,即基于 diffusers 訓(xùn)練保存的模型中,靈活嵌入各種格式的 LoRA 權(quán)重。由于 LoRA 的訓(xùn)練通常凍結(jié) base model,因此可以作為可插拔模塊輕松嵌入已有模型,作為風(fēng)格或 IP 條件約束。LoRA 本身是一種通用的訓(xùn)練技巧,它的基本原理是,通過(guò)低秩分解,可以極大地減少模塊的參數(shù)量,目前在圖像生成中,一般用于訓(xùn)練獨(dú)立于 base model 外的可插拔模塊,實(shí)際使用是以殘差形式與 base model 的輸出合并。
首先是 LoRA 權(quán)重的嵌入,目前 Civitai 平臺(tái)上提供的權(quán)重主要以 ckpt 或 safetensors 格式存儲(chǔ),分以下兩種情況。
(1)Full model(base model + LoRA 模塊)
如果 full model 是 safetensors 格式,可以通過(guò)以下 diffusers 腳本轉(zhuǎn)換
python ./scripts/convert_original_stable_diffusion_to_diffusers.py --checkpoint_path xxx.safetensors --dump_path save_dir --from_safetensors
如果 full model 是 ckpt 格式,可以通過(guò)以下 diffusers 腳本轉(zhuǎn)換
python ./scripts/convert_original_stable_diffusion_to_diffusers.py --checkpoint_path xxx.ckpt --dump_path save_dir
轉(zhuǎn)換完成后,可直接利用 diffusers 的 API 進(jìn)行模型加載
from diffusers import StableDiffusionPipeline
pipeline = StableDiffusionPipeline.from_pretrained (save_dir,torch_dtype=torch.float32)
(2)LoRA only (僅包含 LoRA 模塊)
目前 diffusers 官方無(wú)法支持僅加載 LoRA 權(quán)重,而開(kāi)源平臺(tái)上的 LoRA 權(quán)重基本以這種形式存儲(chǔ)。本質(zhì)上是完成 LoRA 權(quán)重中 key-value 的重新映射,使其適配到 diffusers 模型中。為此,我們自行支持這個(gè)功能,提供了轉(zhuǎn)換腳本。
pipeline = StableDiffusionPipeline.from_pretrained (model_id,torch_dtype=torch.float32)
model_path = "onePieceWanoSagaStyle_v2Offset.safetensors"
state_dict = load_file (model_path)
只需要指定 diffusers 格式的模型,以及存儲(chǔ)為 safetensors 格式的 LoRA 權(quán)重。我們提供了一個(gè)轉(zhuǎn)換示例。
python convert_lora_safetensor_to_diffusers.py
此外,LoRA 本身由于其輕量化,可以在小數(shù)據(jù)情況下快速完成訓(xùn)練,并能夠嵌入到其他網(wǎng)絡(luò)中。為了不局限于已有 LoRA 權(quán)重,我們?cè)?diffusers 框架中支持了 LoRA 的多模塊(UNet+text encoder)訓(xùn)練,并已經(jīng)在官方代碼庫(kù)提交 PR(https://github.com/huggingface/diffusers/pull/2479),并支持了 ColossalAI 中訓(xùn)練 LoRA。
代碼開(kāi)源在:https://github.com/haofanwang/Lora-for-Diffusers
ControlNet for diffusers

本方案是為了支持在 diffusers 框架中,使用 ControlNet?;陂_(kāi)源社區(qū)的部分嘗試,我們提供了完整的 ControlNet+Anything-V3 使用用例,支持將 base model 從原本 SD1.5 的替換到 anything-v3 模型,使 ControlNet 具備較好動(dòng)漫生成的能力。
此外,我們也支持 ControlNet+Inpainting,并提供了適配 diffusers 的 pipeline,


以及多條件控制的 Multi-ControlNet。

代碼開(kāi)源在:https://github.com/haofanwang/ControlNet-for-Diffusers
T2I-Adapter for diffusers

與 ControlNet 相似,我們也同時(shí)支持了同期開(kāi)源的 T2I-Adapter 到 diffusers 的適配。
代碼開(kāi)源在:https://github.com/haofanwang/T2I-Adapter-for-Diffusers
目前以上三種適配方案均已經(jīng)向社區(qū)開(kāi)源,并在 ControlNet、T2I-Adapter 中被官方分別致謝,也收到了來(lái)自 stable-diffusion-webui-colab 作者的感謝。我們正在與 diffusers 官方保持討論,會(huì)在近期完成以上方案向官方代碼庫(kù)的集成工作。也歡迎大家提前嘗試我們的工作,有任何問(wèn)題均可以直接提 issue,我們會(huì)盡快回復(fù)。
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
原文標(biāo)題:適配Diffusers框架的全套教程來(lái)了!從T2I-Adapter到大熱ControlNet
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
相關(guān)推薦
本帖最后由 eehome 于 2013-1-5 10:10 編輯
網(wǎng)上看到一個(gè)大牛做的,全套資料都公布出來(lái)了
發(fā)表于 08-05 18:35
堡盟新型框架適配器——通過(guò)兩次卡入安裝傳感
發(fā)表于 01-08 09:34
?790次閱讀
ARM全套精華及經(jīng)驗(yàn),希望大家好好的學(xué)習(xí)。
發(fā)表于 06-20 17:23
?6次下載
和利時(shí)DCS系統(tǒng)全套資料
發(fā)表于 12-16 18:30
?32次下載
一、Web框架 1.Django: 開(kāi)源web開(kāi)發(fā)框架,它鼓勵(lì)快速開(kāi)發(fā),并遵循MVC設(shè)計(jì),比較龐大,開(kāi)發(fā)周期短。Django的文檔最完善、市場(chǎng)占有率最高、招聘職位最多。全套的解決方案,Django象
發(fā)表于 11-15 20:26
?2129次閱讀
是OpenHarmony系統(tǒng)驅(qū)動(dòng)框架的重要組成部分,它基于HDF驅(qū)動(dòng)框架、操作系統(tǒng)適配層(OSAL, operating system abstraction layer)以及驅(qū)動(dòng)配置管理機(jī)制,為各類(lèi)平臺(tái)設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)提供標(biāo)準(zhǔn)
發(fā)表于 09-24 11:16
?7260次閱讀
辦公、HMS Core 等熱門(mén)話題,與華為專家、行業(yè)大咖、全球開(kāi)發(fā)者一起探討全場(chǎng)景智慧體驗(yàn)的未來(lái)。 OpenHarmony多芯片適配框架產(chǎn)生的背景: 設(shè)備驅(qū)動(dòng)軟件解決的是:操作系統(tǒng)和硬件設(shè)備間的交互 ? 直播間:http://t.elecfans.com/live/170
發(fā)表于 10-23 13:27
?1646次閱讀
項(xiàng)目介紹 項(xiàng)目名稱:XUI 所屬系列:openharmony的第三方組件適配移植 功能:一個(gè)簡(jiǎn)潔而又優(yōu)雅的ohos原生UI框架,解放你的雙手! 項(xiàng)目移植狀態(tài):主功能完成 調(diào)用差異:無(wú) 開(kāi)發(fā)版本
發(fā)表于 04-07 09:04
?1次下載
項(xiàng)目介紹 項(xiàng)目名稱:MultipleTheme 所屬系列:openharmony的第三方組件適配移植 功能:支持無(wú)縫換膚的框架,配合theme和換膚控件框架可以做到無(wú)縫切換換膚 項(xiàng)目移植狀態(tài):主功能
發(fā)表于 04-07 09:14
?2次下載
項(xiàng)目介紹 項(xiàng)目名稱:Conductor 所屬系列:openharmony的第三方組件適配移植 功能:基于component (而非Fraction) 的HAP框架! 項(xiàng)目移植狀態(tài):主功能完成 調(diào)用
發(fā)表于 04-07 10:48
?1次下載
項(xiàng)目介紹 項(xiàng)目名稱:手勢(shì)檢測(cè)器框架 所屬系列:openharmony的第三方組件適配移植 功能:實(shí)現(xiàn)各種手勢(shì)檢測(cè)功能 項(xiàng)目移植狀態(tài):主功能完成 調(diào)用差異:無(wú) 開(kāi)發(fā)版本:sdk6,DevEco
發(fā)表于 04-08 09:17
?2次下載
drpc 組件是 DMicro 框架的一部分,為了適配 DMicro 框架,在 erpc 的基礎(chǔ)上做了深入的擴(kuò)展開(kāi)發(fā)。
發(fā)表于 08-08 15:18
?709次閱讀
發(fā)力新興小賽道,快來(lái)了解WAY~ON維安便攜式儲(chǔ)能全套方案由代理供
發(fā)表于 05-10 11:31
?733次閱讀
發(fā)力新興小賽道,快來(lái)了解維安便攜式儲(chǔ)能全套方案
發(fā)表于 05-10 11:40
?1172次閱讀
發(fā)力新興小賽道,快來(lái)了解WAYON維安便攜式儲(chǔ)能全套方案
發(fā)表于 05-30 13:59
?1008次閱讀
評(píng)論