全世界的 LoRA 訓練指令碼,聯合起來!
一份由社群貢獻的指南,介紹了一些用於 SD-XL Dreambooth LoRA 微調的 SOTA 實踐
摘要
我們將 Replicate 的 SDXL Cog 訓練器中使用的 Pivotal Tuning 技術與 Kohya 訓練器中使用的 Prodigy 最佳化器(以及一系列其他最佳化)相結合,在訓練用於 SDXL 的 Dreambooth LoRA 上取得了非常好的效果。 在 diffusers 上檢視訓練指令碼🧨。 在 Colab 上嘗試。
如果你想跳過技術討論,你可以使用本部落格中的所有技術,並在 Hugging Face Spaces 上透過簡單的 UI 和精選的引數(你也可以調整)進行訓練。
概述
使用 LoRA dreambooth 微調的 Stable Diffusion XL (SDXL) 模型,僅用少量圖片就能捕捉新概念,取得了令人難以置信的效果,同時保持了 SDXL 的美學和影像質量,並且需要的計算和資源相對較少。點選此處檢視一些出色的 SDXL LoRA。
在本部落格中,我們將回顧一些流行的實踐和技巧,讓你的 LoRA 微調飛速提升,並展示如何立即使用 diffusers 執行或訓練你的模型!
回顧:LoRA (Low-Rank Adaptation) 是一種用於 Stable Diffusion 模型的微調技術,它對影像和提示相交的關鍵交叉注意力層進行微小調整。它能達到與完整微調模型相當的質量,同時速度更快,計算需求更少。要了解更多關於 LoRA 工作原理的資訊,請參閱我們之前的文章 - 使用 LoRA 進行高效的 Stable Diffusion 微調。
目錄
- 技術/技巧
- Pivotal tuning
- 自適應最佳化器
- 推薦實踐 - 文字編碼器學習率、自定義描述、資料集重複、min snr gamma、訓練集建立
- 實驗設定與結果
- 推理
致謝 ❤️:本指南中展示的技術——演算法、訓練指令碼、實驗和探索——的靈感和構建都基於 Nataniel Ruiz 的貢獻:Dreambooth,Rinon Gal 的貢獻:Textual Inversion,Ron Mokady 的貢獻:Pivotal Tuning,Simo Ryu 的貢獻:cog-sdxl,Kohya 的貢獻:sd-scripts,The Last Ben 的貢獻:fast-stable-diffusion。我們對他們以及社群其他成員表示最誠摯的感謝!🙌
Pivotal Tuning
Pivotal Tuning 是一種將 Textual Inversion 與常規擴散模型微調相結合的方法。對於 Dreambooth,通常你需要提供一個稀有詞元作為觸發詞,比如 "an sks dog"。然而,這些詞元通常有其他語義含義,可能會影響你的結果。例如,在社群中很流行的 sks,實際上與一個武器品牌有關。
為了解決這個問題,我們在模型的文字編碼器中插入新的詞元,而不是重用現有的詞元。然後,我們最佳化新插入的詞元嵌入來表示新概念:這就是 Textual Inversion——我們學習透過嵌入空間中的新“詞”來表示概念。一旦我們獲得了代表它的新詞元及其嵌入,我們就可以用這些詞元嵌入來訓練我們的 Dreambooth LoRA,從而兩全其美。
訓練
在我們的新訓練指令碼中,你可以透過提供以下引數來進行文字反演訓練
--train_text_encoder_ti
--train_text_encoder_ti_frac=0.5
--token_abstraction="TOK"
--num_new_tokens_per_abstraction=2
--adam_weight_decay_text_encoder
train_text_encoder_ti
啟用新概念嵌入的訓練train_text_encoder_ti_frac
指定何時停止文字反演(即停止文字嵌入的最佳化,繼續只最佳化 UNet)。在訓練週期的一半進行切換(即前一半訓練週期執行文字反演)是 cog sdxl 示例中的預設值,我們的實驗也驗證了這一點。我們鼓勵大家在這裡進行實驗。token_abstraction
這是指概念識別符號,即在影像描述中用來描述我們希望訓練的概念的詞。你選擇的詞元抽象應該用在你的例項提示、驗證提示或自定義描述中。這裡我們選擇了 TOK,所以,例如,“a photo of a TOK” 可以是例項提示。由於--token_abstraction
是一個佔位符,在訓練前,我們會用新詞元替換TOK
並最佳化它們(意味著在訓練期間,“a photo ofTOK
” 會變成 “a photo of<s0><s1>
”,其中<s0><s1>
是新詞元)。因此,token_abstraction
與例項提示、驗證提示和自定義提示(如果使用)中使用的識別符號相對應也至關重要。num_new_tokens_per_abstraction
為每個token_abstraction
初始化的新詞元數量——即為模型的每個文字編碼器插入和訓練多少個新詞元。預設設定為 2,我們鼓勵你對此進行實驗並分享你的結果!
adam_weight_decay_text_encoder
這用於為文字編碼器引數設定不同的權重衰減值(不同於用於 unet 引數的值)。`
自適應最佳化器

在訓練/微調擴散模型(或任何機器學習模型)時,我們使用最佳化器來引導我們走向收斂的最佳化路徑——即我們選擇的損失函式的最小值點,該點表示模型已經學會了我們試圖教給它的東西。深度學習任務的標準(也是最先進的)選擇是 Adam 和 AdamW 最佳化器。
然而,它們需要使用者大量調整通往收斂之路的超引數(如學習率、權重衰減等)。這可能導致耗時的實驗,結果卻不盡如人意,而且即使你找到了一個理想的學習率,如果在訓練過程中學習率是恆定的,也可能導致收斂問題。一些引數可能需要更頻繁的更新以加速收斂,而其他引數可能需要更小的調整以避免超過最佳值。為了應對這一挑戰,引入了具有自適應學習率的演算法,如 Adafactor 和 Prodigy。這些方法透過根據每個引數過去梯度的動態調整學習率來最佳化演算法在最佳化空間中的尋路過程。
我們選擇更多地關注 Prodigy,因為我們認為它對 Dreambooth LoRA 訓練特別有益!
訓練
--optimizer="prodigy"
當使用 prodigy 時,通常好的做法是設定-
--learning_rate=1.0
對於擴散模型和特別是 LoRA 訓練,被認為有益的其他設定是
--prodigy_safeguard_warmup=True
--prodigy_use_bias_correction=True
--adam_beta1=0.9
# Note these are set to values different than the default:
--adam_beta2=0.99
--adam_weight_decay=0.01
使用 prodigy 訓練時,你還可以調整其他超引數(比如 --prodigy_beta3
、prodigy_decouple
、prodigy_safeguard_warmup
),我們在這篇文章中不會深入探討,但你可以在這裡瞭解更多。
其他最佳實踐
除了 pivotal tuning 和自適應最佳化器,這裡還有一些可以影響你訓練的 LoRA 質量的其他技術,它們都已被整合到新的 diffusers 訓練指令碼中。
文字編碼器和 UNet 的獨立學習率
在最佳化文字編碼器時,社群普遍認為,為其設定不同的學習率(相對於 UNet 的學習率)可以帶來更好的質量結果——特別是為文字編碼器設定一個**更低**的學習率,因為它傾向於*更快*過擬合。 * 在進行 pivotal tuning 時,不同 unet 和文字編碼器學習率的重要性也很明顯——在這種情況下,為文字編碼器設定更高的學習率被認為更好。 * 然而,請注意,當使用 Prodigy(或通常的自適應最佳化器)時,我們為所有訓練的引數設定一個相同的初始學習率,然後讓最佳化器發揮其魔力 ✨
訓練
--train_text_encoder
--learning_rate=1e-4 #unet
--text_encoder_lr=5e-5
--train_text_encoder
啟用完整的文字編碼器訓練(即文字編碼器的權重被完全最佳化,而不是像我們在文字反演(--train_text_encoder_ti
)中看到的那樣只最佳化插入的嵌入)。如果你希望文字編碼器的學習率始終與 --learning_rate
匹配,請設定 --text_encoder_lr=None
。
自定義影像描述
雖然透過在一組都使用相同例項提示(例如,“photo of a

訓練 要使用自定義描述,首先確保你已安裝 datasets 庫,否則可以透過以下方式安裝 -
!pip install datasets
為了載入自定義描述,我們需要我們的訓練集目錄遵循 datasets ImageFolder
的結構,包含影像和每個影像對應的描述。
- 選項 1:你從 Hub 中選擇一個已經包含影像和提示的資料集——例如 LinoyTsaban/3d_icon。現在你所要做的就是在你的訓練引數中指定資料集的名稱和描述列的名稱(在這種情況下是“prompt”)
--dataset_name=LinoyTsaban/3d_icon
--caption_column=prompt
- 選項 2:你希望使用自己的影像併為它們新增描述。在這種情況下,你可以使用這個 colab notebook 使用 BLIP 自動為影像新增描述,或者你可以在元資料檔案中手動建立描述。然後你以同樣的方式繼續,透過指定
--dataset_name
為你的資料夾路徑,以及--caption_column
為描述的列名。
Min-SNR Gamma 加權
訓練擴散模型通常會遇到收斂緩慢的問題,部分原因是不同時間步之間的最佳化方向存在衝突。Hang 等人 發現了一種透過引入簡單的 Min-SNR-gamma 方法來緩解這個問題的方法。該方法根據截斷的信噪比來調整時間步的損失權重,從而有效平衡時間步之間的衝突。* 對於小資料集,Min-SNR 加權策略的效果可能不明顯,但對於大資料集,效果可能會更顯著。* snr vis
在 Weights and Biases 上找到這個專案,它比較了以下設定的損失曲面:snr_gamma 設定為 5.0、1.0 和 None。

訓練
要使用 Min-SNR gamma,請為以下引數設定一個值
--snr_gamma=5.0
預設情況下 --snr_gamma=None
,即不使用。啟用 --snr_gamma
時,推薦值為 5.0。
重複
此引數指的是資料集中每張圖片在訓練集中重複的次數。這與 epochs 不同,因為這裡是先重複圖片,然後再進行洗牌。
訓練
要啟用重複,只需將一個大於 1 的整數值設定為你的重複次數-
--repeats
預設情況下,--repeats=1,即訓練集不重複
訓練集建立
俗話說,“垃圾進,垃圾出”。訓練一個好的 Dreambooth LoRA 只需要少量圖片即可輕鬆完成,但這些圖片的質量對微調後的模型有很大影響。
通常,在對物體/主題進行微調時,我們希望確保訓練集包含以儘可能多的不同方式描繪該物體/主題的影像,以便我們能夠以這些方式進行提示。
例如,如果我的概念是這個紅色揹包:(可在 google/dreambooth 資料集中找到)
我很可能也想提示它被人揹著的樣子,所以有像這樣的例子
特別是在訓練人臉時,你可能需要注意關於資料集的以下幾點
如果可能,總是選擇高解析度、高質量的影像。模糊或低解析度的影像會損害微調過程。
在訓練人臉時,建議訓練集中不要出現其他面孔,因為我們不想對我們正在訓練的人臉產生模糊的概念。
特寫照片對於實現真實感很重要,但好的全身照也應該包含在內,以提高對不同姿勢/構圖的泛化能力。
我們建議避免主體距離較遠的照片,因為這類影像中的大多數畫素與我們希望最佳化的概念無關,模型從中能學到的東西不多。
避免重複的背景/服裝/姿勢——力求在光線、姿勢、背景和麵部表情方面實現多樣性。多樣性越大,LoRA 的靈活性和泛化能力就越強。
先驗保留損失 -
先驗保留損失是一種利用模型自身生成的樣本來幫助其學習如何生成更多樣化影像的方法。因為這些樣本影像與你提供的影像屬於同一類別,它們幫助模型保留其已學到的關於該類別以及如何利用其已知的類別知識來創造新構圖的知識。用於正則化的真實影像 VS 模型生成的影像 在選擇類別影像時,你可以決定使用合成影像(即由擴散模型生成的影像)還是真實影像。支援使用真實影像的觀點是,它們可以提高微調後模型的真實感。另一方面,一些人會認為使用模型生成的影像更好地服務於保留模型對該類別和整體美學的知識的目的。名人相似 - 這更多是關於用於訓練的描述/例項提示的評論。一些微調者在用一個詞元識別符號 + 基礎模型認識的、與他們訓練的人相似的公眾人物進行提示時,發現結果有所改善。
使用先驗保留損失進行訓練
--with_prior_preservation
--class_data_dir
--num_class_images
--class_prompt
--with_prior_preservation
- 啟用先驗保留訓練--class_data_dir
- 包含類別影像的資料夾路徑--num_class_images
- 先驗保留損失所需的最小類別影像數。如果 --class_data_dir
中已有的影像不足,將使用 --class_prompt
取樣額外的影像。
實驗設定與結果
為了探索所描述的方法,我們對不同技術組合在不同目標(風格調整、人臉和物體)上進行了實驗。
為了縮小無限的超引數值範圍,我們使用了一些更流行和常見的配置作為起點,並在此基礎上進行調整。
Huggy Dreambooth LoRA 首先,我們有興趣微調一個 Huggy LoRA,這意味著同時教授一種藝術風格和一個特定角色。為此,我們策劃了一個高質量的 Huggy 吉祥物資料集(使用 Chunte-Lee 的驚人藝術作品),其中包含 31 張帶有自定義描述的影像。

配置
--train_batch_size = 1, 2,3, 4
-repeats = 1,2
-learning_rate = 1.0 (Prodigy), 1e-4 (AdamW)
-text_encoder_lr = 1.0 (Prodigy), 3e-4, 5e-5 (AdamW)
-snr_gamma = None, 5.0
-max_train_steps = 1000, 1500, 1800
-text_encoder_training = regular finetuning, pivotal tuning (textual inversion)
- 全文字編碼器微調 VS Pivotal Tuning - 我們注意到 pivotal tuning 的效果與全文字編碼器訓練相當甚至更好,而且還不需要最佳化 text_encoder 的權重。
- Min SNR Gamma
--pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
--pretrained_vae_model_name_or_path="madebyollin/sdxl-vae-fp16-fix" \
--dataset_name="./huggy_clean" \
--instance_prompt="a TOK emoji"\
--validation_prompt="a TOK emoji dressed as Yoda"\
--caption_column="prompt" \
--mixed_precision="bf16" \
--resolution=1024 \
--train_batch_size=4 \
--repeats=1\
--report_to="wandb"\
--gradient_accumulation_steps=1 \
--gradient_checkpointing \
--learning_rate=1e-4 \
--text_encoder_lr=3e-4 \
--optimizer="adamw"\
--train_text_encoder_ti\
--lr_scheduler="constant" \
--lr_warmup_steps=0 \
--rank=32 \
--max_train_steps=1000 \
--checkpointing_steps=2000 \
--seed="0" \

- AdamW vs Prodigy 最佳化器
- 我們比較了使用
optimizer=prodigy
訓練的版本1,和使用optimizer=adamW
訓練的[版本2](https://wandb.ai/linoy/dreambooth-lora-sd-xl/runs/cws7nfzg? workspace=user-linoy)。兩個版本都使用了 pivotal tuning 進行訓練。 - 在使用
optimizer=prodigy
訓練時,我們將初始學習率設定為 1。對於 adamW,我們使用了 cog-sdxl 中用於 pivotal tuning 的預設學習率(分別為1e-4
和3e-4
用於learning_rate
和text_encoder_lr
),因為我們能夠用這些設定復現出好的結果。 - 所有其他訓練引數和設定都相同。具體來說
- 我們比較了使用
--pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
--pretrained_vae_model_name_or_path="madebyollin/sdxl-vae-fp16-fix" \
--dataset_name="./huggy_clean" \
--instance_prompt="a TOK emoji"\
--validation_prompt="a TOK emoji dressed as Yoda"\
--output_dir="huggy_v11" \
--caption_column="prompt" \
--mixed_precision="bf16" \
--resolution=1024 \
--train_batch_size=4 \
--repeats=1\
--report_to="wandb"\
--gradient_accumulation_steps=1 \
--gradient_checkpointing \
--train_text_encoder_ti\
--lr_scheduler="constant" \
--snr_gamma=5.0 \
--lr_warmup_steps=0 \
--rank=32 \
--max_train_steps=1000 \
--checkpointing_steps=2000 \
--seed="0" \
Y2K 網頁 LoRA 讓我們探索另一個例子,這次是在一個由 27 張 1990 年代和 2000 年代初網頁截圖組成的資料集上進行訓練,這些截圖是我們(懷舊地 🥲)從網際網路上抓取的

配置
–rank = 4,16,32
-optimizer = prodigy, adamW
-repeats = 1,2,3
-learning_rate = 1.0 (Prodigy), 1e-4 (AdamW)
-text_encoder_lr = 1.0 (Prodigy), 3e-4, 5e-5 (AdamW)
-snr_gamma = None, 5.0
-train_batch_size = 1, 2, 3, 4
-max_train_steps = 500, 1000, 1500
-text_encoder_training = regular finetuning, pivotal tuning
這個例子展示了與前一個略有不同的行為。雖然在這兩種情況下我們都使用了大約相同數量的圖片(即約 30 張),但我們注意到,對於這種風格的 LoRA,那些為 Huggy LoRA 帶來良好效果的相同設定,對於網頁風格來說卻導致了過擬合。

對於 v1,我們選擇在訓練 Huggy LoRA 時效果最好的設定作為起點——結果明顯過擬合,所以我們嘗試在接下來的版本中透過調整 --max_train_steps
、--repeats
、--train_batch_size
和 --snr_gamma
來解決這個問題。更具體地說,這些是我們在每個版本之間更改的設定(其餘都保持不變)
引數 | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 |
---|---|---|---|---|---|---|---|---|
max_train_steps |
1500 | 1500 | 1500 | 1000 | 1000 | 1000 | 1000 | 1000 |
repeats |
1 | 1 | 2 | 2 | 1 | 1 | 2 | 1 |
train_batch_size |
4 | 4 | 4 | 4 | 2 | 1 | 1 | 1 |
instance_data_dir |
web_y2k |
從 web_y2k 中隨機抽樣的 14 張圖片 |
web_y2k |
web_y2k |
web_y2k |
web_y2k |
web_y2k |
web_y2k |
snr_gamma |
5.0 | 5.0 | 5.0 | 5.0 | - | - | 5.0 | 5.0 |
我們發現 v4、v5 和 v6 達到了最佳平衡

人臉 LoRA 在訓練人臉影像時,我們的目標是讓 LoRA 生成儘可能真實且與原始人物相似的影像,同時也能很好地泛化到訓練集中未見過的背景和構圖。對於這個用例,我們使用了由 6-10 張 Linoy 的臉部影像組成的不同資料集,包括一組在同一時間拍攝的特寫照片,以及一組在不同場合(改變背景、光線和服裝)拍攝的照片以及全身照。我們發現,在光線/解析度/主體對焦方面,如果影像質量中等到低,那麼經過更好篩選的少量影像比更多影像效果更好——少即是多:挑選你最好的照片來訓練模型!配置
rank = 4,16,32, 64
optimizer = prodigy, adamW
repeats = 1,2,3,4
learning_rate = 1.0 , 1e-4
text_encoder_lr = 1.0, 3e-4
snr_gamma = None, 5.0
num_class_images = 100, 150
max_train_steps = 75 * num_images, 100 * num_images, 120 * num_images
text_encoder_training = regular finetuning, pivotal tuning
先驗保留損失
- 與普遍做法相反,我們發現使用生成的類別影像會降低與主體的相似度和真實感。
- 我們建立了一個真實肖像影像的資料集,使用了從 unsplash 下載的免費授權圖片。你現在也可以在新的訓練空間中自動使用它!
- 在使用真實影像資料集時,我們確實注意到語言漂移減少了(即模型不再將女人/男人這個詞與訓練過的人臉聯絡起來,也可以生成不同的人),同時在提示訓練過的人臉時保持了真實感和整體質量。
排序
- 我們比較了 rank 為 4、16、32 和 64 的 LoRA。我們觀察到,在我們探索的設定中,使用 rank 為 64 的 LoRA 生成的影像往往具有更強的磨皮效果,皮膚紋理看起來不太真實。
- 因此,對於下面詳述的實驗以及 LoRA ease space,我們使用預設的 rank 為 32。
訓練步數
儘管少量高質量的圖片(在我們的例子中是 6 張)效果很好,我們仍然需要確定一個理想的訓練步數。
我們用圖片數量的幾個不同乘數進行了實驗:6 x 75 = 450 步 / 6 x 100 = 600 步 / 6 x 120 = 720 步。
正如你在下面看到的,我們的初步結果顯示,使用 120 倍的乘數可以取得良好的效果(如果資料集足夠多樣化以避免過擬合,最好不要使用相同的拍攝場景)
推理
使用上述技術訓練的模型的推理過程應該與任何訓練器相同,只是當我們進行 pivotal tuning 時,除了你的 LoRA 的
*.safetensors
權重之外,還有一個與模型一起為新詞元訓練的*.safetensors
文字嵌入。為了用這些進行推理,我們在通常載入 LoRA 的方式上增加了 2 個步驟- 從 hub 下載我們訓練好的嵌入(你的嵌入檔名預設設定為
{model_name}_emb.safetensors
)
import torch from huggingface_hub import hf_hub_download from diffusers import DiffusionPipeline from safetensors.torch import load_file pipe = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", ).to("cuda") # download embeddings embedding_path = hf_hub_download(repo_id="LinoyTsaban/web_y2k_lora", filename="web_y2k_emb.safetensors", repo_type="model")
- 將嵌入載入到文字編碼器中
# load embeddings to the text encoders state_dict = load_file(embedding_path) # notice we load the tokens <s0><s1>, as "TOK" as only a place-holder and training was performed using the new initialized tokens - <s0><s1> # load embeddings of text_encoder 1 (CLIP ViT-L/14) pipe.load_textual_inversion(state_dict["clip_l"], token=["<s0>", "<s1>"], text_encoder=pipe.text_encoder, tokenizer=pipe.tokenizer) # load embeddings of text_encoder 2 (CLIP ViT-G/14) pipe.load_textual_inversion(state_dict["clip_g"], token=["<s0>", "<s1>"], text_encoder=pipe.text_encoder_2, tokenizer=pipe.tokenizer_2)
- 載入你的 LoRA 並進行提示!
# normal LoRA loading pipe.load_lora_weights("LinoyTsaban/web_y2k_lora", weight_name="pytorch_lora_weights.safetensors") prompt="a <s0><s1> webpage about an astronaut riding a horse" images = pipe( prompt, cross_attention_kwargs={"scale": 0.8}, ).images # your output image images[0]
Comfy UI / AUTOMATIC1111 推理
新指令碼完全支援 Comfy UI 和 AUTOMATIC1111 格式的文字反演載入!
AUTOMATIC1111 / SD.Next
在 AUTOMATIC1111/SD.Next 中,我們將同時載入一個 LoRA 和一個文字嵌入。- LoRA:除了 diffusers 格式,該指令碼還將訓練一個與 WebUI 相容的 LoRA。它生成為
{your_lora_name}.safetensors
。然後你可以將其包含在你的models/Lora
目錄中。 - 嵌入:嵌入對於 diffusers 和 WebUI 是相同的。你可以從訓練好的模型中下載你的
{lora_name}_emb.safetensors
檔案,並將其包含在你的embeddings
目錄中。
然後你可以透過提示
a y2k_emb webpage about the movie Mean Girls <lora:y2k:0.9>
來執行推理。你可以正常使用y2k_emb
詞元,包括透過(y2k_emb:1.2)
來增加其權重。ComfyUI
在 ComfyUI 中,我們將同時載入一個 LoRA 和一個文字嵌入。- LoRA:除了 diffusers 格式,該指令碼還將訓練一個與 ComfyUI 相容的 LoRA。它生成為
{your_lora_name}.safetensors
。然後你可以將其包含在你的models/Lora
目錄中。然後你將載入 LoRALoader 節點,並將其與你的模型和 CLIP 連線起來。載入 LoRA 的官方指南 - Embedding:diffusers 和 WebUI 的 embedding 是相同的。你可以從訓練好的模型下載你的
{lora_name}_emb.safetensors
檔案,並將其包含在你的models/embeddings
目錄中,然後在你的提示中使用它,例如embedding:y2k_emb
。載入 embedding 的官方指南。
下一步是什麼?
🚀 更多功能即將推出!我們正在努力為我們的高階訓練指令碼增加更多的控制和靈活性。讓我們知道你覺得哪些功能最有用!
🤹 多概念 LoRA 最近,Shah 等人的一篇論文介紹了 ZipLoRA——一種合併獨立訓練的風格和主體 LoRA 的方法,以實現生成任何使用者提供的主體,並採用任何使用者提供的風格。mkshing 實現了一個開源復現,可在此處獲取,它使用了新的和改進的指令碼。
- 從 hub 下載我們訓練好的嵌入(你的嵌入檔名預設設定為