技術約11分で読めます

Animaの4人LoRAで4人バンドを描けるか、Qwen3-14Bの作文とエンコーダ交換で確かめた

いけさん目次

前回の4人LoRAへポーズと人物どうしの関係を指定した実験では、1人だけの動的なポーズは出せたが、2人がタッチしている様子は、人物名で指定した組より画面中央の2人で起きやすかった。タッチさせるペアを中央へ置き、前と後ろの人数を固定すると大体の指示は出た。ただし、そこまでやっても完成イラストとしては不安定だった。

次は、もっと複雑な場面を試してみる。4人へ別々の位置、楽器、動作を同時に割り当てるため、ガールズバンドをイメージして出すことにした。

生成条件と合格基準

項目設定
modelanima-base-v1.0.safetensors
text encoderqwen_3_06b_base.safetensors
4人LoRAanima-4char-v1_epoch100.safetensors
LoRA strengthmodel 1.0 / clip 1.0
Turboなし
samplerer_sde / simple
steps / cfg25 / 4.0
解像度1152×896
seed42、1234、9999

このあと出てくる3/3は、3シードのうち何枚で4人を描き分けられて、4つの役割も見分けられたかの枚数。指や楽器の形、顔まできっちり仕上がったかどうかとは別で、4人写っているだけで役割が分からない画像も数えていない。

4人バンドをお題にした

前列3人が弦楽器と歌、後列1人がドラムの編成にした。

画面内の位置人物役割
前列左けい青い4弦ベースを弾き、左のマイクで歌う
前列中央かな赤い6弦ギターを弾き、中央のマイクで歌う
前列右くらら白い6弦ギターを弾き、右のマイクで歌う
後列左寄りこはるライザー上のドラムキットを叩く。マイクは持たない

この編成には、3種類の楽器、3本のマイク、前列3人と後列1人、手前と奥の大きさの違い、楽器を弾く手が全部入る。背景も白紙ではなく、照明のある1つのライブステージとした。

最も良かった手書きv11は、人物ごとに名前 → 最小限の外見 → 位置 → 楽器 → 動作 → micを1つの連続した節へまとめ、最後に4つの役割をもう一度短く書いた。3シードすべてで、4人の描き分け、前列3人、青ベース、赤ギター、白ギター、後列こはる、ドラムキット、前列3本のマイクと、指定したものはほぼ出た。

手書きv11のseed42。前列のけい、かな、くららへ3種類の楽器とマイクが付き、後列のこはるがドラムキットにいる

ただし、厳密に完成と言える画像としては3枚とも合格にしていない。弦を押さえる指、楽器の細部、スティックがドラムキットに触れているかはシードごとに怪しい。ここでの3/3は、4人と4つの役割を見分けられる程度に、指定したものがほぼ出たという意味。

とはいえ、試した編成は前列3人+後列1人のこの1パターンで、楽器も色と形がばらばらで見分けやすいものを選んでいる。

Qwen3-4B〜14Bに書かせたプロンプトでは楽器と役割が揃わなかった

Animaがテキストエンコーダに使っているQwen3-0.6Bは、LLMとしてはかなり小さい。4人分の外見、位置、楽器、動作を詰めた長いプロンプトを0.6Bがどこまで読めているのかは怪しい。ならば大きいQwenで良くなるのか。

まずエンコーダを交換せずに済む実験として、Qwen3-4B、8B、14Bへ日本語で場面の指定を与え、Anima向けの英語プロンプトを書かせた。ここで大きなQwenは文章を作っただけで、画像生成時のテキストエンコーダは全条件とも元のQwen3-0.6Bのままだ。

書かせたモデルプロンプトで起きたこと画像結果
Qwen3-4B1002トークンまで役割ブロックを反復4人はいるがかなが右に立ち、くららとこはるがドラム領域で衝突
Qwen3-8B v1外見と役割は保持したが、両手で演奏しながらマイクスタンドを持つ矛盾を追加けいのベースがアップライトベース風になり、左右のマイクとステージが消えた
Qwen3-8B v2ステージ、楽器、マイクは整理したが4人の外見の目印を全削除キャラの立ち位置が入れ替わり、ドラムキットも消えた
Qwen3-14B v2外見、位置、4つの役割、ステージを初めて同時に保持3シードとも完成せず。ドラムキットが消え、こはるが浮き、白ギターはベースの形になった

