本教程將詳細(xì)解析如何搭建Stable Diffusion模型訓(xùn)練環(huán)境,并指導(dǎo)完成模型訓(xùn)練的各個(gè)環(huán)節(jié)。幫助大家掌握從零開始訓(xùn)練Stable Diffusion模型的完整流程,幫助在實(shí)踐中解決訓(xùn)練中可能遇到的問題并提高生成效果。
一、Stable Diffusion環(huán)境搭建
本教程以 GitHub 上的 bmaltais/kohya_ss 為例。該項(xiàng)目為 Windows 系統(tǒng)提供了一個(gè) GUI 訓(xùn)練面板。如果打算進(jìn)行訓(xùn)練,請(qǐng)確保設(shè)備已經(jīng)安裝了 Python 3.10.6 和 Git。
啟動(dòng) Powershell(管理員模式),執(zhí)行以下命令以解除執(zhí)行策略限制:
Set-ExecutionPolicy Unrestricted
然后選擇“是”,關(guān)閉該窗口。
1、啟動(dòng)普通 Powershell 窗口,在需要克隆倉庫的路徑下,執(zhí)行以下命令:
執(zhí)行 accelerate config 命令時(shí),會(huì)出現(xiàn)一些設(shè)置選項(xiàng),依次選擇: git clone https://github.com/bmaltais/kohya_ss.git cd kohya_ss python -m venv venv .\venv\Scripts\activate pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116 pip install --use-pep517 --upgrade -r requirements.txt pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion- webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\ cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site- packages\bitsandbytes\cextension.py cp .\bitsandbytes_windows\main.py .\venv\Lib\site- packages\bitsandbytes\cuda_setup\main.py accelerate config
在執(zhí)行“accelerate config”后,它將詢問一些設(shè)置選項(xiàng)。請(qǐng)按照以下選項(xiàng)依次選擇:
This machine No distributed training NO NO NO all fp16
30 系、40 系顯卡可選擇安裝 CUDNN:
.\venv\Scripts\activate python .\tools\cudann_1.8_install.py
二、Stable Diffusion環(huán)境更新
若需更新項(xiàng)目倉庫,可以執(zhí)行以下命令:
git pull .\venv\Scripts\activate pip install --use-pep517 --upgrade -r requirements.txt
啟動(dòng)訓(xùn)練界面時(shí),可以在 Powershell 中執(zhí)行命令,或者直接雙擊 gui.bat 文件。當(dāng)界面彈出后,直接訪問指定的 URL 即可。
三、Stable Diffusion訓(xùn)練流程
1、欠擬合:模型未從數(shù)據(jù)集中學(xué)習(xí)到有效信息,生成的結(jié)果變化大且不一致。
2、效果良好:模型能對(duì)訓(xùn)練集和非訓(xùn)練集中的數(shù)據(jù)都做出較為準(zhǔn)確的預(yù)測(cè),具有較好的泛化能力。
3、過擬合:模型對(duì)訓(xùn)練集有非常高的精確度,但對(duì)非訓(xùn)練集的預(yù)測(cè)差異大,失去泛化能力。
(一)準(zhǔn)備訓(xùn)練集
訓(xùn)練集的圖片應(yīng)盡量高清,風(fēng)格統(tǒng)一但內(nèi)容形式多樣(例如動(dòng)作、服裝、場(chǎng)景等)。樣本數(shù)量的多少會(huì)直接影響訓(xùn)練效果:
- 樣本量過少:模型可能會(huì)出現(xiàn)欠擬合,即無法有效學(xué)習(xí);
- 樣本量過大:模型可能會(huì)出現(xiàn)過擬合,即只能應(yīng)對(duì)訓(xùn)練集中的數(shù)據(jù),無法處理新的或不同的數(shù)據(jù)。
(二)圖片裁剪
在訓(xùn)練過程中,所有圖片應(yīng)裁剪為相同的尺寸。可以在 SD webui 界面自動(dòng)裁剪圖片,也可以手動(dòng)裁剪。常見的尺寸為 512×512 像素。雖然較大尺寸的圖片會(huì)占用更多顯存,但也能捕捉到更多的細(xì)節(jié)。
(三)圖片打標(biāo)
生成關(guān)鍵詞:在訓(xùn)練環(huán)境或 SD webui 頁面上為每張圖片打標(biāo)簽。不同打標(biāo)器可能生成不同的描述效果,可以對(duì)比不同打標(biāo)器的效果。例如:
本義描述:一個(gè)鐵匠在打鐵。
使用不同打標(biāo)器的效果:
- BLIP:一個(gè)男人在廚房里,壁爐里生著火,手里拿著錘子,另一只手也拿著錘子;
- deepbooru:一個(gè)男孩,黑色手套,手套,室內(nèi),男人特寫,襯衫,短袖,單人;
- Tagger(WD14):一個(gè)男孩,烹飪,煎鍋,男人特寫,單人,手套,圍裙,火,棕色鞋,黑色手套,靴子,爐子,廚房,握著,胡子,頭巾,藍(lán)色襯衫,襯衫;
- BLIP Captioning:一個(gè)男人正在加工一塊金屬;
- GIT Captioning:一幅畫,畫的是一個(gè)手上戴著手套、拿著錘子的鐵匠;
- 原始關(guān)鍵詞:1boy, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, facial hair, bandana, blue shirt, shirt
- 合并后關(guān)鍵詞:Smith, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, bandana, blue shirt, shirt
- 關(guān)鍵詞合并:將與訓(xùn)練目標(biāo)最相關(guān)的關(guān)鍵詞進(jìn)行合并,以簡(jiǎn)化描述。例如,若訓(xùn)練目標(biāo)為一個(gè)有大胡子的男性,可以將“1boy, facial hair”合并為“Smith”。通過將相似或重復(fù)的描述歸為一個(gè)關(guān)鍵詞,避免過度冗余,使模型能夠更加專注于關(guān)鍵特征。
示例:
- 合并前:1boy, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, facial hair, bandana, blue shirt, shirt
- 合并后:Smith, cooking, frying pan, male focus, solo, gloves, apron, fire, brown footwear, black gloves, boots, stove, kitchen, holding, bandana, blue shirt, shirt
- 編組:相同主題的圖片可以通過關(guān)鍵詞進(jìn)行分組。例如訓(xùn)練目標(biāo)是“Smith”,可以為 Smith 制作全圖、背景圖、前景圖等,并根據(jù)不同的需求對(duì)其進(jìn)行處理。
(四)正則化
每張訓(xùn)練圖片通常由“訓(xùn)練目標(biāo)”和“其他要素”兩部分組成。以 Smith 為例,訓(xùn)練集中的“鐵匠鋪、打鐵、鐵匠”等是模型的先驗(yàn)知識(shí),可以讓模型不需要重新學(xué)習(xí)這些部分,從而提高訓(xùn)練效率并提高泛化能力。正則化的目的是通過減少模型復(fù)雜度來增強(qiáng)其泛化能力。過于復(fù)雜的模型需要更多的樣本來避免過擬合。
正則化標(biāo)簽應(yīng)與訓(xùn)練集中的類別一致,確保圖片數(shù)量相匹配。需要注意的是,正則化并非必須操作,可以根據(jù)訓(xùn)練集的特點(diǎn)和目標(biāo)來決定是否使用正則化。
(五)文件路徑組織
在開始訓(xùn)練之前,確保文件路徑組織符合規(guī)范。例如,若訓(xùn)練目標(biāo)是一個(gè)名為 Smith 的女孩,且分為 sls 和 cpc 兩個(gè)子類別,則路徑結(jié)構(gòu)應(yīng)為:
train_girls ----○10_sls 1girl ----○10_cpc 1girl reg_girls ----○1_1girl
其中:
- train_girls 目錄下保存訓(xùn)練集,命名規(guī)則為“訓(xùn)練次數(shù)_<標(biāo)識(shí)符> <類別>”,例如“10_sls 1girl”表示名為 sls 的女孩的訓(xùn)練集將訓(xùn)練 10 次;
- reg_girls 目錄下保存正則化集,命名規(guī)則為“訓(xùn)練次數(shù)_<類別>”,例如“1_1girl”表示該目錄下的圖片只包含一個(gè)女孩,不會(huì)重復(fù)使用。