熱評 一只正在上優設的熊貓

小編講的很詳細,好文章

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

上篇文章我分享了 47 個高質量的 Stable Diffusion 模型,這些模型都是別人訓練好的,使用起來非常方便。

但是如果我們要生成特定人物、物品或畫風,別人的這些模型就滿足不了了,這時候就需要通過訓練自己的專屬模型來實現。

目前 Stable Diffusion 主要有四種模型訓練方法:Dreambooth、LoRA、Textual Inversion、Hypernetwork。本文主要介紹如何訓練 LoRA 模型,LoRA 是一種輕量化的模型微調訓練方法,是在原有大模型的基礎上,對模型進行微調,從而能夠生成特定的人物、物品或畫風。該方法具有訓練速度快,模型大小適中,訓練配置要求低的特點,能用少量的圖片訓練出想要的風格效果。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

一、訓練數據集準備

這個過程主要做三件事:

  1. 訓練素材處理
  2. 圖像預處理
  3. 打標優化

1. 訓練素材處理

首先確定你的訓練主題,比如某個人物、某種物品、某種畫風等。以下我就以訓練這種大手大腳的畫風主題為例進行講解。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

確定好畫風后,就需要準備用于訓練的素材圖片,素材圖的質量直接決定了模型的質量,好的訓練集有以下要求:

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

素材圖準備完畢后,需要對圖片做進一步處理:

  1. 對于低像素的素材圖,可以用 Stable Diffusion 的 Extra 功能進行高清處理;
  2. 統一素材圖分辨率,注意分辨率為 64 的倍數,顯存低的可裁切為 512x512,顯存高的可裁切為 768x768,可以通過 birme 網站進行批量裁切。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

2. 圖像預處理

這一步的關鍵是對訓練素材進行打標簽,從而輔助 AI 學習。這里介紹兩種打標簽的方法:

方法一:把訓練素材文件夾路徑填寫到 Stable Diffusion 訓練模塊中的圖像預處理功能,勾選生成 DeepBooru,進行 tags 打標簽。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

方法二:安裝 tagger 標簽器插件,進行 tags 打標簽。

網址:https://github.com/toriato/stable-diffusion-webui-wd14-tagger

選擇批量處理, 輸入目錄填寫處理好的圖片目錄,設置標簽文件輸出目錄,閾值設置為 0.3(生成盡可能多的標簽來描述圖片內容),開始打標簽。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

3. 打標優化

預處理生成 tags 打標文件后,就需要對文件中的標簽再進行優化,一般有兩種優化方法:

方法一:保留全部標簽

就是對這些標簽不做刪標處理, 直接用于訓練。一般在訓練畫風,或想省事快速訓練人物模型時使用。

優點:不用處理 tags 省時省力,過擬合的出現情況低。

缺點:風格變化大,需要輸入大量 tag 來調用、訓練時需要把 epoch 訓練輪次調高,導致訓練時間變長。

方法二:刪除部分特征標簽

比如訓練某個特定角色,要保留藍眼睛作為其自帶特征,那么就要將 blue eyes 標簽刪除,以防止將基礎模型中的 blue eyes 引導到訓練的 LoRA 上。簡單來說刪除標簽即將特征與 LoRA 做綁定,保留的話畫面可調范圍就大。

一般需要刪掉的標簽:如人物特征 long hair,blue eyes 這類。

不需要刪掉的標簽:如人物動作 stand,run 這類,人物表情 smile,open mouth 這類,背景 simple background,white background 這類,畫幅位置等 full body,upper body,close up 這類。

優點:調用方便,更精準還原特征。

缺點:容易導致過擬合,泛化性降低。

什么是過擬合:過擬合會導致畫面細節丟失、畫面模糊、畫面發灰、邊緣不齊、無法做出指定動作、在一些大模型上表現不佳等情況。

批量打標:有時要優化等標簽會比較多,可以嘗試使用批量打標工具

BooruDatasetTagManager:https://github.com/starik222/BooruDatasetTagManager

二、訓練環境參數配置

訓練數據集準備完畢后,開始訓練環境配置。一般有本地和云端兩種訓練環境:

  1. 本地訓練:要求 N 卡,推薦 RTX 30 系列及以上顯卡,訓練環境可以用秋葉大佬的一鍵訓練包,或者安裝 Stable Diffusion WebUI 的訓練插件。 https://github.com/liasece/sd-webui-train-tools
  2. 云端訓練:如在 AutoDL、Google Colab 等云平臺上訓練,推薦 kohya-ss 訓練腳本。云端訓練的好處在于不占用本機資源,訓練的同時還可以干其他事。

以下我以云端訓練為例,介紹如何使用 Google Colab 進行云端訓練環境配置。

1. 訓練環境配置

這里推薦使用基于 kohya-ss 的訓練腳本,例如: https://colab.research.google.com/github/WSH032/kohya-config-webui/blob/main/kohya_train_webui.ipynb

進入 Colab 后,點擊連接。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

① 建立訓練文件夾

連接成功后,展開(一)環境配置:

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

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

② 運行克隆 github的庫、安裝依賴

③ 設置訓練用底模型

  1. modelName:可以選擇環境中已經提供的模型 如 Stable-Diffusion-v1-5.safetensors。
  2. base_model_url:也可以選擇自定義模型,在 huggingface 上搜到想要模型的地址,復制過來。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

2. 訓練參數配置

展開(二)訓練參數,運行啟動 WebUI 來設置參數,出現 https://localhost:xxxxx/ 鏈接后點擊打開訓練參數配置界面。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