画像は表の行順で、Qwen3-4B、8B v1、8B v2がseed42、14B v2がseed1234。

Qwen3-4Bが作文したプロンプトのseed42。4人は出たが前列3人と後列ドラマーの役割が崩れた Qwen3-8B v1が作文したプロンプトのseed42。人物は見分けられるがベースの形、マイク、ステージが崩れた Qwen3-8B v2が外見の目印を落としたプロンプトのseed42。キャラの立ち位置が入れ替わり、ドラムキットが消えた Qwen3-14B v2が作文したプロンプトのseed1234。前列3人は揃うがこはるはアンプの上に座り、ドラムキットがない

14Bになると、与えた制約を文章へ残す能力は明らかに上がった。それでも画像ではドラムキットが消えたままで、指定したものは出そろわなかった。過去にQwen MaxやClaudeへプロンプトを書かせて比較した実験と同じく、自然で詳しい文章を作れることと、Animaのconditioningへ通りやすい文を作れることは別だった。

一方、8B v2は外見の目印を全部削った。するとキャラの立ち位置が入れ替わった。Animaの公式model cardも、複数人の場面では名前と基本的な外見を自然文へ含める例を示している。手書きv11も、名前の直後に髪型くらいの短い見た目を書いてから、楽器と動作につなげている。

エンコーダをQwen3-4Bに差し替えたらエラーで止まった

次に、エンコーダ本体を交換した。AnimaのQwen3-0.6Bの隠れ状態は1024次元、Qwen3-4Bは2560次元。ComfyUIのAnima実装では、LLMAdapterのsource_dimが1024に固定されている。Qwen3-4BをそのままCLIPLoaderへ指定すると、KSamplerで次のエラーになった。

linear(): input and weight.T shapes cannot be multiplied
(485x2560 and 1024x2048)

safetensorsの差し替えはこの形状エラーで止まる。生成まで進めるには、少なくとも2560→1024の変換か、新しいLLMAdapterがいる。

そこで28プロンプトから同じ文章の0.6Bと4Bの隠れ状態を取り、4B側を標準化して1024次元へ落とす線形ブリッジを学習した。検証用の9件では0.6B側とのコサイン類似度が0.972まで上がったが、長いバンドv11では0.9028、値のずれの大きさを表す平均二乗誤差(MSE)は1要素あたり3.1816だった。これをAnimaへ読み込ませると生成は通ったものの、こはるとドラムキットが消え、人物は3人になった。

Qwen3-4Bの隠れ状態を1024次元へ写す線形ブリッジで生成したseed42。前列3人だけになりこはるとドラムキットが消えた

このブリッジは4Bの表現を0.6Bへ似せる学習で、4Bで増えた差分も一緒に削ってしまっている。つまり4Bが駄目なのかブリッジが駄目なのかは、これだと切り分けられない。ちゃんと確かめるには、画像生成の損失でLLMAdapterごと学習し直すしかない。

開発者側の試行でも似た結果が出ている。Anima開発者はQwen3.5-2B-Baseへ交換し、新しいLLMAdapterを3日学習して元品質の約95%まで戻したが、手動評価でプロンプト理解の改善は確認できなかったうえ、損失も元構成より良くならなかったと報告している。残りを詰めるにはさらに約2週間と見積もり、0.6Bを維持した。開発者discussionの報告を確認した限り、大きいQwenへ替えるだけの実験は、行っても意味がなさそう。

人物ごとにconditioningを分割したら3人になった

「どこまでが誰か」をconditioning上で明示できれば混ざりにくいのではないかとも考えた。プロンプトがQwenとT5の2経路に分かれ、LLMAdapterで1つのconditioningになる流れは、以前にconditioningを調べた記事のとおり。今回気になったのは末尾のゼロ埋めで、text encoder側LLMAdapter側を合わせて確認すると、これは出力が512未満の時に長さを揃える処理で、人物間の区切りではない。

