DCAI
Loading Light/Dark Toggl

オリジナルキャラクターLoRAの作り方【PonyV6学習編】PonyV6のキャラクター学習

⏱️18min read
📅 2025年6月27日
カテゴリー:📂 AIイラスト上級
オリジナルキャラクターLoRAの作り方【PonyV6学習編】PonyV6のキャラクター学習のメイン画像
Supported by

今回の記事はSDXLの1つPony Diffusion V6 XL(PDXL)を使ってキャラクターLoRAを学習します。PDXLは、Stable Diffusion XL(SDXL)をベースにした高品質なT2Iの一種で、とくにアニマルや人間、などのキャラクターを得意としたモデルになります。Pony派生モデルも多く公開されているので、Ponyベースで学習したLoRAをさまざまなスタイルで生成する事ができます。Kohya ss GUIのインストールや、データセットの作り方が分からない方は、まずは下記の記事を読んでみましょう。

また、LoRA学習がはじめての方は学習が早く終わるSD1.5モデルから為すことをおススメします。

PR
Image of 生成AI 真の勝者
生成AI 真の勝者
🔗Amazonリンク
Image of 大規模言語モデルを使いこなすためのプロンプトエンジニアリングの教科書
大規模言語モデルを使いこなすためのプロンプトエンジニアリングの教科書
🔗Amazonリンク

Kohya ss GUIのデフォルト値を使った学習

まずは、キャラクター学習編でいつも最初に紹介しているKohya ss GUIのデフォルト値を使った学習をしてみましょう。ベースモデルは下記のモデルを使います。

データセット

データセットは「オリジナルキャラクターLoRAの作り方【データセット編】学習画像の制作とキャプション」で作成したデータを元に学習します。同じデータセットで学習させたい場合は、Patreonで公開していますが、有料サポーター様のみダウンロードが可能となっています。

データセット画像サンプル一覧 

デフォルトパラメーター

データセットの準備ができたら、下記のパラメーターを使って学習します。Ponyモデルの学習用に、少しだけ値を変更しています。入力または変更が必要な部分は赤文字で記載しています。

  • Pretrained model name or path:ponyDiffusionV6XL_v6StartWithThisOne.safetensors
  • Trained Model output name:DCAI_Girl_Pony_Def ※モデルの出力名
  • Instance prompt:dcai-girl ※今回使うキャプション方式では値は無視されますが、入力しないとエラーになるため。
  • Class prompt:1girl ※上記と同じ理由で入力。
  • Repeats:5 [デフォルト:40] ※学習元画像が100枚で、トータル画像を500にしたいため。
  • Presets:none
  • LoRA type:Standard
  • Train batch size:1
  • Epoch:1
  • Max train epoch:0
  • Max train steps:1600
  • Save every N epochs:1
  • Seed:123 [デフォルト:0 = ランダム] ※パラメーターをコントロールする為に適当な数字を入れます。
  • LR Scheduler:cosine
  • Optimizer:AdamW8bit
  • Learning rate:0.0001 (1e-4)
  • Text Encoder learning rate:0.00005 (5e-5) [デフォルト:0.0001 (1e-4)] ※公式ドキュメントの推奨デフォルト値に変更しています。
  • Unet learning rate:0.0001 (1e-4)
  • LR warmup (% of total steps):10
  • Max resolution:1024, 1024 [デフォルト:512, 512] ※SDXLの解像度
  • Network Rank (Dimension):8
  • Network Alpha:1
  • clip_skip:0 [デフォルト:1] ※SDXLではClip skipが無効化される為

学習したLoRAを使ったテスト生成

学習されたLoRAを、A1111 WebUIを使って生成した結果、下図の様になりました。生成には学習のベースモデルと同じ「ponyDiffusionV6XL_v6StartWithThisOne.safetensors」を使用しています。下はLoRA適用前の画像になります。

デフォルト値を使ったLoRAのサンプル 
デフォルト値を使ったLoRAのサンプル(LoRA無し) 

一見習熟度が高く見えますが、紹介した画像はseedが当たりだったのでよく見えてます。実際は衣装が不安定な生成をしていました。

Ponyモデル特有のスコアタグについて

Ponyモデルの特徴としてスコアタグがあります。下記に一覧をまとめたので見ていきましょう。

  • score_9:極めて高品質(最高ランク)
  • score_8_up:高品質(上位20%程度)
  • score_7_up:良好(中〜上クラス)
  • score_6_up:普通(中品質)
  • score_5_up:やや低め(やや荒い、構図が甘いなど)
  • score_4_up:低品質(破綻やぼやけあり)

たとえばscore_8_upを指定すれば「スコア8以上」を言う意味ですが、score_9, score_8_upと同時指定して使われることが多いです。

