0# 物件訓練 **使用Kohya-ss訓練** ## 參考資料 ### 網頁資料 * [使用-kohya-ss-訓練-lora-時的一些技巧與想法](https://medium.com/@capillaryj/%E4%BD%BF%E7%94%A8-kohya-ss-%E8%A8%93%E7%B7%B4-lora-%E6%99%82%E7%9A%84%E4%B8%80%E4%BA%9B%E6%8A%80%E5%B7%A7%E8%88%87%E6%83%B3%E6%B3%95-6222bda0f1c7) * [从零开始训练专属 LoRA 模型](https://www.uisdc.com/lora-model) * [Lora 訓練概念筆記](https://blog.hinablue.me/lora-training-concept-notes/) * 正規化資料集 * [Lora 訓練與大型翻車現場](https://blog.hinablue.me/stable-diffusion-lora-training-notes/) * 衣服:https://www.youtube.com/watch?v=tHlXjqqGIfM * [喂饭级LoRA模型训练教程](https://zhuanlan.zhihu.com/p/634889947) * [怎么才能用stable diffusion训练出物品的lora模型](https://www.zhihu.com/question/598449211) * SD-AI(5)lora模型的训练认知 https://www.bilibili.com/read/cv23728468/ * https://blog.hinablue.me/lora-after-training-over-1000-hours/ * https://blog.hinablue.me/kohya_ss-training-optimizer-and-hyperparameter/ * https://blog.hinablue.me/lora-kohya_ss-gui-full-introduction/ * https://blog.hinablue.me/aigc-stable-diffusion-with-lora/ * 權重:https://blog.hinablue.me/lora-training-and-block-weight-notes/ * 參數說明: * [纯小白想开训lora?参数设置看这一篇就够用了](https://zhuanlan.zhihu.com/p/640274202) * [Kohya_ss GUI 介面筆記](https://blog.hinablue.me/lora-kohya_ss-gui-full-introduction/) * 減法學習:https://blog.hinablue.me/lora-subtractive-splitting-and-merge-creating-specialized-character/ ### 影片教學 * https://www.bilibili.com/video/BV1GP411U7fK/?spm_id_from=333.999.0.0&vd_source=18caf3a918a59f150e3802eab1fc119e * https://www.bilibili.com/video/BV16e411e7Zx/?spm_id_from=333.999.0.0 * LoRA訓練篇:類別/正則圖集怎麼用?如何保留模型風格,為畫面增加其他元素?https://www.youtube.com/watch?v=hDPyleD3O2E * ![image](https://hackmd.io/_uploads/BJjZwJGQA.png) * ## 資料準備 ### 訓練集Train * reg 底下正規化圖片 (REGULARIZATION IMAGES) 資料夾的名稱,必須與訓練集相同,只有步數不同 ***文字難以訓練*** **質量>數量** #### 圖片 * 物體本身+拿著的動作 * 768\*768////1024\*1024 先放大 #### 提詞 * **觸發詞:獨一無二** * kohya(自動)+BooruDatasetTagManager(刪減整理) * **刪除**與物體本身相關詞=>將特徵刻入Lora模型裡 * 保留的提詞是可被更改的 * tag會影響loss值 ### 正規化訓練集Reg * 物體訓練不適合使用 * ![image](https://hackmd.io/_uploads/rkajls4XR.png) * 正規化資料集做提示詞增加穩定性,也能提升泛型的作用 * 模型被迫學習一些與目標類別不完全相關的特徵可以減少過度擬合的風險。 * 正規化圖片(REGULARIZATION IMAGES)的數量,大約可以在訓練集圖片的 100 ~ 200 倍之間 * 跟「訓練集」同類但不正相關的圖片-->可用SD產圖(使用訓練集當中所做好的提示詞,用 SD 幫你大量產出正規化圖片) ![image](https://hackmd.io/_uploads/S1LZZ5-XR.png) * 挑選原則: 1. 選擇高質量的圖像:確保你選擇的圖像是高質量的,可以清晰地顯示出你想要的特徵。 2. 多樣性:選擇多樣的圖像,包括不同的風格、色彩和紋理,這有助於提高生成模型的多樣性。 3. 詳細:選擇能夠呈現你想要特定特徵的圖像。例如,如果你想訓練一個生成寫實風格的模型,那麼你需要選擇那些能夠呈現真實細節的圖像。 4. 數量:通常情況下,regulation images的數量越多越好,因為這能夠提高訓練的品質和多樣性。但是,選擇過多的圖像可能會增加訓練的時間和計算成本。 ## 訓練參數 * ![image](https://hackmd.io/_uploads/SyFrP17QC.png) | | 物品 | 一般 | 風格 | | | --------- |:-----:|:-----:| ---- |:-------------------------------:| | clip-skip | 1 | | 2 | | | epoch | 9 | 10-16 | | 多的epoch可以得到相对更低的loss | | dim | 64/32 | | | 出圖精度很高的dim都得128往上/特徵學習 | | alpha | | | | dim的一半 | * epoch:使用Max train epoch會被覆蓋 * max train steps ![image](https://hackmd.io/_uploads/BJ5YyXmX0.png) * 重覆次數:訓練集圖片訓練的重覆次數,通常大家都推薦6次,防止過擬合。但如果使用了鏡像翻轉,導致相同的圖片實際上訓練了兩次,那麽我感覺就可以把重覆次數改為三次。 * 優化器(Optimizer):AdamW8bit(默認)、DAdaptation(自动调整学习率)、Prodigy(DAdaptation的升級版)、Lion * 使用DAdaptation时,把unet设成1,text的学习率设成0.5,让它自动去跑,过一会就能获得一个最优学习率。接下来用AdamW8bit跑,或者Lion学习率调整为最优的1/3跑。 * ![image](https://hackmd.io/_uploads/HJq6U1QmA.png) * 學習率:學習率本身,看了青龍聖者的攻略,就是先用Dadatptation優化器跑模型(跑開頭幾分鐘取到學習率就就可以停止了)、同時用TensorBoard監視訓練日志,等到**學習率一穩定**,就記錄下來,**除以3之後換用Lion優化器跑**。 * 學習率(無reg) ![image](https://hackmd.io/_uploads/HyFx0RGQR.png) * Text Encoder Lr 就直接除以 2 來用也可以 * 高的学习率训练更快,收敛更快 * 如果loss下不去,就提高学习率;如果loss太低或者没有得到一个特别像的模型,可能是设置高了,再降低些试试。 * | | 欠拟合 | 过拟合 | | ------------------ | ---------------------- | ---------------------------- | | unet(圖像) | 生成的图会与素材不像 | 导致面部扭曲或者产生大量色块 | | Text Encoder(文本) | 出图对Prompt的服从度低 | 生成多余的物品/结构特征 | * 跟batch size 有關:batch size提高2倍,學習率提高根號2倍(效果不好再進行嘗試) * 設置:lr 一組、TE/Unet一組。只設定lr時,Unet=lr、TE=Unet/2 * ![image](https://hackmd.io/_uploads/By8C0R-X0.png) * batch_size:同時學習的圖像數,学习多张不同图像会降低各图像的调整精度,但可以全面捕捉多幅图像的特征,因此最终效果可能更好。太多也可能導致學習不足,調整精度降低 * Alpha![image](https://hackmd.io/_uploads/HyQcnzQXC.png) * LR Scheduler![image](https://hackmd.io/_uploads/HJAG6f77A.png) * 使用cosine_with_restart 要設定學習率訓練週期 * Shuffle caption(Advanced):隨機打亂提詞,可避免靠後提詞學習不佳 * loss通常0.08左右是最优的, * 訓練時打亂標籤 ![image](https://hackmd.io/_uploads/HyH8AYT7R.png) ## Kohya 操作 ![image](https://hackmd.io/_uploads/r1Q5l-7mA.png) ![image](https://hackmd.io/_uploads/ryzRe-m70.png) ![image](https://hackmd.io/_uploads/B1GDebX7C.png) * 使用sample 可在訓練過程中輸出參考圖 ![image](https://hackmd.io/_uploads/rJYHYO8H0.png) # 使用操作 * 關鍵字:越靠前權重越重 * 自訂權重:(key:1.3)不超過1.5 /1以上增加,反之減少 * 結合[A|B:步數/比例]未指定系統自動分配 * 正向:masterpiece,best quailty +XXX * 反向提詞:nsfw,ugly,bad_anatomy,bad_hands,extra_hands,missing_fingers,broken hand,more than two hands,well proportioned hands,more than two legs,unclear eyes,missing_arms,mutilated,extra limbs,extra legs,cloned face,fused fingers,extra_digit, fewer_digits,extra_digits,jpeg_artifacts,signature,watermark,username,blurry,large_breasts,worst_quality,low_quality,normal_quality,mirror image, Vague #### xyz plot * x軸 v2,v2-000001,v2-000002,v2-000003,v2-000004,v2-000005,v2-000006,v2-000007,v2-000008,v2- 000009,v2-000010,v2-000011,v2-000012,v2-000013,v2-000014 * y軸 0.3,0.4,0.5,0.6,0.7,0.8,0.9,1 * <lora:aski0523-v2:0.3>,(outdoor,purple skin:1.5),white face,front,aski ,sushi * <lora:gci0612_v1:0.6>,masterpiece,best quailty,gci,1 girl,stand,outdoor ![image](https://hackmd.io/_uploads/SJajfcTQA.png) # 常見問題 ## 過擬合 * 通常有兩個因素: 1. 訓練回數太多太久,使得LoRA的權重產生嚴重偏見,讓它可以在訓練時取得良好分數 2. 沒有提供規範圖(regulation images)。無法在LoRA訓練想取巧時教訓它。 * solution: 1. 降低epoch/repeat 2. ## 加速 * 開啟Cache latents * 如果重複使用同一訓練集可開啟Cache latents to disk(保存到本地) * 加大batch size # 訓練結果 * Fail case1 ![image](https://hackmd.io/_uploads/HJikWWmX0.png) * 0516_v1_noreg * 參數 | 參數 | 用時13min | | ------ |:-----------------------------------:| | 步數 | 10(repeat)x27(photo)x10(epoch)=2700 | | reg | no | | 學習率 | 5e-5 | | epoch | 10 | | repeat | 10 | 1. 物體不明確 2. 位置奇怪 | 9-1 | 4-1 |6-1 | | -------- | -------- | -------- | | ![00278-1694522716](https://hackmd.io/_uploads/S16wgNXmC.png) | ![00273-1694522716](https://hackmd.io/_uploads/HyB_lNQ70.png) |![00275-1694522716](https://hackmd.io/_uploads/BkX9xVXQC.png)| | ![00324-3487191607](https://hackmd.io/_uploads/Skuz2BEQA.png) | ![00333-3487191607](https://hackmd.io/_uploads/HkhXnBEmR.png) | | -------- | -------- | * 0516_v1_reg fail * 參數 | 參數 | | |:------:|:----:| | 步數 | 5400 | | reg | yes | | 學習率 | 5e-5 | | epoch | 10 | | repeat | 10 | * 0517_v1_noreg * 參數 | 參數 | | |:------:|:----:| | 步數 | 2700 | | reg | no | | 學習率 | 1 | | epoch | 10 | | repeat | 10 | ![image](https://hackmd.io/_uploads/HJEADO4X0.png) * 0517_v1_noreg * 參數 | 參數 | | |:------:|:------:| | 步數 | 13500 | | reg | no | | 學習率 | 0.0005 | | epoch | 50 | | repeat | 10 | * 0523aski_v1_noreg * 過擬合 * 0523aski_v2_noreg * 過擬合 * Prodigy-cosine * Train batch size:1 * epoch:15 * step:15x15x15=3375 * ![image](https://hackmd.io/_uploads/rkz1owp70.png) * ![image](https://hackmd.io/_uploads/ByhQjw6QA.png) * 0524aski_v1_noreg * 過擬合 * Prodigy-cosine * Train batch size:1 * epoch:10 * step:10x19x10=1900 * **< lora:aski0523-v1-000014:0.5 >,outdoor,blue skin,white face,front** ![00160-2437634936](https://hackmd.io/_uploads/ByXRPKaQ0.png) ![00325-402573085](https://hackmd.io/_uploads/SJqh_tpXR.png) * 0524aski_v2_reg * 太像正規化圖片 * Prodigy-cosine * Train batch size:1 * epoch:10 * step:3800(19x10+70x5) * 0524aski_v3_reg * Prodigy-cosine * Train batch size:1 * epoch:10 * step:3800(19x10+70x1) * 0524aski_v4_reg ![image](https://hackmd.io/_uploads/SkvGssTmA.png) * 0524aski_v5_noreg * 參數同上,差別在正規化 * loss:0.11-0.12 * weight:0.8-1.0 * 場景變化不大 * | Column 1 | Column 2 | Column 3 | | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | | ![01049-1065280175](https://hackmd.io/_uploads/SJwy5ha7C.png) | ![01055-1065280175](https://hackmd.io/_uploads/HJHX5hT70.png) | ![01184-1083401280](https://hackmd.io/_uploads/rkHZ036XA.png) | | ![01199-4136492561](https://hackmd.io/_uploads/HJVTbTT7C.png) | | | * 去背比較-0531v1 * 參數: * optimizer:Lion * LR scheduler:cosine * lr:0.000008 TE:0.0000008 Unet:0.00007 * Rank:32 Alpha:16 * shuffle caption+keep 1 tokens(保留觸發詞優先學習) * 測試 * prompt:aski, In the middle of the garden * seed:1201497407 * 全重在0.7以下泛化性較好 | no rmbg | rmbg | | -------- | -------- | | ![00073-1201497406](https://hackmd.io/_uploads/rk30M384C.png) | ![00118-1201497407](https://hackmd.io/_uploads/SyebmhINR.png) | * 去背比較-0531v2 * 參數: * optimizer:prpdigy * LR scheduler:cosine * lr:0.000008 TE:0.0000008 Unet:0.00007 * Rank:32 Alpha:16 * shuffle caption+keep 1 tokens(保留觸發詞優先學習) * 測試 * prompt:aski, In the middle of the garden * seed:1887019942 | rmbg | white background | | ------------------------------------------------------------- | --- | | ![00251-1887019942](https://hackmd.io/_uploads/ryhnRhUEC.png) | | | 10:0.029 不穩定 | |