見出し画像

LoRAによる画風学習における最適なキャプションの調査

はじめに

最近パソコンを新調してから生成AIにはまっているSuibariです。

生成AIの学習済みモデルに対し追加学習をさせるLoRA(Low-Rank Adaption of Large Language Model)という手法があります。
LoRAをイラスト生成AIにもちいることで、特定のキャラクターを高い再現度で生成したり、学習元の画風を再現させたりすることが可能です。

私はイラストを描くので、自分の画風を再現させたイラストを生成することで、AIがどこまで自分の絵柄というのを再現できるのか興味がありました。あと、自分の絵を客観的に観て改善点を考えられるとかもありますかね。
この記事では画風学習のLoRAについて扱います。

イラスト生成AIにおけるLoRAには3つほど方式があり、詳細は割愛しますが、キャプションという学習元画像それぞれの特徴を示すファイルを用いて学習を行う手法(DreamBoothキャプション方式)が普及しています。
LoRAによる画風学習においてこのキャプションをどのように整理すればよいのかはネットに記事がたくさんありますが、自分の調べる限り、記事によって結論が異なっていました。

  • キャプション内のトリガーワードは必要という記事、不要という記事

  • キャプション整理は不要(生成キャプションそのまま)という記事、一部削除が必要という記事、全削除が必要だったという記事

また、どのようにキャプション整理したかと、その結果の生成イラストがどうなったか、の全パターンを比較して評価した情報も調べる限りありませんでした。

本記事では、この結局どう整理すればいいの? という問題を解決するために、以下パターンでキャプション整理を行い、それぞれの生成イラストについて評価を行うことで、画風再現LoRAにおいてあるべきキャプション整理の方針を見つけます。

  1. トリガーワードあり+キャプション無編集

  2. トリガーワードなし+キャプション無編集

  3. トリガーワードのみ

  4. キャプション全削除

画風の自己評価

結論を述べるために、まずリファレンスとして自分の絵を1枚貼ります。(このイラストをキャラごとにばらした画像が学習対象にも含まれています)

ミクさん

へたくそなのはしょうがないとして、イラストの特徴としては以下かなと思います。

  • 準アニメ塗り

  • 描きこみが少なくシンプルめな絵柄

  • 髪の描き方など立体感に乏しい

  • 髪のハイライトはシンプル系。横に一本線引くだけか、十字にするか

  • 目の形は京アニ目と下まつげ重視タイプの混合という感じ(京アニの名を出すのは恐れ多いですが…)

    • 評価の参考にした目の描き方分類は参考文献にはっておきます

  • 目の塗り方はシンプル。黒+何かしらの色でグラデーション作ってハイライト入れて終わりという感じ

  • 色使いはどちらかといえばはっきりとしたハイコントラストを好む

このあたりの特徴が学習により再現できているかを評価していきたいと思います。

学習対象イラストの中でもミクさんが多い形になったので、生成イラストもミクさんにすることにします。

結論

画風学習させる上では、キャプションは無編集がいい。
トリガーワードも安定度を上げるうえであったほうがいい。
ないと、学習対象でないイラストを生成したときに自分の絵柄でなくなることが多い。

どうしてそう言えるか、パターンごとの生成結果を次章に示します。

生成結果

パターン1:トリガーワードあり+キャプション無編集

トリガーワードあり+キャプション無編集

総評:◎
完ぺきに近い。
下まつげがないイラストもあるのは気になる。

  • アニメ塗りになっている

  • 絵柄がシンプル

  • 髪ものっぺり

  • ハイライトも近い

  • 目の形もなかなかいい。ただ下まつげがないイラストもある

  • 目の塗り方もシンプル

  • ハイコントラスト

パターン2:トリガーワードなし+キャプション無編集

トリガーワードなし+キャプション無編集

総評:○
かなりいい。
ただ全体的に下まつげがない。
あと、トリガーワードがないことにより絵柄との紐づけが不安定なのか、自分があまり描いてないものをプロンプトに指定するとほぼAnyLoraの元の絵柄となる。

  • アニメ塗りになっている

  • 絵柄がシンプル

  • 髪がわずかに立体感あり

  • ハイライトが少し複雑めになっている

  • 下まつげ成分がなくなり京アニシンプル風になった感じ

  • 目の塗り方もシンプル

  • ハイコントラスト

パターン3:トリガーワードのみ

トリガーワードのみ

