Animaの4人LoRAの崩れを、conditioningの中まで覗いて切り分けた記録
目次

けい・かな・こはる・くららの4人合体LoRAは、1人ずつのキャラLoRAと比べてポージングや人物の描き分けの難易度が高い。
それでもLoRAの中に4人が入っているのは、個別に呼べば出てくることから間違いない。
ならば、こちらの指示はエンコーダーを通してモデルやLoRAの内部へどういう内容で入ってきているのか。
ここが分かれば、プロンプトを年中こねくり回さなくても望みの画像が出せるのではないか。
そういう中身を覗く実験を8月7日から8月14日にかけて8本やってきたが、個別の記事は自分で読み返してもかなり難しくなってしまった。
8本をまとめつつ、もう少し平易に説明し直してみる。
本文で繰り返し使う用語は先にここへ置いておく。
| 用語 | 説明 |
|---|---|
| conditioning | プロンプトの文章をエンコーダーで数値の列に変換したもの。画像を描く部分は文字ではなくこれを受け取って描く |
| エンコーダー | プロンプトをconditioningへ変換する部分。AnimaではQwen3-0.6BとT5の2系統がある |
| DiT | conditioningを受け取って実際に画像を描く本体 |
| LLMAdapter | Qwen側の出力を、DiTが受け取れる形へ変換する部品。この出力がDiT直前のconditioningになる |
| トリガー語 | kanachanのように、キャラを呼び出すためにプロンプトへ書く固有の単語 |
| 学習キャプション | LoRA学習時に各画像へ付けた説明文。生成時のプロンプトがこの書き方に近いほど狙い通りに出る |
| 教師conditioning | 成功した長文プロンプトから作ったconditioning。短いプロンプトから同じものを再現する学習の見本(教師)にした |
flowchart TD
A[プロンプトの書き忘れ<br/>8月7日] --> B[短いプロンプトからの<br/>conditioning再現学習<br/>8月9日]
B --> C[DiT直前のconditioningで<br/>人物が置き換わる<br/>8月9日]
C --> D[教室の場面で<br/>衣装が別人に出る<br/>8月9日]
D --> E[立ち位置を変えても<br/>衣装は変わらない<br/>8月11日]
E --> F[着せ間違いは<br/>DiT LoRAの偏りだった<br/>8月12日]
F --> G[ポーズと関係性は<br/>説明の順番と枠で決まる<br/>8月13日]
G --> H[バンド編成では<br/>学習データの偏りが見つかる<br/>8月14日]
原因の大半はプロンプトの書き忘れ
4人LoRA公開直後、自作の生成サーバーから4人を指定すると、毎回同じキャラばかり出てくることがあった。
トリガー語だけの状態から、外見の説明+立ち位置の指定+服装の指定まで4段階でプロンプトの情報量を戻し、2〜4人の11通り×3シードで実測すると、この問題の大半は学習キャプションにある言い回しをプロンプト側で書き忘れていただけだった。
LoRA自体の欠陥ではなく、生成時のプロンプトが学習キャプションの書き方とずれていた。
短いプロンプトからconditioningを再現する学習は失敗した
書き忘れを直せば済むなら、短いトリガーから長文成功時のconditioningを自動で作れないか。
凍結したQwen3-0.6Bにresamplerという小さな変換部品を足して、教師conditioningを再現する実験では、作らせたconditioningが教師とどれだけ近いかをコサイン距離で測った。2つの数値の列が同じ向きを向いているほど0に近づく指標で、0なら教師と一致する。
学習に使った組ではコサイン距離0.005前後までほぼ一致した。それでも検証用プロンプトでは距離が0.6前後までしか縮まらず、人物の並び順も直らなかった。
一方、こうした学習を挟まず、Qwen3.8 Maxの出力を固定テンプレートでプロンプト化しただけの方式は16件中15件で指示通りに描き分けられた。
学習に使った組はそっくり再現できても、初めての並び順の指示に合うconditioningは作れるようになっていなかった。
DiT直前のconditioningを消すと人物が別人に置き換わった
Qwen経路とT5経路を分けて描き分けを調べた記事では、前の節の学習では再現できなかった内部を、直接操作して確かめた。
Qwen最終層側でkanachanの記述部分をゼロにしても画像はほぼ変わらなかったが、LLMAdapter出力(DiT直前)側で同じ部分をゼロにすると、kanachanの見た目の特徴(サイドポニー・アホ毛・茶髪)が消え、keichanとほぼ同じ金髪+青リボンの人物に置き換わった。
| 介入 | 操作した場所 | 画像の変化 |
|---|---|---|
| A | Qwen最終層、kanachanをゼロにする | ベースラインとほぼ同じ、kanachanの特徴も残る |
| B | Qwen最終層、koharuをゼロにする | ベースラインとほぼ同じ、koharuの特徴も残る |
| C | Qwen最終層、kanachanとkoharuの記述部分を入れ替える | 入れ替わらず、並びも特徴も元のまま |
| D | LLMAdapter出力(DiT直前)、kanachanをゼロにする | kanachanが消え、keichan風の人物に置き換わる |
介入Dは3シードとも同じ壊れ方で再現し、置き換わり先は毎回keichanだった。
Qwen最終層はどういじっても画像がほとんど変わらず、DiT直前のconditioningを操作した時だけ人物が変わった。
教室の場面では指定した衣装を別人が着ていた
くららとけいの会話、こはるの腕組み、かなの手振りを1つの教室に入れた実験では、8通り×3シードのうち役割まではっきり出る組み合わせが見つかった一方、そのまま使える画像は0/3だった。
かなに指定したgrey skirtとblack tightsは3/3で消え、同じ衣装をこはるが履いていた。
顔と大まかな役割は描き分けられているのに、会話中の手や下半身の衣装だけ別人に出ていた。
衣装の持ち主はプロンプトで指定できるか
立ち位置と衣装の指定を独立に入れ替えた記事では、黒タイツをかなに指定してもこはるに指定しても、立ち位置を入れ替えても、手前右にいる人物が12/12で黒タイツを履いていた。
プロンプトを末尾で言い直しても、短くしても、衣装を名前の近くに書いても直らなかった。
3キャラLoRAでは外見の説明をキャプションから抜いてトリガーへ吸収させる設計で描き分けができていたが、4人分の外見描写を同じように消すと、今度は描き分けできた画像が0/3になり、着せ間違いも残ったままだった。
外見の説明を消すわけにもいかない一方で、外見・役割・衣装を同時に増やすと、指定と関係なく手前右の人物が黒タイツを履いたままだった。
着せ間違いはDiT LoRAの偏りだった
LoRAをLLMAdapter側とDiT側へ分けて当てた記事では、この着せ間違いがどちら側で起きるのかを確かめた。
QwenとT5への入力は全条件で同じにしたまま、LoRAなしの素のAnimaで生成すると、黒タイツは指定どおり奥のこはるが履いていた。
ところが同じ入力にDiT LoRAを適用した瞬間、手前右のかなが指定と違う黒タイツを履いていた。
LLMAdapter側だけなら正しく履いていて、DiT側だけに当てると、両方当てた時と同じ間違え方をした。
0.6Bエンコーダーの情報不足ではなく、4人LoRAのDiT側に黒タイツを手前右の人物へ履かせる強い偏りが学習されていて、それが素のAnimaでは正しかった対応を上書きしていた。
説明の順番と枠でポーズと関係性が指定どおり出た
ポーズと人物どうしの関係をどこまで指定できるか調べた記事では、表情の指定だけで別人の顔になった、プロンプト内のこはるとかなの順番だけで描き分けが変わった、名前で指定してもハイタッチは画面中央の2人で起きたといった、指定どおりにならない例が見つかった。
長文を足すだけでは安定せず、構造を変えると直った。
プロンプトに書く各キャラの外見の説明(髪・目・アクセサリ)は短い決まり文句にして、途中で増やしたり減らしたりしなかった。人物を説明する順番も一度決めたら動かさなかった。タッチさせたい2人は中央の隣り合う枠に置き、手前と奥には人数だけでなく誰がいるかの名前まで書いた。
この形にすると、手前3人+奥1人の配置で、3シードとも中央の2人がハイタッチし、奥のかなは腕を下ろし、右のこはるは腕を組んだ。
バンド編成で見つかった学習データの偏り
4人バンドを描けるか確かめた記事では、それまでの発見を実際のバンド編成のプロンプトへ当てはめた。
左ベース、中央ギターボーカル、右ギター、後列ドラムを割り当て、手書きプロンプト、Qwen3-4B〜14Bに書かせたプロンプト、エンコーダーを大きいQwen3-4Bへ替えるために4Bの出力を0.6Bと同じ1024次元へ変換する線形ブリッジ、507トークンへの圧縮を比べたが、楽器と役割は最後まで揃わなかった。
学習キャプション896本を確認すると、4人のトリガーが同時に入るものは10種類しかなく、そのすべてが横一列・白背景・全員同じ動作という対称的な構図だった。
4人がそれぞれ別の位置、別の小道具、別の動作を持つ学習例は0本。
役割を増やすと人物が中央へ寄ったり、学習にあった全員同じ動きへ戻ったりしやすかった。この偏りが原因にありそうだった。
次は、単体・2人・3人のキャプションを壊さない範囲で、4人の役割・位置・小道具を入れ替えたキャプションを24〜40枚ほど学習データへ足し、同じバンド編成のプロンプトを出し直してみる。