ComfyUIのIPAdapter FaceIDで顔が似ない原因|weightの前にLoRA・SD1.5/SDXL・顔の検出を確認

ComfyUI

この記事について(広告・アフィリエイトリンクはありません)

使ったソフトとモデルは、すべて無料で入手できます。ただし IP-Adapter FaceID は研究目的のみで、商用利用は想定されていません(後述)。試した環境の一覧は検証の記録にあります。

IPAdapter FaceID で顔が似ないときは、weight を上げる前に、付属の LoRA・モデルの系統(SD1.5 用か SDXL 用か)・参照画像の顔の大きさの3つを確かめてください。 今回の試験では、LoRA を外すと顔の近さが大きく下がり、顔が小さく写った参照画像と、SDXL に SD1.5 用のモデルをつないだ場合は、エラーなしでまったく似ませんでした。

所要時間は30分ほど、難しさは初心者〜中級です。

先に結論(今回のテスト条件で)

条件顔の近さ(平均)エラー
LoRA 0.6(基準、SD1.5・FaceID Plus V2)0.33なし
LoRA なし(lora_strength 0)0.14なし
参照画像の顔が小さい・横向き-0.03なし
SDXL に SD1.5 用の FaceID を手でつなぐ0.12なし
SDXL+SDXL 用の FaceID(Unified Loader)0.63なし
参照画像に顔がない—InsightFace: No face detected.
weight 1.50.57なし

「顔の近さ」は、参照の顔と生成した顔の特徴量(InsightFace)のコサイン類似度で、1に近いほど同じ人です。シード6つの平均(手でつないだ条件など一部は2つ)。今回の画像では、0.4 を超えると同じ人に見えるものが多くなりました。

迷ったら

「IPAdapter Unified Loader FaceID」を使い、プリセットは FACEID PLUS V2、lora_strength は 0.6 のまま。参照画像は顔が大きく写った正面の写真にします。似なければ weight を 1.0 → 1.5 と上げます。

FaceID とは?

IP-Adapter-FaceID は、参照画像の顔の特徴を使って、同じ人の顔で画像を作るためのモデルです。公式のモデルカードによると、顔の特徴を InsightFace で取り出し、「顔の特徴量」と「顔を似せるための LoRA」の2つを組み合わせて使います。SD1.5 用と SDXL 用は別のファイルです。

ComfyUI では ComfyUI_IPAdapter_plus(カスタムノード)で使います。このノードは2025年4月から更新が止まっていますが、ComfyUI 0.43.0 で動きました。

ワークフロー

SD1.5 と FaceID Plus V2 のワークフロー。IPAdapter Unified Loader FaceID で LoRA の強さを 0.6 にしている
SD1.5 と FaceID Plus V2 のワークフロー。IPAdapter Unified Loader FaceID で LoRA の強さを 0.6 にしている

基本の形は、チェックポイントを「IPAdapter Unified Loader FaceID」に通し、「IPAdapter FaceID」で参照画像を渡して、KSampler につなぐだけです。

1. 付属の LoRA が効いているか

FaceID には、顔を似せるための LoRA が付いています。Unified Loader FaceID は、プリセットに合う LoRA を loras フォルダーから探して自動で当てます(強さは lora_strength、既定 0.6)。ファイルが見つからないと「LoRA model not found.」で止まるので、入れ忘れには気づけます。

気づきにくいのは、lora_strength を 0 にした場合と、ローダーを自分で組んで LoRA を付け忘れた場合です。どちらもエラーは出ず、ただ似なくなりました。

左から参照画像、LoRA なし(シード1・2)、LoRA 0.6(シード1・2)
左から参照画像、LoRA なし(シード1・2)、LoRA 0.6(シード1・2)
条件顔の近さ(シード1・2)
Unified Loader、lora_strength 00.02・0.04
自分でローダーを組み、LoRA なし0.02・0.04(上と同じ画像)
Unified Loader、lora_strength 0.60.43・0.71
自分でローダーを組み、LoRA ローダーで 0.60.43・0.71(上と同じ画像)