総評:×
普通にうまくて自分じゃない。
塗り方だけは自分っぽさを感じるが、立体感がダンチ。
何かしら学習はできてるがうまく反映されていないように見える。

  • アニメ塗りだが厚塗り要素も見える

  • 毛束感などで描きこみ多い

  • 髪の立体感がある

  • ぽつぽつしたハイライトを使っていて自分とは違いそう

  • 目の形は単純せといろはタイプでよくみる感じ

  • 目の塗り方はシンプルめ

  • ハイコントラスト

パターン4:キャプション全削除

キャプション全削除

総評:××
どう見ても元モデル(AnyLora)です、本当にありがとうございました。

  • 厚塗り

  • 描きこみ抜群

  • 髪の立体感がすごい

  • ハイライトの置き方が絵によって安定せずAI感あふれる

  • 目の形は2016年型かアジア絵師目か

  • 目の塗り方は緑+黒+もう一色使ってそうで複雑そう

  • 比較的淡い色使い

内容

PCスペック

  • CPU:Intel Core i5 12400F

  • RAM:DDR5 32GB

  • GPU nVIDIA RTX3060Ti GDDR6X VRAM8GB

  • Strage:M.2 NVMe 1TB

  • Power:850W GOLD認証

ツールバージョン

  • CUDA11.7

学習対象画像

私がpixivに上げているイラストのうち、2012年6月27日以降のイラスト計41枚を使いました。

日付を決めたのは、この日付のイラスト以降ある程度画風が安定しているように見えたからです。

キャプション生成ツール

キャプション生成はStable Diffusion Web UIの拡張機能wd14-taggerを用いました。

トリガーワードはsuibariとしました。
Thresholdは0.5としました。

LoRA学習実行ツール

LoRA学習はkohya氏のsd-scriptsを使用しました。

学習パラメータを以下に貼ります。
基本readmeのデフォルト値から変えていません。

[general]
enable_bucket = true

[[datasets]]
resolution = 512
batch_size = 4

  [[datasets.subsets]]
  image_dir = '/home/suibari/lora_train_data/train/10_suibari'
  caption_extension = '.txt'
  num_repeats = 10
accelerate launch --num_cpu_threads_per_process 1 train_network.py \
    --pretrained_model_name_or_path=/home/suibari/stable-diffusion-webui/models/Stable-diffusion/anylora_checkpoint.safetensors \
    --output_dir=/home/suibari/stable-diffusion-webui/models/Lora \
    --output_name=lora_10_suibari_tag_pure \
    --dataset_config=./db_suibari.toml \
    --save_model_as=safetensors \
    --prior_loss_weight=1.0 \
    --max_train_steps=400 \
    --learning_rate=1e-4 \
    --optimizer_type="AdamW8bit" \
    --xformers \
    --mixed_precision="fp16" \
    --cache_latents \
    --gradient_checkpointing \
    --save_every_n_epochs=1 \
    --network_module=networks.lora

学習済みモデルはAnyLoRAを使用。
総ステップ数は400(max_train_steps)*4(batch_size)=1600。

イラスト生成

Stable Diffusion Web UIを使用。

パラメータは以下。基本的な設定。

  • Positive Prompt: <LoRAモデル> suibari, masterpiece, best quality, 1girl, solo, anime, simple background, hatsune miku

  • Negative Prompt: EasyNegative, extra fingers, fewer fingers

  • Sampling Method: Euler a

  • Sampling Steps: 20

  • WH: 512*512

  • CFG Scale: 7

以上、評価条件でした。

課題

以下課題があると思います。

  • パターン1の場合でも、1boyなど描かせるとAnyLoraの絵柄に戻ってしまうことがあり不安定。あまり描いてないものの絵柄は学習できない。あまり描いてないものであっても、それっぽい絵柄で描いてもらうことはまだ難しいのでしょうか。詳しい方がいたら教えてください。

おわりに

ここまで読んでいただきありがとうございました。

AIイラスト分野は急激な発展段階にあることもあり、今回のLoRA画風再現で何を(特にキャプションを)どう設定すべきかというのは、生成者の勘所によっていると感じました。
同じことをやりたい人が困りそうだなと思い、全手法をまとめて評価する必要があると感じて、本記事を書いた次第です。

既存記事を否定する意図で書いたものではありません。実際の生成イラスト評価としては、学習対象イラストの絵柄およびLoRAの他設定値なども影響してくると思います。本記事はそのいちパターンだとお考え下さい。
ご意見があればぜひ書き込んでください。

参考文献

目の描き方を自己評価する際に使用させていただいた資料です。