Kohya_ssを使用したSDXLキャラクターLoRA学習の手順(WD14 Tagger活用)

電脳備忘録

本記事のソースコードの利用によって生じた損害について、当方は一切の責任を負いません。ご自身の判断と責任のもとで参照・ご利用ください。

SDXL(Stable Diffusion XL)において特定のキャラクター(アニメ調、1024x1024)を学習させるための手順と設定値を記録します。

汎用LLM(ChatGPT等)が提示する学習設定は、SD1.5時代の古い情報や幻覚(ハルシネーション)が混入しているケースが多く、実用に耐えないことが判明しました。時間を浪費しないため、現時点での安定動作環境と設定をここに備忘録として残しておきます。

今回は検証モデルとして、私が個人的に愛好してやまない『アイドルマスターシャイニーカラーズ』の杜野凛世ちゃんを選定しました。 なお、学習用データセットの作成にあたっては、ゲーム画面のスクリーンショットをソースとして使用しています。ただし、そのままではノイズが含まれるため、事前にPhotoshopを用いて背景などを徹底的に除去し、純粋なキャラクター情報のみを抽出する前処理を施しています。

使用ツールはKohya_ss GUI、およびタグ付け用のWD14 Taggerとします。

1. 教師画像のタグ付け(WD14 Tagger)

汎用LLMに画像認識とタグ生成を行わせると精度に欠けるため、画像分類に特化したWD14 Taggerを使用します。Kohya_ss内蔵機能よりも、WebUI(A1111/Forge)の拡張機能として利用する方が挙動が安定しているため、そちらを採用します。

導入手順(WebUI版)

WebUIの [Extensions] タブから [Install from URL] を選択し、リポジトリURL(https://github.com/toriato/stable-diffusion-webui-wd14-tagger)を入力してインストール、再起動を行います。

実行設定

  • >タブ: Tagger > Batch from directory
  • Input directory: 教師画像が格納されたフォルダパス
  • Interrogator: wd-v1-4-convnext-tagger-v2(精度重視のためこれを選択)
  • Threshold: 0.35

実行後、画像ファイルと同階層にテキストファイル(.txt)が生成されます。

2. タグ編集とデータセットの定義

生成されたテキストファイルを編集し、SDXLへの学習内容を最適化します。

トリガーワードの挿入

テキストファイルの先頭に、そのキャラクターを呼び出すためのユニークなトリガーワードを追加します。SDXLは先頭の単語を重要視するため、この配置は必須です。既存の英単語と競合しない文字列(例: morino rinze, oh-char 等)を設定します。

タグの選別方針

  • 服装タグ(school uniform等): 基本的に残します。これにより「衣装」と「素体」が分離され、学習後の着せ替えが容易になります。
  • 固有色タグ(blue hair等): 基本的に残します。

編集例: morino rinze, 1girl, solo, black hair, red eyes, school uniform...

3. 学習用フォルダ構成(Kohyaルール)

Kohya_ssの仕様に基づき、フォルダ名で学習回数(繰り返し数)を制御します。以下の構成を厳守します。

  • 親フォルダ(任意名)
    • image
      • 15_morino rinze(繰り返し数_トリガーワード)※ここに画像(.png)とタグファイル(.txt)を格納
    • log(空フォルダ)
    • model(空フォルダ)

繰り返し数(Repeats)の設定根拠

フォルダ名の先頭数字「15」は繰り返し数を指します。 画像枚数 × 繰り返し数 = 1エポックあたりのステップ数 となります。 例えば画像8枚の場合、8 × 15 = 120ステップ/epoch。これを15エポック回すと合計1800ステップとなり、SDXL学習における適正範囲に収まります。

4. Kohya_ss GUI 設定値

Kohya_ssを起動し、[LoRA] > [Training] タブにて画像フォルダを指定した後、[Parameters] を以下のように設定します。汎用LLMが誤りやすい学習率(Learning Rate)の設定には特に注意を要します。

基本設定

  • Train batch size: 1(VRAM 12GB以下の環境、または画質優先の場合は1で固定)
  • Epoch: 15
  • Save every N epochs: 1
  • Mixed precision / Save precision: bf16(RTX30/40系の場合)または fp16

学習率(Learning Rate)

SD1.5とは桁が異なるため、以下の低数値を適用します。

  • Learning rate: 0.0001 (1e-4)
  • Text Encoder LR: 0.00005 (5e-5)
  • U-Net LR: 0.0001 (1e-4)
  • LR Scheduler: constant_with_warmup
  • LR warmup (%): 5

オプティマイザ & ネットワーク

  • Optimizer: Adafactor
  • Optimizer extra arguments: scale_parameter=False relative_step=False warmup_init=False
  • Network Rank (Dimension): 32
  • Network Alpha: 16(Rankの半値設定により安定性が向上します)

高度な設定 (Advanced Configuration)

  • Max resolution: 1024,1024
  • Bucket_no_upscale: 有効にする
  • Cache latents: 有効にする
  • Cache latents to disk: 有効にする

※GUIのバージョンにより Bucket_no_upscale のチェックボックスが見当たらない場合は、[Additional parameters] 欄に --bucket_no_upscale と記述します。

5. 生成モデルの格納

学習完了後、生成された .safetensors ファイルをWebUIの models/Lora フォルダへ移動させれば、画像生成の準備は完了です。

以上、SDXLキャラクターLoRA作成における現時点での手順となります。

次回は、同じく私が個人的に愛好してやまない、鷺沢文香さんを対象とした学習モデルの作成を予定しています。

0%