国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion

這篇具有很好參考價值的文章主要介紹了用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

隨著 stable-diffusion 的開源,讓更多人有機會直接參與到 AI 繪畫的創(chuàng)作中,相關(guān)的教程也如雨后春筍般的出現(xiàn)??墒悄壳拔铱吹降慕坛掏|(zhì)性較高,通常只能稱作為"使用流程講解",但是通常沒有對其原理和邏輯進行深入說明。

所以本文的目的,是用盡可能少的廢話,給大家補充一些重要的相關(guān)知識。對于"怎么用"這類的問題,通常有別人已經(jīng)講解過,我就不會過多贅述(而是貼一個教程鏈接,請讀者自己學(xué)習(xí))。如果你想了解更多關(guān)于"是什么"、“為什么"的問題,那么本文將會給你更多的解答,盡可能讓讀者做到"知其然,亦知其所以然”。

本文共計2.7w字,內(nèi)容較長,喜歡記得收藏、點贊、關(guān)注。

用通俗易懂的方式講解系列

  • 用通俗易懂的方式講解:不用再找了,這是大模型最全的面試題庫
  • 用通俗易懂的方式講解:這是我見過的最適合大模型小白的 PyTorch 中文課程
  • 用通俗易懂的方式講解:一文講透最熱的大模型開發(fā)框架 LangChain
  • 用通俗易懂的方式講解:基于 LangChain + ChatGLM搭建知識本地庫
  • 用通俗易懂的方式講解:基于大模型的知識問答系統(tǒng)全面總結(jié)
  • 用通俗易懂的方式講解:ChatGLM3 基礎(chǔ)模型多輪對話微調(diào))
  • 用通俗易懂的方式講解:最火的大模型訓(xùn)練框架 DeepSpeed 詳解來了
  • 用通俗易懂的方式講解:這應(yīng)該是最全的大模型訓(xùn)練與微調(diào)關(guān)鍵技術(shù)梳理
  • 用通俗易懂的方式講解:Stable Diffusion 微調(diào)及推理優(yōu)化實踐指南
  • 用通俗易懂的方式講解:大模型訓(xùn)練過程概述
  • 用通俗易懂的方式講解:專補大模型短板的RAG
  • 用通俗易懂的方式講解:大模型LLM Agent在 Text2SQL 應(yīng)用上的實踐
  • 用通俗易懂的方式講解:大模型 LLM RAG在 Text2SQL 上的應(yīng)用實踐

技術(shù)交流

技術(shù)要學(xué)會分享、交流,不建議閉門造車。一個人走的很快、一堆人可以走的更遠。

建立了大模型技術(shù)交流群,大模型學(xué)習(xí)資料、數(shù)據(jù)代碼、技術(shù)交流提升, 均可加知識星球交流群獲取,群友已超過2000人,添加時切記的備注方式為:來源+興趣方向,方便找到志同道合的朋友。

方式①、微信搜索公眾號:機器學(xué)習(xí)社區(qū),后臺回復(fù):技術(shù)交流
方式②、添加微信號:mlc2060,備注:技術(shù)交流

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

背景知識

Stable Diffusion 是什么?

Stable Diffusion 是利用擴散模型進行圖像生成的產(chǎn)品,可以支持 text2image、image2image。并且由于“論文公開+代碼開源”,其用戶群體遠大于其他 AI 圖像生成產(chǎn)品。另外,而且眾人拾柴火焰高,代碼和項目開源使得各項優(yōu)化技術(shù)在其上快速應(yīng)用,使其不斷迭代優(yōu)化。

傳送門:官網(wǎng) | 論文 | Git

WebUI 是什么?

Stable Diffusion WebUI 是 AUTOMATIC1111 為 Stable Diffusion 開發(fā)的一套 UI 操作界面,大幅度降低了 Stable Diffusion 的使用門檻,讓用戶甚至可以不用寫代碼就能夠?qū)崿F(xiàn)模型的推理、訓(xùn)練等操作。

傳送門:Git

啟動器是什么?

啟動器是秋葉 aaaki 團推開發(fā)的用來啟動 Stable Diffusion WebUI 的啟動工具。不僅能夠?qū)崿F(xiàn)一鍵啟動(否則需要用戶先打開 webui 服務(wù),在打開瀏覽器網(wǎng)頁),還包含了諸如環(huán)境選項、疑難解答、版本管理、模型管理、擴展插件管理等諸多功能。讓沒有開發(fā)經(jīng)驗的同學(xué)能夠用起來更順手。

傳送門:教程 | 網(wǎng)盤下載

這三者依次遞進,最終呈現(xiàn)在我們眼前,讓我們能夠方便的使用 Stable Diffusion 的能力。下面我們分 2 個大塊,分別介紹如何使用 WebUI 進行推理(即生成內(nèi)容)和訓(xùn)練,以及他們的應(yīng)用場景。

1 上篇:推理應(yīng)用

在開始之前,需要用戶安裝 Stable-Diffusion-WebUI,網(wǎng)絡(luò)上有很多安裝教程,比如:https://www.bilibili.com/video/BV1NX4y1Q7MH

但是實際上,在 WebUI 的官方介紹中已經(jīng)列舉了安裝步驟:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

1.1 文生圖
1.1.1 模型風(fēng)格介紹

首先不同模型所生成的圖風(fēng)格是會完全不一樣的,在 C 站 上可以直接下載模型。用戶只需要把CHECKPOINT格式的模型下載下來并放到stable-diffusion-webui/models/Stable-diffusion這個路徑下就可以直接使用。在 WebUI 界面左上角既可以選擇模型:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

我將其按風(fēng)格分成兩大類:偏二次元風(fēng)格 和 偏寫實風(fēng)格。下面我們分別以“Call of Duty”作為 prompt,看一些不同模型生成圖片的效果:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

【說明】:問了方便,本文后面的介紹全部都是基于 chilloutmix 模型進行的。

1.1.2 text2image 超參數(shù)設(shè)置

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

【說明】:該界面隨著版本迭代會有些不同,如果讀者自己的界面和我這個不通,不用太在意