そこでバンドv11を、冒頭の全体説明、けい、かな、くらら、こはるの4人分、末尾の役割まとめの6ブロックへ分けた。各ブロックをQwenとT5からLLMAdapterまで独立に通し、LLMAdapterを出た列を連結した。

単純な連結は564×1024になり、各トークンのベクトルの長さ(norm)の平均が通常の3.35から5.12へ上がってほぼノイズになった。中間5ブロックの文末トークン(EOS)を落として559トークンへ戻し、全体の平均と標準偏差も通常のconditioningへ合わせると生成自体は通った。しかし人数は3人へ減り、全員にかなの顔立ちが滲んで、左右の2人は誰なのか分からない。中央の楽器もキーボードのような別物になった。完全な失敗作だった。

人物ブロックを独立にエンコードしてLLMAdapter後に連結したseed42。3人に減って全員がかなに寄り、中央の楽器はキーボードのような別物になった

LLMAdapterは、全文脈の中でQwenの隠れ状態とT5のトークン列を対応させるパーツ。人物ごとに独立に処理して後からつないだため、全文中の位置関係を丸ごと捨ててた。開発者も別プロンプトのエンコード結果をそのまま連結する方法について、アーティスト指定の混合では効果が小さく、位置埋め込みを追加していないため平均化に近いと説明している。ゼロベクトルは区切りとしての意味はなしていなかった。

プロンプトを507トークンへ縮めた

Animaの学習コードではQwenとT5の両方をmax_length=512truncation=Trueでトークン化している。学習側の実装を基準にすると、T5で559トークンあったv11は学習時の長さ分布から外れている。ただし、現在のComfyUI推論は512を超えた列を切らない。512未満の列だけ末尾へゼロ埋めする。

そこで人物4ブロックと、最後にもう一度書いた役割は一字も変えないまま、重複していたカメラと照明の説明だけを削った。Qwenは477→432トークン、T5は559→507トークンになった。

4人の名前と人数 → 1つのstageと前列3人 →
けいの外見・左・青bass・左mic →
かなの外見・中央・赤guitar・中央mic →
くららの外見・右・白guitar・右mic →
こはるの外見・後列riser・drum kit・micなし →
3つのprop形状差 → 4人のroleをもう一度

3シードとも、4人の描き分け、前列3人、3種類の楽器、3本のマイク、後列こはるとドラムキットが残った。画像はseed42、1234、9999の順。

T5を507トークンへ縮めたバンドプロンプトのseed42。前列の3つの役割と後列ドラマーが残った T5を507トークンへ縮めたバンドプロンプトのseed1234。4人の描き分けと4つの役割が残った T5を507トークンへ縮めたバンドプロンプトのseed9999。4つの役割は残るがベースの向きと細部は不安定

507が559より優れているとは言えない。どちらも大まかな配置は3/3で残り、指や楽器の細部は不安定だった。短くした507トークン版でも、誰がどの楽器を担当するかは入れ替わらなかった。長さも学習時と同じ512以内に収まった。

v11と507トークン版の書き方は共通している。人数と全員の名前を冒頭に置き、名前 → 最小限の外見 → 位置 → 動作・小道具のまとまりを途中で切らないで、前列3人+後列1人のような全体構造を短く先に置いた。似た小道具は色だけでなく弦の数、ネックの長さ、ボディの形も変え、最後に名前と役割だけをもう一度短く書いた。品質系のタグと、重複していたカメラや照明の説明だけ削った。

学習キャプションは全て512トークン以内だった

ここまでで「次の学習キャプションも512以内に直せばよい」と考えたが、現行4人LoRAの全キャプションを実際のトークナイザーで数えると、そもそも512を超えるキャプションがなかった。

学習に使った896本を、Animaが使うQwenとT5のトークナイザーへ通した。

tokenizer最小中央値p90p95p99最大
Qwen5580131144166206
T55887156166192248

