Stable Diffusion系の画像生成でよく使われる
IP-Adapter-FaceIDControlNet(OpenPose)

どちらも「条件を与えて画像をコントロールする」技術ですが、
内部の仕組みはかなり異なります。

この記事では、以下を順番に解説します:

  • 顔特徴ベクトルとは何か
  • Cross-Attention Layer の役割
  • IP-Adapter-FaceID の仕組み
  • ControlNet(OpenPose)との違い

顔特徴ベクトルとは何か?

ベクトル=数値の集まり

まず「ベクトル」とは、シンプルに言うと:

[0.12, -0.33, 0.87, ...]

のような数値の配列です。

画像生成AIでは、画像やテキストをそのまま扱うのではなく、
意味を持った数値データに変換して処理します。


顔特徴ベクトルの正体

顔画像を入力すると、顔認識モデル(ArcFaceなど)が:

  • 顔の輪郭
  • 目・鼻・口の配置
  • 肌の質感
  • 年齢・性別的特徴

といった情報をまとめて、**1つの高次元ベクトル(例:512次元)**に圧縮します。

👉 重要ポイント:

  • テキストではない
  • 画像そのものでもない
  • 「顔の本質的な特徴」を数値化したもの

なぜこれで「同じ顔」になるのか?

このベクトル同士の距離で顔の類似度を判断できます。

  • 近い → 似ている顔
  • 遠い → 別人

つまり:

👉 「似ている顔」を数値で再現できる


Cross-Attention Layer とは何か?

Attention(注意機構)とは

AIが「どこに注目すべきか」を決める仕組みです。

例:

  • 「red dress」→ 赤い部分に注目
  • 「smiling」→ 口元に注目

Cross-Attention の役割

Cross-Attention は:

👉 異なる情報同士を結びつける仕組み

Stable Diffusionでは:

  • Query:画像生成中の特徴(UNet内部)
  • Key / Value:条件(テキストや顔情報)

この関係で、

👉 「どの条件をどれくらい反映するか」を決める


IP-Adapter-FaceID の仕組み

処理の流れ

① テキストプロンプト
→ テキストエンコーダ
→ トークン列(ベクトルの並び)

② 顔画像
→ 顔エンコーダ
→ 1つの顔ベクトル

③ IP-Adapter
→ 顔ベクトルを「複数トークン」に変換

④ Cross-Attention に入力
→ テキスト+顔トークンを同時に参照


ポイント

  • 顔ベクトルはそのまま使わない
  • テキストと同じ「列データ」に変換する
  • その後に結合する

例:

[text_tokens, face_tokens]

結果

👉 顔を維持しながら、プロンプトに従った画像が生成される


ControlNet(OpenPose)の仕組み

IP-Adapterとはアプローチが大きく異なります。


処理の流れ

① OpenPoseでポーズ抽出
→ 骨格の線画(スケルトン画像)

② ControlNet に入力
→ 条件画像として扱う

③ UNet に追加ネットワークとして接続
→ 各層に「形の制約」を与える


ポイント

  • 入力は「ベクトル」ではなく「画像」
  • Cross-Attentionではなく別ネットワーク
  • 形(ポーズ)を強制的に制御する

IP-Adapter と ControlNet の違い

項目 IP-Adapter-FaceID ControlNet(OpenPose)
入力 顔画像 → ベクトル ポーズ画像
情報形式 抽象(数値) 具体(画像)
仕組み Cross-Attention 追加ネットワーク
得意分野 顔の一致 ポーズ・構図
イメージ 記憶して再現 下書きをなぞる

たとえで理解する

IP-Adapter-FaceID

👉 「この人の顔を覚えて描いて」

ControlNet(OpenPose)

👉 「この線に沿って描いて」


まとめ

  • 顔特徴ベクトルは「顔の本質を数値化したもの」
  • Cross-Attention は「条件と画像を結びつける仕組み」
  • IP-Adapter は「顔の特徴を注入する技術」
  • ControlNet は「構図や形を制御する技術」

最後に

この2つは競合ではなく、組み合わせて使うと非常に強力です。

  • IP-Adapter → 顔を固定
  • ControlNet → ポーズを固定

👉 「同じ人物が、自由なポーズで動く」画像生成が可能になります。


ただし、学んだ画像に無いような顔の特徴や無理なポーズ(これも学んだ画像に無い場合が多い)は再現性が低くなります。モデルがどれだけ幅広い画像で学習をしたかも重要な要素獲ります。