こんばんは、スタジオ真榊です。

今回は、「着せ替え可能な高性能キャラLoRAを作ろう!」の記事の最後に触れた、

「主要登場人物の容姿を一つのLoRAでまとめて追加学習させれば、"作品LoRA"が作れる」

「それによって、複数のキャラクターが登場する1枚絵を生成できるのではないか」

…というアイデアの検証結果について報告したいと思います。

まずは結論から。一つ目は、大勢のキャラクターを同時学習させた「作品LoRA」は問題なく作れることが分かりました。これは前回の「ミオリネスキーム」を使って、登場人物の数だけトリガーワードを作ればよいだけです。だいたい1キャラあたり20-30枚程度、横からや背後から、全身やアップの画像も交えて用意すればOK。総勢17人分の容姿を同時学習することができました。

大量のキャラを同時再現!「作品LoRA」と「ForgeCouple」:図版1

こちらが学習させたキャラクターのうち6人を自分モデルiomagineXLで生成したもの。比較的よい生成結果をチェリーピックしていますが、プロンプトをさほど練っていなくても、おおむね問題ない出来かと思います。少なくとも、soloで生成するだけならキャラ同士の容姿が混ざってしまうことはありませんでした。(右下にいるヌーノくんのフードつきアスティカシア制服はなかなか再現性が低かったですが)

大量のキャラを同時再現!「作品LoRA」と「ForgeCouple」:図版2

もう一つは、学習させた複数キャラを絡ませる(同時に一つのキャンバス上に生成する)ことはできるか?という問題です。普通にやると、これはなかなか難しいことが分かりました。

こちらは「dressletta(ドレス姿のスレッタ)」と「dressmio(ドレス姿のミオリネ)」を同時生成したものです。

大量のキャラを同時再現!「作品LoRA」と「ForgeCouple」:図版3

単純に2girl、dressletta、dressmio…とプロンプト指定すると、上の出力例のように破綻したり、おのおのの容姿が混じってしまったりします。使用したプロンプトはこのような感じ。

PP:<lora:作品LoRA:0.6> 2girls,dressletta,dressmio,hug,from behind,arm around neck,closed eyes,couple,love,yuri,, white background, simple background,, white pupils,masterpiece, best quality, very aesthetic, absurdres,, open mouth,red dress,blue dress,white hair,red hair

正直、一番手っ取り早いのは、それぞれのキャラを1枚絵として生成して背景を切り出し、Clipstudioなどでレイヤー合成してしまうことです。少しの破綻なら、NovelAIのV3インペイントでどうとでも直せるので、工数が少なく済むことは確か。

大量のキャラを同時再現!「作品LoRA」と「ForgeCouple」:図版4

ただ、これだとそれぞれが一緒に何かをしていたり、触れ合ったりしている構図は生成できませんね。そこで、「RegionalPrompter」「Forge Couple」といった拡張機能を使ってトリガーワードや各プロンプトを整理してみたところ、複数キャラを上手に生成することができました。

いろいろ実験してみましたが、4人くらいまでならこの通り、微妙な破綻(右端のアリヤさんのおさげが一つ足りない等)はありますが、おおむねプロンプトを分けて生成することができました。

大量のキャラを同時再現!「作品LoRA」と「ForgeCouple」:図版5

今回の記事ではこのように、多数の登場人物を再現可能な「作品LoRA」の学習から、それを使った複数キャラ同時生成までのやり方を詳しく紹介したいと思います。

1.作品LoRAを学習させるには(データセット編)

まずは前回のおさらい。「ミオリネスキーム」は、覚えさせたいキャラクターの容姿の数だけフォルダを用意して、それぞれ20~50枚程度の画像データセットを入れて作るやり方でした。前回はミオリネという1人のキャラクターの複数のすがたを追加学習させたわけですが、今回はそれぞれ違う人物の容姿を学習させるわけです。

LoRA/ ←ルートフォルダ(名前はなんでもよい)

 └ training/ ←学習データを入れるフォルダ(名前はなんでもよい)

  └ suiseichara/ ←LoRAごとに作るフォルダ(名前はなんでもよい)

    ├ 4_guel_jeturk/

    ├ 4_shaddiq_zenelli/

    ├ 4_prospera mercury/

    ├ 4_nuno_kargan/

    ├ 4_ojelo_gabel/

    ︙

