画風を表現するLoRAを作成する (SDXL版)

SDXLで画風を表現するLoRAを作成する手順を紹介します。

概要

これまでの調査結果を踏まえて、SDXLで画風を表現するLoRAを作成します。

方針

基本方針

画風を表現する場合は画像の枚数は比較的少なくてよいですが、学習回数が増えると学習画像が出力結果に強く影響を与えてしまうため、 バリエーションを増やしつつ、品質の良い画像を多めに用意する方針が良さそうです。
学習は弱くても雰囲気は表現される傾向があるため、弱めの浅い学習とする方針で進めます。

学習回数・エポック(Epoch)数

学習は弱くても学習元の画像の雰囲気は比較的よく反映されるため、学習回数は低めで切り上げます。

network_dim

network_dimの値は、低いと少ない学習で学習元のイメージが強く反映されてしまい、オリジナルのモデルの画風の反映が弱くなってしまうため、 network_dimの値を高い値に設定します。しかし、値が大きすぎると、LoRAのファイルサイズが増えることや、学習時のVRAM使用量が増えるため、 学習に要するスペックと処理時間を考慮してなるべく高い値とします。

network_alpha

検証結果から生成画像の崩れを極力防ぐことを優先としたいため、"1"とします。

学習率

今回は、"1e-4" とします。

テキストエンコーダーを含めた学習にするか

今回は画風を表現するLoRAのため、形状を厳密に再現する必要がないため、テキストエンコーダーの学習はしません。

ベースモデル

今回はSDXLのベースモデルに対して学習を実行します。

学習元データ

13個のデータセットを利用します。合計519画像のデータセットです。
画像はTaggerでタグ付けをします。今回は先頭にトリガワードを付与するのみで自動タグ付けされたタグ内容の精査は実施しません。
Taggerのタグ付けの手順はこちらの記事を参照してください。

学習データには低い品質の画像を含めないよう注意します。全体の2%程度の画像であっても、タグ付けしていないと特徴を覚えてしまうため、品質の低い画像は学習データセットから外します。 また、学習を希望しない部分やパーツは取り除いたり、ペイントソフトで修正するなど、データセット全体のクオリティを高く保つための修正は積極的に実施したほうが良いです。物の形状やポーズなどの概念の学習では低品質の画像が含まれていてもそれほど影響がない印象ですが、 仕上げやカラーリング、レイアウトに関する学習では、学習画像を厳選したほうが最終的な結果は良くなる印象があります。

人間(データセット製作者)が、画像を見て、まあまあ良い画像と判断してデータセットに追加した場合、 その画像の良いところをデータセット製作者が強く評価しており、学習画像の良くない部分は過小評価しているケースがあります。 AIの学習ではどの画像のどの部分も同じように学習されるため、画像の良くない部分も同じ重みで学習してしまうため、 人間の感覚と学習結果にギャップが出る印象があります。
学習画像は超厳選して、(データセット製作者から見て)素晴らしいクオリティの画像のみで データセットを作成したほうが最終結果は良くなる印象です。

設定ファイル

以下の設定ファイルとなりました。
exec.bat
accelerate launch --num_cpu_threads_per_process 1 sdxl_train_network.py --config_file=D:\data\lora-xxxx\config.toml
config.toml
[model_arguments]
pretrained_model_name_or_path = "D:\\data\\model\\sdXL_v10.safetensors"

[additional_network_arguments]
network_train_unet_only = true
cache_text_encoder_outputs = true
network_module = "networks.lora"

[optimizer_arguments]
optimizer_type = "AdamW"
learning_rate = 1e-4
network_dim = 32
network_alpha = 1

[dataset_arguments]
dataset_config = "D:\\data\\lora-xxxx\\dataset.toml"
cache_latents = true

[training_arguments]
output_dir = "D:\\data\\lora-xxxx\\output"
output_name = "lora-xxxx"
save_every_n_epochs = 1
save_model_as = "safetensors"
max_train_steps = 10000
xformers = true
mixed_precision= "bf16"
gradient_checkpointing = true
persistent_data_loader_workers = true
keep_tokens = 1

[dreambooth_arguments]
prior_loss_weight = 1.0

13個のデータセットを利用します。合計519画像のデータセットです。
dataset.toml
[general]
enable_bucket = true 

[[datasets]]
resolution = 1024
batch_size = 4

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\1'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\2'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\3'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\4'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\5'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\6'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\7'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\8'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\9'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\10'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\11'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\12'
caption_extension = '.txt'
num_repeats = 1

[[datasets.subsets]]
image_dir = 'D:\data\lora-xxxx\13'
caption_extension = '.txt'
num_repeats = 1