この品質タグを画像のキャプションに含めることによって学習品質をある程度調節する事ができます。

注意点としては、学習画像が明らかに低い場合にscore_9を使うとLoRAモデルが不安定になる場合があります。また、学習画像に品質のバラつきがある場合はスコアタグを低めscore_6_upにしたり、使わないようにしましょう。

比較モデルは下記の設定で学習して、それぞれにスコアタグを適用しています。

学習画像数:100
Repeats:5
Train batch size:1
Epoch:4
Max train steps:0
Seed:123
LR Scheduler:cosine_with_restarts
Optimizer:AdamW
Optimizer extra arguments:betas=0.9,0.99 weight_decay=0.05
Learning rate:0.0004 (4e-4)
Unet learning rate:0.0004 (4e-4)
Text Encoder learning rate:0.00005 (5e-5)
LR warmup (% of total steps):10
LR # cycles:2
Max resolution: 1024, 1024
Network Rank (Dimension):32
Network Alpha:16
clip_skip:0 ※SDXLではClip skipが無効化される為

各モデルをA1111 WebUIで生成しています。プロンプトはスコア無し、score_9や、すべてのスコア入りまで色々なスコア設定で生成しています。

生成設定は以下の様になっています。

基本ポジティブ-プロンプト
dcai-girl, 1girl, solo, looking at viewer, solo, short hair, orange hair, brown eyes, animal ears, dress, meadow, sky, day, masterpiece, best quality
ネガティブ-プロンプト
worst quality, low quality, bad anatomy, realistic, lips, inaccurate limb, extra digit, fewer digits, six fingers, monochrome, nsfw
checkpoint: ponyDiffusionV6XL_v6StartWithThisOne.safetensors
Steps: 20
Sampler: DPM++ SDE
Schedule type: Karras
CFG scale: 6
Seed: 3740385248
Size: 1024x1024
VAE: sdxl.vae.safetensors
Pony学習スコア比較-スコア無し
スコア無しの生成
Pony学習スコア比較-Score_4_up
score_4_upの生成
Pony学習スコア比較-Score_6_up
score_6_upの生成
Pony学習スコア比較-Score_8_up
score_8_upの生成
Pony学習スコア比較-Score_9
score_9の生成
Pony学習スコア比較-Score-All
全部入り「score_9, score_8_up, score_7_up, score_6_up, score_5_up, score_4_up」の生成
Pony学習スコア比較-Score-All-Negavite
score全部入り+ネガティブプロンプト「score_6, score_5, score_4」の生成

今回のデータセットではスコア無しかscore_8_up辺りで学習して、score_8_upの生成もしくはscore全部入り+ネガティブプロンプトの生成が最適ではないでしょうか?score_4_upも品質が良いのは意外でした。

データセットのキャプション編集はA1111 WebUIの拡張機能「WebUI Dataset Tag Editor」の「Batch Edit Captions」にある「Search and Replace」を使います。

Search and replaceページ 

「Search Text」に1girl,と入力して「Replace Text」に1girl, score_8_up,と入力すれば書き足す事ができます。書き換える前に、Search and Replace inをEntire Captionに選択して全体を書き換えしましょう。詳しい方法を知りたい方は下記の記事を参照してください。

Supported by

Prodigyオプティマイザーを使った学習

今回はProdigyオプティマイザーを使って学習してみようと思います。

Prodigyオプティマイザーとは、基本的にはAdamWなのですが、最近のLoRAやDreamBoothの学習で注目されている適応学習率(Adaptive Learning Rate)最適化アルゴリズムを使ったオプティマイザーです。とくに低い学習率でも高速収束しやすいことから、LoRAの微調整や高品質学習に向いているオプティマイザーです。

Prodigyオプティマイザーの使い方

使い方としては基本的にはKohya_ss GUIのParametersの中のBasicにあるOptimizerからProdigyを選択するだけです。なお、LarningRateはUnet/TextEncoder共に1.0で学習します。学習率を下げたい場合はLRを下げるのではなくOptimizer extra argumentsにd_coef=0.5(デフォルト:1.0)の様に記入することである程度調整できます。

公式ドキュメントではスケジューラーのcosine annealingを推奨していますが、cosine_with_restartspolynomialでも高品質なLoRAを学習させることができます。

Prodigyオプティマイザーを使ったKohyaSS_GUIの設定

それではProdigyオプティマイザーの使ってKohya_ss GUIを設定していきましょう。使用するデータセットは先ほどのデフォルトパラメーターの学習で使用したのと同じデータセットをつかいます。今回のデータセットでは、Ponyのスコアタグを使うと、学習元画像のイメージスタイルが強く出てしまうので使いませんでした。

