Reelune

同じAIキャラの顔を保つ方法を実測で比べた|タグ指定・参照画像・追加学習

20枚 × 3条件で測った、キャラの同一性が崩れる理由と直し方

  • AIキャラクター 一貫性
  • AI 同じキャラ 生成
  • キャラ 顔 固定 AI
  • IP-Adapter 一貫性
完全無料
登録不要
実在の人物なし
毎日更新

画像生成AIで同じキャラクターを何度も出そうとすると、毎回わずかに別人になる。Reelune では同じキャラが何本もの動画に繰り返し登場するため、これは致命的だった。タグ指定・参照画像・追加学習の3つの手法を、条件を揃えて実際に測って比べた記録を公開する。

3手法の比較

同一性コスト向いている用途
タグ指定のみ低い(別人になる)ゼロ一枚絵
タグを細かく固定低い(改善するが足りない)ゼロ一枚絵
参照画像 (IP-Adapter)高い低い継続登場するキャラ
追加学習 (LoRA)最も高い高い参照画像で足りない場合

なぜ「同じキャラ」が難しいのか

画像生成AIは、プロンプトに書かれた条件を満たす絵を毎回ゼロから作ります。「銀髪・姫カット・グレーの瞳」と指定すれば、その条件を満たす絵は出ます。だが条件を満たす顔は無数にあります。

指定していない部分は、乱数 (seed) 次第で毎回変わります。

  • 顔の輪郭
  • 目の描き方
  • 唇の厚み
  • 年齢感

一枚絵なら問題になりません。だが同じキャラクターが何本もの動画や画像に繰り返し登場するサービスでは、これが致命的になります。

視聴者は「先週見たあの子」を探しに来ます。顔が変われば別人であり、キャラクターとして成立しません。

測り方

条件を 1 つだけ変えて 20 枚ずつ生成し、顔が揃うかを見ました。

項目
モデルSDXL 系イラストモデル
解像度832 × 1216
サンプラーEuler / normal
CFG4.5
ステップ30
変える変数seed のみ(20 通り)

衣装・ポーズ・画角・場所はすべて固定しています。変数を増やすと「揃わない」原因が seed なのか設定なのか切り分けられなくなるためです。

判定は目視です。「同じキャラとして通用するか」は仕様ではなく感覚なので、機械的な類似度スコアでは代用できないと判断しました。

手法1: タグで細かく指定する — 揃わなかった

まず、キャラの特徴をタグで書き並べる方法を試しました。silver hair hime cut blunt bangs grey eyes slender expressionless といった指定です。

結果は 「髪型と髪色が同じ別人が 20 人」

結果
揃った髪の色・長さ・前髪・肌の白さ・衣装・無表情
揃わなかった顔の輪郭・目の描き方・唇・年齢感・側髪の有無・塗りの質感

とくに目と唇の差が大きい。指定していない項目に seed の揺れがすべて流れ込むためで、タグを書けば書くほど「指定しなかった箇所」にばらつきが集中する構造になっています。

指定を増やしても揃わなかった

そこで、ばらついた項目を名指しで固定しました。目の形、眉、唇の色、顔の輪郭、画角を追加指定します。

  • 画角は揃った
  • 顔は揃わなかった

しかも副作用が出ました。sharp narrow eyesthin eyebrows を足したことで、目が落ち窪んだ不気味な顔に寄ってしまい、指定を増やす前より見た目が悪くなったのです。

ここで分かったのは、タグ指定はブレ幅を縮めることはできても、同一性を固定することはできないということでした。

失敗の記録: 照明タグを積んで画面を潰した

改良の過程で、照明も固定しようとして 4 つのタグを同時に入れました。dim indoor lighting soft shadows low key lighting night

結果はほぼ真っ黒。青被りした画面に顔が沈み、比較そのものが成立しなくなりました。

照明タグは乗算的に効きます。「暗め」を意味する語を 4 つ重ねると、それぞれが独立に暗くするのではなく掛け算になります。1 つで十分でした。

そもそも当初の問題は顔であって照明ではありませんでした。直すべき箇所以外に手を出すと別の問題を作る、という当たり前の教訓です。

手法2: 参照画像で顔を写す — 揃った

次に、参照画像から見た目を転写する方式 (IP-Adapter) を試しました。1 枚目の生成結果から「これ」と思う 1 枚を選び、それを参照画像として固定します。

強度を 3 段階で 8 枚ずつ測りました。

強度顔の一致副作用
0.5やや揃うばらつきが残る
`0.7`揃う実用範囲
0.9最も揃う絵が平板になり、構図まで固定されて多様性を失う

