stable diffusion打造自己專屬的LORA模型

2023-04-10 06:01:17

通過Lora小模型可以控制很多特定場景的內容生成。

但是那些模型是別人訓練好的,你肯定很好奇,我也想訓練一個自己的專屬模型(也叫煉丹~_~)。

甚至可以訓練一個專屬家庭版的模型(family model),非常有意思。

將自己的訓練好的Lora模型放到stableDiffusion lora 目錄中,同時配上美麗的封面圖。

(plen_me、plen_vivi,這兩個是我訓練的和家裡人的模型~_~)

這樣就可以將你的Lora模型和其他Lora模型融合使用了。

再配上Controlnet基本可以,將自己的pose+特徵融入到其他任何lora模型中。

【1】
下面我們看下如何訓練自己的模型。

(我的煉丹爐設定,win10+i7F+4080 )

首先,Lora模型可以通過lora-scripts 指令碼進行訓練。

倉庫地址:https://github.com/Akegarasu/lora-scripts

找個目錄拉下來,先安裝sd-scripts子專案,然後安裝lora-scripts專案。

(敲黑板)重點看下sd-scripts 子專案:
https://github.com/kohya-ss/sd-scripts/tree/b5c60d7d62d6bb4a174ac09327dc517fc4446523

要嚴格按照作者給的步驟安裝。(要不然會有很多奇怪的問題)

如果順利的話大概安裝需要30min左右。(需要kexue上網應該就不用多介紹了)

【2】
接下來準備需要訓練的圖片。

根據最後的生成效果,要找頭像清晰的,臉部輪廓清楚的,背景最好是白色的。

然後就需要我們將圖片進行預處理。

先將圖片放在一個資料夾裡,然後定一個預處理之後的資料夾名字。

然後在stablediffusion中找到【訓練】【影象預處理】模組

按照說明,填入預處理圖片路徑和目標目錄,然後選擇【Deepbooru生成標籤】。然後點選【Preprocess】,等處理完成。

到目標目錄下,看下生成的標籤資訊。

這些標籤就是訓練模型的圖片特徵了,基本上生成出來的標籤還是要check下。

如果某個重要的標籤丟失,或者識別錯誤(girl識別成boy ~_~)會直接影響煉丹質量。

【3】
將預處理目標資料夾複製到lora-scripts指令碼的主目錄的train目錄中。(如果沒有就建立一個)

如果你有多個訓練集合可以在train中建立一個目錄,然後放到這個目錄中。

訓練自己的專屬模型,需要依賴一個主模型。真人特徵的模型貌似用 chilloutmix_NiPrunedFp32Fix 比較流行(這個模型很強大,你懂的!)。

模型地址:
https://huggingface.co/naonovn/chilloutmix_NiPrunedFp32Fix/tree/main

將下好的模型檔案複製到lora-scripts->sd-models資料夾中。

【4】

準備工作差不多了,我們編輯下訓練指令碼。

lora-scripts目錄中的train.ps1 指令碼檔案。

# Train data path | 設定訓練用模型、圖片
$pretrained_model = "./sd-models/chilloutmix_NiPrunedFp32Fix.safetensors" # base model path | 底模路徑
$train_data_dir = "./train/test" # train dataset path | 訓練資料集路徑

$pretrained_model:就是我們下載的訓練模型的基礎模型,把名字換掉。
$train_data_dir:訓練資料目錄。

    # Train related params | 訓練相關引數
    $resolution = "512,512" # image resolution w,h. 圖片解析度,寬,高。支援非正方形,但必須是 64 倍數。
    $batch_size = 2 # batch size
    $max_train_epoches = 20 # max train epoches | 最大訓練 epoch
    $save_every_n_epochs = 2 # save every n epochs | 每 N 個 epoch 儲存一次

$resolution:如果你的圖片預處理的時候沒有調整過,這裡就保持預設。
$batch_size、$max_train_epoches:如果你的卡不是很強,這裡的引數可以小一點。(這兩個引數主要控制訓練的次數和視訊記憶體載入的張量資料集)。

    # Output settings | 輸出設定
    $output_name = "meoutput" # output model name | 模型儲存名稱

$output_name:用預設的也行,最好自定義一個名字,避免重複生成覆蓋原來模型。

儲存,然後右鍵 【使用PowerShell執行】。

(這裡還是要祈禱下,不一定能一次成功。~_~)

指令碼在執行過程中會出現一些'triton'載入失敗的錯誤。

但是其實不影響模型的訓練(我查了下好像是windows電腦就不支援這個模組)。

這裡的錯誤如果不能正常執行,大概率是前面敲黑板的地方你沒有仔細看。

等模型訓練完。(我15張圖,大概跑了10min左右。)

我們看下output目錄輸出的模型檔案。

這裡的模型檔案儲存的個數,是train.ps1指令碼檔案裡設定的。

最後我們要通過驗證這些模型準確度,選用哪一個。

【5】

將這些模型檔案全部複製到

E:\stable-diffusion-webui\extensions\sd-webui-additional-networks\models\lora

對應的擴充套件忙碌下。
如果還沒有安裝 sd-webui-additional-networks 擴充套件,記得先到擴充套件中安裝。

也可以直接用git地址安裝(有時候這個擴充套件查詢有點問題)
https://github.com/kohya-ss/sd-webui-additional-networks.git

然後我們測試下這幾個模型哪一個不錯。

順利安裝外掛之後,就可以在介面上看到 【Additional Networks】功能選單。

要測試自己的模型,基礎模型還是要選用我們訓練的 chilloutmix_NiPrunedFp32Fix 模型。

prompt可以用自己提取的標籤作為測試。

批次可以適當多點,到時候可以選擇。

這個過程大概需要個20min左右。(可以喝點茶等待創作了~_~)。

來一起見證AI的創作吧 ~~!

圖片的上方是每一個模型名稱,左邊是特徵權重,組成的一個二維表格。

有點那個意思 hhh。

下面這些就有點辣眼睛了 。

根據自己的眼光,我們挑選一個相對比較不錯的模型。

整體覺得這個模型不錯,我們記下模型的名字。

將這個模型複製到 E:\stable-diffusion-webui\models\Lora 目錄中。

可以給你的模型配上一個封面,只要檔名和模型名一樣就可以了。

【6】

有了自己的專屬模型,就可以結合其他lora模型一起使用了。
我們試下水墨風格。

下載lora模型:Moxin_10
下載基礎模型:dalcefoPainting_3rd.safetensors

(有些基礎模型在C站沒有,可以到huggingface上找找,再不行github上肯定有)

點開這個紅色的收縮面板。

重新整理一下,讓lora模型檔案重新載入下。

然後選擇我們儲存的lora檔案,此時這個模型的prompt設定會在文字方塊裡。

然後再選擇水墨風模型 Moxin。

調整下每一個模型的權重,此時可以將我們自己的模型特徵調大些。

如果沒啥問題,我們就去C站找這個lora比較好的prompt拿過來用。


這張雖然有點辣眼睛,但是特徵是有了。


這一張比較像我女兒 ~_~。

最後,stablediffusion+lora等AIGC屬於開掛技術,我們還是要遵紀守法做一個好同志!!!