AI 繪畫生成手冊/訓練/DreamBooth
我們將重點關注 Dreambooth 的訓練。所以讓我們繼續吧
Dreambooth 是一種用於定製和個性化文生圖擴散模型的方法。它只需要少量訓練資料就能取得出色效果。Dreambooth 是基於 Imagen 開發的,模型可以匯出為 ckpt 並載入到各種 UI 中。然而,Imagen 模型和預訓練權重不可用。因此,Dreambooth 最初並不適合穩定擴散。
後來,擴散器實現了 Dreambooth 功能,並將其完全適應於穩定擴散。Dreambooth 很容易過擬合。為了獲得高質量的影像,我們必須找到訓練步驟和學習率之間的“最佳點”。建議使用較低的學習率,並逐漸增加訓練步驟,直到達到滿意的狀態。
下載 Dreambooth 擴充套件非常容易。首先,你需要轉到“擴充套件”選項卡,點選下面的“可用”選項卡。
之後,搜尋名為:sd_dreambooth_extension 的擴充套件,並點選“安裝”按鈕來安裝它。
點選“已安裝”選項卡,然後點選“應用並重啟 UI”。 。為了更好的安裝,關閉 webui.bat 並重新開啟以確保正確安裝。
注意:此處的說明基於開發者在 rev 926ae20 上的最新更新。
(1) 點選 Dreambooth 選項卡。
(2) 為了從頭開始建立新模型,在模型名稱中輸入模型的名稱,並在源檢查點中選擇你已經安裝的模型列表。確保選中了512x 模型。
(3) 點選建立模型
(4) 等待大約 1 分鐘,讓 WebUI 生成模板資料夾
你可以點選效能(WIP)來為 PC 上的 Dreambooth 訓練設定推薦設定
在通用中有一些複選框,即
(i) 使用 LORA - 建議用於 8GB ~12GB VRAM 的 PC 訓練
(ii) 僅訓練 imagic - 僅使用單個影像進行訓練
"每個影像的訓練步驟(週期)"
在“間隔”部分,“每個影像的訓練步驟(週期)”指定每個影像的訓練步驟數量。
對於訓練步驟,嘗試訓練 175 步 (用於訓練物體/風格)。
注意:“概念”頁面上的“訓練人物”和“訓練物體/風格”部分有不同的最佳值。它越高,訓練時間越長。
例如,如果上傳了三張影像,並且你想要總共訓練 1500 步,那麼每張影像將訓練 500 步。
"每個週期後暫停" 指定每個週期之間有多少個間隔,並設定為 0。
"每個週期之間暫停的時間(秒)" 與之前的設定型別相同,也設定為 0。
"儲存模型頻率" 指示多久儲存一次檢查點。每次儲存大約 4-5 GB,所以如果磁碟空間有限,可以設定更高的值。
"儲存預覽頻率(週期)" 指示每個週期多久預覽一次影像。它通常設定為 5,可能會影響訓練速度。
“批次大小”用於加速訓練時間,但會增加 GPU 記憶體使用量。
“梯度累積步驟”是在計算和反向傳播梯度之前的步驟數量。確保用於訓練的影像數量可以被這兩個值的乘積整除。例如,如果兩個值都設定為 2,則總體速度提高 4 倍,重要的是要確保用於訓練的影像數量可以被 4 整除。
"將梯度設定為零時為 None" 使用更多 GPU 記憶體。
"梯度檢查點" 減少 GPU 記憶體使用量。
學習率是一個值,通常介於 0.0 到 1.0 之間,在神經網路訓練過程中使用。模型的目標是將損失最小化,損失表示輸入的預測輸出與該輸入的真實標籤之間的差異。建議使用0.000001 到0.00000175 之間的任何值,以獲得良好的結果。根據模型的複雜性,更簡單物體的學習率可能只需要 0.001
然而,較高的數字可能會生成與你預期(萬用字元)不完全相同的模型輸出,而較低的數字意味著模型輸出可能會與你的模型看起來非常相似(過擬合)。
"學習率排程器"
這些排程器經過測試並確認適用於“訓練物體/風格”,並解釋如下
帶預熱常數:想象一下,你正在嘗試爬一座山,但你的腿很僵硬。你需要先熱身,做一些伸展運動和輕微的鍛鍊,讓血液流動起來,然後再開始遠足。
類似地,使用這種學習率排程器,我們從較低的學習率開始,並在一定數量的預熱步驟中逐漸增加它,以便模型在開始增加學習率之前能夠逐漸適應訓練資料。
帶預熱的線性:想象一下與帶預熱的常數相同的情況,你需要在爬山之前熱身。熱身完畢後,你以緩慢的速度開始,並隨著你越來越接近山頂而逐漸提高速度。
這類似於帶預熱的線性學習率排程器的工作原理。我們從較低的學習率開始,並在一定數量的預熱步驟中線性地逐漸增加它,然後在接下來的訓練步驟中保持不變。
多項式學習率:想象一下,你正在一個天氣變化無常的地區爬山。你想要調整你的速度,以便能夠安全地導航遠足,避免從山上掉下來。如果你在雨天/強風中走得太快,你可能會失去控制而掉下去,而如果你走得太慢,你將無法按時到達目的地。
這類似於多項式學習率排程器的工作原理。我們從較高的學習率開始,並使用多項式函式隨著時間的推移逐漸降低它。多項式的次數決定了學習率下降的速度,我們可以調整它以找到訓練模型的最佳速度。
使用 EMA:此選項通常不選擇。EMA(指數移動平均)用於梯度下降,對微調並不重要。它使用指數移動平均權重來避免在最終迭代中過度擬合。它可以提高模型質量,但在訓練期間會使用更多 VRAM。
使用 8 位 Adam:選擇此選項以使用 Bitsandbytes 中的 8 位 Adam。它減少了記憶體使用。在混合精度中選擇 fp16 或 bf16,但建議選擇 bf16 以獲得更好的效能。
記憶體注意力: 選擇 Xformers(如果使用 Torch 1.x)以加快訓練過程。Xformers 和 Flash_attention(一種可以減少記憶體使用的注意力機制)之間的記憶體使用差別不大。預設值是最快的,但會使用更多 VRAM,Xformers 的速度和 VRAM 使用量居中,而 Flash_attention 最慢,但使用最少的 VRAM。|
附註:請注意,有未經證實的傳言稱 Torch 2.0 消除了對記憶體注意力的需求。
快取潛變數:此選項就像擁有一個儲存空間,模型可以在其中儲存訓練過程中處理資料時獲得的中間結果。這樣,當它需要再次處理相同的資料時,它可以使用快取的結果,而不是從頭開始重新計算所有內容。這可以加快訓練過程,但它也需要更多 VRAM 來儲存快取的結果。
訓練 U-NET:啟用此選項以允許 U-NET 網路與擴散模型同時訓練,以提高影像生成的質量。U-NET 網路經過訓練,可以接收擴散模型的輸出,並對其進行進一步細化以生成更高質量的影像。此選項*可能*會提高生成影像的整體質量(具體情況具體分析),但它可能需要額外的 GPU 記憶體並增加訓練時間。
設定文字編碼器訓練比例:人臉影像的最佳值為 0.7,風格影像的最佳值為 0.2。如果 GPU 記憶體不足,請將其設定為 0。通常,訓練 U-Net 可能產生更好的結果。
偏移噪聲: 如果將值設定為 0,則會停用該效果,模型將不會學習調整亮度和對比度。如果啟用,Dreambooth 將在輸入影像的亮度和對比度中新增一些隨機噪聲,這使模型能夠學習調整這些引數,以建立更逼真和更具變化的輸出影像。正值將增加生成影像的亮度/對比度,而負值將降低亮度/對比度。但是,強烈建議使用在不同光照條件下拍攝的輸入影像來模擬逼真的影像。
凍結 CLIP 歸一化層: 啟用此選項時,它可能有助於防止過度擬合,即模型變得過於專門化以適應訓練資料,並且不能很好地推廣到新資料。透過凍結這些層,模型被迫學習輸入資料的更有意義和更健壯的表示,這可以提高其將新資料推廣到新資料的能力。它不會增加 VRAM 使用量,但它可能會增加訓練時間,因為模型在訓練期間無法從歸一化層中學習。
裁剪跳過: 如果將裁剪跳過設定為較高的值(> 1),則模型訓練實際上是在跳過一定數量的訓練層,從而基於對輸入文字的更有限的理解來生成影像,這會導致輸出不連貫且不相關。
(1) 對於影像生成庫,選擇Diffuser
(2) 對於影像生成排程器,首先嚐試使用PNDM或LMSDISCRETE排程器,以獲得更好的結果。如果訓練非常快地過度擬合,當模型過度擬合時,DDIM通常比 PNDM 和LMSDISCRETE好得多。
- 高批次大小
- 將梯度設定為零時設定為無
- 使用 EMA
- 全精度
- 預設記憶體注意力
- 快取潛變數
- 文字編碼器
- 低批次大小
- 梯度檢查點
- fp16/bf16 精度
- xformers/flash_attention
- 文字編碼器訓練步長比例 0(無文字編碼器)