0.7 が最適でした。

ただし「同じ場面・同じ服で揃う」だけでは意味がありません。実際に必要なのは、場面も服も変わる中で同じキャラでいられることです。そこで参照画像を固定したまま、衣装と場所を 8 通りに振って測り直しました。

  • オフィス(スーツ)
  • リビング(ブラウス)
  • 夏祭り(着物)
  • 洋館(ドレス)
  • 寝室(部屋着)
  • プールサイド(水着)
  • 下着
  • セーター

結果、8 場面すべてで同一人物として通りました。

残った揺れは 2 つ。髪色がときどき金寄りに転ぶことと、体型が場面によって多少変動すること。いずれも許容範囲でした。

手法3: 追加学習 (LoRA) — 今回は不要だった

キャラを固定する最も確実な方法は、そのキャラの画像を集めてモデルを追加学習させること (LoRA) です。

ただしこれには 2 つの工程が要ります。

  1. 学習用の画像を揃える
  2. 学習環境を構築する

今回の測定では手法 2 で十分な一致が得られたため、この投資は見送りました。

参照画像方式で足りるなら先にそちらを試すべきで、最初から学習に飛ぶのは順序が逆だと考えています。

顔認識ベースの手法が使えない場合がある

実写系では、顔検出を使って顔の特徴量を注入する手法が強力です。だがこれはイラストには使えません。内部で使われる顔検出器が実写の顔しか検出できず、アニメ絵では顔が取れないためです。

手法実写イラスト
顔検出ベース強い動かない
画像埋め込みベース (IP-Adapter)使える使える

「一貫性を保つ手法」を選ぶときは、それが自分の画風で動くかを先に確かめる必要があります。

実際にかかる時間

手法の比較では「揃うかどうか」だけを見ましたが、運用では速度も判断材料になります。

1 枚目だけ極端に遅いのは、6.7GB のチェックポイントをディスクから GPU に載せる時間が含まれるためです。同じモデルで連続生成する限り、このコストは 1 回しか払いません。

逆に言えば、モデルを切り替えながら 1 枚ずつ生成すると毎回この 90 秒を払うことになります。20 枚を別々に頼むと 30 分、まとめれば 2 分半。

参照画像方式を足しても、1 枚あたりの生成時間はほとんど変わりませんでした。追加の計算は画像 1 枚分の埋め込みだけで、サンプリング本体に比べれば無視できます。同一性の担保にかかる追加コストは実質ゼロということになります。

これから作る人へ — 手を付ける順番

同じキャラを継続して出すサービスを作るなら、次の順で試すのが早いです。

  1. まずタグだけで数十枚出し、揃わないことを自分の目で確認する。ここを飛ばして最初から学習に行くと、必要だったかどうかが分からないままコストを払うことになります。
  2. 揃わない箇所を特定してから参照画像を試す。1 度に 1 つしか変えない。今回、照明まで同時に触って画面を真っ黒にしました。原因の切り分けができなくなります。
  3. 参照画像の強度は必ず複数試す。0.50.9 では別物になります。既定値のままだと、効かないか効きすぎるかのどちらかに落ちやすい。
  4. 服と場所を振って測り直す。同じ場面で揃うのは当たり前で、それは何も証明していません。
  5. それでも足りなければ学習を検討する。特徴が突出しないキャラ(ありふれた髪色・平均的な体型)ほど難易度が上がります。

よくある質問

参照画像はどうやって用意するのか

まずタグ指定だけで数十枚生成し、その中から「これがこのキャラだ」と思える1枚を選びます。最初の1枚は人間が選ぶ必要があります。

強度を上げれば上げるほど良いのではないか

なりません。0.9 では顔は最も揃いますが、絵が平板になり構図まで固定されて場面の多様性が失われました。0.7 が実用上の折り合いでした。

服や場所を変えても本当に同じ顔でいられるのか

8場面 × 2回で測り、すべて同一人物として通りました。ただし髪色がときどき金寄りに転ぶ揺れは残りました。

LoRA を使わないと同一性は担保できないのでは

今回のキャラでは参照画像方式で十分でした。ただし特徴が突出しないキャラ(ありふれた髪色・体型)では難易度が上がるため、キャラによっては学習が必要になる可能性があります。

実写でも同じ方法が使えるのか

使えますが、実写では顔検出ベースの手法の方が精度が高い。逆にその手法はイラストでは動きません。画風に合わせて選ぶ必要があります。

フィードを見はじめる