LoRAトレーニング入門|画像生成AIを自分好みにカスタマイズする方法

lora-training-guide Uncategorized

LoRAトレーニングが解決する課題

Stable Diffusionなどの画像生成AIでは、一般的なスタイルやキャラクターは生成できますが、特定のキャラクター、自社ブランドのスタイル、個人の顔などを正確に再現するのは困難です。

従来、こうしたカスタマイズには「Fine-tuning(ファインチューニング)」が必要でしたが、数十GB以上のVRAMと長時間の学習が必要でした。

LoRA(Low-Rank Adaptation)は、モデル全体ではなく一部のパラメータだけを調整する技術で、わずか数MBのファイルサイズ消費者向けGPU(RTX 3060など)で、独自のスタイル・キャラクターを学習できます。

LoRAの概要

LoRAとは

Low-Rank Adaptationの略で、大規模モデルを効率的に微調整する技術です。

仕組み:
– モデルの重み行列に「低ランク行列」を追加
– 元のモデルは変更せず、追加パラメータのみを学習
– 学習後はLoRAファイル(.safetensors形式、5-200MB程度)として保存

参考: ファインチューニングとは?で、機械学習モデルのカスタマイズ手法を詳しく解説しています。

LoRAの種類

種類 用途 必要画像数 学習時間
キャラクターLoRA 特定人物・キャラクター 10-50枚 30分-2時間
スタイルLoRA 特定の画風・アートスタイル 20-100枚 1-4時間
コンセプトLoRA 特定オブジェクト・服装 15-50枚 30分-2時間
ポーズLoRA 特定のポーズ・構図 30-100枚 1-3時間

Fine-tuningとの違い

項目 LoRA Fine-tuning
ファイルサイズ 5-200MB 2-7GB
必要VRAM 8-12GB 24GB以上
学習時間 30分-4時間 数時間-数日
併用可能性 複数LoRA同時使用可 モデルごとに1つ
柔軟性 高(重みで調整)

必要な環境

システム要件

推奨環境:
– GPU: NVIDIA RTX 3060(12GB VRAM)以上
– RAM: 16GB以上
– ストレージ: 50GB以上の空き容量
– OS: Windows 10/11、Linux

最低環境:
– GPU: GTX 1660 Ti(6GB VRAM)
– RAM: 12GB
– ストレージ: 30GB

必要なソフトウェア

  1. Python 3.10以上
  2. CUDA Toolkit 11.8以上(NVIDIAドライバー)
  3. Git
  4. kohya_ss(最も人気のあるLoRAトレーニングツール)

kohya_ssのセットアップ

インストール手順(Windows)

1. リポジトリのクローン

git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss

2. セットアップスクリプトの実行

# GUIインストーラーを実行
setup.bat

# インストール完了後、GUIを起動
gui.bat

ブラウザで http://127.0.0.1:7860 が開きます。

インストール手順(Linux)

git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss

# 依存関係をインストール
./setup.sh

# GUI起動
./gui.sh

Google Colabでの利用

ローカル環境がない場合、Google Colabで無料で試すことも可能です。

# Colab用ノートブック
!git clone https://github.com/Linaqruf/kohya-trainer.git
%cd kohya-trainer
!pip install -r requirements.txt

データセット準備

LoRAの品質は、データセットの質に大きく依存します。

画像の選定

キャラクターLoRAの場合:

多様な角度: 正面、横顔、斜め、後ろ姿
多様な表情: 笑顔、真面目、怒り、驚き
多様な服装: 複数の衣装(学習対象が服でない場合)
多様な背景: シンプル〜複雑な背景
高解像度: 512×512以上(1024×1024推奨)

避けるべき画像:
– ブレている、ピンボケ
– 過度に加工されている
– 顔や体が大きく隠れている
– 複数人物が写っている(学習対象以外を含む)

推奨枚数:
– 最低: 10枚
– 推奨: 20-30枚
– 最大: 50-100枚(多すぎると過学習のリスク)

画像の前処理

1. リサイズ

# 一括リサイズ(Python)
from PIL import Image
import os

input_dir = "raw_images"
output_dir = "processed_images"
size = (512, 512)

for filename in os.listdir(input_dir):
    img = Image.open(os.path.join(input_dir, filename))
    img = img.resize(size, Image.LANCZOS)
    img.save(os.path.join(output_dir, filename))

