【AI繪畫進(jìn)階篇】(手把手教你煉丹)喂飯級(jí)LoRA模型訓(xùn)練教程(下)

書接上回《【AI繪畫進(jìn)階篇】(手把手教你煉丹)喂飯級(jí)LoRA模型訓(xùn)練教程(上)》,這時(shí)我們已經(jīng)打開了LoRA訓(xùn)練程序。
下面開始進(jìn)行參數(shù)的設(shè)置。如圖,從WebUI界面的左到右開始設(shè)置。
源模型和目錄參數(shù)設(shè)置
先選擇源模型,這里選擇Stable Diffusion V1.5模型。

如下圖,根據(jù)log(存放日志)、model(存放訓(xùn)練生成的LoRA模型)設(shè)置好目錄地址。
注意:訓(xùn)練圖片目錄為圖片集目錄的上一層目錄!舉例說明:比如上面把50_xunxian文件夾存放到xunxian文件夾中,則目錄為xunxian文件夾!而不是50_xunxian文件夾!切記切記!

然后設(shè)置好模型保存的名字。


訓(xùn)練總步數(shù)公式
訓(xùn)練前我們需要知道一個(gè)訓(xùn)練總步數(shù)的公式:
總步數(shù)控制在1000到2000步,下面分別說說公式中的各個(gè)參數(shù)。
Repeat:每張圖片的重復(fù)次數(shù)(訓(xùn)練步數(shù)),只可以在文件夾命名的時(shí)候指定,也就是圖片集文件夾的命名為“數(shù)字_名字”,這個(gè)數(shù)字便代表Repeat值!所以在上期的教程中,文件夾的命名格式才那么重要,如圖所示。

Image:很好理解,也就是準(zhǔn)備的圖片集文件夾中圖片的數(shù)量,一般為20-50張。
Epoch:訓(xùn)練的輪次,也就是所有圖片訓(xùn)練完為1輪,從頭在訓(xùn)練2輪、3輪……,這里一般建議訓(xùn)練5-10輪。
Batch_size:并行數(shù)量、批處理大小,也就是一次處理幾步。數(shù)值的多少取決于你的電腦顯卡顯存的大小,顯存?。?G及以下)推薦寫1,乖乖的一次只處理一步;顯存大的顯卡(12G及以上)可以根據(jù)情況而定,可以寫2-6。當(dāng)然并行處理的步數(shù)越多,則LoRA訓(xùn)練的速度越快!講到這里也就不難理解上面公式為啥要除以batch_size這個(gè)數(shù)。

“Training parameters訓(xùn)練參數(shù)”設(shè)置
下面開始進(jìn)行第三頁面“Training parameters訓(xùn)練參數(shù)”的設(shè)置,這也是本篇文章的重點(diǎn)。

如上圖,一般設(shè)置這些標(biāo)記出來的參數(shù)。
Batch_size,并行批處理個(gè)數(shù)、一次處理的步數(shù),根據(jù)自己顯存大小來設(shè)置,顯存小寫1,顯存大可以寫2到6。
Epoch,訓(xùn)練的輪次,一般寫5到10。
Save every N epochs,寫1則每訓(xùn)練一輪便保存一次LoRA模型,比如:如果前面Epoch設(shè)置5輪,這里寫1,則最后訓(xùn)練完成可以得到5個(gè)LoRA模型。
Network Rank(Dimension)維度,代表模型的大小。數(shù)值越大模型越精細(xì),常用4~128,如果設(shè)置為128,則最終LoRA模型大小為144M。一般現(xiàn)在主流的LoRA模型都是144M,所以根據(jù)模型大小便可知道Dimension設(shè)置的數(shù)值。設(shè)置的小,則生成的模型小。
Network Alpha,一般設(shè)置為比Network Rank(Dimension)小或者相同,常用的便是Network Rank設(shè)置為128,Network Alpha設(shè)置為64。
Max resolution,訓(xùn)練圖片的最大尺寸,根據(jù)自己圖片集的最大分辨率填寫。如果圖片集里的圖片分辨率大小不一,可以勾選右邊的“Enable buckets 啟用桶”。
下面是學(xué)習(xí)率和優(yōu)化器的設(shè)置,比較重要,我們要單獨(dú)來說說。

Optimizer(優(yōu)化器),默認(rèn)會(huì)使用AdamW8bit(下面會(huì)講其他幾個(gè)優(yōu)化器),在AdamW8bit優(yōu)化器時(shí),學(xué)習(xí)率的設(shè)置參數(shù)如圖所示。
Learning rate(學(xué)習(xí)率),可以理解為訓(xùn)練時(shí)Ai學(xué)習(xí)圖片的速率。學(xué)習(xí)率大,則訓(xùn)練的快,但是容易“一目十行”,學(xué)的不夠細(xì)致精確。反之,學(xué)習(xí)率小,則訓(xùn)練的慢,但是學(xué)的比較細(xì)致精確。默認(rèn)值為0.0001,也可以寫為1e-4。
Unet learning rate(Unet擴(kuò)散模型學(xué)習(xí)率),設(shè)置此參數(shù)時(shí)則覆蓋Learning rate(學(xué)習(xí)率)參數(shù)。默認(rèn)值為0.0001,也可以寫為1e-4。
Text Encoder?learning rate(文本編碼器學(xué)習(xí)率),一般為Unet learning rate的十分之一或者一半,比如設(shè)置為5e-5(1e-4的一半則為5e-5,十分之一則為1e-5)。
LR Scheduler(學(xué)習(xí)率調(diào)度器),理解為訓(xùn)練時(shí)候的調(diào)度計(jì)劃安排,默認(rèn)為constant(恒定值),常用cosine_wite_restarts(余弦退火)。
余弦退火算法(Cosine Annealing)是一種常用的優(yōu)化算法,它是一種讓學(xué)習(xí)率從一個(gè)較大的值開始,然后以余弦函數(shù)的形式逐漸減小的算法。它可以幫助模型更快地收斂到最優(yōu)解,且具有良好的優(yōu)化性能。此外,余弦退火算法還可以更好地改善模型的泛化能力,即模型在未見過的數(shù)據(jù)上的表現(xiàn)。