512を超えるキャプションは、QwenとT5のどちらの数え方でも0本だった。学習時にキャプションが切り詰められていた可能性は消えた。896本には重複があり、文字列としては513種類だった。4人のトリガーが同時に入るキャプションは、そのうち10種類しかない。

同時に入る人物数ユニークなキャプション
1人343
2人120
3人40
4人10

この10種類の内訳は、quad_pose_1から7までの7種類と、quad_stand_01から03までの3種類だった。前者は全例がくらら → けい → かな → こはるの固定順、白背景の横一列で、全員が手をつなぐ、跳ぶ、ハグする、ピースサインを出すといった、全員で同じ動きをする対称的なポーズだった。後者は順番と服を変えているが、やはり白背景の横一列だった。

4人がそれぞれ別の位置、別の小道具、別の動作を持つ学習例は0だった。現行LoRAが白背景の4人立ちには強く、役割を増やすと人物が中央へ寄ったり、学習にあった全員同じ動きに戻ったりしやすかった理由は、この10例の偏りにありそうだ。

1人の画像と4人の画像でキャプションの書き方を分ける

かなの単体LoRAでは、キャプションへ細かく書いた造形はトリガーへ焼き付かなくなり、プロンプトに書いた時だけ反映されるようになっていた。そのため意匠の説明を減らし、kanachanへ髪型や服を吸収させる設計を採った。この考え方自体は変わらない。

ただしマルチキャラLoRAでは、同じ1枚に4つのトリガーが並ぶ。今回のキャプションは説明を省いた分、どの色、髪型、服、小道具が誰の物かを分ける手がかりも減っていた。実際、4人キャプション中のかなは主にa brown side ponytail and an ahogeまでで、肩口ほどの髪の長さ、短いサイドポニー、青いシュシュという区別は固定されていない。単純な立ち絵ならトリガーだけで補えていたが、楽器、ポーズ、奥行きが増えると普通のポニーテールや別の髪色に変わりやすかった。

1人画像は従来どおりトリガーへ意匠を吸収させるため説明を絞り、複数人の画像だけは、持ち主を分ける最小限の外見の目印を人物の節に残す。順番も名前 → 外見の目印 → 位置 → 役割 → 小道具で揃え、4人の位置と役割を入れ替えて、特定の人物や立ち位置へ楽器と動作が固定されないようにする。

背景を白へ変えたらこはるまで消えた

背景はあとから別モデルで作り、人物だけAnimaに任せる方法もある。そこで507トークン版からステージと色照明だけを外し、white background, simple background, isolated groupへ変えた。seed42の1枚ではこはるが消えて3人になり、くららがドラムの椅子に座ったままギターを弾いている。

バンドプロンプトの背景だけ白へ変えたseed42。こはるが消えて3人になり、くららがドラムの椅子に座ったままギターを弾いている

1シードなので、白背景なら必ず失敗するとは言えない。ただし、装飾としての背景が不要でも、one continuous stagerear riserは人物の前後関係を支える目印として働いている可能性がある。背景を後工程で差し替える構成は、床、ステージ、ライザーのような最小限の構造物を残すかどうかから確かめてみる。

次はLoRAの学習データへ4人同時のキャプションを足す

現行LoRAは、前列3人+後列1人のバンドまではプロンプトで出せた。バンドの4つの役割が3シードで残ったため、学習容量の不足だけが原因ではなさそうだ。一方、手指、小道具の形、顔の造形まで含む完成した画像は安定していない。

大きいQwenにプロンプトを書かせる方法は、14Bまで試しても楽器と役割が揃わなかった。エンコーダ交換は次元の不一致で止まり、線形ブリッジも人物別のconditioning分割も悪化した。AnimaのLLMAdapter自体がQwen空間を既存のCosmos T5空間へ近づけるパーツとして学習されているため、大型エンコーダの検証は画像生成の損失でLLMAdapterごと学習し直す実験になる。

次は単体・2人・3人のキャプションを壊さずに、4人の役割・位置・小道具を入れ替えたキャプションを24〜40枚ほど足し、同じ507トークンのプロンプトを3シードで出し直してみる。