熱評(píng) 一只正在上優(yōu)設(shè)的熊貓

小編講的很詳細(xì),好文章

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

上篇文章我分享了 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)格效果。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

一、訓(xùn)練數(shù)據(jù)集準(zhǔn)備

這個(gè)過(guò)程主要做三件事:

  1. 訓(xùn)練素材處理
  2. 圖像預(yù)處理
  3. 打標(biāo)優(yōu)化

1. 訓(xùn)練素材處理

首先確定你的訓(xùn)練主題,比如某個(gè)人物、某種物品、某種畫(huà)風(fēng)等。以下我就以訓(xùn)練這種大手大腳的畫(huà)風(fēng)主題為例進(jìn)行講解。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

確定好畫(huà)風(fēng)后,就需要準(zhǔn)備用于訓(xùn)練的素材圖片,素材圖的質(zhì)量直接決定了模型的質(zhì)量,好的訓(xùn)練集有以下要求:

  1. 不少于 15 張的高質(zhì)量圖片,一般可以準(zhǔn)備 20-50 張圖;
  2. 圖片主體內(nèi)容清晰可辨、特征明顯,圖片構(gòu)圖簡(jiǎn)單,避免其它雜亂元素;
  3. 如果是人物照,盡可能以臉部特寫(xiě)為主(多角度、多表情),再放幾張全身像(不同姿勢(shì)、不同服裝);
  4. 減少重復(fù)或相似度高的圖片。

素材圖準(zhǔn)備完畢后,需要對(duì)圖片做進(jìn)一步處理:

  1. 對(duì)于低像素的素材圖,可以用 Stable Diffusion 的 Extra 功能進(jìn)行高清處理;
  2. 統(tǒng)一素材圖分辨率,注意分辨率為 64 的倍數(shù),顯存低的可裁切為 512x512,顯存高的可裁切為 768x768,可以通過(guò) birme 網(wǎng)站進(jìn)行批量裁切。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

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)簽。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

方法二:安裝 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)簽。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

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)練環(huán)境參數(shù)配置

訓(xùn)練數(shù)據(jù)集準(zhǔn)備完畢后,開(kāi)始訓(xùn)練環(huán)境配置。一般有本地和云端兩種訓(xùn)練環(huán)境:

  1. 本地訓(xùn)練:要求 N 卡,推薦 RTX 30 系列及以上顯卡,訓(xùn)練環(huán)境可以用秋葉大佬的一鍵訓(xùn)練包,或者安裝 Stable Diffusion WebUI 的訓(xùn)練插件。 https://github.com/liasece/sd-webui-train-tools
  2. 云端訓(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)擊連接。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

① 建立訓(xùn)練文件夾

連接成功后,展開(kāi)(一)環(huán)境配置:

  1. 運(yùn)行初始化常量與掛載谷歌硬盤(pán)。
  2. 成功掛載谷歌硬盤(pán)后,在 content - drive 目錄下建一個(gè) Lora 訓(xùn)練文件夾,在訓(xùn)練文件夾中建立 input 文件夾用于放置輸入數(shù)據(jù)集,建立 output 文件夾用于放置輸出的訓(xùn)練模型。
  3. input 文件夾內(nèi)建一個(gè)訓(xùn)練數(shù)據(jù)集文件夾,注意該文件夾的命名有格式要求:Repeat 值_主題名,這里 Repeat 值的含義代表每張素材圖的訓(xùn)練步數(shù)。越精細(xì)的圖,Repeat 值也越高,一般二次元可以 15-30,三次元可以 50-100。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

② 運(yùn)行克隆 github的庫(kù)、安裝依賴(lài)

③ 設(shè)置訓(xùn)練用底模型

  1. modelName:可以選擇環(huán)境中已經(jīng)提供的模型 如 Stable-Diffusion-v1-5.safetensors。
  2. base_model_url:也可以選擇自定義模型,在 huggingface 上搜到想要模型的地址,復(fù)制過(guò)來(lái)。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

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ù)配置界面。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

先點(diǎn)擊讀取,完成默認(rèn)參數(shù)配置,再進(jìn)行基礎(chǔ)參數(shù)和采樣參數(shù)設(shè)置。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

① 基礎(chǔ)參數(shù)設(shè)置

基礎(chǔ)設(shè)置

  1. train_data_dir:訓(xùn)練集輸入目錄,把之前建立的數(shù)據(jù)集文件夾路徑復(fù)制過(guò)來(lái),如/content/drive/MyDrive/Lora/input。
  2. 底模:填入底模文件夾地址 /content/Lora/sd_model/,刷新加載底模。
    resolution:訓(xùn)練分辨率,支持非正方形,但必須是 64 倍數(shù)。一般方圖 512x512、768x768,長(zhǎng)圖 512x768。
  3. batch_size:一次性送入訓(xùn)練模型的樣本數(shù),顯存小推薦 1,12G 以上可以 2-6,并行數(shù)量越大,訓(xùn)練速度越快。
  4. 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。
  5. network_dim:線性 dim,代表模型大小,數(shù)值越大模型越精細(xì),常用 4~128,如果設(shè)置為 128,則 LoRA 模型大小為 144M。
  6. network_alpha:線性 alpha,一般設(shè)置為比 Network Dim 小或者相同,通常將 network dim 設(shè)置為 128,network alpha 設(shè)置為 64。