トリガーワードは、それぞれのキャラを示すdanbooruタグ(基本的にはフルネーム)に準拠しました。これは、それぞれ覚えさせる容姿が一つだけのパターンでよいためですので、複数のパターンを作りたい場合は独自タグを使ったほうがよいでしょう。例えば、グエルというキャラは作中で長髪から短髪に変化しますが、両方の容姿を別々に学習させたい場合は、「shortguel」「longguel」といった独自タグを新たに作った方が容姿が混線しないはずです。

これまでに作ったLoRA用のデータセットを全部雑に放り込んでも、多人数の容姿を再現できるLoRAを作ることができます。ただし、別々のキャラに同一のタグがついていた場合、LoRA内で概念が混じってしまうので、その点だけ気を付けましょう。

例えば赤いドレスを着ているキャラが二人いると、それぞれのドレスのデザインが混じりがちになってしまいます。

<重要:複数キャラが一緒にいる画像を混ぜよう>

キャラLoRAを作るときは、純粋にその容姿だけを覚えてほしいため、背景や別のキャラの映り込みを除去するケースが多いです。ただ、今回のようにキャラクター同士の絡みを生成したい場合は、あえてデータセット内に複数キャラが一緒に映っている画像を入れると良いようです。例えば、スレッタとミオリネ、アスカとレイのように、一緒に描かれることが非常に多いペアは、どんどん2ショットの画像をデータセットに含めて構いません。

普段ならキャラLoRAに使わない複数人の画像

        ▲普段ならキャラLoRAに使わない複数人の画像

なぜこれが重要かというと、それぞれのキャラが単独で映っている画像だけで学習すると、AIにとってはそのキャラが一体どれくらいの身長なのかがよくわからないし、一緒にいるところも想像がつかないまま描くことになるからです。原作で縁のあるキャラクター同士は、今後そのLoRAを使うときに一緒に生成したくなることも多いと思います。一緒にいるときどれくらいの距離感なのか、背の高さの違いは、どういう仕草をするのか…といったこともAIはデータセットから学ぶので、普段と違って複数人でいる画像や背景のある画像を混ぜたほうがよいわけです。

注意する点は以下の3つ。

①今回覚えさせないキャラが映り込んだ画像は避ける(もしくはトリミングする)

②映り込んだ別キャラは、今回使うトリガーワードでタグ付けする

③単独(solo)でいる画像の方が、複数人でいる画像より圧倒的に多くする

例えば、オジェロとヌーノが一緒にいる画像を学習させるときは、今回学習させないティルが映り込んでいる画像は避け、「ojelo_gabel」と「nuno_kargan」というタグを必ず入れて学習させるようにしましょう。そして、オジェロ、ヌーノがそれぞれ単独で映っている画像のほうが、複数人でいる画像より圧倒的に多くなるようにデータセットを整えましょう。ここをきちんと守らないと、オジェロをsolo生成しようとしても高確率で背景に地球寮メンバーが生成されてしまうLoRAになりがちです。

2.作品LoRAを学習させるには(タギング編)

タギングについても、ミオリネスキームと同様です。いつも通り、トリガーワードをadditional tagsに入れて、除去するタグをExclude Tagsに入れればOK。「しきい値(Weight threshold)」は0.28~0.35前後、最低抽出率は0にするのがオススメです。

タガーは前回同様「wd-EVA02-Large-v3」を使っています。(タガーの追加方法はSDXL用LoRA学習が理解る!参照)

2.作品LoRAを学習させるには(タギング編):図版1

キャラクター名のdanbooruタグをそのままトリガーワードにしたい場合(例:miorine_rembranなど)、検出タグの中にも同じタグが検出されていることがあるので、その場合はAdditional tags、Keep tags、Exclude Tagsにいずれも同じタグを入れれば一つ目に固定されます。

Exclude Tagsには、どんなときにもそのキャラクターを生成したら不可避な容姿タグを記入します。目や髪の色、身体的特徴などです。衣装や髪型も含めて固定で出したい場合は、衣装タグや髪型タグも記入します。Exclude Tagsに何を記入したかはLoRAメモにきちんと書き残しておきましょう。トリガーワード+除去タグで、そのキャラを上手に呼び出せるようになります。(※誤タグは除く)