2. トリミング

  • 顔や体が画像の50-80%を占めるようにトリミング
  • 余白が多すぎる場合は調整

3. タグ付け(キャプション)

各画像に説明テキストを付与します。

自動タグ付け:
kohya_ss GUIの「Captioning」タブで、BLIP/WD14 Taggerを使用。

手動タグ付け:

画像ファイル: character001.png
タグファイル: character001.txt
内容: "1girl, short black hair, blue eyes, school uniform, smiling"

タグのフォーマット:
– Danbooru形式: 1girl, black hair, blue eyes, smile
– 自然言語形式: A girl with black hair and blue eyes smiling

参考: Stable Diffusion完全ガイドで、効果的なプロンプトの書き方を解説しています。

ディレクトリ構造

kohya_ssでは、特定のディレクトリ構造が必要です。

/dataset/
  /10_charactername/    # 10 = 繰り返し回数
    character001.png
    character001.txt
    character002.png
    character002.txt
    ...

繰り返し回数の意味:
– 少ない画像数の場合、繰り返しを増やして学習頻度を上げる
– 10枚の画像で10_なら、1エポックで100回学習
– 50枚の画像なら5_程度に減らす

LoRAトレーニング実践

kohya_ss GUIでのトレーニング

1. LoRAタブを開く

kohya_ss GUI → 「LoRA」タブ

2. 基本設定

Source Model:
Pretrained model name or path:
– SD1.5: runwayml/stable-diffusion-v1-5
– SDXL: stabilityai/stable-diffusion-xl-base-1.0
– またはローカルの.safetensorsファイルパス

Folders:
Image folder: /path/to/dataset(上記のディレクトリ構造)
Output folder: /path/to/output
Model output name: my_character_lora

3. パラメータ設定

Training parameters:

パラメータ 推奨値(キャラクター) 推奨値(スタイル) 説明
Resolution 512,512 512,512 学習解像度
Train batch size 2-4 2-4 バッチサイズ(VRAMに応じて)
Epoch 10-20 20-40 全データを何回学習するか
Save every N epochs 5 10 N回ごとに保存
Learning rate 1e-4 (0.0001) 5e-5 (0.00005) 学習率
LR Scheduler cosine cosine 学習率スケジューラー
Network Rank (Dim) 32-64 64-128 LoRAの次元数
Network Alpha 16-32 32-64 正則化パラメータ

4. トレーニング開始

「Start training」をクリック。

進捗はターミナルとGUIで確認できます。

学習時間の目安:
– RTX 3060(12GB): 30分-2時間(20エポック、20枚画像)
– RTX 4090(24GB): 15分-1時間

コマンドラインでのトレーニング

より詳細な制御が必要な場合:

accelerate launch --num_cpu_threads_per_process=8 train_network.py \
  --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
  --train_data_dir="/path/to/dataset" \
  --output_dir="/path/to/output" \
  --output_name="my_lora" \
  --resolution="512,512" \
  --train_batch_size=4 \
  --learning_rate=1e-4 \
  --max_train_epochs=20 \
  --save_every_n_epochs=5 \
  --network_module=networks.lora \
  --network_dim=32 \
  --network_alpha=16 \
  --mixed_precision="fp16" \
  --save_precision="fp16" \
  --caption_extension=".txt" \
  --enable_bucket

LoRAの使用方法

Automatic1111での使用

1. LoRAファイルを配置

stable-diffusion-webui/models/Lora/my_lora.safetensors

2. プロンプトで指定

beautiful portrait, <lora:my_lora:0.8>, detailed face, 8k

重みの調整:
<lora:my_lora:1.0>: フル強度
<lora:my_lora:0.5>: 半分の強度
<lora:my_lora:1.5>: 過剰(試験的)

ComfyUIでの使用

ノード構成:

Load Checkpoint
  → Load LoRA(LoRAファイル選択、Weight: 0.8)
  → CLIP Text Encode
  → KSampler

詳細: ComfyUI完全ガイドで、LoRAワークフローを解説しています。

パラメータ調整とトラブルシューティング

過学習(Overfitting)の兆候

症状:
– 学習画像とほぼ同じ画像しか生成されない
– プロンプトの変更に反応しない
– 背景や服装まで固定化される

対処法:
– エポック数を減らす(20 → 10)
– 学習率を下げる(1e-4 → 5e-5)
– 画像のバリエーションを増やす
– Regularization Images(正則化画像)を使用

