画像を生成していて、「当たり!!」だと思うような画像が生成される場合があります。
例えば、次のような美女が生成できたような場合です。

そのような場合、この顔をベースに他のプロンプトを試したくなります。
そんなことが、IP-Adapter-FaceIDを用いると可能なのです。
実際にこの画像をベースにして生成したのが、この記事のアイキャッチ画像になります。
この記事では、そんな夢のようなことができるIP-Adapter-FaceIDについて解説しています。
IP-Adapter-FaceID
IP-Adapter-FaceIDとは、実験的なモデルになります。
通常のIP-Adapterでは、CLIPというモデルからの画像埋め込みを使用します。
IP-Adapter-FaceIDでは、これを顔認識モデルからの顔ID埋め込みに置き換えています。
顔IDの抽出には、InsightFaceが用いられています。
これにより、より一貫性のある結果を得ることができます。
加えて、IP-Adapter-FaceIDでは「LoRA」と呼ばれる技術を使用しています。
LoRAは、モデルのID一貫性を向上させるために用いられる技術です。
つまり、これにより、その人物であることをより確実に識別できるようになります。
それは、同じ人物の顔に基づいて生成される画像が異なるスタイルであってもです。
その辺りは、公式の参考画像を見ればわかると思います。
(※肖像権とかガン無視の画像のため、ここでは載せません)

あと、現時点(2024年1月初旬)でのIP-Adapter-FaceIDはSD 1.5ベースということに注意しましょう。
SDXLベースのモデルは、まだ公開されていません。
おそらく、近いうちにSDXL版のモデルも公開されると思います。
昨今の画像生成AIにおける進化のスピードを見ていると、それが自然な流れです。
IP-Adapter-FaceIDのGUIツール
IP-Adapter-FaceIDを動かす方法は、上記の公式ページで公開されています。
ただし、Diffusersを利用したGUIではないコードです。
おそらく、今後web UIなどのGUIツールでも利用できるようになっていくことでしょう。
個人的には、Fooocusに早く搭載されて欲しいです。
それまでは、次のデモを利用しておきましょう。

ただし、上記のデモだと個人的にはイマイチなんですよね・・・
冒頭の女性の画像を上記のデモで利用した結果が、以下になります。

何というか、ちょっと違うんですよね。
好みの問題だとは思いますけど。

ソースを見てみると、よくわからないモデルが指定されています。
個人的には、SD 1.5だとBRAV7が真っ先に出てきます。
そして、ステップ数も物足りないです。

あと、セーフモードもちょっとウザいかもしれません。

NSFWなワードをプロンプトに含めていないのに、画像が真っ黒になることが多々あります。
ということで、このデモをローカルマシンで動かすことにしましょう。
IP-Adapter-FaceID(GUIツール)の導入方法
このデモは、Windowsで動きます。
もちろん、Linuxは問題ないでしょう。
デモのプログラムは、仮想環境へのインストールをオススメします。
まず、GPU版のPyTorchのインストールは必須です。
前提条件になります。
今回は、無難なCUDA 11.8のPyTorchをインストールしています。
それに適したバージョンのPyTorchを選択すれば良いでしょう。
次に、プロジェクトをダウンロードします。
git clone https://huggingface.co/spaces/multimodalart/Ip-Adapter-FaceID
ダウンロードできたら、リポジトリルートに移動しておきます。
cd Ip-Adapter-FaceID
同じ階層において、次のファイルを確認できます。
requirements.txt
insightface==0.7.3 diffusers transformers accelerate safetensors einops onnxruntime-gpu spaces==0.19.4 opencv-python git+https://github.com/tencent-ailab/IP-Adapter.git
特に問題はないため、次のコマンドでそのままインストールします。
pip install -r requirements.txt
処理が終わったら、デモのインストールは完了です。
IP-Adapter-FaceID(GUIツール)の動作確認
起動は、次のコマンドで行います。
python app.py
ただし、そのまま実行するとエラーが出ると思います。
原因は、ローカルマシンはSpaces環境ではないということです。
そのため、Spaces環境独自のコードを無効にします。
場所は、次の2か所です。


これらを無効にしたら、正常に起動できるはずです。
ただし、初回起動時には必要なモデルのダウンロードが行われます。
そこそこの時間を待たされることになります。
起動できたら、Hugging Face上のデモと同じように操作してみましょう。

問題なく動けば、動作確認としてはOKです。
あとは、各自の好きなようにソースを変更しましょう。
ベースのモデルを変えるもよし。
ステップ数を変えるもよし。
セーフモードをオフにするのもよしですね。
NSFWフィルターを回避する方法は、次の記事で解説しています。
1年以上前の記事ですが、まだその方法は有効です。
ただし、セーフモードをオフにするなら、「Advanced Options」以下も削除しておくこともオススメします。

毎回削除するのが面倒なら、コードから除去しておきます。