学習

上記の設定で学習します。学習はGeForce RTX 4090で2時間25分を要しました。

出力結果

次のプロンプトで出力テストをします。
プロンプト:トリガワードなし
Prompt: <lora:(lora)> 1 girl, summer scene background, anime style
Negative prompt: worst quality, low quality
プロンプト:トリガワードあり
Prompt: <lora:(lora)> sks, 1 girl, summer scene background, anime style
Negative prompt: worst quality, low quality

SDXL

LoRAなし

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像1
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像2

Epoch5

約500画像のデータセットのため、Epoch5の段階でも絵柄が出力結果にかなり反映されています。 特にトリガワードありのほうは顕著です。 ただし、背景を含めた全体の画像トーンが学習元の画像のテイストにはなりませんでした。これは学習元データの背景数が少ないことが原因と考えられます。
トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像3
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像4

Epoch10

手の崩れなどがありますが、LoRAなし状態でも崩れはあるため、LoRAの影響ではなさそうです。
トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像5
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像6

Epoch20

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像7
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像8

Epoch30

トリガワードありの出力結果は若干崩れが多い印象です。
トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像9
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像10

Epoch40

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像11
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像12

Epoch50

背景に対してキャラクターが鮮明すぎる傾向にあります。学習がキャラクターのみに対して強く影響しており、背景部分が学習元の画像をあまり反映できていないことが原因と考えられます。
学習元データの背景数が少ないことと、今回プロンプトが学習元の画像の背景にヒットするワードがないことが推測されます。
トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像13
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像14

Epoch60

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像15
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像16

Epoch70

キャラクターが半透明状態や溶けている画像がいくつか見られる状態になります。学習しすぎの可能性がありそうです。
トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像17
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像18

評価・所感

Epochが30以上になると顔は鮮明で背景がソフトな出力になる傾向です。 学習元の画像がシャープな画像が多いためと考えられますが、背景部分の学習が進まずにキャラクターの学習のみが進んでしまっている印象です。
おそらく学習データのタグ付けがキャラクター部分に集中しており、背景のタグが十分に記述されていない可能性が高そうです。 学習データのタグ付けに関しては、自動タグの設定後に精査や見直しが必要な印象です。

その後、学習元の画像を調査した結果、学習元の画像で、シャープでないぼかしのある背景が多い意外と多いことや、 シャープな背景に含まれる特有のワードを含めていないことが原因の可能性が高く、学習自体は正しく実行されている状態との見解です。

学習元の画像の雰囲気はEpoch5程度でも表現できているため、学習元画像が500枚程度であれば、多くても30Epoch以下で十分な印象です。

Counterfeit XL v1.0

作成したLoRAをCounterfeit XL v1.0に適用して、出力画像を確認します。

LoRAなし

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像19
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像20

Epoch5

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像21
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像22

Epoch10

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像23
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像24

Epoch20

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像25
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像26

Epoch30

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像27
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像28

Epoch40

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像29
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像30

Epoch50

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像31
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像32

Epoch60

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像33
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像34

Epoch70

トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像35
トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像36

評価・所感

Counterfeit XLの絵柄と学習元画像の絵柄が似ているため、違いが分かりにくいですが、Epoch20付近では学習元画像の特徴が出ている印象です。
Epochが40以上になると体の一部分が透明化したり、溶けるような画像の結果になり、学習しすぎの傾向が見られます。
また、学習元の画像の影響のためか、学習が進むとロングショットの画像が減る傾向になります。

他のデータセットでの結果例

データセット2

10個のデータセットを利用します。合計253画像のデータセットを利用して学習し、LoRAを作成します。

次のプロンプトで出力テストをします。
プロンプト
Prompt: <lora:(lora)> 1girl, yellow shirt, upper body, brown hair, caramel choker, anime shading, standing, medium full shot
Negative prompt: worst quality, low quality

SDXL

LoRAなし:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像37
LoRAなし:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像38
Epoch10:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像39
Epoch10:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像40
Epoch20:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像41
Epoch20:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像42
Epoch30:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像43
Epoch30:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像44
Epoch40:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像45
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像46
Epoch50:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像47
Epoch50:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像48

評価・所感

Epochが20程度から学習画像の特徴が表れ始める傾向です。 学習画像の特徴をやや極端に学習する傾向があります。このデータセットのLoRAはやや扱いにくい印象を持ちますが、 Epoch20から30の間がバランスが良さそうな印象です。40以上は特徴が極端に出すぎているように見えます。

CounterfeitXL