我們舉一個例子,打開 txt2image 的標(biāo)簽,左上角選擇你想用的模型;在下方兩個方框中分別輸入提示詞(prompt)來生成你想要什么樣的圖片,以及反向提示詞來控制你不想要什么圖片;后面幾個參數(shù)說明如下:

  1. 采樣器:其實就是在做圖像生成的步驟,選用哪種模型(或擴散模型)

  2. 采樣步數(shù):其實就是擴散模型進行擴散的 step(這里的“采樣”就是“生成圖片”的意思,并不是我們平常理解的從很多數(shù)據(jù)中抽出一部分的那個采樣)。一般設(shè)置為 60 就已經(jīng)很清楚了,用戶可根據(jù)對顯存大小和耗時進行調(diào)整。

  3. 高度/寬度:生成圖片的 size

  4. 生成批次/每批數(shù)量:最終會生成“生成批次 x 每批數(shù)量”張圖片,這里分成兩個參數(shù)是考慮到顯存的限制,無法一口氣生成大量圖片

  5. 圖像生成種子:隨機種子不多介紹

  6. Aditional Networks:是一個插件,可以為模型加上一些其他結(jié)構(gòu)(如 LoRA 等),關(guān)于模型訓(xùn)練和組合,我們以后找機會專門介紹

  7. ControlNet:是一個插件,可以通過輸入一張圖片,來控制生成結(jié)果與輸入圖片相似(下一節(jié)單獨介紹)

這樣輸入相關(guān)參數(shù)后,可以看到 girl holding a gun 作為 prompt,所生成的 6 張圖片

1.1.3 ControlNet 的應(yīng)用

傳送門:論文 | 代碼 | 插件

  • 是做什么的?

We present a neural network structure, ControlNet, to control pretrained large diffusion models to support additional input conditions.

我們提出了一個神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),ControlNet,以控制預(yù)訓(xùn)練的大型擴散模型,以支持額外的輸入條件。

其實就是在大型擴散生成模型的基礎(chǔ)上,再加上一個結(jié)構(gòu),使得擴散生成模型能夠接受一個新的“圖像輸入”。并且對模型的輸出起到控制作用,使其與輸入圖像類似。

  • 特點是什么?
  1. 是一個與訓(xùn)練模型,拿來即用,且已經(jīng)集成在 Stable Diffusion WebUI 中

  2. 在 text2image 時,需要額外輸入一張圖片

  3. 生成的結(jié)果會與輸入圖片保持較高的一致性

  4. 用戶可以對輸入圖片進行一定的預(yù)處理,以保留最關(guān)注的信息,從而產(chǎn)生不同風(fēng)格

  • 怎么做到的?

Step1: 將預(yù)訓(xùn)練好的擴散生成模型參數(shù)凍結(jié),并 copy 一個新的可訓(xùn)練模型

The ControlNet clones the weights of a large diffusion model into a “trainable copy” and a “l(fā)ocked copy”

Step2: 將得到的兩個模型按照下圖的模式一起訓(xùn)練,其中可訓(xùn)練模型中的 Decoder 結(jié)構(gòu)是“零卷積”結(jié)構(gòu)

The trainable and locked neural network blocks are connected with an unique type of convolution layer called “zero convolution”, where the convolution weights progressively grow from zeros to optimized parameters in a learned manner.

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • 怎么使用?

重述下本文的原則是,已經(jīng)有人講解過我就不廢話了,直接把現(xiàn)有的教程鏈接貼給你。

  1. 安裝插件,教程:https://www.bilibili.com/video/BV15k4y1t7Mo/

  2. 下載模型,主要 controlnet 模型下載地址:https://huggingface.co/lllyasviel/ControlNet

  3. 全流程例子:https://www.bilibili.com/read/cv21829826

  4. 官方參數(shù)說明:https://github.com/Mikubill/sd-webui-controlnet

1.1.4 腳本的使用

在 text2image 頁面的左下方提供了腳本的選擇。這里的腳本其實就是保存在stable-diffusion-webui/scripts/路徑下的 python 腳本文件,目的就是為我們提供了一些方便的功能。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

截至目前,text2image 功能支持 4 個腳本選擇:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

我們分別簡單介紹:

提示詞矩陣 :當(dāng)我們有多個提示詞時,該腳本提供一個能夠看不同組合效果的功能。例如我們輸入"girl with skirt|gun|blue hair"作為 prompt,其中包含 3 個提示詞,且用"|"分割。這樣就可以生成下圖這種兩兩組合的效果圖:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

從文本框或文件載入提示詞 :顧名思義,就是讓用戶能夠從文件中導(dǎo)入提示詞。舉個例子我們在上面的 prompt 中輸入 girl,在下面的文本框中輸入 boy,結(jié)果生成的圖片是男孩,說明通過“腳本”導(dǎo)入的提示詞覆蓋了在上面文本框中的提示詞

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

X/Y/Z 圖表 :針對特定 prompt,對比不同緯度的參數(shù)取不同值時的效果。如下例中,我們選用 prompt 為“girl holding a gun”,然后對比三個模型以及 10,20,30 三個不同采樣步數(shù)的效果:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

controlnet m2m :這個是一個視頻處理功能,本質(zhì)上是把用戶上傳的視頻切幀,并分別進行 image2image,最后捏成一整個新的視頻。由于視頻不方便展示,而且 text2image 的 m2m 效果一般,容易產(chǎn)生圖像的跳動/閃爍,本文在這里就直接略過了,大家感興趣可以去嘗試一下。

1.2 圖生圖
1.2.1 Deepbooru

傳送門:代碼

對于一些通用的超參數(shù),如:采樣器、采樣步數(shù)在前文 text2image 中就已經(jīng)介紹過了,這里介紹一下 image2image 特有的一個功能:Deepbooru 反向推導(dǎo)提示詞。即輸入一張圖片,輸出該圖像對應(yīng)的提示詞,以求根據(jù)該提示詞能盡可能的還原輸入圖像。

  • 怎么做到的?

根據(jù)代碼可知,本質(zhì)上它就是把 self.model.tags 遍歷一遍,并且通過閾值過濾以及排序給出來的一份 tags 列表。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • 怎么使用?

在 image2image 中,上傳圖片后,點擊“DeepBooru 反向推倒提示詞”,等一會就可以看到提示詞窗口中生成了一串提示詞。并且該提示詞會被應(yīng)用后續(xù)的圖像生成過程。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

1.2.2 功能介紹

除了進行 image2image,還提供了其他功能,如涂鴉繪制(sketch)、局部繪制(inpaint)等:

涂鴉繪制(sketch):允許用戶在上傳的圖像上進行涂鴉,并根據(jù)涂鴉后的結(jié)果生成新的圖像。如下例中,我把角色和黃色背景用黑筆框起來,生成的圖片就會把這部分內(nèi)容放在手機屏幕上。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

局部繪制(inpaint):允許用戶指定在圖像中特定區(qū)域進行修改,而保證其他區(qū)域不變。如下例中,我們把角色的頭發(fā)涂掉,然后在 prompt 中輸入"colorful hair",試圖讓模型把頭發(fā)改成彩色。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

