close

我家的Siren是我訓練的第二個娃娃(因為她是我第二喜歡的),經過了第一次訓練Mnemosyne時的冗長反覆測試經驗,這一次就順利多了。所以分享一些針對Doll(我認為應該歸屬於2.8D的人物臉蛋風格)的訓練模型心得。有些是通用的方法,但也有一些是我個人採用的小技巧喔~

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作



  在AI生圖的數位世界裡,搭配LoRA模型(Low-Rank Adaptation of Large Language Models,大型語言模型的低階適應)是個很受歡迎的選擇喔!它讓我們能在不用更換AI繪圖所採用的『基礎大模型』的情況下,用一些小型數據在低配電腦就能訓練出一個新的『具備局部調整能力的小型模型』。當啟用這種模型後,就可以針對很多東西進行局部調整,像是人臉、人體、穿著、風格和各種物件(如衣服、玩具造型等等)。這意味著我們就可以透過LoRA模型做出符合自己需求的客製化作品啦!

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作

 

  不過,因為大家對LoRA模型作用效果的需求都不同,所以設定參數以及訓練策略也會有所不同。這就需要我們花時間和精力去試驗,然後逐漸建立起自己的經驗知識庫。舉個例子,即使是「人臉樣貌」這個部分,在動漫的平面2D、電腦繪製的2.5D、真人模樣3D(我甚至覺得我們的娃娃應該介於2.5~3D之間)的參數設定都可能不同。如果參數調整得好,不僅可以讓作品「看起來像,而且還更美」;反之,就可能會有一種不太對勁的感覺哦~

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作


 

  Stable Diffusion WebUI(一種免費的AI繪圖開源軟體,簡稱SD),自2022年以來,已經經歷了三個主要版本,分別是「SD1.0(已經少人在用了)」、「SD1.5(有一段輝煌時期,功能很完整)」和「SDXL(最新版)」。而且,在我寫這篇文章的時候,又出現了一個全新的版本,叫做Stable Diffusion Forge(簡稱SD-Forge)。真的讓人覺得AI技術的進步永遠跟不上腳步呢!
  雖然「SDXL」現在很流行,但它對系統的要求很高。如果用低階電腦跑,不僅會很耗時,還會讓你的耐心磨光光...而且,訓練新一代的LoRA模型也更加複雜,需要更多的系統資源、時間和電力。相比之下,SD1.5的系統要求就低得多。如果你能掌握訓練的訣竅,並且在生成圖片時好好控制參數,它的品質效果也不一定會輸給SDXL哦!此外,即使是在SD1.5下訓練出來的專屬LoRA娃娃,在一些特殊巧妙的使用方法下,也是可以融合到SDXL的喔!

​​​​​​​  當然囉,因為這裡分享的是關於「訓練」和「使用」LoRA模型的內容,所以如果您對這個領域感興趣,那麼就需要一些基礎知識喔。首先,要花點時間熟悉SD和Kohya_ss,包括它們的安裝方法、擴充方式和基本操作。Stable Diffusion和Kohya_ss這兩套開源系統從頭開始的過程可能有點複雜,但別擔心,網路上有很多教學可以取經。

 

一、環境與工具準備

(一)安裝SD和Kohya_ss,兩大主程式的官方網址給大家參考:
1.
Stable Diffusion:https://github.com/AUTOMATIC1111/stable-diffusion-webui
2.
Kohya_ss:https://github.com/bmaltais/kohya_ss

(二)此外,在「訓練」LoRA模型時,我還會用到以下3個免費且開源的工具,沒有版權問題喔:
3.
美圖秀秀免費版,用來裁切娃娃照片:https://pc.qq.com/detail/1/detail_22861.html
4.
Tagger(是SD的外掛程式,需要安裝在SD上)用來為訓練素材的圖片打上標籤:https://github.com/picobyte/stable-diffusion-webui-wd14-tagger
5.
Booru DatasetTag Manager,用來檢視和修正圖片標籤的正確性:https://github.com/starik222/BooruDatasetTagManager/tree/v1.6.7?tab=readme-ov-file

(三)而在「使用」LoRA模型時,我還會額外用到以下工具(也是免費開源的):
6.
ADetailer(是SD的外掛程式,需要安裝在SD上)用來精準控制人物臉部:https://github.com/Bing-su/adetailer