LoRAなし:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像49
LoRAなし:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像50
Epoch10:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像51
Epoch10:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像52
Epoch20:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像53
Epoch20:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像54
Epoch30:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像55
Epoch30:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像56
Epoch40:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像57
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像58
Epoch50:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像59
Epoch50:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像60
Epoch60:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像61
Epoch60:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像62

評価・所感

モデル自体の絵柄やカラーが学習元画像と似ているため、LoRAの適用をしても効きが弱い印象です。
効きが弱いため、大きいEpoch数を適用しても、崩れはなく画像生成できます。学習元画像の特徴はEpoch40程度から出始めているように見えます。

データセット3

5個のデータセットを利用します。合計107画像のデータセットを利用して学習し、LoRAを作成します。

次のプロンプトで出力テストをします。
プロンプト
Prompt: <lora:(lora)> 1girl, full body, anime style
Negative prompt: worst quality, low quality

SDXL

LoRAなし:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像63
LoRAなし:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像64
Epoch5:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像65
Epoch5:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像66
Epoch10:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像67
Epoch10:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像68
Epoch20:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像69
Epoch20:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像70
Epoch30:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像71
Epoch30:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像72
Epoch40:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像73
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像74
Epoch50:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像75
Epoch50:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像76

評価・所感

Epochが20程度から学習画像の特徴が表れ始める傾向です。学習の進みが意外と速く、Epoch40ではかなり学習元データの影響が強く出ています。 また、出力画像の崩れも目立ちます。
100画像程度の学習では学習回数を増やした場合、画風ではなく形状を覚えてしまう傾向にあるようです。 学習画像の影響が強いため、画像の雰囲気を表現するためのLoRAとして利用する場合は、Epoch20以下を利用する方針が良さそうです。

CounterfeitXL

LoRAなし:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像77
LoRAなし:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像78
Epoch5:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像79
Epoch5:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像80
Epoch10:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像81
Epoch10:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像82
Epoch20:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像83
Epoch20:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像84
Epoch30:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像85
Epoch30:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像86
Epoch40:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像87
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像88
Epoch50:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像89
Epoch50:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像90

評価・所感

絵柄は反映されにくい印象ですが、服のデザインや体形、色遣いが学習元画像を反映している印象です。 Epoch30程度から学習画像の特徴が現れます。Epoch数が増えると学生服のデザインが増えます。また、体形がより細身になります。
Epoch50を利用しても問題なく画像生成できます。

データセット4

4個のデータセットを利用します。合計285画像のデータセットを利用して学習し、LoRAを作成します。

次のプロンプトで出力テストをします。
プロンプト
Prompt: <lora:(lora)> 1girl, full body, blue one-piece dress, long skirt, anime style, white ribbon on head
Negative prompt: worst quality, low quality

SDXL

LoRAなし:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像91
LoRAなし:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像92
Epoch5:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像93
Epoch5:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像94
Epoch10:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像95
Epoch10:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像96
Epoch20:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像97
Epoch20:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像98
Epoch30:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像99
Epoch30:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像100
Epoch40:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像101
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像102

評価・所感

Epoch20付近から学習画像の特徴が強く出始めます。Epoch数が上がっても画像の崩れが少ない結果になっています。

CounterfeitXL

LoRAなし:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像103
LoRAなし:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像104
Epoch5:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像105
Epoch5:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像106
Epoch10:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像107
Epoch10:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像108
Epoch20:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像109
Epoch20:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像110
Epoch30:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像111
Epoch30:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像112
Epoch40:トリガワードなし
画風を表現するLoRAを作成する (SDXL版):画像113
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像114

評価・所感

変化がわかりにくいですが、Epoch30以上では学習元の画像の体形の特徴である頭身が低めのキャラクターが出力できています。
学習画像の特徴がEpoch20付近から多くなっています。スカートをつまむポーズがなくなり、腕を外側に開くポーズが増えていることが学習元画像の特徴になります。

ちびキャラ

このデータセットではちびキャラの画像も別トリガワードで学習しています。
プロンプト
Prompt: <lora:(lora)> 1girl, army uniform, manga style, chibi
Negative prompt: worst quality, low quality

LoRAなしConterfeitでは金髪の洋風なちびキャラが出力されますが、LoRAあり版では、金髪が減り和風的なデフォルメキャラクタが出力できています。
Epoch40:トリガワードあり
画風を表現するLoRAを作成する (SDXL版):画像115
LoRAなし
画風を表現するLoRAを作成する (SDXL版):画像116

AuthorPortraitAlt
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。 最近は生成AIの画像生成の沼に沈んでいる。
作成日: 2023-08-13
Copyright © 1995–2025 iPentec all rights reserverd.