コンテンツにスキップ

SD WebUI Forge / Illustrious系モデル 調査レポート

📁 docs/ai-manga/artifact/20260312_SD_Forge_LoRA学習_拡張機能_調査レポート.md

調査日: 2026-03-12 環境: RTX 5070 Ti (VRAM 16GB), Forge, waiNSFWIllustrious_v150 (SDXL/Illustrious系)


目次

  1. LoRA学習(イラストをSD/Forgeに学習させる)
  2. 便利な拡張機能(ControlNet以外)
  3. ワークフロー改善Tips

1. LoRA学習

1.1 概要

LoRA(Low-Rank Adaptation)は、大規模モデルの重みを少数のパラメータで微調整する手法。特定のキャラクター・イラストスタイル・コンセプトを学習させるのに最適で、フルファインチューンと比較してVRAM使用量が大幅に少ない。

1.2 推奨ツール比較

ツール 特徴 SDXL対応 GUI 推奨度
kohya_ss (sd-scripts) 業界標準。最も多くのチュートリアルが存在。v0.9.1でLoRA+対応、fused backward passで省VRAM化 最推奨
LoRA Easy Training kohya_ssのフロントエンド。より簡単なUI 初心者向け
SimpleTuner Flux/SD3対応に強い。kohyaより設定がシンプル Flux向け
OneTrainer オールインワン。データセット準備からトレーニングまで一貫 代替選択肢

結論: SDXL/Illustrious系なら kohya_ss が最も実績があり推奨。

1.3 学習データの準備

必要枚数の目安

学習対象 推奨枚数 備考
キャラクター(顔重視) 20〜40枚 多角度・多表情
キャラクター(全身) 30〜50枚 衣装バリエーション含む
アートスタイル 20〜30枚 多様な構図・被写体で一貫したスタイル
オブジェクト 10〜25枚 クリーンなフレーミング
コンセプト 15〜30枚 抽象的な概念ほど多め

重要: 枚数より品質と一貫性が重要。25枚の良い画像 > 75枚の不揃いな画像。

解像度

  • SDXL/Illustrious系の標準: 1024x1024
  • バケット機能を有効にすると、様々なアスペクト比に対応可能(min: 1024, max: 2048推奨)
  • 小さい画像はアップスケールしてから使う(ピクセルが多いほど学習情報が増える)
  • 極端なアスペクト比(1:4等)は避ける

タグ付け(キャプショニング)方法

Step 1: 自動タグ付け

推奨ツール: - WD14 Tagger(kohya_ss内蔵): Illustrious/アニメ系に最適 - SDXL-Dataset-Tagger: WD14タグとBLIP2キャプションを自動生成・マージ - BLIP2: 自然言語キャプション生成(写実系向け)

kohya_ssでのWD14タグ付け手順: 1. kohya_ss GUI → Utilities → WD14 Captioning 2. 画像フォルダを指定 3. 閾値(threshold)を0.35〜0.5に設定 4. 3つのキャプションモデルを使い「Append TAGs」で重複を防ぎつつ併用

