はじめに
gpt-image-1.5で顔(肖像)生成を試すと、同一デモグラフィックでは(その生成モデルにとってのそのデモグラの)平均的な顔ばかり生成されてしまい、多様性を出すことが難しい課題がありました。
プロンプトエンジニアリングや、幾何学的な多様性をもたせた簡易モンタージュからのi2iでは、実在人物ほどの多様性を出すことは、少なくともArcFace埋め込みの観点(batch_diversity_score)ではできませんでした。
今回は、顔の特徴(アイデンティティ)をベクトルとして生成モデルに注入することを試し、同一デモグラ8枚の batch_diversity_score で 0.92 を達成できました。プロンプトチューニングの上限が 0.706、実在顔ベースラインが 0.96 なので、数値的には割と良いですが、デモグラの忠実性には課題も感じました。試行錯誤の過程を記載します。
構成
- 画像生成: RealVisXL V4.0 (SDXLを写実的な人物生成向けに調整したモデル) + InstantID(参照顔の特徴をSDXL系のモデルへ注入する追加機構)
- アイデンティティ供給: 顔プールの ArcFace (antelopev2) 埋め込みを凸結合+ノイズでサンプリング
- 評価: ArcFace埋め込みによる
batch_diversity_score(前回までと同じ) - 検証条件: 日本人女性・55歳・1920年代 固定、8枚
全国籍プールのブレンドで属性が崩れる
まず、国籍を限定しない顔プールから複数のArcFace埋め込みを選び、凸結合とノイズによって架空のアイデンティティを生成しました。顔の多様性は 0.838 まで高まりましたが、プロンプトで指定したデモグラ(日本人女性・55歳)と異なる、おそらくもとのアイデンティティに影響された特徴の顔が生成されてしました。
東アジア系女性プール+ノイズ調整
異なる国籍のアイデンティティは生成画像に影響を強く与えすぎるため、プールを東アジア系女性(日本・中国・韓国・台湾の生成顔10人)に絞り、等方ノイズ σ=0.10 を加えて生成してみました
| 指標 | 値 |
|---|---|
| batch_diversity_score | 0.9216 |
| プール顔との最大類似度 | 0.13〜0.29(別人化OK) |
目標の0.9を超え、多様性は高まりましたが、また他属性の特徴が紛れています。
等方ノイズの影響と思われます。
そこでノイズをプール内の個体差方向(メンバー − 重心)のランダム結合に制約すると、多様性は少し下がり、属性は少し安定しました。でも完璧ではありません。
| アーム | 多様性 | プール類似度 | 属性準拠(目視) |
|---|---|---|---|
| 等方ノイズ 0.10 | 0.9216 | 0.13〜0.29 | x(民族逸脱あり) |
| 部分空間ノイズ 0.5 | 0.8716 | 0.53〜0.75 | x(年齢などでばらつきあり) |
gpt-imageで仕上げ
InstantID出力は多様ですが、RealVisXL由来のストックフォト風透かしや質感の粗さが残ります。そこでgpt-image-1.5で品質を高めます。
- 「この同一人物のまま高品質に描き直せ」(input_fidelity=high)→ 同一性 平均0.86 で保持
透かしは消え、フィルム粒子や照明が自然になり、顔は同一人物のままです。100枚に適用しても別人化はゼロ(最低0.690)、多様性も維持(0.774)でした。コストは medium 品質で1枚約$0.06、100枚で約$7でした。
考察
プロンプトのみや、モンタージュのi2iに比べると、定量的にも定性的にも、多様な顔が作りやすい手法だと思いました。
一方で、指定したデモグラと異なる画像の確率も上がるので、デモグラを判定してフィルターするパイプラインも組み合わせるとさらに良くなりそうだと思いました。
アイデンティティのもとになるプールをどのように作るべきかは少し課題です。今回は日中韓の属性指定から得た合成顔で作りましたが生成画像に異なるデモグラが紛れてしまいました。対象デモグラの実在顔をプールとするほうが、より生成されるデモグラも安定する可能性があります。