局部繪制-涂鴉蒙版(inpaint sketch):其實也是一種局部繪制(inpaint),區(qū)別之處在于在局部繪制(inpaint)中,用戶涂黑的部分表示該部分可以被重繪;而在局部繪制-涂鴉蒙版(inpaint sketch)中,用戶涂鴉的部分不僅表示可以重繪,用戶涂鴉的內(nèi)容還會成為圖像生成的內(nèi)容來源。下例中依然涂抹了角色的頭發(fā),并且在 prompt 中寫入“colorful hair”試圖讓模型生成彩色頭發(fā):

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

結(jié)果發(fā)現(xiàn)沒有成功生成彩色頭發(fā),反而是黑色頭發(fā)(而且質(zhì)量也不高),這是因為我們用黑筆進行的涂鴉。模型會把我們涂鴉的內(nèi)容作為生成圖像的素材來源。

局部繪制-上傳蒙版(inpaint upload):其實就是不需要用戶手動在前端頁面進行涂鴉,取而代之是用戶上傳一張圖片作為蒙版(類似于我們前面的涂鴉的作用)。這里就不展示了。

1.2.3 ControlNet 的使用

這部分內(nèi)容網(wǎng)上已經(jīng)有很多例子和教程了,比如:https://www.bilibili.com/video/BV1Wo4y1i77v

這里我們只簡單舉一個例子,選取下面這張角色跳舞的圖進行 control,模式選擇人物姿勢檢測

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

然后隨便找一張圖片來進行生成,根據(jù)結(jié)果可以明顯看出 ControlNet 起到了作用,結(jié)果圖中的人物都擺出了相同的姿勢,但是輸入圖片的內(nèi)容中只有色調(diào)和輸出圖片接近,人物的形象/裝扮等都沒有很好的保留。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

1.2.4 腳本的使用

相比 text2image 來說,目前的版本中 image2image 有更多的腳本可以使用,除了已經(jīng)介紹過的 4 個,還有:圖生圖替代測試(img2img alternative test)、圖像迭代(Lookback)、向外繪制第二版(Outpainting mk2)、低質(zhì)量畫布補全(Poor man’s outpainting)、SD 模式方法(SD upscale)共 5 個腳本功能。關(guān)于每種腳本的功能和使用說明,由于有 WebUI 作者的 官方說明 ,并且內(nèi)容很多很雜,本文就不在這里廢話了。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2 下篇:模型訓(xùn)練

目前常用的模型微調(diào)方法,主要包含以下幾種模式:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  1. Dreambooth:微調(diào)整個網(wǎng)絡(luò)參數(shù)

  2. LoRA:通過矩陣分解的方式,微調(diào)少量參數(shù),并加總在整體參數(shù)上

  3. Textual Inversion:只微調(diào)新詞對應(yīng)的 embedding

  4. HyperNetworks:微調(diào)一個額外的網(wǎng)絡(luò)結(jié)構(gòu),作用于 diffusion 過程的 attention 結(jié)構(gòu)上

由于 Textual Inversion 和 HyperNetworks 的訓(xùn)練難度較大,效果也通常不盡如人意,目前并沒有成為模型微調(diào)的主流選擇。所以下文我們主要介紹 Dreambooth 和 LoRA(以及 LoRA 的變體 LyCORIS)相關(guān)的技術(shù)原理、特點、使用場景、使用方法。

2.1 Dreambooth

傳送門:論文 | 代碼 | 插件

2.1.1 是做什么的?

our technique enables synthesizing the subject in diverse scenes, poses, views, and lighting conditions that do not appear in the reference images

我們的技術(shù)能夠在參考圖像中沒有出現(xiàn)的不同場景、姿勢、視圖和光照條件下合成主題

2.1.2 特點是什么?

最少只需要 3-5 個樣本進行微調(diào)(但這幾個樣本需要時同一個主體的不同圖片)

生成的結(jié)果是這個主體(subject)在不同場景下的圖片(如下圖)

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.1.3 怎么做到的?

Step1: 通過圖像-提示詞的唯一標(biāo)識符,來微調(diào)低分辨率模型

We first fine-tune the low-resolution text-to- image model with the input images and text prompts containing a unique identifier followed by the class name of the subject (e.g., “A [V] dog”)

而這一步的難點是避免過擬合,文中作者通過新增一種 autogenous class-specific prior preservation loss,來避免遺忘問題

A key problem is that fine-tuning on a small set of images showing our subject is prone to overfitting on the given images. For this, we present an autogenous class-specific prior preservation loss, where we alleviate overfitting and prevent language drift by encouraging the diffusion model to keep generating diverse instances of the same class as our subject.

Step2: 通過低-高分辨率的配對,來微調(diào)超分辨率組件(就是根據(jù)低分辨率生成高分辨率的那個模型)

In the second step, we fine-tune the super-resolution component with pairs of low-resolution and high-resolution versions of the input images.

而其模型結(jié)構(gòu)如下:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

其中 reconstruction loss 就是 AutoEncoder 常用的重建損失,而 class-specific prior preservation loss 在文中的形式為:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.1.4 如何使用?

首先這是關(guān)于Dreambooth 插件的詳細說明 ,以及為大家提供一份Dreambooth 的參數(shù)設(shè)定指南 ,本文簡單介紹一個例子:

Step1: Create Model

所謂 Create Model,就是創(chuàng)建一個初始化的模型,后面訓(xùn)練微調(diào)會在此基礎(chǔ)上進行梯度更新。Create 出來的模型,會作為中間文件保存在stable-diffusion-webui/models/dreambooth路徑下,而是包含 logging、samples、working、db_config.json 等多個子路徑和文件的空間(而非 ckpt 文件),你可以把他理解成一個 workspace,該空間作為中間文件。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

其中,Source Checkpoint 參數(shù)就是選擇哪一個模型的參數(shù)作為初始化模型參數(shù),模型路徑為:stable-diffusion-webui/models/Stable-diffusion/下的 ckpt 文件模型。而所謂 Scheduler,也就是采樣器,就是選擇擴散模型的形式。都設(shè)置好之后,點擊黃色的 Create Model,再等一會就能看到創(chuàng)建好的模型了。這時在 Output 處可以看到 successfully 的日志,以及在左邊 Model Selection 處可以看到自己剛 Create 出來的模型。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

Step2: 設(shè)置相關(guān)參數(shù)

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

