本記事のソースコードの利用によって生じた損害について、当方は一切の責任を負いません。ご自身の判断と責任のもとで参照・ご利用ください。
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)を入力してインストール、再起動を行います。
実行設定
1. タブの場所を開く
Kohya_ss GUIを起動し、上部メニューから以下の順に進んでください。
Utilities タブをクリック。
その下の WD14 Captioning (または Captioning -> WD14 Tagger) タブを選択。
2. 必須設定項目(ここだけ設定すればOK)
画面にはたくさん項目がありますが、触るべきは以下の4箇所だけです。
- A. Image folder to caption(画像フォルダ)
- 学習させたい画像が入っているフォルダ(例: .../img/20_mychara)を指定します。
- ※親フォルダではなく、画像が直接入っているフォルダを指定してください。
- B. Output folder to save caption(保存先フォルダ)
- 空欄でOKです。
- 空欄にしておくと、画像と同じフォルダに同名のテキストファイル(.txt)が生成されます。管理しやすいのでこれが推奨です。
- C. Model(使用する推論モデル)
- ここが画質に直結します。
- 推奨: wd-v1-4-moat-tagger-v2
- または mld-caformer (最近の主流で高性能)
- 理由: これらは認識精度が高く、PonyやIllustriousが得意とするDanbooruタグとの相性が抜群です。
- D. Caption Extension(拡張子)
- .txt と入力されていることを確認してください。
- ※もし .caption になっていたら .txt に書き換えてください。
3. オプション設定(こだわり派向け)
- 基本はそのままで良いですが、知っておくと便利な設定です。
- General threshold (一般タグの閾値): 0.35 (デフォルト)
- この数値を上げると「確信があるものだけ」タグ付けされ、下げると「それっぽいもの」もタグ付けされます。基本はいじらなくてOKです。
- Undesired tags (除外したいタグ):
- ここに入れたタグは生成されません。デフォルトでは black background などが入っていることが多いですが、そのままで大丈夫です。
- Prefix to add to WD14 caption:
- ここにトリガーワード(例: my_original_chara, 1girl, solo)を入れておくと、全ファイルの先頭に自動で追加されます。
- 便利技: 後で手作業で入れるのが面倒なら、ここで my_chimera_name を入れておくと楽です。
4. 実行
画面右下の 「Caption images」 ボタンを押します。 黒い画面(コンソール)で進捗が走り、100% になれば完了です。
画像フォルダを見てみてください。画像と同じ名前の .txt ファイルが大量にできているはずです。
2. タグ編集とデータセットの定義
生成されたテキストファイルを編集し、Pony Diffusion V6 XLへの学習内容を最適化します。
トリガーワードの挿入
テキストファイルの先頭に、そのキャラクターを呼び出すためのユニークなトリガーワードを追加します。モデルは先頭の単語を重要視するため、この配置は必須です。既存の英単語と競合しない文字列(例: 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/ ← 「繰り返し数_トリガーワード」
│ ├── image001.png
│ ├── image001.txt ← タグファイル
│ ├── image002.png
│ ├── image002.txt
│ └── ...
├── log/(空フォルダ)
├── model/
│ └── ponyDiffusionV6XL.safetensors ← ベースモデル
└── output/(空フォルダ)
繰り返し数(Repeats)の設定根拠
フォルダ名の先頭数字「15」は繰り返し数を指します。
計算式: 画像枚数 × 繰り返し数 = 1エポックあたりのステップ数
例えば画像8枚の場合、8 × 15 = 120ステップ/epoch。これを15エポック回すと合計1800ステップとなり、学習における適正範囲に収まります。
4. Kohya_ss GUIでの学習手順
4-1. Kohya_ss GUIを起動
cd kohya_ss
./gui.sh # Linux/Mac
gui.bat # Windows
ブラウザで http://127.0.0.1:7860 を開きます。
4-2. LoRAタブを選択
上部メニューから 「LoRA」 タブをクリックします。
4-3. 各タブの設定
【Source model】タブ
| 項目 | 設定値 |
|---|---|
| Pretrained model name or path | path/to/model/ponyDiffusionV6XL.safetensors |
| Model Quick Pick | SDXL |
| Save trained model as | safetensors |
【Folders】タブ
| 項目 | 設定値 |
|---|---|
| Image folder | path/to/training/image |
| Output folder | path/to/training/output |
| Logging folder | path/to/training/log |
| Model output name | 任意の名前(例:morino_rinze_pony) |
【Parameters】タブ - 基本設定
| 項目 | 設定値 | 備考 |
|---|---|---|
| Train batch size | 1 | VRAM 12GB以下、または画質優先の場合は1固定 |
| Epoch | 15 | |
| Max train steps | (空欄) | Epochで制御するため不要 |
| Save every N epochs | 1 | |
| Caption Extension | .txt | |
| Mixed precision | bf16 | RTX30/40系の場合。非対応ならfp16 |
| Save precision | bf16 | Mixed precisionと同じ値に |
| Cache latents | ON | |
| Cache latents to disk | ON | VRAM節約に有効 |
【Parameters】タブ - 学習率(Learning Rate)
SD1.5とは桁が異なるため、以下の低数値を適用します。
| 項目 | 設定値 | 備考 |
|---|---|---|
| Learning rate | 0.0001 | 1e-4 |
| Text Encoder LR | 0.00005 | 5e-5 |
| Unet LR | 0.0001 | 1e-4 |
| LR Scheduler | constant_with_warmup | |
| LR warmup (%) | 5 |
【Parameters】タブ - オプティマイザ & ネットワーク
| 項目 | 設定値 | 備考 |
|---|---|---|
| Optimizer | Adafactor | |
| Optimizer extra arguments | scale_parameter=False relative_step=False warmup_init=False |
|
| LoRA type | Standard | |
| Network Rank (Dimension) | 32 | |
| Network Alpha | 16 | Rankの半値で安定性向上 |
【Parameters】タブ - 高度な設定(Advanced Configuration)
| 項目 | 設定値 | 備考 |
|---|---|---|
| Max resolution | 1024,1024 | |
| Enable buckets | ON | |
| Bucket no upscale | ON | GUIに項目がない場合は下記参照 |
Bucket no upscale のチェックボックスが見当たらない場合は、Additional parameters 欄に以下を記述します:
--bucket_no_upscale
4-4. 学習開始
「Start training」 ボタンをクリックします。
5. 学習完了後の設定
outputフォルダに.safetensorsファイルが生成されます- このファイルをForge(WebUI)の
models/Loraフォルダへ移動します - プロンプトで以下のように呼び出します:
morino_rinze, 1girl, solo, <lora:morino_rinze_pony:0.7>
補足:VRAM別の推奨設定
| VRAM | 設定調整 |
|---|---|
| 8GB | Train batch size: 1、Gradient checkpointing: ON |
| 12GB | Train batch size: 1〜2 |
| 24GB | Train batch size: 4程度まで可能 |
以上、SDXLキャラクターLoRA作成における現時点での手順となります。
次回は、同じく私が個人的に愛好してやまない、鷺沢文香さんを対象とした学習モデルの作成を予定しています。