Step 2: タグの編集・整理

  • トリガーワードを各キャプションファイルの先頭に追加(例: sn_sinon
  • キャラ固有の特徴(髪色、目の色等)は残す除外するかを学習目的に応じて判断
  • キャラLoRA: 固有特徴のタグを除外(LoRAがその特徴を学習するよう誘導)
  • スタイルLoRA: 被写体タグは残す(スタイルのみを学習させる)
  • 品質タグ(masterpiece, best quality等)は除外推奨

Step 3: フォルダ構成

kohya_ssの厳格なフォルダ構造に従う(これを間違えると学習が失敗する):

training_data/
├── img/
│   └── {繰り返し数}_{トリガーワード}/    # 例: 5_sn_sinon
│       ├── image001.png
│       ├── image001.txt                  # 対応するキャプションファイル
│       ├── image002.png
│       └── image002.txt
└── model/                                # 出力先

1.4 kohya_ssでの学習手順(ステップバイステップ)

Step 1: kohya_ssのインストール

git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
# Windows
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt

# GUI起動
python kohya_gui.py
# ブラウザで http://127.0.0.1:7861 にアクセス

Step 2: ベースモデルの選択

  • 推奨: Illustriousのベースモデル(illustriousXL_v01等)で学習する
  • 理由: ファインチューン版(waiNSFWIllustrious等)だと学習が不安定になる場合がある
  • Illustriousベースモデルは学習収束に約30ステップかかるが、ファインチューンは11ステップ
  • ただしベースモデルで学習したLoRAはファインチューン版でも使用可能
  • 学習したLoRAはwaiNSFWIllustrious_v150等の派生モデルでも問題なく動作する

Step 3: 主要パラメータ設定

ネットワーク設定(Network Dim / Alpha)

用途 Network Dim (Rank) Network Alpha ファイルサイズ目安
シンプルなアニメキャラ 64 32 約70MB
一般的なキャラ(推奨) 64〜48 32〜24 約100MB
複雑な特徴・詳細スタイル 128 64〜32 約144MB
  • Network Alpha: 一般的にDimの半分(Dim=64ならAlpha=32)
  • Alpha = Dim にすると安定するが学習が遅い
  • Alpha = Dim/2 にするとより積極的な学習

学習率(Learning Rate)

パラメータ 推奨値 備考
UNET学習率 0.0003 (3e-4) キャラLoRAの標準値
Text Encoder学習率 0.00003 (3e-5) UNETの1/10が目安
LoRA+使用時 0.0001 (1e-4) LoRA+ ratio=16と組み合わせ
  • 学習率が高い = 学習が速いがディテールが失われやすい
  • 学習率が低い = 精密だが学習に時間がかかる

学習率スケジューラ

  • cosine: 推奨。学習率が徐々に下がり安定
  • cosine_with_restarts: 定期的にリセット。長い学習向け
  • constant: 一定。テスト用

学習ステップ数/エポック数

データセット規模 リピート数 エポック数 総ステップ数目安
20枚 3〜5 25〜40 1500〜4000
40枚 2〜3 15〜25 1200〜3000
100枚 1〜2 10〜15 1000〜3000
  • Illustrious系は1500〜3000ステップで収束する傾向
  • 3600ステップ以上はオーバーベイク(過学習)のリスクあり
  • ただしスタイルを強く焼き込みたい場合はあえて超えることも

オプティマイザ

  • AdamW8bit: 標準的。VRAM節約版
  • Prodigy: 学習率の自動調整。初心者に推奨
  • AdaFactor: さらなるVRAM節約

バッチサイズ

VRAM バッチサイズ 備考
8GB 1 gradient checkpointing必須
12GB 1〜2
16GB (RTX 5070 Ti) 2〜4 bf16 + fused backward pass推奨
24GB+ 3〜5

Step 4: RTX 5070 Ti (16GB)向け推奨設定

# kohya_ss 設定(RTX 5070 Ti 16GB向け)
model:
  pretrained_model: "illustriousXL_v01.safetensors"  # ベースモデル推奨

network:
  network_module: "networks.lora"
  network_dim: 64
  network_alpha: 32

training:
  learning_rate: 0.0003       # UNET
  text_encoder_lr: 0.00003    # TE (UNETの1/10)
  lr_scheduler: "cosine"
  optimizer_type: "AdamW8bit"
  train_batch_size: 2          # 16GBなら2が安全
  max_train_epochs: 30
  mixed_precision: "bf16"      # RTX 5070 Tiはbf16対応
  gradient_checkpointing: true

  # 2025年推奨設定
  enable_lora_plus: true       # LoRA+有効化
  lora_plus_ratio: 16          # LoRA+ ratio
  fused_backward_pass: true    # VRAM大幅節約(v0.9.0+)

bucket:
  enable_bucket: true
  min_bucket_reso: 1024
  max_bucket_reso: 2048

save:
  save_every_n_epochs: 5       # 5エポックごとに保存
  save_model_as: "safetensors"

sdxl:
  # CLIP-LとCLIP-Gの両方を学習(デフォルト)
  # スタイルLoRAの場合はCLIP-G学習を無効化も検討

Step 5: 学習の実行と評価

  1. kohya_ss GUIで上記設定を入力(またはプリセットファイルを読み込み)
  2. 「Start Training」をクリック
  3. 保存された各エポックのLoRAをForgeで実際にテスト
  4. 最適なエポックを選択(早すぎ = 特徴が弱い、遅すぎ = オーバーフィット)

評価のポイント: - トリガーワードで特徴が出るか - 他のプロンプトとの組み合わせで破綻しないか - LoRA強度0.5〜1.0の範囲で調整してテスト

1.5 SDXL/Illustrious系での注意点

  1. デュアルテキストエンコーダ: SDXLはCLIP-LとCLIP-Gの2つを持つ。両方を同じレートで学習するか、スタイルLoRAならCLIP-G学習を無効化
  2. バケット解像度: SDXLは可変アスペクト比対応。バケット有効化が重要
  3. オーバーベイクに注意: Illustrious系は比較的少ないステップで収束するため、学習しすぎるとアーティファクトが発生
  4. ベースモデルでの学習推奨: ファインチューン版ではなくIllustrious XLベースモデルで学習すると汎用性が高い
  5. fused backward pass(v0.9.0+): SDXLの学習VRAMを24GB→約10GB(bf16)に大幅削減。16GB VRAMなら必須

1.6 法的・倫理的考慮事項

著作権の現状(2025年時点)

  • 米国著作権局(2025年5月報告書): 「AI学習における著作物の使用は、フェアユースに該当する場合もあれば該当しない場合もある」と結論
  • 大規模・多様なデータセットでの学習は「変容的使用(transformative)」と認められやすい
  • ただし、著作物の使用だけではフェアユースの正当化に不十分

スタイルの著作権

  • アーティストの全体的なスタイルは一般的に著作権の対象外(米国法)
  • ただし特定の作品を再現するような出力は著作権侵害のリスクあり
  • 日本では著作権法30条の4により「情報解析」目的の利用は原則適法だが、議論が続いている

実務的なガイドライン

やること 避けること
自分の作品で学習する 他人の作品を無断で大量収集して学習
許可を得た素材を使う 学習データの出所を隠す
学習結果を私的利用する 特定アーティストのスタイルを模倣して商用利用
オリジナリティを加える 著作権のあるキャラクターを忠実に再現して配布

進行中の訴訟

  • Andersen v. Stability AI: アーティストが著作権侵害を主張。判決は業界に大きな影響を与える見込み
  • New York Times v. OpenAI: テキスト分野だが、画像AIにも波及する可能性

2. 便利な拡張機能(ControlNet以外)

2.1 Forge互換性に関する重要な注意

Forgeは独自のアーキテクチャを持つため、A1111用の拡張機能がそのまま動かない場合がある。以下のリストでForge互換版へのリンクを記載。

公式互換リスト: Forge Extension List and Replacement List

2.2 顔・手の修正

ADetailer(After Detailer)

機能: YOLO検出モデルで顔・手を自動検出し、インペイントで修正。生成後に自動適用されるため手動作業不要。

主な検出モデル: - face_yolov8n.pt - 顔検出(汎用) - hand_yolov8n.pt - 手検出 - person_yolov8n.pt - 人物全体

使い方: 1. Extensions → Install from URL: https://github.com/Bing-su/adetailer 2. txt2img/img2imgの下部に「ADetailer」セクションが出現 3. 検出モデルを選択し、修正用プロンプトを設定 4. 通常通り生成するだけで自動修正

注意: Forge版ではμ DDetailer(Adetailerのフォーク)の方が互換性が良い場合あり。

2.3 リージョナルプロンプト

Forge Couple(推奨)

旧Regional Prompterの代替。Forgeの新バージョン(Flux対応以降)ではRegional Prompterが動作しないため、Forge Coupleを使用する。

機能: - 画像を複数リージョンに分割し、各リージョンに別々のプロンプトを適用 - 複数キャラクターの色移り・特徴混合を防止 - LATENTモードでリージョンごとに異なるスタイルを適用可能

インストール:

https://github.com/Haoming02/sd-forge-couple

基本的な使い方: 1. Forge Coupleを有効化 2. Basicモード: プロンプトの各行が1つのリージョンに対応 3. Advancedモード: x1, x2, y1, y2座標で精密なリージョン指定 4. 各リージョンに異なるLoRAも適用可能

sd-forge-regional-prompter(代替)

Regional PrompterのForge移植版。Forge Coupleが合わない場合の選択肢。

https://github.com/jessearodriguez/sd-forge-regional-prompter

2.4 アップスケール

Ultimate SD Upscale

機能: 大きな画像をタイル分割してアップスケール。VRAM不足を回避しながら高解像度化。

特徴: - タイルベースのアップスケーリング - 様々なアップスケーラーモデル対応(ESRGAN, SwinIR等) - img2imgのScript内から使用

Tiled Diffusion / Tiled VAE(Forge内蔵)

ForgeにはTiled VAEが内蔵されており、VRAM不足時に自動的にタイル処理される。別途インストール不要。

2.5 インペインティング関連

Inpaint Anything

機能: Segment Anything Model (SAM)を使い、クリックするだけでマスクを自動生成。手動マスク描画が不要。

Forge対応版:

https://github.com/thadius83/sd-webui-inpaint-anything-forge

使い方: 1. 画像をアップロード 2. 修正したい部分をクリック(SAMが自動セグメント) 3. マスクを確認・調整 4. インペイント実行

2.6 モデル管理

Civitai Helper(Forge対応版)

機能: - モデルのSHA256ハッシュを生成してCivitaiから情報・プレビュー画像を取得 - モデルの新バージョンチェック・ダウンロード - CivitaiのURLからモデルを直接ダウンロード

Forge対応フォーク:

https://github.com/cou723/Stable-Diffusion-Webui-Civitai-Helper-forge

2.7 プロンプト支援

Prompt Architect

機能: プロンプトの構築を支援するUI拡張。カテゴリ別にタグを選択してプロンプトを組み立て。

Civitaiリンク: Prompt Architect for A1111 & Forge

Dynamic Prompts

機能: ワイルドカードとテンプレートでプロンプトをランダム化。バッチ生成時に多様な出力を得られる。

2.8 その他便利な拡張機能

拡張機能 機能 Forge対応
sd-webui-openpose-editor ポーズエディタ(ControlNet用ポーズ作成)
sd-webui-cutoff プロンプトの色漏れ防止 要確認
sd-webui-aspect-ratio-helper アスペクト比簡易設定
sd-webui-image-browser 生成画像のブラウザ/検索
sd-webui-tag-complete Danbooru/e621タグのオートコンプリート

3. ワークフロー改善Tips

3.1 ComfyUI vs WebUI Forge 比較

項目 WebUI Forge ComfyUI
UIスタイル 従来型フォーム ノードベース
学習コスト 低い(直感的) 高い(ノードの概念を理解する必要)
パフォーマンス A1111より30〜75%高速 A1111の約2倍高速(最速)
拡張性 A1111拡張の多くが使用可能 独自ノードエコシステム
ワークフロー再利用 設定の保存/復元 ワークフローをJSONで保存・共有
バッチ処理 スクリプトベース ノードで視覚的に構築
自動化 API経由 ノードで完結、APIも強力
複雑なパイプライン 限定的 得意(複数モデル連携等)
Illustrious/SDXL 完全対応 完全対応
Forge統合 ネイティブ 別ツール

結論: - 現在のForge環境を活かす: 当面はForge + API自動化で運用 - 将来的にComfyUIも検討: 複雑なパイプライン(漫画制作の自動化等)が必要になったら移行を検討 - 両方使い分け: 単発生成はForge、バッチ/パイプラインはComfyUIという運用もあり

3.2 バッチ処理・自動化(Forge API)

ForgeはA1111互換のAPIを持つため、Pythonスクリプトで自動化可能。

import requests
import json
import base64
from pathlib import Path

FORGE_URL = "http://127.0.0.1:7860"

def txt2img(prompt: str, negative_prompt: str = "",
            width: int = 1024, height: int = 1024,
            steps: int = 30, cfg_scale: float = 7.0,
            batch_size: int = 1, n_iter: int = 1,
            seed: int = -1) -> list[bytes]:
    """Forge APIでtxt2img生成"""
    payload = {
        "prompt": prompt,
        "negative_prompt": negative_prompt,
        "width": width,
        "height": height,
        "steps": steps,
        "cfg_scale": cfg_scale,
        "batch_size": batch_size,
        "n_iter": n_iter,
        "seed": seed,
        "sampler_name": "Euler a",
    }

    response = requests.post(f"{FORGE_URL}/sdapi/v1/txt2img", json=payload)
    result = response.json()

    images = []
    for img_b64 in result["images"]:
        images.append(base64.b64decode(img_b64))

    return images

def img2img_inpaint(init_image_path: str, mask_path: str,
                     prompt: str, denoising_strength: float = 0.75) -> list[bytes]:
    """Forge APIでインペインティング"""
    with open(init_image_path, "rb") as f:
        init_b64 = base64.b64encode(f.read()).decode()
    with open(mask_path, "rb") as f:
        mask_b64 = base64.b64encode(f.read()).decode()

    payload = {
        "init_images": [init_b64],
        "mask": mask_b64,
        "prompt": prompt,
        "denoising_strength": denoising_strength,
        "mask_blur": 4,
        "inpaint_full_res": True,
        "inpainting_fill": 1,  # 0=fill, 1=original, 2=latent noise, 3=latent nothing
    }

    response = requests.post(f"{FORGE_URL}/sdapi/v1/img2img", json=payload)
    result = response.json()

    return [base64.b64decode(img) for img in result["images"]]

# バッチ生成の例
def batch_generate(prompts: list[dict], output_dir: str):
    """複数プロンプトを連続生成"""
    output = Path(output_dir)
    output.mkdir(parents=True, exist_ok=True)

    for i, p in enumerate(prompts):
        images = txt2img(**p)
        for j, img_data in enumerate(images):
            filepath = output / f"{i:04d}_{j:02d}.png"
            filepath.write_bytes(img_data)
            print(f"保存: {filepath}")

3.3 プロンプト管理

ファイルベースの管理(現在のprompt-library)

既存の prompt-library/ ディレクトリをそのまま活用。YAML/JSON形式でカテゴリ別にプロンプトを管理。

効率的なプロンプト構造(Illustrious系向け)

# 品質タグ(先頭)
masterpiece, best quality, absurdres,

# 被写体
1girl, solo, sinon \(sao\),

# 外見
blue hair, short hair, blue eyes,

# 衣装
school uniform, white shirt, pleated skirt,

# 構図
upper body, looking at viewer, smile,

# 背景
classroom, window, sunlight,

# スタイル修飾
detailed, sharp focus, anime style,

プロンプトテンプレートの活用

バッチ生成用にテンプレートを作成:

# prompt_templates/character_sheet.yaml
name: "キャラクターシート"
base_prompt: "masterpiece, best quality, absurdres, {character}"
variations:
  - suffix: "full body, standing, white background, character sheet"
  - suffix: "portrait, close-up, detailed face"
  - suffix: "upper body, dynamic pose, action"
  - suffix: "chibi, cute, simple background"
negative: "worst quality, low quality, blurry, bad anatomy"

3.4 ワークフロー最適化のまとめ

  1. 生成 → ADetailerで自動修正: 顔・手の品質を自動保証
  2. Forge Coupleで複数キャラ: 色移りなしの複数キャラ生成
  3. API自動化: Pythonスクリプトでバッチ生成
  4. LoRA組み合わせ: キャラLoRA + スタイルLoRA の併用
  5. img2img + インペイント: 生成画像の部分修正ワークフロー
  6. アップスケール: 生成後にUltimate SD Upscaleで高解像度化

Sources

LoRA学習

拡張機能

ワークフロー

法的・倫理的