Optimizer extra argumentsについて

前回のSDXLの設定でも説明しましたが、Optimizer extra argumentsを使ってGUIで設定できないパラメーターを触っていきます。

まずは、リポジトリを参考に引数を見ていきましょう。

リポジトリより一部抜粋
  • params: 最適化するパラメーターのイテラブル、またはパラメータグループを定義する辞書のリスト。
  • lr: 学習率調整パラメーター。Prodigyの学習率を増減させます。(デフォルト: 1.0)
  • betas: 勾配およびその二乗の移動平均を計算するための係数。(デフォルト: (0.9, 0.999))
  • beta3: 移動平均を用いてProdigyのステップサイズを計算するための係数。None に設定された場合、beta2 の平方根の値が使用されます。(デフォルト: None)
  • eps: 数値的安定性を向上させるために平方根演算の外側の分母に加えられる項。(デフォルト: 1e-8)
  • weight_decay: L2正則化としての重み減衰。(デフォルト: 0)
  • decouple: AdamWスタイルのデカップルされた重み減衰を使用するかどうか。(デフォルト: True)
  • use_bias_correction: Adamのバイアス補正を有効にするかどうか。(デフォルト: False)
  • safeguard_warmup: ウォームアップ段階での問題を回避するために、D推定値の分母から学習率(lr)を除外します。(デフォルト: False)
  • d0: D適応のための初期D推定値。変更の必要はほとんどありません。(デフォルト: 1e-6)
  • d_coef: Dの推定値を求める式中の係数。0.52.0 なども一般的に効果があります。このパラメーターを変更することで最適化手法を調整するのが推奨されます。(デフォルト: 1.0)
  • growth_rate: Dの推定値がこの乗数レート以上に急激に増加しないように制限します。1.02 などの値を使うと、ある種の学習率ウォームアップ効果が得られます。(デフォルト: float(‘inf’)(無制限))
  • fsdp_in_use: シャード化されたパラメーターを使用している場合は True に設定する必要があります。オプティマイザーはこれを自動検出しようとしますが、PyTorchの組み込み以外の実装を使っている場合は自動検出が機能しません。(デフォルト: False)
  • slice_p: 各テンソルの p 番目の要素のみを用いて学習率適応の統計を計算することでメモリ使用量を削減します。1 より大きい値は通常のProdigyに対する近似となります。11 付近の値が妥当です。(デフォルト: 1)

この中でも今回は下記の引数を変更します。コピーしてOptimizer extra argumentsに貼り付けましょう。記入方法(= の前後にスペース禁止、カンマ区切りではなく、スペース区切り等)にご注意ください。

weight_decay=0.05 d_coef=1.3 betas=0.9,0.99 safeguard_warmup=True use_bias_correction=True

スケジューラーについて

今回はpolynomialを使っていきます。polynomialはは、学習率(learning rate)を多項式曲線にしたがって減衰させるスケジューリング手法です。最初は速く学び、後半に学習率を抑える目的で使われます。

GUIのLR powerで学習率の減衰カーブを制御できます。下記のTensorBordのグラフを見てみましょう。

polynomial-curves
LR power 赤:0.5 / 緑:1 / シアン:2 / ピンク:7 / 青:10

LR powerを変えることにより色々な学習率の減衰カーブを作ることができます。また、デフォルトの1はカーブが掛からないので、スケジューラーの「linear」と同じになります。

今回はLR powerを2にして学習するのでシアンのカーブになります。

学習パラメーター

先ほどの2つの設定に加えて、以前の記事でも紹介したShuffle captionなどを設定します。下記の一覧で入力または変更が必要な部分は赤文字で記載しています。

  • Pretrained model name or path:ponyDiffusionV6XL_v6StartWithThisOne.safetensors
  • Trained Model output name:DCAI_Girl_Pony
  • Instance prompt:dcai-girl※今回使うキャプション方式では値は無視されますが、入力しないとエラーになるため。
  • Class prompt:1girl※上記と同じ理由で入力。
  • Repeats:5 [デフォルト:40]
  • Presets:none
  • LoRA type:Standard
  • Train batch size:1
  • Epoch:6 [デフォルト:1] ※総ステップをEpochで調節する為
  • Max train epoch:0
  • Max train steps:0 [デフォルト:1600] ※総ステップをEpochで調節する為
  • Save every N epochs:0 [デフォルト:1] ※途中経過を見る必要が無かった為
  • Seed:123 [デフォルト:0 = ランダム]
  • LR Scheduler:polynomial [デフォルト:cosine]
  • Optimizer:Prodigy [デフォルト:AdamW8bit]
  • Optimizer extra arguments:weight_decay=0.05 d_coef=1.3 betas=0.9,0.99 safeguard_warmup=True use_bias_correction=True
  • Learning rate:1.0 [デフォルト:0.0001 (1e-4)] ※Prodigy推奨値
  • Text Encoder learning rate:1.0 [デフォルト:0.0001 (1e-4)] ※Prodigy推奨値
  • Unet learning rate:1.0 [デフォルト:0.0001 (1e-4)] ※Prodigy推奨値
  • LR warmup (% of total steps):0 [デフォルト:10] ※Prodigy側で制御する為
  • LR power:2 [デフォルト:1]
  • Max resolution:1024, 1024 [デフォルト:512, 512] ※SDXLの解像度
  • Network Rank (Dimension):32 [デフォルト:8]
  • Network Alpha:16 [デフォルト:1]
  • Keep n tokens:8 [デフォルト:0] ※インスタンスとクラスのトークン数
  • clip_skip:0 [デフォルト:1] ※SDXLではClip skipが無効化される為
  • Shuffle caption:true [デフォルト:false]
  • CrossAttention:sdpa [デフォルト:xformers]