先點擊讀取,完成默認參數配置,再進行基礎參數和采樣參數設置。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

① 基礎參數設置

基礎設置

  1. train_data_dir:訓練集輸入目錄,把之前建立的數據集文件夾路徑復制過來,如/content/drive/MyDrive/Lora/input。
  2. 底模:填入底模文件夾地址 /content/Lora/sd_model/,刷新加載底模。
    resolution:訓練分辨率,支持非正方形,但必須是 64 倍數。一般方圖 512x512、768x768,長圖 512x768。
  3. batch_size:一次性送入訓練模型的樣本數,顯存小推薦 1,12G 以上可以 2-6,并行數量越大,訓練速度越快。
  4. max_train_epoches:最大訓練的 epoch 數,即模型會在整個訓練數據集上循環訓練的次數。如最大訓練 epoch 為 10,那么訓練過程中將會進行 10 次完整的訓練集循環,一般可以設為 5-10。
  5. network_dim:線性 dim,代表模型大小,數值越大模型越精細,常用 4~128,如果設置為 128,則 LoRA 模型大小為 144M。
  6. network_alpha:線性 alpha,一般設置為比 Network Dim 小或者相同,通常將 network dim 設置為 128,network alpha 設置為 64。

輸出設置

  1. 模型輸出地址:模型輸出目錄,把之前建立的訓練輸出文件夾路徑復制過來,如/content/drive/MyDrive/Lora/output
  2. 輸出模型名稱:可以填模型主題名,如 bighand
  3. 保存模型格式:模型保存格式,默認 safetensors

學習率設置

  1. unet_lr:unet 學習率,默認值為 0.0001
  2. text_encoder_lr:文本編碼器的學習率,一般為 unet 學習率的十分之一 0.00001
  3. lr_scheduler:學習率調度器,用來控制模型學習率的變化方式,一般默認。
  4. lr_warmup_steps:升溫步數,僅在學習率調度策略為“constant_with_warmup”時設置,用來控制模型在訓練前逐漸增加學習率的步數,一般不動。
  5. lr_restart_cycles:退火重啟次數,僅在學習率調度策略為“cosine_with_restarts”時設置,用來控制余弦退火的重啟次數,一般不動。

② 采樣參數設置

  1. Sample every n epochs:每 N 輪采樣一次,一般設置為 1。
  2. Sample every n steps:比如設置為 100,則代表每訓練 100 步采樣一次。
  3. Sample prompt:采樣提示詞,設置之后,LoRA 訓練的同時會每隔設定的步數或輪次,生成一副圖片,以此來直觀觀察 LoRA 訓練的進展。

完成訓練參數設置后,點擊全部參數確認、生成 toml 參數與采樣配置文件,并保存配置文件。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

三、模型訓練

訓練參數配置保存完成后,點擊開始訓練。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

這里的 steps 代表總訓練步數。一般總訓練步數不低于 1500,不高于 5000。

總訓練步數=(Image 圖片數量 x Repeat 每張圖片訓練步數 x Epoch 訓練輪次)/ batch_size 并行數量。

訓練完成后,模型文件會保存到設置的輸出目錄。比如 epoch 訓練輪次設置了 5,就會得到 5 個訓練好的 LoRA 模型。

四、模型測試

模型訓練完成后,要對訓練好的這些模型進行測試,以找出最適合的那個模型(哪個模型在哪個權重值下表現最佳)。

① 把訓練好的 LoRA 模型全部放入 LoRA 模型目錄 stable-diffusion-webui/models/Lora。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

② 打開 Stable Diffusion WebUI,在 Stable Diffusion 模型里先加載個模型訓練時的底模,LoRA 模型里加載一個剛才訓練好的 LoRA 模型,如 000001 模型,填上一些必要的提示詞和參數。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

劃重點:把引入的 LoRA 模型提示詞,改成變量模式,如: 改成 ,NUM 變量代表模型序號,STRENGTH 變量代表權重值。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

③ 在 Stable Diffusion WebUI 頁面最底部的腳本欄中調用 XYZ plot 腳本,設置模型對比參數。

劃重點:其中 X 軸類型和 Y 軸類型都選擇「提示詞搜索/替換」Prompt S/R。

X 軸值輸入:NUM,000001,000002,000003,000004,000005,對應模型序號

Y 軸值輸入:STRENGTH,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,對應模型權重值

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

這樣就形成了一張模型測試對比表。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

設置完畢后,點擊「生成」,開始生成模型測試對比圖。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

通過對比生成結果,選出表現最佳的模型和權重值。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

把選出的 LoRA 訓練模型做一個規范化命名,比如 bighand_lora_v1,重新刷新 LoRA 模型列表就能加載使用啦。在實際應用中,我們可以結合 ControlNet 來使用,以提升可控性。

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

最后總結下 LoRA 模型訓練的要點:

  1. 訓練數據集準備(訓練素材處理、圖像預處理、打標優化)
  2. 訓練環境參數配置(本地或云端訓練環境、訓練環境配置、訓練參數配置)
  3. 模型訓練(基于 kohya-ss 訓練模型)
  4. 模型測試(通過 XYZ plot 測試模型)

歡迎添加作者微信共同交流探討(備注:來自優設)

如何從零開始訓練專屬 LoRA 模型?4600字總結送給你!

收藏 235
點贊 85

復制本文鏈接 文章為作者獨立觀點不代表優設網立場,未經允許不得轉載。