2038 words
10 min

【SDXL/kohya_ss】キャラクターLoRAは画像1枚で作れる?50枚学習やEpoch別比較で分かった違い

【要約】LoRA学習のポイントと画像枚数・Epoch比較#

項目画像1枚学習約50枚学習
再現度画風崩れ・別人のようになりがち期待通りのキャラクター再現が安定
特徴の分離背景やポーズ・構図まで固定化されやすいキャラクター固有の特徴のみ抽出可能
推奨度×(特定ポーズ/画風抽出以外は厳しい)◎ キャラLoRA作成の基本

普段Stable Diffusion触ってると「LoRAってどう作ればいいの?」ってなるので備忘録もかねて。

そもそもLoRAとは何者?プロンプトをまとめただけじゃダメなの?#

Stable Diffusionで画像生成してると、CheckpointとLoRAという言葉がセットで出てくる。

Checkpointがベースモデルなのは分かるけど、じゃあLoRAって何者なのか?
最初は「キャラクターや画風の特徴をまとめたプロンプトの圧縮版」みたいなものなのかなと思ってた。

でも実際に試してみると、プロンプトとLoRAは全然役割が違う。

項目役割
Checkpoint画像生成の土台となるモデル本体
LoRAベースモデルに後付けして生成結果に影響を与える学習済みパラメータ
プロンプト「こんな画像を作って」とモデルに指示を出すテキスト

LoRAはプロンプトをテキストとして圧縮保存したものではなく、ベースモデルの重みを調整する追加のパラメータ。

じゃあ実際キャラクターLoRAを学習させるとどうなるのか、色々試してみた。

画像1枚でキャラクターLoRAを作ったらダメなの?#

とりあえず実験として、元画像1枚だけでキャラクターLoRAを学習させてみた。

今回の学習環境・ベース設定

  • 学習ツール:kohya_ss
  • ベースモデル:WAI-illustrious-SDXL(SDXL系)
  • キャプション:自動生成されたものをほぼそのまま使用

結果としては、キャラクターっぽい雰囲気は出るものの、期待通りの見た目にはならなかった。
画風も元画像に引っ張られすぎてしまったり、ポーズや構図が固定化されがち。

もちろん、1枚でもLoRAの学習自体はできる。
ただ、1枚だと「キャラクター固有の特徴」と「その画像のポーズ・背景・画風」をAIが区別できないのが原因っぽい。

もしどうしても1枚から生成したい!ってときは以下のサイトが参考になるかも
https://note.com/mory909/n/nf0201c6feb13

今回は画風も維持しつつ自由なポーズで作らせたかったので、1枚だけだと厳しかった。。。

約50枚の学習画像を用意して再挑戦してみた#

そこで、元画像1枚をベースに、角度・ポーズ・表情を変えた画像をAIで約50枚生成して学習データを作ってみた。

ただ生成した画像を全部使うんじゃなくて、別人のようになっちゃった画像や崩れてるやつはある程度除外して選別。

学習用画像のバリエーション例

今回使用した kohya_ss の主要パラメータ#

実際に50枚で学習させたときのパラメータ設定は以下の通り。

パラメータ項目設定値備考・目的
Pretrained modelWAI-illustrious-SDXLSDXLベースモデル
Resolution1024, 1024SDXL標準解像度
Enable bucketsON縦横比が違う画像もアスペクト比維持で学習
Train batch size1〜2VRAM容量に合わせて調整
Epochs / Save every N10 / 1全10Epoch。毎Epoch保存して比較用
Mixed / Save precisionbf16計算精度・保存精度
OptimizerAdamW8bitVRAM節約しつつ高速学習
Learning rate (Unet / TextEnc)0.0001 / 0 または 0.00005学習率の基本指定
LR schedulercosineなだらかに学習率を減衰
Network Rank / Alpha32 / 16キャラ+画風の両方をしっかり覚えさせる設定
Shuffle caption / Keep n tokensON / 1先頭のトリガーワード固定
Cache latents / Gradient chkptON / ONVRAM節約設定
Cross attentionsdpa (または xformers)高速化

学習設定はほぼこの設定に統一して、約50枚で再度LoRAを学習してみた。