(四)至於我在「訓練」和「使用」LoRA模型時主要使用的基礎大模型如下(這些模型都可以在CIVIT AI網站找到:https://civitai.com/models
7. 訓練時:
chilloutmix_Ni.safetensors(我不建議使用官方版的元祖模型v1-5-pruned-emaonly.safetensors,因為根據經過去的血淚測試發現,它用在娃娃的訓練效果很差喔)
8-1. 產圖時針對整體風格的基礎大模型:
majicmixRealistic_v7.safetensors(其實「majicmix麥橘」系列都不錯,但我覺得第7版的風格更適合我家的娃娃LoRA)
8-2. 產圖時針對控制臉部的基礎大模型:
chilloutmix_NiPrunedFp16Fix.safetensors(這是chilloutmix_Ni.safetensors的剪枝版本,容量較小,因為我只想要專注於娃娃臉部,所以用這個小號版本即可,這樣才可以節省出更多的記憶體喔)

先說明一下喔!
​​​​​​​  這篇內容是假設您已經開始玩SD和Kohya_ss了,所以需有SD和Kohya_ss的操作經驗喔,只是可能會跟以前的我一樣糾結在:為何訓練出來的娃娃LoRA模型總是和想像中的有點差距(就是都不像啦…)。我知道網路上有很多教學,但有時候參數的設定只會給出「官方推薦」或是一個「建議範圍」,而且好像還找不到專門針對『Doll娃娃(2.8D臉蛋)的LoRA訓練經驗』的資訊。
​​​​​​​  所以,如果您也想把您家最心愛的寶貝訓練成一個「百搭的LoRA」,讓它陪伴您一起遨遊在廣闊的虛擬數位世界中,那麼不妨試試我的方法吧!接下來,就可以開始針對「SD1.5版的娃娃LoRA」進行訓練啦~

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作


二、「訓練」LoRA模型

(一)圖面素材心得
​​​​​​​  在準備圖片的數量上,網路上大都建議約在30張,裁切成512*512或768*768,臉部特寫、半身照、全身照的比例大約是7:2:1。不過根據我的經驗,有些看法不太一樣喔:

0. 首先,很重要的是,你必須先自行為你家的娃娃先拍出一堆美美的照片喔(網路抓別人的可能涉及著作權問題,而且別人打扮的娃娃風格,也不見得符合你的審美觀念…)

1. 圖片素材的數量越多,一般來說是越有利的(當然前提是照片品質要好)。我覺得50張其實算是比較少的,300張才算多。所以,假設只有50張,那可以考慮採用「鏡像複製(左右翻轉)」來增加到100張。但如果已經有300張,那就不需要這樣做了。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

2. 要訓練運用在SD1.5的LoRA模型,仍建議將每張圖片裁切成長寬相同像素的圖片,其中像素768*768的效果經實測會比512*512還要好(代價是等一下的訓練時間會倍增)。使用美圖秀秀可以很方便地對不同解析度的圖片進行統一格式的快速裁切(如果用Photoshop裁切可能會累到吐血...)。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

3. 至於臉部特寫、半身照、全身照的比例,我認為應該根據您的需求來決定。因為我比較在意娃娃的臉和神韻是否相似,而且這次也希望能把身體型態納入訓練,所以我就將臉部特寫和半身照準備得比較多,全身照就沒有很多喔。
註1:這次我家的Siren,我使用了277張768*768的照片素材,其中臉部有123張、半身有126張、全身有28張。
註2:在過程中,我也嘗試過從這277張中挑選64張的照片素材進行訓練,後來果然被證實LoRA模型的效果真的比較差喔(就這樣花了我整一天時間…)!

 

(二)圖片AI打標籤心得
​​​​​​​  在圖片打標籤方面,一個簡單的方法是使用SD1.5內建的「DeepBooru(單字型標籤)」或「BLIP(句子型標籤)」功能。然而,我發現DeepBooru和BLIP的打標效果都不太理想,很多標籤似乎都是AI隨機生成的(精準率不到50%)。因此,我會改用之前提到的SD外掛程式「
Tagger」,安裝後就可以直接使用(預設參數通常不需要調整)。它會以類似DeepBooru的方式為每張圖片打上標籤,而重要的是,它配有專屬的反譯模型,使得精準度幾乎高達100%,這樣就可以大大節省後續的校正時間跟精力啦。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

(三)圖片標籤校正心得
​​​​​​​  因為每張圖片都會產生一個.txt的標籤文檔,如果自己一一去閱讀和校對,真的會讓人瘋掉喔(277個文件檔啊…)
1. 因此,我會使用之前提到的
Booru DatasetTag Manager,因為它提供了「圖字並列」、「個別標籤修改及增減」、「全體統一標籤增減(這功能超級實用)」和「翻譯(這個更是福音)」四大功能。所以,結合「Tagger」和「Booru DatasetTag Manager」後,原本可能需要1~2天讓人接近幾乎歇斯底里的工作量,直接縮減到1個小時以內就完成了哦(果然人類的懶惰慾望是造就科技進步的原動力啊…)~
2. 每張圖片素材的標籤文件都要統一加上一個『
觸發詞』,以及移除一些已經被我視為應該屬於Siren特色的標籤用詞(因為觸發詞就是用來含括這些細節特色的),而那個觸發詞必須是一個「從未被使用過的名詞,所以建議加一些特殊符號」。例如,這次針對我家的Siren,觸發詞是『Siren_\(dolln2\)』(上一次針對Mnemosyne時,我的觸發詞是『Mnemosyne_\(doll9\)』)。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

(四)啟用Kohya_ss訓練娃娃LoRA參數指令心得
1.
Repeats(每張圖片反覆學習的次數):建議設定在20~30次。以我訓練Siren為例,我有277張照片,設定了25次重複學習,所以每輪電腦會進行277*25=6925次的圖片閱讀訓練。設定Repeats的方法很特別,只要修改存放圖片的資料夾名稱就可以了,例如我把存放著277張照片和標籤檔的「dollN2」資料夾改名為『25_dollN2』,就代表設定了Repeats為25次。
2.
Epoch與Max train epoch(學習進行的輪數):目前我的經驗是10輪太少,20輪太多,我習慣設定在12~18輪(就看當下的心情或預期完成的時間啦~)。
3.
Save every N epochs(每多少輪存檔一次):我建議設定為1,因為每一輪階段所產生的LoRA模型都很寶貴喔。
4.
Batch size(批量處理,也就是讓電腦同時讀幾張圖):這個參數會影響顯示卡記憶體的使用、訓練時間和學習結果。理論上設定得越高,電腦每一步併行學習的圖片越, 其優勢「並不是」練模速度會因而加快(網路很多說法是錯的!),而是併行式的學習可以對該步數下的多張圖片進行融合學習(擴大學習),進而增加模型精確度 我的經驗是,當使用「優化器AdamW」時,我會設定得大一點(比如8,甚至設到NVIDIA 4090的極限32);而當使用「優化器Lion」時,我通常只設定為2(如果設得太高,生成的效果通常不佳)。
5.
Mixed precision與Save precision(運算精確度,分fp16與bf16):經過實測和同好的分享,我們都認為fp16(雖然範圍廣度只有5bit但精度達10bit)的效果更細緻和真實,而不是官方推薦的bf16喔,特別是在處理人物臉孔時。
6.
Network Rank (Dimension)與 Network Alpha(網路維度和網路泛度):這兩個參數影響LoRA模型的容量(檔案大小)、細節程度(細緻度)和泛化能力(衍生不同風格能力)。雖然這邊的知識細節很多,根據我的實測,對於2.8D風格的娃娃,只要設定Network Rank (Dimension)為128Network Alpha為64(有人建議也可以是32,不過有空的話您可以試試看)就會有不錯的效果喔!
7. 關於與顯示卡記憶體管理相關的選項,建議都勾選上(即使是使用NVIDIA 4090顯示卡,經實測,從效率的角度來看也是推薦勾選喔):
(1)
Gradient checkpointing(梯度點檢查):建議勾選
(2)
Memory efficient attention(記憶體高效管理:建議勾選
(3)
Use xformers(啟用xformers):建議勾選
(4)
Don't upscale bucket resolution(關閉高桶分辨率):建議勾選
8. 其他六個重要的小細節:
(1)
LoRA type(模型種類):LoRA模型技術已經進化很多代了,但其他類型大多需要SDXL才支援,所以在SD1.5系統下,建議使用標準(Standard)模型就很強了喔;
(2)
Number of CPU threads per core(每個CPU核心的執行緒數量):請填入您電腦正確的CPU核心數量,這個數字可以在「工作管理員-效能」或CPU包裝盒上找到,目前主流應該是16或32吧;
(3)
Seed(隨機起始點種子):一定要填入一個正整數,建議永遠使用相同的數字(官方建議1234),不然爾後若進行進階運用時,不同的種子點可能會造成銜接運算上的混亂喔;
(4)
Max resolution(訓練圖片的尺寸):宣告使用的圖片素材是512系列還是768系列,中間用逗號隔開,比如「768,768」;
(5)
Clip skip(跳過層或省略層):這是AI繪圖時重要的策略技巧,解釋起來有點複雜…,所以直接說重點喔:建議設定為1(直達最底層)或2(只到倒數第2層,即跳過一層)。針對2.8D的娃娃LoRA模型而言,我的心得是Clip skip=2較佳喔;
(6)
Noise offset(圖片噪音點的設定):參數設定越高,生成圖片的「對比度」就越高。官方建議Noise offset為0.05~0.15,但針對2.8D的娃娃LoRA模型而言,我的心得是設定Noise offset=0較佳。如果需要產生高對比度的圖片,可以在事後通過其他方式達成(反而是若一開始Noise offset設太高導致爾後出圖的對比度都很大的話,此時想要降低對比度反而是很麻煩的事情),這樣比較靈活喔!
[重要喔!] 9. Optimizer(優化器):在訓練SD1.5的LoRA模型時,我常用「AdamW(這我最常用)」或它的簡化版「AdamW8bit」,還有「Lion(我有空閒時才會用)」。另外,我還會使用「DAdaptation 或 Prodigy(這是必須要先用的)」這個自動模式來偵測『AI自認為最佳的學習率』,然後再回頭使用AdamW等優化器(操作方法在下一樓)

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作

[重要喔!] 10. 學習率要設定三個參數,分別是:Learning rate(學習率)Unet learning rate(Unet學習率)Text Encoder learning rate(文字編碼器的學習率)。其中,Learning rate和Unet learning rate可以設定為相同的數值,而Text Encoder learning rate則是前面數值的1/2至1/10之間(官方建議的)。經過我和GPT的詳談,目前我習慣將它設定為1/5,發現在這樣的這定方式我使用至今下,都沒有不良的情況發生喔。
  然而,學習率是一個棘手的問題,設定不當可能導致模型不夠像(數值太大容易欠擬合)或像過頭以致變髒變醜(數值太小容易過擬合)。官方建議從0.0001開始測試,然後不負責任地告訴我們「之後再根據產圖結果來決定該調高還是調低吧(難道不知到每訓練一次花費的時間,需要數小時到一天嗎…)」。因此,我們可以讓AI來協助我們找出在「目前已知設定和條件下」最佳的學習率建議值。方法如下:
(1) 先根據您的需求先完成「除了以下6個」以外的其他所有參數設定:『Optimizer』、『Learning rate』、『Unet learning rate』、『Text Encoder learning rate』、『LR warmup (% of steps)』、『LR Scheduler』;
(2) 必須先使用優化器「
Optimizer=DAdaptation 或 Prodigy」來抓取學習率,使用時必須修正以下5個參數(DAdaptation規定的):Learning rate=1,Unet learning rate=1,Text Encoder learning rate=1,LR warmup (% of steps)=0,LR Scheduler=constant
(3) 讓電腦學習大約2~3分鐘(或約學習30步),即可查看監控圖,看看目前AI使用的學習率穩定在哪個數值(比如AI此時穩定採用0.000365),然後就可以把他中斷掉啦;

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

(4) 重新使用優化器AdamW或Lion,參考前面獲得的學習率再進行調整:
●當Optimizer=AdamW時(學習率直接照抄):Learning rate=0.000365, Unet learning rate=0.000365, Text Encoder learning rate=0.000365/5, LR warmup (% of steps)=10, LR Scheduler=cosine_with_restarts
●當Optimizer=Lion時(需要除以3):Learning rate=0.000365/3, Unet learning rate=0.000365/3, Text Encoder learning rate=0.000365/3/5, LR warmup (% of steps)=10, LR Scheduler=cosine_with_restarts

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

註1:LR Scheduler(學習率調度器):這個參數是用來指引AI的學習方式,讓AI的學習過程可以動態調整。總共有6種選擇,而LR Scheduler=constant意味著學習率在整個訓練過程中都要保持不變。
註2:而LR Scheduler=cosine_with_restarts(將學習率調度器設成「餘弦重啟」):這個設定意味著學習率會像一個有規律的上下起伏的波動(從0~指定值之間),每當完成一輪學習週期,就會重新開始波動。
註3:LR warmup (% of steps)(學習率預熱策略):這個參數是用來控制學習率在訓練初期逐漸升溫的過程。常見的設定有「不預熱:LR warmup (% of steps)=0」,或是「讓前10%的學習過程先進行預熱:LR warmup (% of steps)=10」。所以如果使用
學習率恆定不變的優化器DAdaptation,就選擇0;而對於其他優化器,雖然可以隨意設定,但建議設為10,因為這是一般認為最合適的設定,而且經過我的測試,效果也不錯。

(五)完成Kohya_ss參數設定後,就可以開心地開始訓練娃娃LoRA和驗收成果啦~
1. 雖然我對參數設定大致上有自己的主見,但訓練時還是會想嘗試不同的參數組合,看看效果如何,累積經驗。因此,我會自己做一個Excel記錄表來記錄每一個梯次的設定和結果喔。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

2. 要怎麼判斷訓練出來的LoRA模型好不好呢?在苦等模型訓練的過程中,我們通常會觀察系統給出的「動態loss值(介於0~1之間)」。loss值越高表示當下越欠擬合(不太像),loss值越低表示當下越過擬合(像到變醜或變髒)。雖然一般認為loss值越低越好,但大家公認的合理範圍大概在「0.09~0.07之間」,這也是我們判斷訓練情況的一個簡單參考。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

3. 但是,數據畢竟只是數據(其實我有時不太相信loss這個數據,因為根據我的經驗,有時loss值在0.10多,結果娃娃已經很美;也有時loss值在0.07多,看完生成的圖片後卻造成我心靈創傷...)。所以,最後還是要進行實際出圖的「實測」。一般來說,我會啟動SD1.5裡的「Script:X/Y/Z plot功能」來比較不同階段LoRA模型的出圖效果,以下是我常用的設定(以這次的Siren模型第一梯次的訓練版本為例):
(1) 在
Prompt的第1行:
<lora:Doll_N2_v1-NUM:STERNGTH>, Siren_\(dolln2\),
(2) 啟用Script-X/Y/Z plot後:
X欄選Prompt S/R,參數為:NUM,000001,000002,000003,000004,000005,000006,000007(...依此類推,看之前共產生幾個LoRA模型)
Y欄選Prompt S/R,參數為:STERNGTH,0.7,0.8,0.9,1.0(渲染權重小於0.7甚至0.6的,就我的經驗,通常不會像,所以我習慣省略,節省測試時間)
●Z欄暫時用不到喔

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

4. 經過實測過程後,我會把訓練出來的LoRA模型分成三大類:
(1)完全不像的LoRA模型(直接丟棄或打入後宮)、
(2)雖不像但會意外產生很美娃娃的LoRA模型(歸為
B類-整體系),以及
(3)已經有點像的LoRA模型(歸為
A類-針對臉孔系)。
​​​​​​​  如果要問我,其實我更喜歡「B類」,我甚至覺得娃娃廠商也可以根據B類的生成圖來激發出新款娃娃的靈感喔。而「A類」當然就是我們刻意要生成這款AI娃娃的主力模型了啦。這樣的分類方法可以幫助我更好地管理和利用我訓練出來的LoRA模型,也讓整個訓練過程更有條理和效率哦!

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

三、「使用」LoRA模型
​​​​​​​  使用LoRA模型其實就是展現各種創意的時候啦!應用方法真的超級多,尤其當你的SD1.5加上了一些高效能的外掛輔助工具,比如ControlNet、Multi-diffusion,還有這次我要用到的ADetailer,那就更加豐富有趣了。這裡分享一個針對2.8D娃娃LoRA的特別生圖策略。

思路1. 最直接的方法就是在Prompt裡打上「啟用該LoRA的指令標籤,並指定一個渲染權重」。但這樣做往往結果要麼就是有種說不出來的不像(缺乏神韻),要麼就是有點像但畫面卻變得雜亂或很髒(根本還沒有開始像就像過頭了...)。所以重點是:不建議直接在Prompt中啟用娃娃LoRA。
思路2. ADetailer這個外掛軟件於2023年4月推出,主要用於精緻化或修復臉部和手部圖像。到了2023年11月,臉部精緻技術變得更加成熟。因此,可以在ADetailer下啟用上述的「A類」模型,這樣可以讓臉部聚焦生成出娃娃的五官樣貌與神韻,但有時仍可能會出現「臉部與周圍,比如頭髮、脖子、耳朵接合處,或在身型上有些許不太協調的感覺」,不過即便如此,這種生成結果已經比目前時下一些AI換臉的APP精準多了喔。
思路3. 所以,可以在Prompt中啟用「B類」模型,同時在ADetailer下啟用「A類」模型。這樣一來,一開始「B類」模型會讓AI生成一張雖然不太像但卻很美的娃娃全景圖,這時雖然娃娃五官不太像,但其實身形、輪廓、臉型已經是原本娃娃的雛形了。所以,在這個人物臉型框架下,再用ADetailer開起「A類」模型後,就能精準聚焦修復「剩餘的」五官和神韻,如此就有機會大幅降低輪廓生硬不搭的感覺喔。

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

最後,感動時刻來了喔,一張張讓你一眼就會深深愛上她的美美娃娃照,就這樣被成功的「克隆」出來啦~

用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作 用SD1.5訓練LoRA娃娃黃金法則-以Siren為例(操作
 

arrow
arrow
    全站熱搜

    Aphrodite 發表在 痞客邦 留言(0) 人氣()