DAdaptation優(yōu)化器求最優(yōu)學(xué)習(xí)率方法
tips:看完全文再來看這里最佳!
此外,我們還可以通過DAdaptation優(yōu)化器來找到最優(yōu)的學(xué)習(xí)率,如下圖所示設(shè)置即可。

其他設(shè)置(指的是看完上下文的所有設(shè)置)都設(shè)置完畢后,點(diǎn)擊Train model(開始訓(xùn)練模型)按鈕,則開始進(jìn)行LoRA模型訓(xùn)練。訓(xùn)練啟動(dòng)后,我們點(diǎn)擊Start tensorboard,進(jìn)入數(shù)據(jù)看板,這里記錄了訓(xùn)練過程的一些可視化數(shù)據(jù)。
點(diǎn)擊左上角SCALARS,然后找到左下角的lr數(shù)據(jù)圖表,看到DAdaptation優(yōu)化器會(huì)快速的到達(dá)一個(gè)恒定的學(xué)習(xí)率(一條直線),則這個(gè)學(xué)習(xí)率便是最優(yōu)學(xué)習(xí)率(這里求得的值是3.3e-5)。


lr放大圖
我們?cè)倩氐綄W(xué)習(xí)率設(shè)置頁面,把優(yōu)化器改為AdamW8bit,把求得的最優(yōu)學(xué)習(xí)率(這里以求得的3.3e-5為例)填入U(xiǎn)net learning rate處,其他值和設(shè)置根據(jù)上面的規(guī)則依次填入,如圖所示。這樣,一個(gè)合理的數(shù)值便設(shè)置好了。

注意:如果使用Lion優(yōu)化器,則學(xué)習(xí)率要改為DAdaptation優(yōu)化器找到的最優(yōu)學(xué)習(xí)率的三分之一。

“Training parameters訓(xùn)練參數(shù)”高級(jí)設(shè)置

如上圖,這里面需要設(shè)置的部分不多。
Keep n tokens(保持N個(gè)tokens),這個(gè)參數(shù)是用來設(shè)置觸發(fā)詞數(shù)量的。在前面提示詞打標(biāo)的時(shí)候,你為你的LoRA模型設(shè)置了幾個(gè)觸發(fā)詞,這里就填寫幾,常見的有1~3。
Clip skip,二次元模型選2,寫實(shí)模型寫1即可。

“Training parameters訓(xùn)練參數(shù)”采樣圖片配置

Sample every n steps,比如設(shè)置為100,則代表每訓(xùn)練100步采樣一次。
Sample every n epochs,每N輪采樣一次,一般設(shè)置為1。
Sample prompt(采樣提示詞),輸入提示詞,比如:masterpiece, best quality, 1girl --n low quality, worst quality, bad anatomy,bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28。
如上設(shè)置之后,LoRA訓(xùn)練的同時(shí)會(huì)每隔設(shè)定的步數(shù)或輪次,生成一副圖片,以此來直觀觀察LoRA訓(xùn)練的進(jìn)展。

開始訓(xùn)練模型Train model
以上參數(shù)設(shè)置完畢,點(diǎn)擊Train model(開始訓(xùn)練模型)按鈕,則開始進(jìn)行LoRA模型訓(xùn)練。
點(diǎn)擊開始后,一般WebUI界面上沒有任何提示,我們可以切換到Powershell窗口觀察訓(xùn)練是否開始。如下圖,一般出現(xiàn)如下字樣時(shí),便代表訓(xùn)練開始了。

也可以查看任務(wù)管理器,觀察GPU的狀態(tài)圖,如果顯示100%,則代表訓(xùn)練進(jìn)行中。

下圖代表訓(xùn)練開始,steps:0%。

經(jīng)過半個(gè)多小時(shí),LoRA模型訓(xùn)練完成,訓(xùn)練時(shí)長(zhǎng)根據(jù)參數(shù)設(shè)定和電腦性能而定。
訓(xùn)練完成后,我們查看Loss值,一般Loss值為0.08~0.1則模型訓(xùn)練的比較好,Loss值為0.08則最佳。

一般LoRA訓(xùn)練出來的最后一個(gè)模型沒有編號(hào),需要手動(dòng)重命名一下。

然后把這些模型放入Stable Diffusion的LoRA模型所在位置就可以進(jìn)行模型的測(cè)試和使用了。具體教程可以移步《Stable Diffusion:使用XYZ腳本生成對(duì)比圖進(jìn)行LoRA模型測(cè)試教程》。

更多Stable Diffusion Ai繪畫教程請(qǐng)看本人主頁或者頭條@好奇漫步,持續(xù)更新更多Ai相關(guān)學(xué)習(xí)教程,保持關(guān)注哦~