画像生成AIにおいて長らくの懸案であった同一キャラクターの再現性の低さが、最新の技術によって解決できる日が来てしまいました。
「IP-Adapter FaceID Plus 」これはもう使うしかありません。
今回はこの最新機能の使い方を解説していきます。
IP-Adapter FaceID Plus とは?
まずは、「IP-Adapter」について復習しましょう。
画像生成AIはテキストプロンプトから新たに非常に高品質の画像を生成できます。
しかしながらより詳細な目的を持った画像を生成するには複雑なプロンプトエンジニアリングが必要であり、それを以てしてもテキストプロンプトのみで目的の画像を生成するには様々な困難が伴います。
そこで登場したのが、画像そのものをプロンプトとして使う「IP-Adapter」の機能でした。
この機能は、画像イメージから画像の特徴を抽出するエンコーダーの情報とテキストプロンプトの情報を適応させてU-netに返すことで、画像そのものをプロンプトとして使うことを可能にした技術です。
Stable Diffusionを使っている者にとって一つの課題であったのが、どのようにキャラクターを統一させるか?ということでした。
通常のプロンプトのみでの生成ではキャラクターの再現性は非常に低く、Loraやembeddingなどの他の学習データを使う事でその再現性を高めています。
「IP-Adapter」はそれに変わる機能として、登場時はかなりの注目を集めました。
しかしながら、実際にはユーザーの高い期待に応えることが出来ずにあまり使われない機能となっていました。
その「IP-Adapter」がFaceID(顔検出機能)と合体して超絶パワーアップしたものが
『IP-Adapter FaceID Plus 』です。
2023年末にV1とV2が同時にリリースされています。
IP-Adapter FaceID Plus は何がすごい?
この機能を使用することで今までにないほどキャラクターの再現性が高まります。
特に今まで難しかった実写系モデルでのキャラクターの再現性が画期的に高まります。
顔検出の精度を高める為の専用のLoraも公開されていて、同時に使用することで顔の各パーツがとても高精度で再現されます。
これは本当にすごい機能なので、ぜひ皆さんに使ってみていただきたいです。
導入についてはこの記事を見ながら取り組んでください。
ただし現在のところ研究目的としてリリでースされている為、商用利用はできませんのでご注意ください。
IP-Adapter FaceID Plus の導入方法
今回の導入はローカル環境で実行しています。
Googleコラボ等の外部環境を使用している方でも導入自体は可能だと思いますが、ダウンロードするものが多いのでストレージの負荷にはご注意ください。
①ファイルをダウンロードする
まずは必要なデータファイルをHugging Faceからダウンロードしましょう。
たくさんファイルがあり過ぎて分かりにくいですが赤で囲った部分が必要になります。専用のLoraもセットになっているので忘れずにダウンロードしてください。
下の2つはSDXL用なので使っていない方は必要ありません。
ファイルはそれぞれ
Loraが – stable-diffusion-webui → models → Lora
ControlNetモデル(binファイル) – table-diffusion-webui → extensions → sd-webui-controlnet → models
に入れてください。
②顔認識機能「InsightFace」を導入する
『IP-Adapter FaceID Plus 』自体は顔認識機能がないので、「InsightFace」を別途導入します。
「InsightFace」は、主にPyTorchとMXNetをベースにしたオープンソースの2D&3Dディープフェイス分析ツールボックスです。
導入はターミナルから行います。
stable-diffusion-webuiのバッチに移動して以下コマンドを実行します。
import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image
app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
img = ins_get_image('t1')
faces = app.get(img)
rimg = app.draw_on(img, faces)
cv2.imwrite("./t1_output.jpg", rimg)
色々ダウンロードされるのでしばらく時間がかかります。
ここまで無事にできれば9割方準備完了です。
③ControlNetのバージョンがv1.1.440以降か確認する
「IP-Adapter FaceID Plus 」を動かすためにはControlNetのバージョンをv1.1.440以降である必要があります。
webuiを起動して、「Extentions」タグからCheck for updatesクリックしてControlNetのバージョンを確認しましょう。
一番右の「Update」がunknownになっていれば最新バージョンですので問題ありません。
古いバージョンの方はそのままでは使えませんのでバージョンアップしてください。
※ControlNet自体を未導入の方はこちらを参考に導入してください。
以上3点問題がなければ準備終了です。
では早速使っていきましょう。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい
IP-Adapter FaceID Plus の使い方
基本的には通常のテキストプロンプトでの生成にControlNetを使って「IP-Adapter FaceID Plus」を適用させ、さらに専用Loraで精度を高めていきます。
使い方①:ControlNetで「IP-Adapter FaceID Plus 」の設定をする
先にControlNetの設定から説明しますが、プロンプト等のパラメータから入力しても問題ありません。
まずは通常通りにStable Diffusionを立ち上げ、ControlNetに移動します。
※初学者の方で、立ち上げが難しい場合はこちらを参考にしてください。
参照したい画像をControlNetに放り込みます。
今回は自作のこの女性を使ってみます。
ControlNetのパラメーターは
- Enableを有効化
- Pixel Perfectを有効化(Preprocessor Resolutionを調整したい場合は有効化しない)
- Control TypeにIP-Adapterを選択
ここまではいつも通りの使い方です。
次にPreprocessorを開いて 「ip-adapter_face_id_plus」とModelに「ip-adapter-faceid-plus_sd15 [d86a490f]」もしくは「ip-adapter-faceid-plusv2_sd15 [6e14fc1a]」を選択します。
V1とV2の違いは学習内容の違いであると思われますので、使ってみて好みのものを使用すると良いでしょう。
ControlNetの設定はこれで終了です。
Control Weight等は特に触らなくても問題なく作画できましたが、必要に応じて調整してください。
使い方②:<lora:ip-adapter-faceid-plusv_sd15_lora:0.5を適用する
次にプロンプト等を設定していきますが、通常通りご自身の描かせたいものをプロンプトとして渡してください。ネガティブプロンプトについても通常通りで大丈夫です。
その上で、専用のLoraを適用します。
ここで1つ注意点ですが、先ほどControlNet Model に「ip-adapter-faceid-plus_sd15 [d86a490f]」を選択した場合Loraは「lora:ip-adapter-faceid-plus_sd15_lora」
ControlNet Modelに「ip-adapter-faceid-plusv2_sd15 [6e14fc1a]」を選択した場合Loraは「lora:ip-adapter-faceid-plusv2_sd15_lora」を使用します。
V1とV2でそれぞれ分かれていますので、間違わないようにしてください。
Loraの強度は0.4~1.0くらいまで幅広く使えます。
サンプラーやサイズについても特に制限なく使えます。
パラメーターを設定し終わったらあとはGenerateするだけです。
初回Generate時は通常よりも時間がかかります。これは「InsightFace」などを起動している為と思われます。2回目からは通常通りの生成となります。
実際に同じ顔のAI美女を生成してみた!
それでは参照画像から作成した画像を並べていきます。
パラメーター等も参考になると思うので、合わせてご覧ください。
呪文(プロンプト)
Romanians beauty is wearing a shirt , (no makeup), loli, grin , short hair BREAK show her armpit, hight quality
ネガティブプロンプト
bad-hands-5, EasyNegative,low quality,letters
その他設定項目
- Steps: 23
- Sampler: DPM++ 2M Karras
- CFG scale: 4.5
- Seed: 1030203372
- Face restoration: CodeFormer
- Size: 512×768
- Model hash: 788ad3b05a
- Model: 0.7(beautifulRealistic_v60) + 0.3(BracingEvoMix_Another_v1)
- RNG: CPU
- ControlNet 0: “Module: ip-adapter_face_id_plus
- Model: ip-adapter-faceid-plus_sd15 [d86a490f]
- Weight: 1
- Resize Mode: Crop and Resize
- Low Vram: False
- Processor Res: 512
- Guidance Start: 0
- Guidance End: 1
- Pixel Perfect: False
- Control Mode: Balanced
- Hr Option: Both
- Save Detected Map: True”
- TI hashes: “bad-hands-5: aa7651be154c
- EasyNegative: c74b4e810b03″
- Version: v1.5.2
呪文(プロンプト)
A woman in a bikini BREAK in the beach <lora:ip-adapter-faceid-plus_sd15_lora:0.7>
ネガティブプロンプト
EasyNegative, bad-hands-5,low quality
その他設定項目
- Steps: 30
- Sampler: Euler a
- CFG scale: 5
- Seed: 3709043302
- Face restoration: CodeFormer
- Size: 512×760
- Model hash: ac68270450
- Model: beautifulRealistic_brav5
- RNG: CPU
- ControlNet 0: “Module: ip-adapter_face_id_plus
- Model: ip-adapter-faceid-plus_sd15 [d86a490f]
- Weight: 1
- Resize Mode: Crop and Resize
- Low Vram: False
- Processor Res: 512
- Guidance Start: 0
- Guidance End: 1
- Pixel Perfect: True
- Control Mode: Balanced
- Hr Option: Both
- Save Detected Map: True”
- Lora hashes: “ip-adapter-faceid-plus_sd15_lora: 0c2d19fef071”
- TI hashes: “EasyNegative: c74b4e810b03
- bad-hands-5: aa7651be154c”
- Version: v1.5.2
呪文(プロンプト)
A woman in red yukata, A hair ornament <lora:ip-adapter-faceid-plus_sd15_lora:0.7>, Night of the festival
ネガティブプロンプト
EasyNegative, bad-hands-5,low quality
その他設定項目
- Steps: 21
- Sampler: DPM++ 2S a Karras
- CFG scale: 5
- Seed: 2727582524
- Size: 512×760
- Model hash: ac68270450
- Model: beautifulRealistic_brav5
- RNG: CPU
- ControlNet 0: “Module: ip-adapter_face_id_plus
- Model: ip-adapter-faceid-plus_sd15 [d86a490f]
- Weight: 1
- Resize Mode: Crop and Resize
- Low Vram: False
- Processor Res: 512
- Guidance Start: 0
- Guidance End: 1
- Pixel Perfect: True
- Control Mode: Balanced
- Hr Option: Both
- Save Detected Map: True”
- Lora hashes: “ip-adapter-faceid-plus_sd15_lora: 0c2d19fef071”
- TI hashes: “EasyNegative: c74b4e810b03
- bad-hands-5: aa7651be154c”
- Version: v1.
ご覧のように今までと比べ物にならないくらいにキャラクターの再現度が上がります。
まとめ
いかがでしたでしょうか?
【最新技術】『IP-Adapter FaceID Plus V2』の使い方!高精度で同じ顔を生成しよう!について解説してきました。
今回のポイントをまとめると、以下のようになります。
- IP-Adapter に顔認識機能を合わせたらキャラクターの再現度が爆上がりした
この機能をもっと有効利用する技があります。
ControlNetにMulti-inputsタグが増えました。
ここに色々な表情の画像を入れることで、同一キャラクターでさまざまな表情を再現することができます。
ぜひ試してみてください。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい