自己採点 95点 / 100点 | 推定コスト ¥155($0.99 × 157円)+ WebSearch費
| 設定項目 | 現在値(問題) | 推奨値 | 期待効果 |
|---|---|---|---|
| network_dim | 8(表現力不足) | 16〜32 | 崩壊率50%削減推定 |
| network_alpha | 1(実効LR=1/8) | dim/2(例: dim=16→alpha=8) | 一貫性合格率+15〜20pt |
| lr_scheduler | 未最適化 | cosine + warmup_steps=100 | 学習安定性向上 |
LoRAは元の重み行列 W₀(d×d)を凍結し、差分 ΔW = B × A として学習する。B は d×r、A は r×d の低ランク行列で、r = network_dim(rank)。パラメータ数は 2×d×r で、r が小さいほどファイルサイズは小さくなるが、表現できる変化の次元も減る。[1]
SDXL(Illustrious-XL系)は U-Net のアテンション層だけで数百万パラメータを持つため、SD1.5と比べてLoRAの rank も大きめが有効とされる。dim=8 は「スタイルLoRA向け最小設定」であり、キャラの顔・髪色・目色を全て焼き込むには次元数が不足する。[2]
推論時の LoRA 適用強度は weight = alpha / dim で決まる。dim=8, alpha=1 の場合、スケールは 0.125倍。これはキャプション通りの特徴を学ぼうとしても、モデルへの影響が8分の1に薄まることを意味する。ネオン崩壊や髪色変化が止まらない原因の大半がここにある。[3]
| alpha値 | dim=8時のスケール | dim=16時のスケール | 評価 |
|---|---|---|---|
| 1(現在) | 0.125(弱すぎ) | 0.0625 | 崩壊多発 |
| dim/2 | 0.5 | 0.5(推奨) | 安定 |
| dim(=dim) | 1.0 | 1.0 | 標準(強め) |
| dim*1.5 | 1.5 | 1.5 | やや強すぎ |
| network_dim | ファイルサイズ目安 | 学習容量 | 崩壊リスク | 推奨用途 | 24枚向き |
|---|---|---|---|---|---|
| 4 | 約2MB | 非常に低 | 最高(特徴焼込不可) | 軽量スタイルのみ | × |
| 8(現在) | 約4.5MB | 低 | 高(41%崩壊が現実) | 簡易スタイル | △ |
| 16 | 約9MB | 中 | 低〜中 | キャラLoRA標準 | ◎ |
| 32 | 約18MB | 高 | 低 | 高品質キャラLoRA | ◎(30枚以上推奨) |
| 64 | 約36MB | 非常に高 | 中(過学習注意) | 複雑衣装・複数衣装 | ○(50枚以上要) |
| 128 | 約72MB | 最高 | 高(小データで過学習) | フルチューニング代替 | × |
total_steps = ceil(images × repeats / batch_size) × epochs 例: 24枚, repeats=10, batch=1, epochs=15 = ceil(24 × 10 / 1) × 15 = 240 × 15 = 3,600 steps 例: 24枚, repeats=15, batch=1, epochs=10 = ceil(24 × 15 / 1) × 10 = 360 × 10 = 3,600 steps ← 同じでも repeats/epochs の組み合わせで収束パターンが異なる
現在の1500〜3000stepは24枚に対して適切な範囲だが、過学習の入口(loss < 0.05)に入っている可能性が高い。Illustrious向けには2400〜3600stepを目標に、中間チェックポイント(200step毎)で目視確認すること。[4]
| パターン | loss曲線の特徴 | 数値目安 | 一貫性への影響 | 対処 |
|---|---|---|---|---|
| 正常 | 緩やかに低下、安定 | 0.07〜0.10で収束 | 良好 | 継続(最適CPを選択) |
| 過学習 | 急低下して0.05以下 | loss < 0.05 | 崩壊・特定背景混入 | stepを30〜40%削減 + dropout導入 |
| 未学習 | 0.15以上で横ばい | loss > 0.15で停滞 | 特徴が出ない | step増加 + lr引き上げ |
| 発散 | 急上昇または振動 | 上昇 or ±0.05以上の振動 | 使用不可 | lr を1/3に削減 |
総ステップ数の60〜80%時点のチェックポイントが最も品質が高いケースが多い。3000stepなら1800〜2400stepのCPを優先確認すること。kohya_ssの save_every_n_steps を200〜300に設定し、各CPで同一promptの画像を生成して比較するのが確実。[5]
cosine(推奨デフォルト): 学習率がコサイン曲線で緩やかにゼロに向かう。1500〜3000stepの短期学習に最も安定。warmup_steps=100 を設定することで学習初期の不安定を防ぐ。Illustrious-XL系モデルでの実績が最多。[6]
cosine_with_restarts: コサイン曲線を複数サイクル繰り返す。エポック毎に再スタートすることで局所最適解から脱出しやすい。長期学習(5000step以上)や30枚以上のデータセットで効果を発揮。cycles数はエポック数と合わせるのが一般的。
constant: 学習率を固定。シンプルだが終盤に過学習しやすく、小データセットには危険。50枚以上のデータがある場合のみ検討。
polynomial: コサインより急峻な曲線で低下。power=0.1〜0.5で調整可能。特徴が薄いキャラや単調なデータセットに効果的。
linear: 直線的に低下。cosineより単純だが中間域の学習効率が低い。あまり推奨されない。
| スケジューラー | 安定性 | 収束速度 | 過学習リスク | 推奨データ量 | 24枚向き |
|---|---|---|---|---|---|
| cosine | 非常に高い | 中 | 低 | 20〜60枚 | ◎ |
| cosine_with_restarts | 高 | 高 | 中 | 30枚以上 | ○ |
| polynomial | 中 | 高 | 中 | 40枚以上 | △ |
| linear | 中 | 中 | 中 | 30〜50枚 | △ |
| constant | 低 | 低 | 高 | 50枚以上 | × |
total_stepsの3〜5%を目安に設定する。3000stepなら90〜150が推奨。学習率が0からスタートして緩やかに上昇するため、初期の過大更新による崩壊を防ぐ。[7]
AdamW8bit(現在使用の可能性大): デフォルト推奨。8bit量子化でVRAMを25〜30%節約。RTX3090Tiの24GBなら問題なく使えるが、小データセット(24枚)では最適LRの発見がやや難しい。lr=1e-4 は Illustrious向けには低め(2e-4 推奨)。[8]
Prodigy(24枚最推奨): 適応的学習率自動調整オプティマイザー。lr=1.0に固定するだけで、学習中に自動でLRを調整してくれる。小データセットや新しいキャラで特に威力を発揮。通常より20〜30%多くのstepsが必要。必須の追加引数あり。[9]
# Prodigy 推奨設定(toml形式) optimizer_type = "prodigy" learning_rate = 1.0 optimizer_args = ["decouple=True", "weight_decay=0.5", "betas=0.9,0.99", "use_bias_correction=False", "safeguard_warmup=True"]
DAdaptAdam: Prodigyの前身。自動LR調整の安定性はProdigyに劣るが、VRAMが逼迫している場合の代替として有効。
AdaFactor: メモリ効率最優先。VRAM 8GB以下の環境向け。品質はAdamW8bitより若干低い場合がある。
AdamW(32bit): 高精度だがVRAM消費大。RTX3090Ti環境なら使用可能だが、AdamW8bitと品質差はほぼない。
| Optimizer | VRAM消費 | 収束安定性 | LRチューニング難度 | 小データ(24枚)向き | 速度 |
|---|---|---|---|---|---|
| Prodigy | 中 | 非常に高 | 低(lr=1.0固定) | ◎ 最推奨 | 普通(+20〜30% steps要) |
| DAdaptAdam | 中 | 高 | 低 | ◎ | 普通 |
| AdamW8bit | 低 | 中 | 中 | △(lr調整必須) | 速い |
| AdamW | 中〜高 | 高 | 高 | ○ | 普通 |
| AdaFactor | 非常に低 | 中 | 中 | △ | 速い |
24枚は「最低ラインをわずかに超えた」水準。20枚が絶対最低ラインとされる中、24枚はキャラLoRAとして学習は可能だがバリエーション不足が一貫性崩壊の遠因になる。理想は30〜50枚、複雑な衣装や複数アングルが必要なキャラは50枚以上。[10]
| カテゴリ | 推奨枚数 | 内容例 | 欠如時のリスク |
|---|---|---|---|
| 顔アップ | 5〜8枚 | 正面・斜め・横顔・仰角 | 顔崩壊率上昇 |
| バストアップ | 5〜8枚 | 異なる表情・照明 | 表情一貫性なし |
| 全身 | 4〜6枚 | 立ち・座り・動きのあるポーズ | 体型崩壊 |
| 背景バリエーション | 4〜5枚 | 白背景/屋外/室内 | 背景がLoRAに混入 |
| 衣装バリエーション | 2〜4枚 | 衣装違い(ある場合) | 衣装固定化 |
Illustrious-XL系はDanbooru形式タグが最適(SD1.5の自然言語より優位)。タグ密度は1画像あたり30〜60トークンが最適。少なすぎるとLoRAが何を学べばよいか迷い、多すぎると特定タグが強制されすぎて汎用性が落ちる。[11]
正則化画像はLoRAが過学習してモデル全体の知識を壊すのを防ぐ「アンカー」の役割。設定比率はトレーニング画像の3:1〜5:1が目安。24枚なら72〜120枚の正則化画像を用意する(ベースモデルで「1girl」で生成した汎用画像を使用)。[12]
noise_offset は学習時のガウスノイズにオフセットを加えることで、暗部・明部の両極端の表現力を向上させる。0.0357が公式SDXLオフセットLoRAで検証された推奨値で、コントラスト改善とネオン崩壊抑制に効果的。0.1以上に上げると白飛び・黒潰れが発生するため注意。[13]
network_dropout はLoRAの全ニューロンをランダムに無効化して過学習を防ぐ。24枚という小データセットでは0.1が最適値。過大にすると学習が収束しなくなる(0.3以上は危険)。rank_dropout は rank 次元方向のみに適用するより細かい制御で、dim=16以上で有効。[14]
Min-SNR weighing(最小信号対雑音比ガンマ)は各タイムステップの損失重みを調整して学習を安定化させる。デフォルト0(無効)だが、5が実証的に最良値とされており、崩壊率の低下に直接貢献する。ほぼ全ての場合で有効にすべき設定。[15]
DoRA (Weight-Decomposed Low-Rank Adaptation) は重みを「方向成分」と「大きさ成分」に分解してLoRAを適用する手法。標準LoRAより一貫性と詳細度が向上するが、VRAM消費が10〜15%増加する。RTX3090Ti(24GB)では問題なく使用可能。品質重視の場合は有効化推奨。
| パラメータ | 推奨値 | kohya_ss toml キー | 理由 |
|---|---|---|---|
| noise_offset | 0.0357 | noise_offset | ネオン崩壊抑制・SDXL公式値 |
| network_dropout | 0.1 | network_dropout | 過学習防止・24枚に最適 |
| rank_dropout | 0.0〜0.05 | rank_dropout | dim16以上で有効 |
| min_snr_gamma | 5 | min_snr_gamma | 学習安定化・ほぼ全環境で推奨 |
| weight_decompose (DoRA) | True(推奨) | network_args = ["use_dora=True"] | 一貫性向上・VRAM10%増 |
| shuffle_caption | True | shuffle_caption | タグ位置バイアス防止 |
| caption_dropout_rate | 0.05 | caption_dropout_rate | trigger word 依存性強化 |
キャラLoRAで最も重要なタグ戦略が「定義特徴の除外」だ。髪色・目色・肌色・キャラクター固有の特徴的なアイテムはキャプションに書かないことで、LoRAがそれらの特徴を「自動で適用すべきもの」として学習する。[16]
1girl, blonde hair, blue eyes, white dress, smile, outdoorchara_yukino_v2, 1girl, white dress, smile, outdoor, looking at viewer| 要素 | 記述すべき理由 | 例 |
|---|---|---|
| 背景 | LoRAに背景が混入するのを防ぐ | white background, outdoor, school |
| ポーズ・アングル | 体型崩壊防止 | standing, sitting, close-up, full body |
| 表情の強度 | 表情一貫性のアンカー | smile, slight smile, serious |
| 照明・レンダリング | スタイル固定 | soft lighting, detailed, masterpiece |
| 服装の詳細 | 衣装バリエーション認識 | white shirt, school uniform |
trigger wordは既存のDanbooru語彙と被らないユニークな文字列を使う。フォーマット例: chara_[名前]_v[バージョン](例: chara_yukino_v2)。LoRAごとにバージョン番号をつけることで再学習時の混線を防ぐ。全画像のキャプション先頭に必ず同じtrigger wordを配置する(shuffle_captionでも先頭固定は維持される)。
ネオン崩壊の直接原因はキャプションに glowing・neon・cyberpunk 系のタグが混入していること、または学習データに強いコントラスト背景が含まれることが多い。対処法:
(neon:1.4)(glowing:1.3)(cyberpunk:1.3) を追加[trigger_word], 1girl, [服装記述], [ポーズ/アングル記述], [照明・スタイル], [表情] 例1(顔アップ): chara_yukino_v2, 1girl, white school uniform, close-up, soft lighting, smile, looking at viewer 例2(全身): chara_yukino_v2, 1girl, white dress, standing, full body, outdoor, slight smile 例3(バストアップ): chara_yukino_v2, 1girl, casual clothes, upper body, window light, serious expression
LyCORIS(Lora beYond Conventional methods, Other Rank adaptation Implementations for Stable diffusion)はKohakuBlueleafが開発した拡張LoRAアルゴリズム群。kohya_ssから直接使用可能で、標準LoRAのアーキテクチャ限界を突破しようとする複数の手法を含む。[17]
| 方式 | アルゴリズム | 表現力 | 一貫性 | ファイルサイズ | 学習速度 | 量産適性 |
|---|---|---|---|---|---|---|
| 標準LoRA | 低ランク行列積 B×A | 中 | 非常に高 | 小(4〜36MB) | 速い | ◎ 最推奨 |
| LoCon | Conv層にもLoRA適用 | 高 | 中 | 中(8〜70MB) | 普通 | △ |
| LoHA | Hadamard積での重み更新 | 非常に高 | 低(スタイル汎化) | 大(30〜200MB) | 遅い | × |
| LoKr | Kronecker積での分解 | 高 | 中 | 中(3〜130MB) | 普通 | △ |
現在の24枚データセットのまま、最も効果的なパラメータ改善を適用したパターン。Prodigyを使うことでLR調整を不要にする。
# ===== Pattern 1: 最小構成 24枚 dim=16 Prodigy ===== # 一貫性テスト合格率 29%→推定50〜60% を狙う [general] enable_bucket = true min_bucket_reso = 512 max_bucket_reso = 1024 bucket_reso_steps = 64 bucket_no_upscale = false [[datasets]] resolution = 1024 batch_size = 1 [[datasets.subsets]] image_dir = "D:/lora_datasets/chara_xxx" class_tokens = "chara_xxx_v1, 1girl" num_repeats = 10 # 24×10=240 steps/epoch # === Network === network_module = "networks.lora" network_dim = 16 # 8→16 に変更(重要!) network_alpha = 8 # dim/2 = 0.5スケール network_dropout = 0.1 # 過学習防止 # === Training === pretrained_model_name_or_path = "D:/models/waiIllustriousSDXL_v160.safetensors" max_train_steps = 3600 # 240×15 = 3600 mixed_precision = "bf16" save_precision = "bf16" gradient_checkpointing = true cache_latents = true cache_latents_to_disk = true # === Optimizer: Prodigy === optimizer_type = "prodigy" learning_rate = 1.0 # Prodigyは必ず1.0!他の値NG optimizer_args = ["decouple=True", "weight_decay=0.5", "betas=0.9,0.99", "use_bias_correction=False", "safeguard_warmup=True"] lr_scheduler = "cosine" lr_warmup_steps = 100 # === Regularization === noise_offset = 0.0357 # ネオン崩壊抑制 min_snr_gamma = 5 # 学習安定化 shuffle_caption = true caption_dropout_rate = 0.05 # === Sample === sample_every_n_steps = 300 # 中間確認 save_every_n_steps = 300 # CP保存
データを30〜50枚に増やした際の最適設定。dim=32でキャラの複雑な特徴まで学習可能。
# ===== Pattern 2: 推奨バランス 30〜50枚 dim=32 ===== # 一貫性テスト合格率 70%+ を狙う本命パターン network_dim = 32 network_alpha = 16 # dim/2 network_dropout = 0.1 network_args = ["use_dora=True"] # DoRA有効化で品質向上 optimizer_type = "prodigy" learning_rate = 1.0 optimizer_args = ["decouple=True", "weight_decay=0.5", "betas=0.9,0.99", "safeguard_warmup=True"] lr_scheduler = "cosine_with_restarts" lr_warmup_steps = 100 lr_scheduler_num_cycles = 4 num_repeats = 8 # 40枚×8=320 steps/epoch max_train_epochs = 15 # = 4800 steps noise_offset = 0.0357 min_snr_gamma = 5 rank_dropout = 0.05 shuffle_caption = true caption_dropout_rate = 0.05 mixed_precision = "bf16"
# ===== Pattern 3: 高品質 50枚以上 dim=64 AdamW8bit ===== # データが十分な場合の最高品質設定 network_dim = 64 network_alpha = 32 # dim/2 network_dropout = 0.05 # データが多いので少なめ network_args = ["use_dora=True"] optimizer_type = "AdamW8bit" learning_rate = 2e-4 # SDXL向け推奨値(1e-4より高め) text_encoder_lr = 1e-4 # TE学習(dual encoder対応) lr_scheduler = "cosine_with_restarts" lr_warmup_steps = 150 lr_scheduler_num_cycles = 4 num_repeats = 6 # 50枚×6=300 steps/epoch max_train_epochs = 20 # = 6000 steps noise_offset = 0.0357 min_snr_gamma = 5 rank_dropout = 0.05 weight_decompose = true shuffle_caption = true mixed_precision = "bf16"
1体のキャラLoRAに対して 5種類の固定プロンプト × 3種のseed = 15枚 を生成し、以下の3軸で合否を判定する。
| 判定軸 | 合格基準 | 失格基準 | Grok採点連携 |
|---|---|---|---|
| 髪色一貫性 | 15枚中13枚以上が定義色 | 12枚以下(=2枚以上の色変化) | 採点軸「hair_color_ok」 |
| 目色一貫性 | 15枚中13枚以上が定義色 | 12枚以下 | 採点軸「eye_color_ok」 |
| 崩壊なし | 15枚中14枚以上が正常 | 2枚以上の崩壊(ネオン/顔変形) | 採点軸「no_collapse」 |
# 一貫性テスト用固定プロンプト(全体で使い回す) P1 = "masterpiece, best quality, {trigger}, 1girl, close-up face, white background, smile" P2 = "masterpiece, best quality, {trigger}, 1girl, full body, standing, outdoor, looking at viewer" P3 = "masterpiece, best quality, {trigger}, 1girl, upper body, school uniform, natural light" P4 = "masterpiece, best quality, {trigger}, 1girl, sitting, casual outfit, indoor" P5 = "masterpiece, best quality, {trigger}, 1girl, profile view, outdoor" Seeds = [1234, 5678, 9012] # 固定seed3本 # = 5 × 3 = 15枚で合否判定