輸出設(shè)置

  1. 模型輸出地址:模型輸出目錄,把之前建立的訓(xùn)練輸出文件夾路徑復(fù)制過(guò)來(lái),如/content/drive/MyDrive/Lora/output
  2. 輸出模型名稱(chēng):可以填模型主題名,如 bighand
  3. 保存模型格式:模型保存格式,默認(rèn) safetensors

學(xué)習(xí)率設(shè)置

  1. unet_lr:unet 學(xué)習(xí)率,默認(rèn)值為 0.0001
  2. text_encoder_lr:文本編碼器的學(xué)習(xí)率,一般為 unet 學(xué)習(xí)率的十分之一 0.00001
  3. lr_scheduler:學(xué)習(xí)率調(diào)度器,用來(lái)控制模型學(xué)習(xí)率的變化方式,一般默認(rèn)。
  4. lr_warmup_steps:升溫步數(shù),僅在學(xué)習(xí)率調(diào)度策略為“constant_with_warmup”時(shí)設(shè)置,用來(lái)控制模型在訓(xùn)練前逐漸增加學(xué)習(xí)率的步數(shù),一般不動(dòng)。
  5. lr_restart_cycles:退火重啟次數(shù),僅在學(xué)習(xí)率調(diào)度策略為“cosine_with_restarts”時(shí)設(shè)置,用來(lái)控制余弦退火的重啟次數(shù),一般不動(dòng)。

② 采樣參數(shù)設(shè)置

  1. Sample every n epochs:每 N 輪采樣一次,一般設(shè)置為 1。
  2. Sample every n steps:比如設(shè)置為 100,則代表每訓(xùn)練 100 步采樣一次。
  3. 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ù)與采樣配置文件,并保存配置文件。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

三、模型訓(xùn)練

訓(xùn)練參數(shù)配置保存完成后,點(diǎn)擊開(kāi)始訓(xùn)練。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

這里的 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 模型。

四、模型測(cè)試

模型訓(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)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

② 打開(kāi) Stable Diffusion WebUI,在 Stable Diffusion 模型里先加載個(gè)模型訓(xùn)練時(shí)的底模,LoRA 模型里加載一個(gè)剛才訓(xùn)練好的 LoRA 模型,如 000001 模型,填上一些必要的提示詞和參數(shù)。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

劃重點(diǎn):把引入的 LoRA 模型提示詞,改成變量模式,如: 改成 ,NUM 變量代表模型序號(hào),STRENGTH 變量代表權(quán)重值。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

③ 在 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)重值

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

這樣就形成了一張模型測(cè)試對(duì)比表。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

設(shè)置完畢后,點(diǎn)擊「生成」,開(kāi)始生成模型測(cè)試對(duì)比圖。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

通過(guò)對(duì)比生成結(jié)果,選出表現(xiàn)最佳的模型和權(quán)重值。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

把選出的 LoRA 訓(xùn)練模型做一個(gè)規(guī)范化命名,比如 bighand_lora_v1,重新刷新 LoRA 模型列表就能加載使用啦。在實(shí)際應(yīng)用中,我們可以結(jié)合 ControlNet 來(lái)使用,以提升可控性。

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

最后總結(jié)下 LoRA 模型訓(xùn)練的要點(diǎn):

  1. 訓(xùn)練數(shù)據(jù)集準(zhǔn)備(訓(xùn)練素材處理、圖像預(yù)處理、打標(biāo)優(yōu)化)
  2. 訓(xùn)練環(huán)境參數(shù)配置(本地或云端訓(xùn)練環(huán)境、訓(xùn)練環(huán)境配置、訓(xùn)練參數(shù)配置)
  3. 模型訓(xùn)練(基于 kohya-ss 訓(xùn)練模型)
  4. 模型測(cè)試(通過(guò) XYZ plot 測(cè)試模型)

歡迎添加作者微信共同交流探討(備注:來(lái)自優(yōu)設(shè))

如何從零開(kāi)始訓(xùn)練專(zhuān)屬 LoRA 模型?4600字總結(jié)送給你!

收藏 234
點(diǎn)贊 85

復(fù)制本文鏈接 文章為作者獨(dú)立觀點(diǎn)不代表優(yōu)設(shè)網(wǎng)立場(chǎng),未經(jīng)允許不得轉(zhuǎn)載。