学習不足(Underfitting)

症状:
– キャラクターの特徴が再現されない
– LoRA適用前と変化が少ない

対処法:
– エポック数を増やす(10 → 20)
– 学習率を上げる(5e-5 → 1e-4)
– Network Dimを増やす(32 → 64)

VRAMメモリ不足

症状: “CUDA out of memory”エラー

対処法:
– Batch sizeを減らす(4 → 2 → 1)
– Resolutionを下げる(512 → 448)
--gradient_checkpointingオプションを追加
– Mixed precisionを有効化(fp16またはbf16

高度なテクニック

1. Multi-Concept LoRA

複数のキャラクターやスタイルを1つのLoRAに統合。

/dataset/
  /10_character_alice/
  /10_character_bob/
  /10_style_watercolor/

2. Regularization Images

過学習を防ぐため、一般的な画像を混ぜる。

/dataset/
  /10_charactername/    # メイン学習データ
  /1_general/           # 正則化データ(繰り返し少なめ)

3. DreamBooth形式との併用

より強力な学習手法であるDreamBoothとLoRAを組み合わせ。

--prior_loss_weight=1.0
--class_tokens="girl"

4. SDXLでのLoRAトレーニング

SDXL(Stable Diffusion XL)用のLoRA。

推奨設定:
– Resolution: 1024,1024
– Network Dim: 64-128
– Learning rate: 5e-5
– Batch size: 1-2(VRAMに注意)

実用例

キャラクターLoRA

用途: オリジナルキャラクター、VTuber、ブランドマスコット

データセット:
– 20-30枚の多様な画像
– 様々な角度、表情、ポーズ

プロンプト例:

<lora:my_character:0.9>, 1girl, portrait, outdoor scene,
natural lighting, detailed eyes, smile

スタイルLoRA

用途: 特定アーティストの画風、ブランドのビジュアルスタイル

データセット:
– 50-100枚の同じスタイルの画像
– 多様な被写体(人物、風景、静物など)

プロンプト例:

<lora:watercolor_style:0.8>, landscape painting,
mountains and lake, sunset, masterpiece

服装・コスチュームLoRA

用途: 特定の衣装、制服、アクセサリー

データセット:
– 30-50枚の同じ衣装を着た画像
– 様々な人物・ポーズ

プロンプト例:

<lora:school_uniform:0.7>, 1girl, standing,
outdoor, detailed clothing

注意点

著作権と倫理

避けるべき用途:
– 実在人物の無断学習(プライバシー侵害)
– 著作権保護されたキャラクター(二次創作ガイドライン確認)
– ディープフェイクなど悪用

推奨用途:
– 自作キャラクター
– オリジナルスタイル
– 企業ブランド(自社のみ)

ライセンス

ベースモデルのライセンス確認:
– SD1.5: CreativeML OpenRAIL-M(商用利用可)
– SDXL: CreativeML OpenRAIL++-M(条件付き商用利用可)
– SD3.5: Stability AI Community License(年間売上制限あり)

LoRAも元モデルのライセンスに準拠します。

FAQ

Q1. LoRAとEmbedding(Textual Inversion)の違いは何ですか?

LoRAはモデルの重みを調整するのに対し、Embeddingはプロンプト空間に新しい概念を追加します。LoRAの方が表現力が高く、少ない画像で学習できますが、ファイルサイズは大きくなります。

Q2. 複数のLoRAを同時に使えますか?

可能です。通常2-4個のLoRAを同時使用できますが、多すぎると競合や品質低下のリスクがあります。重みの合計が2.0-3.0を超えないように調整してください。

Q3. LoRAはControlNetと併用できますか?

可能です。LoRAでスタイル・キャラクターを指定し、ControlNetでポーズ・構図を制御するワークフローが一般的です。ControlNet完全ガイドで詳細を解説しています。

Q4. kohya_ss以外のLoRAトレーニングツールはありますか?

あります。Stable Diffusion公式のDreamBoothスクリプト、Hugging FaceのPEFT、AutoTrainなどがあります。ただし、kohya_ssは最も機能が豊富でコミュニティサポートが充実しています。

関連記事

出典

  • kohya_ss公式リポジトリ: https://github.com/bmaltais/kohya_ss
  • LoRA論文: https://arxiv.org/abs/2106.09685
  • Hugging Face LoRAドキュメント: https://huggingface.co/docs/peft/conceptual_guides/lora

コメント