上篇文章我分享了 47 個(gè)高質(zhì)量的 Stable Diffusion 模型,這些模型都是別人訓(xùn)練好的,使用起來(lái)非常方便。
但是如果我們要生成特定人物、物品或畫(huà)風(fēng),別人的這些模型就滿足不了了,這時(shí)候就需要通過(guò)訓(xùn)練自己的專(zhuān)屬模型來(lái)實(shí)現(xiàn)。
目前 Stable Diffusion 主要有四種模型訓(xùn)練方法:Dreambooth、LoRA、Textual Inversion、Hypernetwork。本文主要介紹如何訓(xùn)練 LoRA 模型,LoRA 是一種輕量化的模型微調(diào)訓(xùn)練方法,是在原有大模型的基礎(chǔ)上,對(duì)模型進(jìn)行微調(diào),從而能夠生成特定的人物、物品或畫(huà)風(fēng)。該方法具有訓(xùn)練速度快,模型大小適中,訓(xùn)練配置要求低的特點(diǎn),能用少量的圖片訓(xùn)練出想要的風(fēng)格效果。
這個(gè)過(guò)程主要做三件事:
- 訓(xùn)練素材處理
- 圖像預(yù)處理
- 打標(biāo)優(yōu)化
1. 訓(xùn)練素材處理
首先確定你的訓(xùn)練主題,比如某個(gè)人物、某種物品、某種畫(huà)風(fēng)等。以下我就以訓(xùn)練這種大手大腳的畫(huà)風(fēng)主題為例進(jìn)行講解。
確定好畫(huà)風(fēng)后,就需要準(zhǔn)備用于訓(xùn)練的素材圖片,素材圖的質(zhì)量直接決定了模型的質(zhì)量,好的訓(xùn)練集有以下要求:
- 不少于 15 張的高質(zhì)量圖片,一般可以準(zhǔn)備 20-50 張圖;
- 圖片主體內(nèi)容清晰可辨、特征明顯,圖片構(gòu)圖簡(jiǎn)單,避免其它雜亂元素;
- 如果是人物照,盡可能以臉部特寫(xiě)為主(多角度、多表情),再放幾張全身像(不同姿勢(shì)、不同服裝);
- 減少重復(fù)或相似度高的圖片。
素材圖準(zhǔn)備完畢后,需要對(duì)圖片做進(jìn)一步處理:
- 對(duì)于低像素的素材圖,可以用 Stable Diffusion 的 Extra 功能進(jìn)行高清處理;
- 統(tǒng)一素材圖分辨率,注意分辨率為 64 的倍數(shù),顯存低的可裁切為 512x512,顯存高的可裁切為 768x768,可以通過(guò) birme 網(wǎng)站進(jìn)行批量裁切。
2. 圖像預(yù)處理
這一步的關(guān)鍵是對(duì)訓(xùn)練素材進(jìn)行打標(biāo)簽,從而輔助 AI 學(xué)習(xí)。這里介紹兩種打標(biāo)簽的方法:
方法一:把訓(xùn)練素材文件夾路徑填寫(xiě)到 Stable Diffusion 訓(xùn)練模塊中的圖像預(yù)處理功能,勾選生成 DeepBooru,進(jìn)行 tags 打標(biāo)簽。
方法二:安裝 tagger 標(biāo)簽器插件,進(jìn)行 tags 打標(biāo)簽。
網(wǎng)址:https://github.com/toriato/stable-diffusion-webui-wd14-tagger
選擇批量處理, 輸入目錄填寫(xiě)處理好的圖片目錄,設(shè)置標(biāo)簽文件輸出目錄,閾值設(shè)置為 0.3(生成盡可能多的標(biāo)簽來(lái)描述圖片內(nèi)容),開(kāi)始打標(biāo)簽。
3. 打標(biāo)優(yōu)化
預(yù)處理生成 tags 打標(biāo)文件后,就需要對(duì)文件中的標(biāo)簽再進(jìn)行優(yōu)化,一般有兩種優(yōu)化方法:
方法一:保留全部標(biāo)簽
就是對(duì)這些標(biāo)簽不做刪標(biāo)處理, 直接用于訓(xùn)練。一般在訓(xùn)練畫(huà)風(fēng),或想省事快速訓(xùn)練人物模型時(shí)使用。
優(yōu)點(diǎn):不用處理 tags 省時(shí)省力,過(guò)擬合的出現(xiàn)情況低。
缺點(diǎn):風(fēng)格變化大,需要輸入大量 tag 來(lái)調(diào)用、訓(xùn)練時(shí)需要把 epoch 訓(xùn)練輪次調(diào)高,導(dǎo)致訓(xùn)練時(shí)間變長(zhǎng)。
方法二:刪除部分特征標(biāo)簽
比如訓(xùn)練某個(gè)特定角色,要保留藍(lán)眼睛作為其自帶特征,那么就要將 blue eyes 標(biāo)簽刪除,以防止將基礎(chǔ)模型中的 blue eyes 引導(dǎo)到訓(xùn)練的 LoRA 上。簡(jiǎn)單來(lái)說(shuō)刪除標(biāo)簽即將特征與 LoRA 做綁定,保留的話畫(huà)面可調(diào)范圍就大。
一般需要?jiǎng)h掉的標(biāo)簽:如人物特征 long hair,blue eyes 這類(lèi)。
不需要?jiǎng)h掉的標(biāo)簽:如人物動(dòng)作 stand,run 這類(lèi),人物表情 smile,open mouth 這類(lèi),背景 simple background,white background 這類(lèi),畫(huà)幅位置等 full body,upper body,close up 這類(lèi)。
優(yōu)點(diǎn):調(diào)用方便,更精準(zhǔn)還原特征。
缺點(diǎn):容易導(dǎo)致過(guò)擬合,泛化性降低。
什么是過(guò)擬合:過(guò)擬合會(huì)導(dǎo)致畫(huà)面細(xì)節(jié)丟失、畫(huà)面模糊、畫(huà)面發(fā)灰、邊緣不齊、無(wú)法做出指定動(dòng)作、在一些大模型上表現(xiàn)不佳等情況。
批量打標(biāo):有時(shí)要優(yōu)化等標(biāo)簽會(huì)比較多,可以嘗試使用批量打標(biāo)工具
BooruDatasetTagManager:https://github.com/starik222/BooruDatasetTagManager
訓(xùn)練數(shù)據(jù)集準(zhǔn)備完畢后,開(kāi)始訓(xùn)練環(huán)境配置。一般有本地和云端兩種訓(xùn)練環(huán)境:
- 本地訓(xùn)練:要求 N 卡,推薦 RTX 30 系列及以上顯卡,訓(xùn)練環(huán)境可以用秋葉大佬的一鍵訓(xùn)練包,或者安裝 Stable Diffusion WebUI 的訓(xùn)練插件。 https://github.com/liasece/sd-webui-train-tools
- 云端訓(xùn)練:如在 AutoDL、Google Colab 等云平臺(tái)上訓(xùn)練,推薦 kohya-ss 訓(xùn)練腳本。云端訓(xùn)練的好處在于不占用本機(jī)資源,訓(xùn)練的同時(shí)還可以干其他事。
以下我以云端訓(xùn)練為例,介紹如何使用 Google Colab 進(jìn)行云端訓(xùn)練環(huán)境配置。
1. 訓(xùn)練環(huán)境配置
這里推薦使用基于 kohya-ss 的訓(xùn)練腳本,例如: https://colab.research.google.com/github/WSH032/kohya-config-webui/blob/main/kohya_train_webui.ipynb
進(jìn)入 Colab 后,點(diǎn)擊連接。
① 建立訓(xùn)練文件夾
連接成功后,展開(kāi)(一)環(huán)境配置:
- 運(yùn)行初始化常量與掛載谷歌硬盤(pán)。
- 成功掛載谷歌硬盤(pán)后,在 content - drive 目錄下建一個(gè) Lora 訓(xùn)練文件夾,在訓(xùn)練文件夾中建立 input 文件夾用于放置輸入數(shù)據(jù)集,建立 output 文件夾用于放置輸出的訓(xùn)練模型。
- input 文件夾內(nèi)建一個(gè)訓(xùn)練數(shù)據(jù)集文件夾,注意該文件夾的命名有格式要求:Repeat 值_主題名,這里 Repeat 值的含義代表每張素材圖的訓(xùn)練步數(shù)。越精細(xì)的圖,Repeat 值也越高,一般二次元可以 15-30,三次元可以 50-100。
② 運(yùn)行克隆 github的庫(kù)、安裝依賴(lài)
③ 設(shè)置訓(xùn)練用底模型
- modelName:可以選擇環(huán)境中已經(jīng)提供的模型 如 Stable-Diffusion-v1-5.safetensors。
- base_model_url:也可以選擇自定義模型,在 huggingface 上搜到想要模型的地址,復(fù)制過(guò)來(lái)。
2. 訓(xùn)練參數(shù)配置
展開(kāi)(二)訓(xùn)練參數(shù),運(yùn)行啟動(dòng) WebUI 來(lái)設(shè)置參數(shù),出現(xiàn) https://localhost:xxxxx/ 鏈接后點(diǎn)擊打開(kāi)訓(xùn)練參數(shù)配置界面。
先點(diǎn)擊讀取,完成默認(rèn)參數(shù)配置,再進(jìn)行基礎(chǔ)參數(shù)和采樣參數(shù)設(shè)置。
① 基礎(chǔ)參數(shù)設(shè)置
基礎(chǔ)設(shè)置
- train_data_dir:訓(xùn)練集輸入目錄,把之前建立的數(shù)據(jù)集文件夾路徑復(fù)制過(guò)來(lái),如/content/drive/MyDrive/Lora/input。
- 底模:填入底模文件夾地址 /content/Lora/sd_model/,刷新加載底模。
resolution:訓(xùn)練分辨率,支持非正方形,但必須是 64 倍數(shù)。一般方圖 512x512、768x768,長(zhǎng)圖 512x768。 - batch_size:一次性送入訓(xùn)練模型的樣本數(shù),顯存小推薦 1,12G 以上可以 2-6,并行數(shù)量越大,訓(xùn)練速度越快。
- max_train_epoches:最大訓(xùn)練的 epoch 數(shù),即模型會(huì)在整個(gè)訓(xùn)練數(shù)據(jù)集上循環(huán)訓(xùn)練的次數(shù)。如最大訓(xùn)練 epoch 為 10,那么訓(xùn)練過(guò)程中將會(huì)進(jìn)行 10 次完整的訓(xùn)練集循環(huán),一般可以設(shè)為 5-10。
- network_dim:線性 dim,代表模型大小,數(shù)值越大模型越精細(xì),常用 4~128,如果設(shè)置為 128,則 LoRA 模型大小為 144M。
- network_alpha:線性 alpha,一般設(shè)置為比 Network Dim 小或者相同,通常將 network dim 設(shè)置為 128,network alpha 設(shè)置為 64。
輸出設(shè)置
- 模型輸出地址:模型輸出目錄,把之前建立的訓(xùn)練輸出文件夾路徑復(fù)制過(guò)來(lái),如/content/drive/MyDrive/Lora/output
- 輸出模型名稱(chēng):可以填模型主題名,如 bighand
- 保存模型格式:模型保存格式,默認(rèn) safetensors
學(xué)習(xí)率設(shè)置
- unet_lr:unet 學(xué)習(xí)率,默認(rèn)值為 0.0001
- text_encoder_lr:文本編碼器的學(xué)習(xí)率,一般為 unet 學(xué)習(xí)率的十分之一 0.00001
- lr_scheduler:學(xué)習(xí)率調(diào)度器,用來(lái)控制模型學(xué)習(xí)率的變化方式,一般默認(rèn)。
- lr_warmup_steps:升溫步數(shù),僅在學(xué)習(xí)率調(diào)度策略為“constant_with_warmup”時(shí)設(shè)置,用來(lái)控制模型在訓(xùn)練前逐漸增加學(xué)習(xí)率的步數(shù),一般不動(dòng)。
- lr_restart_cycles:退火重啟次數(shù),僅在學(xué)習(xí)率調(diào)度策略為“cosine_with_restarts”時(shí)設(shè)置,用來(lái)控制余弦退火的重啟次數(shù),一般不動(dòng)。
② 采樣參數(shù)設(shè)置
- Sample every n epochs:每 N 輪采樣一次,一般設(shè)置為 1。
- Sample every n steps:比如設(shè)置為 100,則代表每訓(xùn)練 100 步采樣一次。
- Sample prompt:采樣提示詞,設(shè)置之后,LoRA 訓(xùn)練的同時(shí)會(huì)每隔設(shè)定的步數(shù)或輪次,生成一副圖片,以此來(lái)直觀觀察 LoRA 訓(xùn)練的進(jìn)展。
完成訓(xùn)練參數(shù)設(shè)置后,點(diǎn)擊全部參數(shù)確認(rèn)、生成 toml 參數(shù)與采樣配置文件,并保存配置文件。
訓(xùn)練參數(shù)配置保存完成后,點(diǎn)擊開(kāi)始訓(xùn)練。
這里的 steps 代表總訓(xùn)練步數(shù)。一般總訓(xùn)練步數(shù)不低于 1500,不高于 5000。
總訓(xùn)練步數(shù)=(Image 圖片數(shù)量 x Repeat 每張圖片訓(xùn)練步數(shù) x Epoch 訓(xùn)練輪次)/ batch_size 并行數(shù)量。
訓(xùn)練完成后,模型文件會(huì)保存到設(shè)置的輸出目錄。比如 epoch 訓(xùn)練輪次設(shè)置了 5,就會(huì)得到 5 個(gè)訓(xùn)練好的 LoRA 模型。
模型訓(xùn)練完成后,要對(duì)訓(xùn)練好的這些模型進(jìn)行測(cè)試,以找出最適合的那個(gè)模型(哪個(gè)模型在哪個(gè)權(quán)重值下表現(xiàn)最佳)。
① 把訓(xùn)練好的 LoRA 模型全部放入 LoRA 模型目錄 stable-diffusion-webui/models/Lora。
② 打開(kāi) Stable Diffusion WebUI,在 Stable Diffusion 模型里先加載個(gè)模型訓(xùn)練時(shí)的底模,LoRA 模型里加載一個(gè)剛才訓(xùn)練好的 LoRA 模型,如 000001 模型,填上一些必要的提示詞和參數(shù)。
劃重點(diǎn):把引入的 LoRA 模型提示詞,改成變量模式,如: 改成 ,NUM 變量代表模型序號(hào),STRENGTH 變量代表權(quán)重值。
③ 在 Stable Diffusion WebUI 頁(yè)面最底部的腳本欄中調(diào)用 XYZ plot 腳本,設(shè)置模型對(duì)比參數(shù)。
劃重點(diǎn):其中 X 軸類(lèi)型和 Y 軸類(lèi)型都選擇「提示詞搜索/替換」Prompt S/R。
X 軸值輸入:NUM,000001,000002,000003,000004,000005,對(duì)應(yīng)模型序號(hào)
Y 軸值輸入:STRENGTH,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,對(duì)應(yīng)模型權(quán)重值
這樣就形成了一張模型測(cè)試對(duì)比表。
設(shè)置完畢后,點(diǎn)擊「生成」,開(kāi)始生成模型測(cè)試對(duì)比圖。
通過(guò)對(duì)比生成結(jié)果,選出表現(xiàn)最佳的模型和權(quán)重值。
把選出的 LoRA 訓(xùn)練模型做一個(gè)規(guī)范化命名,比如 bighand_lora_v1,重新刷新 LoRA 模型列表就能加載使用啦。在實(shí)際應(yīng)用中,我們可以結(jié)合 ControlNet 來(lái)使用,以提升可控性。
最后總結(jié)下 LoRA 模型訓(xùn)練的要點(diǎn):
- 訓(xùn)練數(shù)據(jù)集準(zhǔn)備(訓(xùn)練素材處理、圖像預(yù)處理、打標(biāo)優(yōu)化)
- 訓(xùn)練環(huán)境參數(shù)配置(本地或云端訓(xùn)練環(huán)境、訓(xùn)練環(huán)境配置、訓(xùn)練參數(shù)配置)
- 模型訓(xùn)練(基于 kohya-ss 訓(xùn)練模型)
- 模型測(cè)試(通過(guò) XYZ plot 測(cè)試模型)
歡迎添加作者微信共同交流探討(備注:來(lái)自優(yōu)設(shè))
復(fù)制本文鏈接 文章為作者獨(dú)立觀點(diǎn)不代表優(yōu)設(shè)網(wǎng)立場(chǎng),未經(jīng)允許不得轉(zhuǎn)載。
熱評(píng) 一只正在上優(yōu)設(shè)的熊貓