[Krea2] Lora Trainer

Krea2 Tuebo with Lora

寫在最前面,Krea2 Turbo 目前應該是可以當作是 ZIT 的取代方案。整體畫面表現、肢體、材質等等都比較好,我目前也針對 Krea2 做了一系列的 Lora 訓練,整體表現令人驚艷。

當然,缺點是多樣性不足,不過這個可以靠 Lora 來稍微緩解。


訓練器

目前來說,在 Ai-Toolkit, Musubi-tuner, OneTrainer 都對於 Krea2 的 Lora 訓練有完整的支援。我並沒有特別推薦誰,你可以挑你習慣的來使用。

然後,我大量借鑑了 Musubi-tuner 的 Krea2 的部分,自己做了一個 Krea2-trainer 來做訓練。


TQD

我參考了訓練 群友 @gesen2gee 提供的論文 Beyond the Golden Data: Resolving the Motion-Vision Quality Dilemma via Timestep Selective Training,然後請 AI 幫我整理之後,製作了一個比較特殊的 Timesteps 的訓練方式。這個方法可以避免因為訓練資料中的品質差異,而造成訓練結果不甚理想的狀況。

這篇論文主要是給影片使用的,但我把概念抽出來,在 diffusion/flow matching 的去噪過程中:

  • 高噪聲 timestep:模型先建立大尺度結構、構圖與運動。
  • 低噪聲 timestep:模型再補局部紋理、細節、材質與畫面品質。

所以:

  • 高 MQ、低 VQ 的影片,拿來教「運動」仍有價值,應偏向高噪聲 timestep。
  • 高 VQ、低 MQ 的影片,拿來教「外觀與細節」仍有價值,應偏向低噪聲 timestep。

它用 degraded sample 的 gradient similarity 支撐這件事:

  • 對畫面做 blur、compression、noise 後,在高 timestep 與原始高品質影片的 gradient 更相近。
  • 對影片做 frame shuffle、破壞動態後,在低 timestep 與原始影片的 gradient 更相近。

那麼 TQD 的作法是:

每支影片先離線打兩個分數:

vq_norm ∈ [0, 1]
mq_norm ∈ [0, 1]

然後做兩件事。

A. Sample-level weighting:壞到兩邊都差的資料少用

保留機率:

[
p{{sample}}=max({vq}{norm}, {mq}{norm})
]

意思是,一支影片只要「至少有一項可取」,就保留其價值。兩邊都爛,才大幅降低採樣率。

B. Timestep-level routing:讓資料去適合它的 timestep

採樣中心:

[
mu = 0.5 + 0.5({mq}{norm}-{vq}_{norm})
]
  • MQ 相對高於 VQ,(mu) 往大 timestep 移。
  • VQ 相對高於 MQ,(mu) 往小 timestep 移。

再用 Beta distribution 決定抽樣尖銳程度。兩種品質差距越大,timestep routing 越集中,不讓資料在不擅長的學習階段浪費梯度。

核心概念就是

不要問「哪些資料該丟掉」,而要問「這筆資料在何時最有用」。

把「資料品質的不同面向」映射到「生成過程的不同階段」。

所以,我的 Kera2-trainer 把 TQD 的這個部分做了一些移植,

structure_score:主體、姿勢、構圖、物件關係是否完整可學。對應 TQD 的「高噪聲階段學全局結構」。
detail_score:清晰度、材質、五官、服裝紋理、局部品質。對應「低噪聲階段學細節」。

也就是做成 Structure–Detail TQD。核心仍完全相同:

[ {structure 高} -> t {偏高噪聲} ]
[ {detail 高} -> t {偏低噪聲} ]

訓練中整體流程會是這樣:

structure/detail 分數
        ↓
決定 Beta 分布的方向與集中程度
        ↓
Beta CDF sample
        ↓
inverse-normal
        ↓
sigmoid
        ↓
Krea2 resolution shift
        ↓
最終 training timestep

TQD 訓練資料怎麼準備?

首先必須要將你的訓練資料集,製作一個 jsonl 的檔案,用來儲存每個訓練資料的評分。他大概會長這樣:

{"cache_file":"asianMix_0001_1024x1536_krea2.safetensors","structure_score":0.91,"detail_score":0.84}
{"cache_file":"asianMix_0002_1024x1536_krea2.safetensors","structure_score":0.88,"detail_score":0.42}
{"cache_file":"asianMix_0003_1024x1536_krea2.safetensors","structure_score":0.35,"detail_score":0.93}
{"cache_file":"asianMix_0004_1024x1536_krea2.safetensors","structure_score":0.21,"detail_score":0.26}
評分 要看什麼
structure_score 姿勢完整性、身體比例、手部、鏡頭構圖、主體辨識、場景關係
detail_score 臉部、髮絲、衣料、配件、曝光、銳利度、壓縮瑕疵、局部可辨性

舉例來說:

  • 臉、姿勢、構圖非常好,但衣料有壓縮或微糊:structure=0.9, detail=0.45
  • 近距離材質、睫毛、服裝細節漂亮,但構圖死、身體被切壞:structure=0.4, detail=0.95
  • 手壞、臉糊、構圖也亂:structure=0.2, detail=0.2

然後在訓練資料集設定檔中加入:

[[datasets]]
resolution = [1024, 1024]
batch_size = 2
enable_bucket = true
caption_extension = ".txt"
image_directory = "/path/to/images"
cache_directory = "/path/to/cache"

tqd_score_file = "/path/to/your_tqd_scores.jsonl"

訓練結果

我做了 1,440 張圖的評分,並跑了 5 Epochs 的 Lora 訓練,目前已經公開在 [Krea2 Turbo] AsianMix Lora,有興趣的人可以去試試看。

具體的一些實驗通用結論,無論是否使用 TQD:

  1. 圖片提詞使用自然語言,字數長短會決定畫面特徵鎖定強度,不建議單詞訓練,約 70 - 500 字都可以。
  2. 文字描述越短,畫面鎖定會越強,反之就會變弱。
  3. 盡可能準備多樣性高的資料集,例如大頭照,表情盡量不同,不然特徵會明顯鎖定(做不出表情)。
  4. 如果使用長文字,依照慣例,越重要的放越前面。
  5. 盡可能使用 1024 (或以上)的尺寸訓練。
  6. 設備如果允許,可以使用 Batch Size >= 2 以上來訓練,效果不錯。

如果你使用了 TQD:

  1. 如果你的圖片不想手動評分,那麼就不要用,因為 VLM 評分可能會造成反效果。
  2. 如果你真的要使用 VLM 來評分,請先:
    • 將圖片先做一個大致上的分類,例如:近照、遠照、畫質好、畫質不好等等。
    • 每一種類別必須告訴 VLM 他的 structure, detail 應該落在哪些區間。
  3. 你可以準備一批中性資料,structure=0.5, detail=0.5 可以用來均衡過度偏向高或低噪聲的資料。

目前 Krea2 我個人感覺是美學上比 ZIT 好的模型,也是目前我生成的主力。而 TQD 的訓練方式可以再填入更多想要表達的東西,整體上來說比起一般的訓練,能更強化(或弱化)某些表現。

Krea2 Turbo with Lora

小結

如果用 GB10 來跑訓練器,速度大概 7.6 s/it,大概是我還可以接受的範圍(訓練 Batch Size 1,解析度 1024x1024)。當然如果有人想送我一張 Pro6000 我也是可以心存感激的收下就是(有夢最美)。

Hina Chen
偏執與強迫症的患者,算不上是無可救藥,只是我已經遇上我的良醫了。
Taipei