這部分參數(shù)比較多,大家可以參考前文提到的 官方說明 ,既然有了官方說明,本文只作簡要說明:

  • Settings 部分主要需要設(shè)置是否采用 LoRA、Epochs、模型保存策略、Batch Size、學(xué)習(xí)率等,都是基本參數(shù)基本不需要額外介紹。

  • Concepts 部分主要有兩個,一個是數(shù)據(jù)路徑,另一個是 class 和 promote。所謂 prompt,就是我們的目標(biāo)樣本對應(yīng)應(yīng)該輸入什么提示詞;而 class 是在前文 dreambooth 原理介紹中,為了避免過擬合,需要補充一些與目標(biāo)主體屬于同一類別但不是同一個體的樣本,并計算 class-specific prior preservation loss 的那部分樣本的類別(prompt),模型會根據(jù)此內(nèi)容來生成一部分圖片,作為微調(diào)樣本。

  • Saving 部分主要設(shè)置 ckpt 持久化保存策略,具體來說就是.ckpt 文件、loRA 小模型、擴散模型分別以什么樣的策略進行保存。

  • Generate 部分主要設(shè)置模型生成

Step3: 訓(xùn)練和監(jiān)控

全都參數(shù)都設(shè)置好后,直接點擊上面橙色的 Train,就可以開始訓(xùn)練了。在訓(xùn)練過程中,不需要我們做什么,如果感興趣的話可以盯著日志/WebUI 的 Output 界面看一看訓(xùn)練過程中的 loss,以及模型生成出來的圖片。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

其中 Steps 指的是正在進行本次訓(xùn)練的多少步,而 Lifetime 指的是這個模型總共訓(xùn)練了多少步(對于首次訓(xùn)練的模型二者相等,如果這個模型之前被你訓(xùn)練過,這次拿出來繼續(xù)訓(xùn)練,那么 Lifetime 大于 Steps)。上例中我們采用 CODM 中的一個角色“Ghost”作為 prompt 進行微調(diào)訓(xùn)練,訓(xùn)練數(shù)據(jù)共 8 張圖片:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

由于數(shù)據(jù)量很小,不到半個小時就訓(xùn)練完成了。下面是微調(diào)前后根據(jù)“Ghost”進行生成的圖像對比,微調(diào)前:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

微調(diào)后:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

模型已經(jīng)學(xué)習(xí)到了,“Ghost”是一個帶著面罩+護目鏡+耳罩的軍人(而不是鬼魂),但是目前還沒有學(xué)習(xí)到 ghost 面罩上的骷髏圖案。想必在更多數(shù)據(jù)以及更加精細化的微調(diào)后,是能夠做到的。下面是選取了 50 張經(jīng)過簡單清洗的樣本,進行訓(xùn)練的結(jié)果,可見模型已經(jīng)能夠?qū)W習(xí)到 ghost 的很多細節(jié)了,而且成功剔除了無關(guān)的文字。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

以及我們可以試圖制作一版圣誕節(jié)主題的圖片:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

而且還可以結(jié)合 ControlNet,進行人物動作的控制:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

另外我們開可以通過 prompt 對 ghost 的風(fēng)格進行調(diào)整:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.1.5 補充說明 A

在 Dreambooth 訓(xùn)練中,class 的信息是可選的(對應(yīng)論文中的 class-specific prior preservation loss),在我自己的經(jīng)驗中,如果不是為了訓(xùn)練比較通用的大模型,一般可以忽略 class 選項。下面舉一個栗子:

不加 class 項的訓(xùn)練過程(從左到右,訓(xùn)練 epoch 遞增):

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

加了 class 項(man)的訓(xùn)練過程(從左到右,訓(xùn)練 epoch 遞增):

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

明顯看出,在加了 class 信息之后,對于背景的學(xué)習(xí)的更好了,但是在以下 2 個方面的效果下降了:

  1. 明顯看出 ghost 身旁經(jīng)常有其他人,這是由于訓(xùn)練樣本截圖中,通常會出現(xiàn)這種情況

  2. 會出現(xiàn)一張圖有多個骷髏的情況,以及 CODM 的 logo

具體原因,個人理解為:加了 class 之后,模型會認為把 target sample 中出現(xiàn),但是在 class sample 中沒有出現(xiàn)的元素都當(dāng)作要學(xué)習(xí)的目標(biāo)內(nèi)容,當(dāng)樣本不太干凈時,會讓模型把冗余的背景信息也學(xué)進去(比如 ghost 旁邊的人、CODM 的 logo),從而導(dǎo)致過擬合。反而不加 class 時,模型會忽略這些樣本中時有時無的背景信息。

有趣的是,一項以避免過擬合而提出的技術(shù),卻在樣本不太干凈的情況下,反而導(dǎo)致了過擬合。

2.1.6 補充說明 B

Dreambooth 可以在一次訓(xùn)練中,指定多個 concepts 一起訓(xùn)練。但是筆者發(fā)現(xiàn)這樣會讓訓(xùn)練變得困難,導(dǎo)致結(jié)果不如之前。下面舉一個 ghost 和星瞳的例子:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

結(jié)果就是,同時設(shè)置多個 concept 時,模型會學(xué)到每個 concept(雖然學(xué)的不如單 concept 好),但是如果讓模型同時輸出多個 concept 結(jié)果,或多個 concept 之間的關(guān)系,就比較困難。

原因分析:當(dāng)輸入一個短語時(如:ghost and 星瞳),多主體之間的關(guān)系,應(yīng)該是由 CLIP 模型進行語義解碼的。經(jīng)過微調(diào)后,模型雖然學(xué)到了特定詞對應(yīng)的圖像信息,但是 CLIP 模型解碼得到的語義信息沒有充分學(xué)習(xí)(或被覆蓋掉了),導(dǎo)致微調(diào)后多個新主題之間的復(fù)雜關(guān)系難以直接通過提示詞體現(xiàn)。

2.2 LoRA 技術(shù)原理和在 Dreambooth 上的應(yīng)用

傳送門:論文 | 代碼

2.2.1 是做什么的?

We propose Low-Rank Adaptation, or LoRA, which freezes the pre- trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable pa- rameters for downstream tasks.

我們提出了低秩自適應(yīng)(Low-Rank Adaptation, LoRA),它凍結(jié)了預(yù)訓(xùn)練的模型權(quán)重,并將可訓(xùn)練的秩分解矩陣注入到 Transformer 架構(gòu)的每一層,極大地減少了下游任務(wù)的可訓(xùn)練參數(shù)的數(shù)量。

其實就是加速微調(diào):通過“矩陣分解”的方式,只需要微調(diào)更少的參數(shù)。

