見出し画像

キャラLoRAとLECOが両方そなわり最強に見える

それほどでもない(謙虚なナイト)

脳内キャラクターの学習にピリオドを打ったと言ったな、あれは嘘だ。

LECOの登場によって、キャプショニングの考え方が大きく変わりました。
この記事にはLECOとの併用を前提としたキャプショニングについてのみ書くので、基本的な考え方は前の記事を読んでください。

時間が無い人向けの3行まとめ

  1. キャプションに髪型や目の色などの学習させたい要素を全部タグとして残してLoRAを作る

  2. キャプションに入れたタグを1girlにenhanceしたLECOを作る

  3. 上記1と2を合わせて使うと「1girl」のみで精度の高いキャラクターが出る

キャプショニングのジレンマ

消すタグ、残すタグ

キャラクターLoRAの作成時にキャプション(タグ)をどうすべきかは諸説あった。
まず、何らかのツール(wd14-taggerなど)を使用して付けたタグは大まかに以下に分類される。

  1. 画像と無関係なタグ、重複するタグ

  2. 画像に含まれる要素だが、不要な(学習させない)タグ

  3. 必要な(学習させたい)タグ

1はそもそも誤認識なので削除し、2は残すという部分までは大抵の人に共通することだと思う。
問題は3である。よくある手法は、学習させたいタグを削除し、その要素を先頭に固定したタグ(「1girl」やいわゆるトリガーワードと呼ばれるもの)に集約させるというアプローチである(いわゆる「マルゼンスキーム」)

今まで書いてきた記事もこのアプローチに沿っており、一定の成果が確認できている。

マルゼンスキームの限界

以下が従来のキャプショニングの例である。
実際にtaggerで付けた直後のキャプションは画像と無関係(誤認識)なタグが混在しているが、それらは削除した後と考えてほしい。

キャプショニング例

残すタグは要素を集約するための「1girl」(緑色)タグと、学習させない要素である「nude, portrait, white background」(灰色)タグである。
※従来記事に従うなら「1girl」すら削除するのだが、説明の都合上トリガーは残すこととする

学習対象(青色)を削除することで、その要素を先頭に固定したタグ(1girl)に強く関連させるという実に胡散臭い手法である。

ではこれを学習させるとどのような差分が生まれるか、実際に「1girl, nude, portrait, white background」で生成した画像と比べてみよう。

左が3DモデルっぽさLoRAをマージしたモデルで実際に生成した画像

学習させたい要素が差分として出ているのは確認できるが、問題なのは「差分を意図した通りに覚えてくれるか」という点である。
目は恐らく(画面に対する位置が概ね決まっているので)判別できていると思われるが、エルフ耳が耳として認識されているかはかなり怪しい。
「1girl」という情報しか無いため、耳を髪型の一部や角だと誤認される可能性がある。
同様に、髪型を背景の一部と誤認する、猫耳をリボンだと誤認するなどのケースが想定される。

キャプションを列記した際の問題

では学習させたい要素のタグも全てキャプションに残せば誤認識を防げるのでは?という話になる。
この場合、列記したタグに各要素を紐付けるので、生成時にそれらのタグをすべてPrompt欄に書く必要がある。これが別種の問題を引き起こす。

  1. Prompt欄のトークン数を圧迫する

  2. Prompt欄に色を書くと他(服など)に望まない影響を与える

  3. 単純にめんどくさい

つまり、再現性が下がるリスクを許容して「1girl」(あるいは他のトリガーワード)に要素を集約するか、再現性を上げるためにクソ長いPromptを強いられるかの二択だったわけである。

enhance LECOによる解決

ここでenhance LECOの登場である。
LECOの導入や作成については前回の記事を参照してほしい。

具体的には下記の手順になる。

①学習させたい要素のタグも全てキャプションに残したLoRAを作成する
上記の画像でいえば、下記のようなキャプションになる。

1girl, elf, red eyes, blonde wavy medium hair, nude, portrait, white background

②学習させたい要素のタグを「1girl」にenhanceしたLECOを作成する
prompts.yamlは下記のようにPromptに書くべきタグを列記する。

- target: "1girl"
  positive: "1girl, elf, red eyes, blonde wavy medium hair"
  unconditional: ""
  neutral: ""
  action: "enhance"
  guidance_scale: 1.0
  resolution: 512
  batch_size: 2

①と②を合わせて使用することで、Prompt欄に「1girl」のみを書くだけで諸々のタグを列記するのと同様の効果が得られる。

縦(↓)方向:キャラLoRA、横(→)方向がenhance LECO

タグを列記して作ったキャラクターLoRAのみ(左下)では、ほとんどキャラクターが再現されていない。
LECOのみ(右上)では、それっぽくなっているが、あくまでPromptで指定しているだけなのでデザインにバラツキがある。
2つを組み合わせる(右下)と想定していたデザインとなる。

これが「1girl」のみで出てくるため、キャプションを列記した際の問題を解消できるという仕組みだ。
LoRAを2つ使うのが面倒という場合はマージしてしまえばよい。

完走した感想

従来の手法だと他Promptに侵食されて髪の色や目の色が消失する、重要なパーツが認識されないなどの症状でお困りの方、一度お試しあれ。
ボクはエルフ耳がキレイに出るようになっただけで満足です。

おしまい


この記事が気に入ったらサポートをしてみませんか?