前言
自從上次我在
這篇跟
這篇文章介紹了如何訓練LoRA之後,線上訓練LoRA的Colab頁面又改版了,改變了一些設置,引進了一些模組,所以某些設定不再適用。加上我找到了該Colab的作者寫的,專門討論如何使用他的工具來訓練LoRA的頁面,以及在各個論壇討論如何精確訓練LoRA的文章,我決定把我近來訓練的方法更新在新文章中。讓大家有個參考。
問題
之前使用的方法,的確可以快速產出你要的LoRA,而且不需要任何高強的顯卡,但是這個方法有一些問題:
- 將訓練圖的提示詞抓出來,依舊需要用本機的Automatic1111來做,而有些時候Automatic1111會出問題,怎麼抓提示詞都是錯的,尤其是deepbooru,我的本機沒成功過。迫使我只能用CLIP來做,在動漫類角色LoRA上問題很大。
- 常常訓練出過擬合(Overfitting)的LoRA,這種LoRA不只是影響你的角色,它還會影響圖片的整體畫風,迫使你必須將權重放得很低,否則只要一高起來,不管你使用什麼模型,出來的圖都會扭曲,甚至破圖。而你將權重放得過低,產生出來的角色又會變得不像,使得你在出圖時必須反覆調整權重,找出能生出相像的角色,但是又不會嚴重影響畫風的設定,有如在走鋼索。
- 不知道怎麼檢定產生的LoRA到底品質好不好,如果前前後後產生了好幾個LoRA,要怎樣決定哪個版本更好,在不同模型下要使用什麼權重。
這幾個問題,基本上訓練LoRA的Colab的作者都有在他的專案頁面上講到:
本篇與下一篇就要來討論我如何依照他給的解釋,整合進我自己的人物類LoRA訓練流程。
首先,第一個問題是從訓練圖抓取提示詞的問題,除了使用Automatic1111來抓詞,並且自己進去文字檔一個一個修改之外,holostrawberry大大給了我們一個專門的Colab頁面來處理這個問題,本文稍後會使用到。
第二個問題,過擬合通常有兩個因素,一個是訓練回數太多太久,使得LoRA的權重產生嚴重偏見,讓它可以在訓練時取得良好分數,另一個原因是因為我們沒有提供規範圖(regulation images)。無法在LoRA訓練想取巧時教訓它。
至於什麼是規範圖,我請ChatGPT來回答他的定義:
在圖像生成式AI的訓練中,regulation images的功能是將一些無關的圖像加入到訓練數據中,以增加模型的泛化能力,防止過度擬合。這些無關圖像可能是與訓練數據中的圖像非常相似,但實際上不屬於目標類別的圖像,或是隨機產生的噪聲圖像。
加入regulation images會對模型的品質產生積極影響。如果模型只在訓練數據中學習,那麼它很可能會過度擬合訓練數據,導致在新數據上的表現不佳。然而,當使用regulation images時,模型被迫學習一些與目標類別不完全相關的特徵,這可以幫助模型更好地泛化到新數據上,並且可以減少過度擬合的風險。因此,regulation images可以提高模型的品質和穩健性。
目前看不懂沒關係,我們馬上就要來自己生產規範圖,讓我們從範例中搞懂這是什麼東西。
上傳訓練圖
在這一版的流程中,我們一樣要準備並裁切訓練用的素材圖,請依照我在
本次我以訓練一個猛男戰士為目標,準備了他的素材圖:
並且幫他指名了啟動詞XingBar。原本我使用的詞是Xing,但我發現這個詞已經被Stable Diffusion使用了,是一個東方女子的提示詞,所以若是沒有改名,會在使用時衝突,出現的人物會變來變去,甚至出現陰陽人。
所以在取名啟動詞之前,最好用https://lexica.art/ 等網站查詢一下自己的啟動詞會不會叫出一個固定的角色。
素材圖準備好之後,我們不用在這時提煉提示詞,請直接將所有的素材圖上傳到Google雲端硬碟上,由於Colab的作者更新了設定,我們要將它放置在新的路徑格式上:
我的雲端硬碟 -> Loras -> <專案名稱> -> dataset
以我這次的範例,我的目錄位置是:
我的雲端硬碟 -> Loras -> XingBar30 -> dataset
接下來,我們要來生產規範圖。
產生與上傳規範圖
我問了ChatGPT關於規範圖的挑選標準,我覺得很準確:
選擇好的regulation images是非常重要的,因為這將直接影響模型訓練的品質。以下是一些挑選好的regulation images的方法:
1. 選擇高質量的圖像:確保你選擇的圖像是高質量的,可以清晰地顯示出你想要的特徵。
2. 多樣性:選擇多樣的圖像,包括不同的風格、色彩和紋理,這有助於提高生成模型的多樣性。
3. 詳細:選擇能夠呈現你想要特定特徵的圖像。例如,如果你想訓練一個生成寫實風格的模型,那麼你需要選擇那些能夠呈現真實細節的圖像。
4. 數量:通常情況下,regulation images的數量越多越好,因為這能夠提高訓練的品質和多樣性。但是,選擇過多的圖像可能會增加訓練的時間和計算成本。
也就是說,規範圖需要的是一大批跟素材圖同類別,但是又不會太相似,也不會太過不相似的圖。
所謂的同類別,例如我的目標是猛男戰士,那同類別就會是男性,男戰士,男野蠻人這種東西。而我上一個訓練的LoRA是銀髮年輕女性,同類別的圖就是女性,女孩等類別。
但我們在挑選規範圖時盡量避免列入太過相似的圖,免得訓練時讓AI困惑。同時也要避免太過不相像,例如你的素材圖是動漫系男性戰士,但你的規範圖是畢卡索或梵谷畫中的男性,甚至是男性玩具士兵的圖片,這樣可能讓整個訓練過程的Loss數值降不下來。或是讓AI將你的啟動詞歸類到不要的類別裡。
產生規範圖的方法有兩種,第一種就是Google搜尋該類別的圖片,找個100張,再裁切成512x512的圖片,然後上傳到Google雲端硬碟。第二種則是自行使用Automatic1111的X/Y/Z plot來大批量生產圖片:
在這邊我以生產男性圖片為例,使用這樣的設置:
然後產生大約150張圖片,挑選其中100張符合條件的圖片上傳雲端硬碟,放在這樣的資料夾下:
我的雲端硬碟 -> Loras -> Man -> dataset
在Google雲端硬碟上,會看起來像這樣:
產生提示詞
接下來,我們就要使用Colab來幫助我們快速產生訓練與規範圖的提示詞。請打開這個Colab頁面:
這個頁面提供了從頭產生素材圖輯的整個流程,但我們已經有素材圖了,所以只需要用到它的提示詞產生功能。
規範圖的提示詞
首先我們從簡單的規範圖提示詞開始,在第一步的project_name填入我們的規範圖資料夾Man,而folder_structure則保持不變,使用作者提供的新架構:
按下執行後,它會要求存取你的Google雲端硬碟,授權之後接著跳到第四步(Tag your images)。
在這邊什麼都不用改,直接執行即可,程式會使用Waifu Diffusion的文字圖像對應模型,替你的圖產生提示詞。
只要確認程式找到圖,並且產生文件檔之後,我們就來處理比較複雜的素材圖的提示詞。
素材圖的提示詞
一樣打開同一份Colab文件,這次在第一步project_name填入放置素材圖的專案名稱XingBar30,然後執行。一樣跳到第四步,直接執行,確認所有的素材圖都有相對應的文件檔產生,而且Colab會給你一個提示詞與提示詞出現次數的分佈名單:
之後需要到第五步(Curate your tags)置換你的啟動詞與要融合的詞。
這個步驟,官方的說明是:
編輯你的提示詞:這個步驟對於動畫提示詞來說是可選的,但非常有用。在這裡,你可以為你的 LoRA定義啟動詞。如果你正在訓練風格,你可能不想要任何啟動詞,這樣 LoRA就會一直生效。如果你正在訓練角色,我個人傾向於刪除(修剪)與角色內在特徵有關的常見提示詞,例如身體特徵和頭髮/眼睛顏色。這會導致它們被啟動詞吸收。
在我們的例子中,啟動詞global_activation_tag是XingBar,而remove_tags則是你在第四步的提示詞分佈名單上看到的,想要融合進角色的提示詞,對我的角色而言,就是跟男性、眼睛顏色、髮型、肌肉等相關的提示詞:
brown eyes, long hair, male focus, mature male, muscular, blonde hair, pectorals, muscular male, manly, large pectorals
其他欄位保持不變,按下執行之後,Colab會將每個文件檔的開頭放進啟動詞,並且將remove_tags列進去的提示詞都移除掉。這樣我們就完成所有的準備步驟了!
驗證提示詞
在Colab頁面最下端的Extras區域,有一個工具Analyze Tags可以檢查剩下的提示詞:
確認了提示詞已經成功整理乾淨,我們就可以在下一篇來訓練,並驗證LoRA的品質!
參照
LoRA目錄: