一言: GOLDEN(無LoRA)はもう完成された勝ちパターン[15]。ここに「顔・髪色・目色・体型だけを固定する軽量キャラLoRA」を後付けし、衣装/構図/R18要素はプロンプトとGOLDENの素の力に任せる、という分業が一貫性最大化の現実解です。LoRAで全部固定しようとすると物語マンガ(毎ページ衣装が変わる)が壊れます。
| 項目 | 確定値 | 根拠/注 |
|---|---|---|
| ベースモデル | waiIllustriousSDXL_v160(学習も推論も同一) | 推論と同一ベースで学習=崩れ最小[2] |
| network_dim (rank) | 16〜32(顔+体型固定なら16で十分・衣装も少し入れたいなら32) | Civitaiは簡易キャラ4-8〜32、anime/game標準64/32も提示[2][6] |
| network_alpha | dimの0.5〜0.25倍(dim32→alpha16 / dim16→alpha8) | Illustrious公式ガイド準拠[3]。半分が無難な既定[1] |
| optimizer | Prodigy(自動LR・初心者安全)/ 玄人は AdamW8bit or Adafactor | Prodigyは200-300stepで最適LR探索[1] |
| learning_rate | Prodigy→1.0固定(必須)/ AdamW→UNet 1e-4, TE 1e-5 目安 | Prodigyで1.0以外は自動調整を壊す[1]。SDXL既定LR=1e-4[5] |
| lr_scheduler | cosine(warmup 100step) | Prodigy併用時の安定化[3] |
| 総ステップ | 1500step前後(=1コンセプトあたり) | Illustrious複数公式記事が「1コンセプト≒1500step」で一致[2][3] |
| repeats×epoch | 例: 20枚×repeat5×epoch15÷batch2 ≒ 750step…→ 狙い1500stepになるよう逆算 | 計算式は第4章。anime過学習早い→step控えめ[8] |
| train batch size | 2(3090Ti 24GBなら2〜4可・色/汎化のためミニバッチ推奨) | batch1偏り回避[2] |
| 解像度 | 1024(bucket: min512/max2048/step32) | SDXL標準[4] |
| clip_skip | 2(Illustrious系) | Illustrious公式ガイド[3] |
| mixed_precision | bf16(3090Ti対応)+ gradient_checkpointing + cache_latents + cache_text_encoder_outputs | VRAM削減・公式推奨[4] |
| その他 | --network_train_unet_only / min_snr_gamma 5 / debiased_estimation_loss(色精度) | UNetのみ学習がSDXL LoRAで強く推奨[4]、色はdebiased[3] |
| ComfyUI適用weight | 0.7〜0.85(崩れたら下げる・物語マンガは0.6〜0.75が安全帯) | 第4章で詳説。1.0は過固定でポーズ硬直[2] |
トフィーさんは全14作をGOLDEN(無LoRA・waiIllustriousSDXL_v160・cfg6.0/dpmpp_2m karras/超シンプルprompt)で量産中[15]。これは「3シーン目まで」は破綻しにくいが、1冊16ページ通して同一キャラを保つには限界がある(seed/タグ応急は崩れる、というのが社内の確定教訓)。
| # | 手法 | 冊内一貫性 | 衣装変化対応 | 導入コスト | 判定 |
|---|---|---|---|---|---|
| 1 | 軽量キャラLoRA(顔/髪/目/体型のみ固定) | 高 | ◎ | 中(30-90分/体) | 本命 |
| 2 | 標準キャラLoRA(衣装込み固定) | 最高 | ×(物語で破綻) | 中 | 固定衣装作のみ |
| 3 | DoRA(重み分解版LoRA) | 高(同設定でLoRA超え[9]) | ◯ | 中(kohyaでweight要調整[9]) | 実験枠 |
| 4 | LyCORIS (LoHa/LoKr) | 高 | ◯ | 中 | 表現力↑だが過学習注意 |
| 5 | プロンプト固定+seed固定(=現GOLDEN) | 中 | ◎ | 0 | 繋ぎ/併用 |
| 6 | IPAdapter FaceID(顔のみ参照) | 中〜高 | ◎ | 低 | 青グロー/塗り干渉[15] |
| 7 | ControlNet(三面図→多アングル) | 構図一貫 | ◎ | 中 | 補助 |
| 8 | LoRA+IPAdapter併用 | 高 | ◎ | 中 | 難所救済 |
| 9 | i2i連鎖(前コマ参照) | 中 | ◎ | 低 | 差分量産向き |
| 10 | Flux Kontext / 参照系新技術 | 高 | ◎ | 高(別環境) | 要検証・別DR |
imagededupでコサイン類似0.95以上を間引く[17]。python finetune/tag_images_by_wd14_tagger.py \ --onnx --batch_size 4 \ --model_dir wd14_models \ --repo_id SmilingWolf/wd-eva02-large-tagger-v3 \ --thresh 0.35 --character_threshold 0.85 \ --caption_extension .txt ./train/10_mai
mai_xxx等のトリガー挿入。固定属性タグを削除(例: blonde hairred eyesponytaillarge breastsを消す)→トリガーに吸着。残すタグ=school uniformsittingnakedspread legs等の可変要素[2][3]。総step = (画像枚数 × repeats × epochs) ÷ train_batch_size
例) 20枚 / repeats 4 / epochs 8 / batch 2
= 20×4×8 ÷ 2 = 320 ... ← 少なすぎ
例) 20枚 / repeats 10 / epochs 15 / batch 2
= 20×10×15 ÷ 2 = 1500 ... ← ◎ 狙い値
(anime過学習が早いので 1200〜1800 の幅で1〜2本試走)
Civitai onsite系は「repeats=1・epoch多め(20-40)」運用も一般的[2]。どちらでも総stepが1200-1800に収まればOK。エポック毎に保存(save_every_n_epochs 1)し、後で最良エポックを選ぶのが少枚数の鉄則。
accelerate launch --num_cpu_threads_per_process 4 sdxl_train_network.py ^ --pretrained_model_name_or_path "models\waiIllustriousSDXL_v160.safetensors" ^ --dataset_config "dataset_mai.toml" ^ --output_dir "out\mai" --output_name "char_mai_v1" ^ --network_module networks.lora ^ --network_dim 32 --network_alpha 16 ^ --network_train_unet_only ^ --optimizer_type prodigy ^ --optimizer_args "decouple=True" "weight_decay=0.01" "d_coef=1.0" "use_bias_correction=True" "safeguard_warmup=True" ^ --learning_rate 1.0 ^ --lr_scheduler cosine --lr_warmup_steps 100 ^ --resolution 1024,1024 --bucket_reso_steps 32 ^ --min_bucket_reso 512 --max_bucket_reso 2048 ^ --train_batch_size 2 ^ --max_train_steps 1500 ^ --mixed_precision bf16 --save_precision bf16 ^ --gradient_checkpointing ^ --cache_latents --cache_latents_to_disk ^ --cache_text_encoder_outputs ^ --sdpa ^ --clip_skip 2 ^ --min_snr_gamma 5 --debiased_estimation_loss ^ --save_every_n_epochs 1 --save_model_as safetensors ^ --seed 42
scale_parameter=False relative_step=False warmup_init=False + constant_with_warmup 記載あり[4]。LoraLoaderのmodel側とclip側を分け、model 0.8 / clip 0.5のように下げると、顔は保ちつつ衣装・構図の自由度が上がる(物語マンガで有効)。数値はキャラ毎に要微調整| 条件 | 1step | 1500step | 備考 |
|---|---|---|---|
| 3090Ti / 1024 / batch2 / dim32 / bf16 / gc | 約2〜4秒[11] | 約50〜100分 | UNetのみ学習で短縮 |
| 同上 batch1 | 約1.5〜3秒 | 約40〜75分 | VRAM余裕だがbatch2推奨 |
バッチ運用: キャラ毎のtoml/設定をキューに積み、シェルで連続実行(1体終了→次体)。8体を就寝中に流せば翌朝には全LoRAが揃う計算。ComfyUIは学習中killしVRAMを明け渡す(並走でswap→17倍遅の社内事故あり[16])。
| リスク | 症状 | 対策 |
|---|---|---|
| 過学習 | 同じポーズ/背景しか出ない・衣装が剥がれない | step↓ / weight↓ / 早epochのckpt / 正則化検討 |
| 属性もつれ | 髪色が衣装を変えると一緒に化ける | キャプションで固定属性削除を徹底[2] |
| 色破綻(fry) | ネオン色・肌ピンク化 | 推論側weight盛りすぎ禁止・debiased_estimation_loss[12] |
| VRAM枯渇 | OOM/極端に遅い | ComfyUI kill / gc・cache_latents / batch↓[16] |
| DoRA罠 | weight 0.5以上で全面ノイズ | kohyaのSDXL DoRAはweight 0.05帯から検証[9] |
| 顔だけ良く体型が別人 | 顔アップ偏重データ | 全身カットを2-3割混ぜ、体型タグも固定削除 |
| mature/おばさん化 | 顔が老ける | 学習データを若い絵で統一・推論NEGに mature等[14] |
pip install torch==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu124、xformers同cu124[13])。画像生成のComfyUIとは別venvで隔離。char_<name>_v<n>.safetensors。LoraLoader常設・weight 0.75 / clip 0.5を既定に。GOLDENのcfg/sampler/シンプルprompt方針は維持[15]。LoraLoaderを1個挟むだけ。WF大改造不要。本DRは下記の個別DR群を実機環境(3090Ti/waiv160/torch2.6)に統合した決定版です。深掘りは各DR参照。