2.2.2 特點是什么?
  1. 通用:任何網(wǎng)絡(luò)結(jié)構(gòu)都可以利用 LoRA 的思路來進行微調(diào)

  2. 可移植:微調(diào)結(jié)束后,只需要讓原模型參數(shù)+新矩陣乘積,即可得到新模型。并且可以通過+/-的操作,直接進行 LoRA 的遷移

  3. 推理性能不變:模型總參數(shù)量不變,推理性能不變(相比 ControlNet 等新增參數(shù)的結(jié)構(gòu)相比)

2.2.3 怎么做到的?

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

Step1: 凍結(jié)原模型(圖中藍色部分)

Step2: 訓(xùn)練微調(diào)兩個小矩陣參數(shù) A 和 B(圖中橙色部分),可以理解為學(xué)習(xí)一個殘差,只不過是通過矩陣分解的形式表達

Step3: 把模型參數(shù)矩陣相乘(BA)后,加到原來的模型參數(shù)上,形成新的模型

2.2.4 如何使用?

目前使用 LoRA 技術(shù)進行 AI 繪畫的方式主要有 2 個:

  1. 在 Dreambooth 的 Settings 中勾選“Use LoRA”

  2. 通過腳本直接訓(xùn)練 LoRA 模型

由于后者的內(nèi)容很多,下一節(jié)中我會單獨進行介紹,本節(jié)主要介紹 LoRA 技術(shù)在 Dreambooth 上的應(yīng)用。即直接在 Dreambooth 的 Settings 中勾選“Use LoRA”選項。

個人感覺 Dreambooth 采用了 LoRA 后,效果略有下降,對比圖如下:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.2.5 補充說明
  1. 通過 Dreambooth 訓(xùn)練導(dǎo)出的 LoRA,無法直接通過 Additional Network 使用,報錯如下,是一個 AttributeError。(猜測 Additional Network 這個插件制作的時候,主要是針對秋葉 aaaki 訓(xùn)練出來的 LoRA ,所以如果 LoRA 模型與秋葉 aaaki 的訓(xùn)練方法不同,就沒有兼容)

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  1. 通過 Dreambooth 訓(xùn)練導(dǎo)出的 LoRA,同樣無法在 prompt 中加入,報錯內(nèi)容如下,是一個 TypeError(猜測同樣是 WebUI 的使用方式和 Dreambooth 的 LoRA 導(dǎo)出的模型結(jié)構(gòu)對不上,還是插件兼容性問題)。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

如此一來,Dreambooth 導(dǎo)出的 LoRA 模型豈不是全無用武之地?

2.3 LoRA 的腳本訓(xùn)練與代碼解讀
2.3.1 一些基礎(chǔ)

關(guān)于 LoRA 的訓(xùn)練,一般采用秋葉 aaaki 的這個LoRA 教程 (請讀者先學(xué)習(xí)該教程),除了教程內(nèi)包含的使用方法以外,簡單補充幾個知識點:

  1. lora-scripts 這個項目是在sd-scripts 項目的外面包了一層,目的是讓 sd-scripts 更加易用

  2. sd-scripts 提供了更加靈活的功能,如:訓(xùn)練 lora、訓(xùn)練 dreambooth、訓(xùn)練 test-embedding、指定訓(xùn)練 UNet 或 Text Encoder、圖像生成、模型轉(zhuǎn)換等多種能力

  3. lora-scripts 調(diào)用了 sd-scripts 中的訓(xùn)練 lora 訓(xùn)練的腳本,但是把很多的設(shè)置、參數(shù)等進行了說明和整理,且順便帶了 tensorbord 的功能,讓用戶能夠一鍵完成環(huán)境配置

2.3.2 淺淺看下代碼

lora-scripts/train.ps1中可以看出,實際調(diào)用的是lora-scripts/sd-scripts/train_network.py

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

而在這個過程中實際上有兩個主要過程:

  1. 模型創(chuàng)建

  2. 模型訓(xùn)練

  • 創(chuàng)建模型過程

lora-scripts/sd-scripts/train_network.py中,在訓(xùn)練前會先讀取 base 模型,并創(chuàng)建一個帶 lora 的可訓(xùn)練模型

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

然后我們具體看下creat_network這個函數(shù)內(nèi)部,如何創(chuàng)建新的 lora 模型的,腳本在lora-scripts/sd-scripts/networks/lora.py。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

進入到LoRANetwork類的__init__函數(shù)內(nèi)部看看,具體如何創(chuàng)建新的 lora 模型的。下方代碼中顯示,會根據(jù)原始的 unet 和 text-encoder 創(chuàng)建新的帶 lora 的 unet 和 text-encoder(不會針對 vae 進行訓(xùn)練):

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

再進一步,看一下LoRAModule__init__函數(shù)內(nèi)部,是如何創(chuàng)建一個 lora 的。實際上就是針對原始模型中每一個層,都創(chuàng)建兩個全連接層(就是 lora):

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

在最后進行前向計算時,把原始模型該層的輸出與兩個全連接層的輸出相加。這與論文中的做法是一樣的。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • 訓(xùn)練模型過程

創(chuàng)建好帶 lora 的模型(network)后,看lora-scripts/sd-scripts/train_network.py中核心訓(xùn)練過程如下,中規(guī)中矩

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

然后我們看下最核心的遍歷樣本訓(xùn)練的過程,可以看出有完整的正向擴散和反向去噪兩個過程。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.3.3 跑幾個 demo
  • Ghost 的 case

為了方便與前文進行對比,我選擇 ghost 的數(shù)據(jù)集進行訓(xùn)練,下圖展示了不同的 “訓(xùn)練 step“ x ”lora 權(quán)重” 的效果:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

結(jié)論:

  1. 隨著訓(xùn)練的進行,lora 也能夠逐漸認識 ghost,并且在訓(xùn)練過程中也能去除掉文字。

  2. 權(quán)重適中即可,理論上訓(xùn)練完美的情況下權(quán)重==1 是合理的(因為在訓(xùn)練過程就是 1);如果訓(xùn)練不充分(如第二行),可適當(dāng)調(diào)大 lora 權(quán)重(但過大會讓結(jié)果糊掉),反之如果過擬合,可適當(dāng)調(diào)小 lora 權(quán)重。

  3. 個人經(jīng)驗:如果要進行更多的控制操作(如 ControlNet,復(fù)雜的 prompt 等),建議把權(quán)重調(diào)小一些,以此來增大泛化性能

  4. 像比于前文的 Dreambooth,lora 模型對于背景細節(jié)的控制能力較弱。好處是不容易對背景過擬合,壞處是可能需要對背景進行更多調(diào)教。

  5. 嘗試了不同的種子,生成圖片的多樣性較低(相對于 Dreambooth)

  • 星瞳的 case