自分でローダーを組むなら、「LoRA ローダー(モデルのみ)」で ip-adapter-faceid-plusv2_sd15_lora を当ててから、IPAdapter FaceID につなぎます。

2. SD1.5 用と SDXL 用を取り違えていないか

Unified Loader は、チェックポイントが SDXL なら SDXL 用の FaceID を自動で選びます。手で「IPAdapter Model Loader」を使う場合は、自分で選ぶので取り違えが起きます。

SDXL のチェックポイントに SD1.5 用の FaceID をつなぐと、エラーも警告も出ずに生成が終わり、別人の顔になりました(顔の近さ 0.12)。同じ SDXL で、SDXL 用を Unified Loader で使うと 0.63 で、今回いちばん安定していました。

左2枚が SDXL+SDXL 用の FaceID、右2枚が SDXL に SD1.5 用の FaceID をつないだもの
左2枚が SDXL+SDXL 用の FaceID、右2枚が SDXL に SD1.5 用の FaceID をつないだもの

3. 参照画像の顔が検出されているか

FaceID は、参照画像の顔を InsightFace で見つけて使います。顔がまったくない画像では「InsightFace: No face detected.」で止まりました。

顔のない画像を参照にしたときのエラー。IPAdapter FaceID のノードが赤く囲まれている
顔のない画像を参照にしたときのエラー。IPAdapter FaceID のノードが赤く囲まれている

困るのは、顔が小さい・横向きの画像です。今回、全身が小さく写った横向きの写真を参照にすると、エラーは出ませんでしたが、まったく似ませんでした(顔の近さ -0.03)。顔は見つかっても、小さすぎて特徴がうまく取れていないと考えられます。

左が顔の小さい参照画像、右2枚がそれで作った結果。眼鏡と髪型は近いが別人になっている
左が顔の小さい参照画像、右2枚がそれで作った結果。眼鏡と髪型は近いが別人になっている

参照画像は、顔を中心に切り抜いて、顔が画面の大部分を占めるようにします。

4. それから weight を調整する

3つを確かめてから、weight と weight_faceidv2 を調整します。

設定顔の近さ(平均)見た目
weight 0.50.14似ない回が多い
weight 1.0(既定)0.33シードによってばらつく
weight 1.50.57似る回が増える。構図が顔のアップに寄りやすい
weight_faceidv2 0.50.331.0 とあまり変わらない
weight_faceidv2 2.00.38少し似る
シード2の比較。左から weight 0.5、1.0、1.5、weight_faceidv2 2.0
シード2の比較。左から weight 0.5、1.0、1.5、weight_faceidv2 2.0

weight を上げると似やすくなりましたが、画面が顔のアップになりやすく、プロンプトの「上半身」などの指示が弱くなります。生成した画像の顔が小さいと似にくいので、構図も一緒に見ます。数値は今回の画像での目安で、モデルや参照画像で変わります。

必要なもの

ファイル大きさ置き場所
ip-adapter-faceid-plusv2_sd15.bin149MBmodels\ipadapter
ip-adapter-faceid-plusv2_sd15_lora.safetensors49MBmodels\loras
ip-adapter-faceid-plusv2_sdxl.bin(SDXL 用)1.4GBmodels\ipadapter
ip-adapter-faceid-plusv2_sdxl_lora.safetensors(SDXL 用)355MBmodels\loras
image_encoder/model.safetensors2.4GBmodels\clip_vision に CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors という名前で
v1-5-pruned-emaonly.safetensors4.1GBmodels\checkpoints

Unified Loader はファイル名で探すので、CLIP Vision のファイルは名前を変えないと「ClipVision model not found.」になります。InsightFace の顔検出モデル(buffalo_l)は、初回の実行時に自動でダウンロードされ、models\insightface に入りました。