すると今度は、期待通りのキャラクターを高精度で再現できるようになって一安心。

やっぱり画像枚数を増やして色んな角度・ポーズを見せてあげることで、AI側も「あ、これがこのキャラの特徴なんだな」と理解しやすくなるっぽい。
(もちろん50枚絶対必要というわけではなく、キャラの複雑さや画像の質によって変わる)

キャプションって何のためにあるの?#

今回kohya_ssの自動キャプション機能を使ったけど、「キャプションって本当に必要なの?」と疑問に思うかも。

キャプションは「この画像には何が写っているか」をテキストで教えるラベルみたいなもの。
これがあると、AIが「服」や「背景」と「キャラクターの特徴」を切り離して学習しやすくなる。

Keep n tokens: 1 で先頭のトリガーワード(キャラ名など)を固定しつつキャプションを動かすことで、特定衣装やポーズに引っ張られにくくするのがコツ。

Epochって何?なんで大量のLoRAファイルができるの?#

学習を回していると「Epoch(エポック)」という言葉が出てくる。

Epochは学習データを一巡した回数のこと。
kohya_ssで「Save every N epochs: 1」にしておくと、学習の途中でEpochごとにLoRAファイルが自動保存される仕組みになっている。

  • Epoch 1のLoRA
  • Epoch 2のLoRA
  • …
  • Epoch 10のLoRA

↓こんな感じでファイルがゴロゴロできる
EpochごとのLoRA

「じゃあどのEpochのLoRAが一番良いの?」と悩むことになるが、これは実際に生成して比較してみないと分からない。

PythonでEpochごとのLoRAを自動比較してみた結果#

複数できたLoRAのどれを使えばいいか分からなかったので、ComfyUIとPythonを組み合わせて、各EpochのLoRAで同じ条件の画像を生成して一括比較するスクリプトを書いてみた。

※比較用のスクリプトはGitHubで公開中:ryo50/lora_compare

比較するときは以下のポイントを固定するのがコツ。

  • Seed値を固定する
  • 複数のプロンプト(ポーズや衣装)で生成する
  • LoRAの適用強度(0.5〜1.0など)を変えて試す
  • LoRAなしの素の生成結果と比較する

↓作成した比較表
EpochごとのLoRA

実際に比較してみて分かった挙動#

初期のEpoch(1〜4あたり)だと、まだ学習が浅くてキャラクターの特徴や衣装の再現が甘い状態だった。

「過学習するかな?」と思って警戒していたが、今回の設定ではむしろ後半のEpoch 7〜10あたりが一番期待通りの再現度でしっくりきた。

見た目上「Epoch変わっても全然後差分出てないじゃん!!」みたいなケースも結構ある。
全量出力して目視比較しないと、本当に差分が出てるのか・どのEpochが最適なのかは分からない状態だったので、やっぱり全Epoch並べて比較するのは大事だなと痛感。

まとめ#

今回キャラクターLoRAを作ってみて分かったポイント。

  • LoRAはプロンプトの要約ではない:ベースモデルの動きを変える追加パラメータ
  • 画像1枚より50枚:色んな角度・ポーズを用意した方がキャラの特徴を学習しやすい
  • パラメータ設定を固める:Network Rank 32/16、AdamW8bit、cosineなどで再現性を確保
  • 生成結果の比較が必須:今回の検証では後半(Epoch 7〜10)がベストだった。Python等で一括生成して比較表を作るのが一番確実

LoRA学習は「学習して終わり」じゃなくて、生成結果を見比べながらベストなEpochを選ぶまでがセットだなと実感した。

参考#

  • 今回のLoRA学習環境
bmaltais
/
kohya_ss
Waiting for api.github.com...
00K
0K
0K
Waiting...
  • LoRA比較コード
ryo50
/
lora_compare
Waiting for api.github.com...
00K
0K
0K
Waiting...
【SDXL/kohya_ss】キャラクターLoRAは画像1枚で作れる?50枚学習やEpoch別比較で分かった違い
https://tech.storias-blog.com/blogs/understanding_lora/
作者
Storia
公開日
2026-10-09