同樣的方式,我們在星瞳的例子上進行嘗試:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

在星瞳的例子中,生成圖中有不少“類文字”的內(nèi)容,這是因為訓(xùn)練樣本中有很多圖片中就包含文字,在 ghost 訓(xùn)練樣本中文字被我手動抹去了。這也從另一方面說明了 lora 與 dreambooth 的一個不同點:

  1. dreambooth 通過“唯一標(biāo)識符”來學(xué)習(xí)樣本,對細節(jié)把控更加精準(zhǔn)。只有訓(xùn)練樣本中出現(xiàn)頻率高且變化不大的元素,才能被精準(zhǔn)學(xué)習(xí)到(比如 CODM 的 ghost 和 logo、背景風(fēng)格、星瞳的臉)

  2. lora 對訓(xùn)練樣本的學(xué)習(xí)更加泛化,訓(xùn)練樣本中出現(xiàn)頻率沒那么高的內(nèi)容也可以被學(xué)習(xí)到,但是對這部分信息學(xué)習(xí)的不準(zhǔn)確,(比如星瞳身旁的文字,以及 ghost 身后的背景)

總結(jié)起來可以理解為:dreambooth 學(xué)習(xí)的是,仔細對比不同樣本中同時出現(xiàn)的特定元素;而 lora 學(xué)習(xí)的是,大概看一眼不同樣本中同時出現(xiàn)的大概內(nèi)容。

  • 多 concept 融合的 badcase

這里我同樣嘗試下 lora 的多 concept 是否表現(xiàn)更好,在數(shù)據(jù)目錄下分別創(chuàng)建了 ghost 和星瞳兩個 concept,并進行訓(xùn)練。但是在訓(xùn)練完成后,同樣出現(xiàn)了 concept 融合的情況:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

關(guān)于 concept 融合的一些經(jīng)驗,目前網(wǎng)上的講解不多,我看到比較好的是這篇:Lora 人物訓(xùn)練(多 concept)導(dǎo)論 ,他利用多 concept 來對同一個角色進行換裝,concept 之間的差異較小。

【補充說明】:上邊這篇資料中提到,秋葉的腳本無法調(diào)整keep_tokens,但實際上是可以的。在秋葉腳本的train_util.py中,add_dataset_arguments這個函數(shù)里可以看到keep_tokens參數(shù)的定義。當(dāng)然我們也就可以在 launch 的命令中加入這個參數(shù)。

總的來說,concept 融合是比較難以避免的問題,因為從原理上看,模型就是把多個 concept 的數(shù)據(jù)放在一起直接進行訓(xùn)練的,模型在學(xué)習(xí)過程中難免會學(xué)混。(沒有像 CLIP 模型那樣采用了對比學(xué)習(xí)的方法,個人推測,如果采用對比學(xué)習(xí)的方法,再對錯誤配對的樣本進行一定的懲罰,也許可以解決這個問題)

另外,如果對每個 concept 單獨訓(xùn)練一個 lora 模型,然后在推理時一起應(yīng)用,也會出現(xiàn)比較嚴重的融合現(xiàn)象。因為實際應(yīng)用時,時先將所有 lora 模型加和到大模型上,在進行生成的。下面是同時使用 2 個 lora 生成的 badcase:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

對此,我總結(jié)了一些個人的經(jīng)驗:

  1. concepts 之間如果是同類主體(比如兩個都是人臉),融合風(fēng)險較大;反之如果是不同主體(一個人臉,一個是裝備),融合風(fēng)險較低

  2. 訓(xùn)練樣本,要盡可能保證非目標(biāo)主體內(nèi)容盡可能多樣化(比如目標(biāo)主體是人臉,就盡可能有多樣的背景、動作等)

  3. 如果確實有比較強的多主體出圖的需求,建議嘗試 textual-inversion 的訓(xùn)練方法,這樣不會把多個主體的梯度同時更新到共有的模型上。

所以目前的結(jié)論就是:如果要訓(xùn)練多個 concept,只有兩種辦法:

  1. 準(zhǔn)備足夠精良的樣本,同時包含兩個 concept,并定義此為一個新的 concept(比如 C 站上 233 娘的那個 lora,應(yīng)該就是把 22 娘和 33 娘兩張臉當(dāng)作一個共同的 concept 來學(xué)習(xí))

  2. 進行更加細致的樣本、參數(shù)、訓(xùn)練方式(如 textual-inversion、對比學(xué)習(xí)等等)的調(diào)整和嘗試。至少像我這樣用默認參數(shù)和低質(zhì)樣本簡單跑一下是不行的。

2.4 LoRA 的變體:LyCORIS
2.4.1 LyCORIS 是什么

LyCORIS(Lora beYond Conventional methods, Other Rank adaptation Implementations for Stable diffusion) 是一些在 LoRA 的思想基礎(chǔ)上,對具體網(wǎng)絡(luò)結(jié)構(gòu)的改進。

A project for implementing different algorithm to do parameter-efficient finetuning on stable diffusion or more.

從前面代碼中可以了解到,LoRA 實際上是對原始模型中每個層,都創(chuàng)建了 2 層線性全連接層,并在該層輸出的時候加上去。那么如果我們創(chuàng)建的新結(jié)構(gòu)不是 2 層線性全連接,而是其他什么結(jié)構(gòu),是否會有更好的效果呢?這就是 LyCORIS 項目研究的內(nèi)容。

具體來說,截至目前(2023.04.04)LyCORIS 包含了 2 種方法(也就是 2 種不同的結(jié)構(gòu)來替代 2 層全連接),分別為 LoCon 和 LoHa。這是官方的說明文檔 ,下面我們分別簡單介紹:

【補充說明】:與 lora 不同,lycoris 的腳本不放在lora-scripts/sd-scripts/networks下,而是在安裝過程中直接集成在 python 環(huán)境中(具體在lora-scripts/install.ps1中的pip install --upgrade lion-pytorch lycoris-lora),因此其腳本保存在lora-scripts/venv/Lib/site-packages/lycoris下面。

  • LoCon 介紹

模型原理在官方的說明中已經(jīng)介紹的很清楚了,其實就是用兩個 Conv 操作,代替原來的兩個矩陣相乘(Wa 和 Wb 相乘)的操作:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

下面我們淺淺的看一下關(guān)鍵代碼,模型腳本位置:lora-scripts/venv/Lib/site-packages/lycoris/locon.py

本質(zhì)上是把 LoRA 的 2 層全連接替換成了帶卷積結(jié)構(gòu)的網(wǎng)絡(luò),最終該層輸出為原始模型輸出+卷積結(jié)構(gòu)輸出*一些因子。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • LoHa 介紹