insightface は ComfyUI の Python に別に入れます。今回のポータブル版(Python 3.13)では、python_embeded\python.exe -m pip install insightface でビルドなしの insightface 2.1 が入りました。

商用で使える?

使えないと考えてください。公式のモデルカードには、InsightFace の学習済みモデルが非商用の研究目的に限られるため、FaceID のモデルも研究目的のみで、商用利用は想定していない、と書かれています。

参照画像には、使ってよい画像だけを使います。この記事の参照画像は、SDXL で作った架空の人物です。

RTX 5090 以外の人へ

SD1.5 の 512×512 は1枚 1.5秒ほどで、SD1.5 自体が軽いので、VRAM 8GB 程度の GPU でも試しやすい組み合わせです。顔の検出は CPU で動かしました。--reserve-vram での簡易テストはしていません。

よくある質問(FAQ)

Q. IPAdapter FaceID で顔が似ないのはなぜ?

付属の LoRA が効いていない、SD1.5 用と SDXL 用の取り違え、参照画像の顔が小さい、のどれかが多い原因です。今回の試験では、どれもエラーは出ずに、ただ似なくなりました。weight を上げる前にこの3つを確かめます。

Q. 「InsightFace: No face detected.」と出たら?

参照画像から顔が見つかっていません。顔が大きく写った正面の画像にするか、顔を中心に切り抜きます。

Q. FaceID は商用で使える?

公式のモデルカードでは、研究目的のみで商用利用は想定していないとされています。InsightFace の学習済みモデルが非商用の研究目的に限られるためです。

まとめ

FaceID で似ないときは、エラーが出ていなくても、LoRA・系統・参照画像の3つを先に見ます。

Unified Loader FaceID で LoRA 0.6、参照画像は顔の大きな正面写真。そのうえで weight を上げる。

この記事の検証環境

RTX 5090(32GB)/ Ryzen 9 9950X3D / 128GB / Windows 11 / ComfyUI 0.43.0 / ComfyUI_IPAdapter_plus(a0f451a、2025年4月)/ insightface 2.1 / SD1.5・SDXL Base 1.0 / 2026年11月7日
これまでの検証の一覧はこちら

検証メモ

  • 参照画像:SDXL Base で作った架空の女性(正面の顔のアップと、遠くから写した横向きの全身)。
  • 生成:SD1.5 は 512×512、SDXL は 1024×1024、30ステップ、CFG 6、dpmpp_2m・karras。プロンプトは「黄色いレインコートで夜の街に立つ女性、上半身」。
  • 顔の近さ:InsightFace(buffalo_l)で参照と生成画像のいちばん大きい顔の特徴量を取り、コサイン類似度を計算しました。FaceID を使わない画像は、6枚中4枚で顔が検出されませんでした(後ろ姿など)。
  • ばらつき:SD1.5 の LoRA 0.6 でも、シードによって -0.11〜0.71 と大きく違いました。全身が小さく写った回ほど低くなっています。
  • 未確認のこと:FaceID の無印・Plus・Portrait、weight_type の違い、GPU(CUDA)での顔検出、ComfyUI 0.44 以降。

参考リンク

この記事を書いた人
こまたろ

画像生成 AI に興味を持ったのがきっかけで、3年ほど前から ComfyUI を触っています。始めたころは今ほど情報がそろっておらず、何時間もかけて整えた環境が翌日のアップデートで動かなくなったこともありました。

KOBO Lab は、自分の学び直しと、これから ComfyUI を始める人が同じところでつまずかないようにと思って始めたサイトです。初心者も中級者も、迷ったときに開くサイトを目指しています。

検証は、RTX 5090 を積んだ自作 PC 1台で、実際に動かして確かめています。作業を楽にするための自作ツールも作っています。

記事は、運営者自身の経験と検証をもとに、Claudeで下書きを作り、GrokボットとMuseでも添削や確認をして仕上げています。

KOBO Lab の新しい記事を受け取る
ComfyUIカスタムノード
KOBO Lab の新しい記事を受け取る
タイトルとURLをコピーしました