以上のパラメーターで学習したTensorBordグラフが以下の様になりました。step:1900辺りが過学習の兆候に見えますが、最終的にlossが下がっているのでOKとしました。

今回のloss/average 
今回のlr/d*lr/group1
学習率の変化。初期の部分はsafeguard_warmup=Trueのウォームアップになります。

学習結果

学習結果としては、それなりに高品質なLoRAができたと思います。顔面の品質は寄りの画角は問題ないのですが、引きの場合はADetailerの使用をおススメします。また、スカートの前部に布が生成される場合があったのでネガティブプロンプトにapronを追加しています。全体の生成設定は以下の様になっています。

ポジティブ-プロンプト
dcai-girl, 1girl, solo, looking at viewer, solo, short hair, orange hair, brown eyes, animal ears, dress, blue dress, black skirt,  upper body, white thighhighs, thigh strap, meadow, sky, day, masterpiece, best quality, score_9, score_8_up, score_7_up, score_6_up, score_5_up, score_4_up <lora:DCAI_Girl_Pony:1>
ネガティブ-プロンプト
score_6, score_5, score_4, apron, worst quality, low quality, bad anatomy, realistic, lips, inaccurate limb, extra digit, fewer digits, six fingers, monochrome, nsfw
checkpoint: ponyDiffusionV6XL_v6StartWithThisOne.safetensors
Steps: 20
Sampler: DPM++ SDE
Schedule type: Karras
CFG scale: 6
Seed: 3740385248
Size: 1344x768
VAE: sdxl.vae.safetensors
ADetailer: on
Hires upscaler: 4x-UltraSharp

以上のパラメーターで生成したのがコチラです。

PonyLoRA学習の最終結果 

同系統のチェックポイントモデルに適用する

Pony系統のチェックポイントであれば今回学習したLoRAを適用する事ができます。以下にLoRAを適用したサンプルを載せておきます。生成パラメーターは先ほどと同じパラメーターで生成しています。

PonyLoRA学習の適用-EbaraMFCGPonyMix
EbaraMFCGPonyMix
PonyLoRA学習の適用-EvaClausMix Pony XL
EvaClausMix Pony XL
PonyLoRA学習の適用-Featureless Mix Pony
Featureless Mix Pony
PonyLoRA学習の適用-Nova Anime XL
Nova Anime XL
PonyLoRA学習の適用-mergeij✨ PONY & IL
mergeij✨ PONY & IL

最終結果のLoRAはCivitaiにて公開していますので興味のある方はダウンロードしてみましょう。

まとめ

今回はPony Diffusion V6 XL(PDXL)を使ってキャラクターLoRAを学習してみました。Ponyと言えばNSFWコンテンツが多く見られますが、SFWコンテンツとしても非常に優秀なモデルでした。執筆時はIllustrious-XL等の影響で前ほどの活気は無くなってきましたが、かなりの種類の派生モデルもあるのでLoRAモデルを作れば多くの事ができるでしょう。

さて、これまでSD1.5・SDXL・Ponyと学習方法を解説してきました。この流れで次回はIllustrious-XLでLoRAを学習させようを思っています。

PR
Image of 落合陽一責任編集 生成AIが変える未来 ー加速するデジタルネイチャー革命ー (扶桑社ムック)
落合陽一責任編集 生成AIが変える未来 ー加速するデジタルネイチャー革命ー (扶桑社ムック)
🔗Amazonリンク
Image of はじめてでもここまでできる Stable Diffusion画像生成[本格]活用ガイド
はじめてでもここまでできる Stable Diffusion画像生成[本格]活用ガイド
🔗Amazonリンク
Supported by