LoHa 方法,本質(zhì)上是在 LoCon 的基礎(chǔ)上,對 Wa 和 Wb 進行矩陣分解,其目的是為了提升結(jié)果矩陣 W 的秩的上限。這基于一種假設(shè),即秩矩陣的秩越高,通常來講其信息承載的能力越高。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

下面我們淺淺的看一下關(guān)鍵代碼,模型腳本位置:lora-scripts/venv/Lib/site-packages/lycoris/loha.py

本質(zhì)上是依然是采用了 LoCon 的卷積操作,只不過其中參數(shù)不是直接初始化的大矩陣,而是通過初始化的小矩陣進行叉乘而得到的大矩陣。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.4.2 LyCORIS 實踐
2.4.2.1 使用方法

想要使用 lycoris 模型,需要安裝 lycoris 插件:https://github.com/KohakuBlueleaf/a1111-sd-webui-locon

然后就可以將 lycoris 模型和 lora 模型一樣,加入到 prompt 中來使用了

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

而且也可以在“X/Y/Z plot”腳本中,對比不同模型的結(jié)果:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

【補充說明】:目前的 lycoris 插件不支持 addtional network 插件,所以無法通過 addtional network 插件使其生效。(但是我親自試用了下,locon 是可以生效的,但是 loha 是沒生效)

2.4.2.2 Demo 展示和分析
  • LoCon - Ghost用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • LoCon - 星瞳用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • LoCon - 一些結(jié)論:

  1. 在 ghost 的例子中,我做的樣本中人物盡可能大,基本會頂在圖像邊緣。本例子中圖像邊緣信息容易被丟失,導(dǎo)致在結(jié)果中角色不完整,我懷疑是由于卷積結(jié)構(gòu)的原因(但還不能確定)。

  2. 在 0.75 倍權(quán)重情況下,也會出現(xiàn)糊圖的情況,說明 locon 雖然學(xué)習(xí)能力更強,但是泛化性略差。這一點在 ghost 和星瞳的例子上都的已驗證

  • LoHa - Ghost用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • LoHa - 星瞳用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  • LoHa - 一些結(jié)論:

  1. 圖片灰蒙蒙,不清晰(step=40),這一點在 ghost 和星瞳的例子上都可以反映出來,但調(diào)低 dim 參數(shù)能夠一定程度上緩解。(推測:根據(jù) https://github.com/KohakuBlueleaf/LyCORIS#lora-with-hadamard-product-representation-loha ,LoHa 的 rank<=dim^2,所以應(yīng)該用更小的 dim 參數(shù))

  2. loha 更占內(nèi)存,我在跑的過程中經(jīng)常爆內(nèi)存

  3. 聽說 LoHa 在多 concept 方面表現(xiàn)比較好(這一點我自己暫時沒去驗證)

  4. 總體來看,這兩個 LoHa 都沒有取得好的效果。訓(xùn)練后期會過擬合,前期又沒學(xué)到東西,整體畫面還不清晰。

【補充】:關(guān)于 LoHa 的訓(xùn)練技巧,如果讀者小伙伴有更多的經(jīng)驗,歡迎在評論區(qū)指點一二。這里我就先貼一個關(guān)于幾種模型調(diào)參數(shù)的經(jīng)驗貼:《Stable Diffusion Lora locon loha 訓(xùn)練參數(shù)設(shè)置》

2.4.2.3 與 LoRA 的對比

為了統(tǒng)一度量,我們依然在 ghost 和星瞳兩個例子上來觀察效果。首先看訓(xùn)練過程的 loss

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

在這兩個例子中,單純從訓(xùn)練過程的 loss 來看模型效果(其他參數(shù)一樣),loha > locon > lora。但是 loss 不代表一切,從前面的例子中可以看出,locon 和 loha 分別有一些的問題,反而 loha 的效果最不理想。(這不意味著該缺點無法避免,C 站上仍然有很多優(yōu)秀的 LyCORIS 模型,這里只是闡述 LyCORIS 的訓(xùn)練難度和使用難度可能比 LoRA 更大一些)。

2.5 Textual Inversion

傳送門:論文 | 代碼 | 插件

2.5.1 是做什么的?

Using only 3-5 images of a user-provided concept, like an object or a style, we learn to represent it through new “words” in the embedding space of a frozen text-to-image model.

只使用用戶提供的概念(如對象或樣式)的 3-5 張圖像,我們學(xué)習(xí)通過凍結(jié)的文本到圖像模型的嵌入空間中的新“單詞”來表示它

其實就是學(xué)習(xí)一個新的詞表示,作者在文中論證了,單純學(xué)習(xí)詞的表征已經(jīng)能夠?qū)W習(xí)到獨特而多樣的概念。

2.5.2 特點是什么?
  1. 很少的樣本量需求(論文中說 3-5 張圖片)

  2. 主要學(xué)習(xí)新的詞和概念

  3. 只更新 word embedding 的參數(shù)

  4. 詞 embedding 結(jié)果在微調(diào)模型上表現(xiàn)好,但很難遷移到其他的模型上

2.5.3 怎么做到的?

其實原理上很簡單,從圖中可以很明顯看出來,作者把整個 Generator 部分都凍結(jié),以及整個 Text Encoder 中的 Transformer 也凍結(jié),其他詞的 embedding 也都凍結(jié),最后只留下目標(biāo)詞的 embedding 會參與到梯度更新中。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

2.5.4 淺淺看一下代碼

雖然具體使用推薦直接用 WebUI 進行訓(xùn)練,就已經(jīng)很方便了。但是為了更加直觀的理解他具體做了什么,我們還是看一下 sd-scripts 項目中的關(guān)鍵代碼:

sd-scripts/train_textual_inversion.py 腳本中可以看到訓(xùn)練過程代碼,整體流程上與前文的 LoRA 訓(xùn)練是差不多的,但是有幾點關(guān)鍵不同:

  1. 沒有 create model 的過程,因為不需要創(chuàng)建 lora,直接在原模型基礎(chǔ)上進行梯度更新

  2. 需要對新的詞進行初始化,并讀取 embedding用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

  3. 需要指定出了詞 embedding 以外的結(jié)構(gòu),不進行梯度更新用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

因此可以看出,textual_inversion 的訓(xùn)練,實際上是更加純粹的一種方式。僅僅是通過參數(shù)凍結(jié)的方式,更新特定詞 embedding 來進行訓(xùn)練。

2.5.5 怎么使用?

一般來說,textual_inversion 這種訓(xùn)練方式,由于指更新詞 embedding,梯度作用范圍低,限制了訓(xùn)練效果的上限。所以這種方法對樣本的要求更高、訓(xùn)練難度更大,通常不是首選方法。因此本文就給出一些教程鏈接,和簡單的樣例:

  • Textual-Inversion 插件詳細介紹

  • 教程 1:https://www.bilibili.com/video/BV1pm4y1A7rn

  • 教程 2:https://www.bilibili.com/read/cv19040576

為了方便對比,我們同樣用 Ghost 的例子,來訓(xùn)練 textual_inversion。期間創(chuàng)建詞 embedding、設(shè)置參數(shù)、開始訓(xùn)練等步驟已經(jīng)在教程中有介紹,本文就不贅述了。我們直接看一下訓(xùn)練效果:

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

可見雖然最終效果不見得有 Dreambooth 那樣精細,但是模型已經(jīng)完全能夠知道"Ghost"這個詞的含義了。

2.6 HyperNetworks
2.6.1 HyperNetworks 是什么

與 Textual Inversion 讓梯度僅作用于詞 embedding 相比,HyperNetworks 是讓梯度作用于模型的 Diffusion 過程。他在 Diffusion 過程中的每一步都通過一個額外的小網(wǎng)絡(luò)來調(diào)整去噪過程的結(jié)果。

準(zhǔn)確的說,是作用在 Diffusion 的 Attention 部分,通過額外的小網(wǎng)絡(luò),把 key 和 query 進行變換,從而影響整個 diffusion 過程。

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

但是和 Textual Inversion 一樣,由于其效果和訓(xùn)練難度的原因(需要設(shè)置網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練參數(shù)等),目前并沒有成為主流選擇。

2.6.2 怎么使用?

HyperNetworks 的訓(xùn)練與前文介紹的 Textual Inversion 非常相似,因此關(guān)于如何使用的問題,本文不過多贅述,僅貼出相關(guān)的教程供大家參考:

  • 教程 1:https://ivonblog.com/posts/stable-diffusion-webui-training/

  • 教程 2:https://www.bilibili.com/read/cv19174085

  • 教程 3:https://shiina-h.notion.site/Hypernetwork-1fc0b60645284c5e96bb41b583a4e86f

  • 教程 4:http://www.gamelook.com.cn/2023/04/513756

  • 教程 5:https://shemmytalk.com/stable-diffusion%E4%B8%AD%E7%9A%84hypernetworks%E6%98%AF%E4%BB%80%E4%B9%88/

3 其他經(jīng)驗說明

3.1 關(guān)于 concept 融合與 concept 覆蓋

在筆者更進一步的嘗試中發(fā)現(xiàn),使用 textual_inversion 來訓(xùn)練多主體,依然無法避免 concept 融合的現(xiàn)象(即無法把 ghost 和星瞳的兩張臉畫在同一張圖里)。除此之外不僅新學(xué)習(xí)的多個主體會出現(xiàn)融合,連原有的主體詞的信息也會被覆蓋(如"ghost next to a dog",生成的圖片中沒有 dog,只有 ghost),即使調(diào)整提示詞權(quán)重也沒有取得理想效果。

這使我反過頭來,嘗試 dreambooth 和 lora 的訓(xùn)練結(jié)果(prompt: ghost next to a dog,并調(diào)整 ghost 和 dog 的權(quán)重),結(jié)果是

  • dreambooth 模型出現(xiàn)了 concept 覆蓋,沒有成功生成 dog,只有 ghost。

  • lora 的訓(xùn)練結(jié)果不一定會出現(xiàn) concept 覆蓋,結(jié)果圖中可能同時包含 ghost 和 dog,如下圖(約一半概率出 badcase)

用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion,大模型,自然語言,CV,人工智能,stable diffusion,多模態(tài)大模型,prompt,模型訓(xùn)練,模型推理

這個例子也說明了,lora 訓(xùn)練出來的模型,雖然精細度不如 dreambooth,但具有更高的泛化性。關(guān)于為什么會出現(xiàn)這種情況,我個人傾向于把它理解成一種過擬合,即少數(shù)新的樣本把大模型給帶偏了。如果讀者朋友有這方面的相關(guān)經(jīng)驗,歡迎在評論區(qū)指出~

3.2 寫在最后

在文章的結(jié)尾,我列舉一些我認為比較好的參考鏈接,希望能夠幫到大家:

  • AUTOMATIC1111 的一個非常全的文檔:https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki

  • 一篇對各種插件的說明:https://www.bilibili.com/read/cv19211897?from=articleDetail

  • Stable Diffusion Lora locon loha 訓(xùn)練參數(shù)設(shè)置:https://zhuanlan.zhihu.com/p/618758020

  • 一些好用的插件介紹:https://zhuanlan.zhihu.com/p/579538165

  • 不同 Tag 和采樣方法效果:https://www.bilibili.com/video/BV1aV4y1G7eZ/

  • 提示詞技巧:https://www.youtube.com/watch?v=jQH5g6s05S8

  • 提示詞技巧:https://zhuanlan.zhihu.com/p/577238010

  • 模型網(wǎng)站:https://civitai.com/

  • 模型網(wǎng)站:https://aimodel.subrecovery.top/

  • 模型網(wǎng)站:https://models.paomiantv.cn/models/

  • 提示詞網(wǎng)站:https://tags.novelai.dev/

  • 提示詞網(wǎng)站:https://aitag.top/

  • 提示詞網(wǎng)站:https://aitags.fun/

  • 提示詞網(wǎng)站:https://wolfchen.top/tag/

  • 提示詞網(wǎng)站:https://finding.art/

  • 提示詞網(wǎng)站:https://thereisnospon.github.io/NovelAiTag/

  • 提示詞網(wǎng)站:http://tomxlysplay.com.cn/#/

  • 提示詞網(wǎng)站:https://aimds.top/home

  • 導(dǎo)航:https://novelai.dev/

  • 導(dǎo)航:https://wogaosuni.cn/

  • 經(jīng)驗貼:https://sparkly-day-9db.notion.site/AI-1962de6fa0b44378b2fed3b79df5252b

最后,本文是作者在探索嘗試過程中,梳理總結(jié)得出的個人經(jīng)驗,其中不免會有疏漏之處。如果細心的小伙伴發(fā)現(xiàn),請在評論區(qū)指出~文章來源地址http://www.zghlxwxcb.cn/news/detail-800072.html

到了這里,關(guān)于用通俗易懂的方式講解:一文教會你學(xué)會 AI 繪畫利器 Stable Diffusion的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包