【画像生成AI】ディープフェイクを活用して同一人物をつくる!
Sep 13, 2023
CGチームの牛山です。
これまで画像生成AI × 3DCGのトピックで以下のブログを書いてきました。
StableDiffusionを使って、CGのアバターの顔をいかにリアルに、そして同一人物のようにするにはというトピックで検証してきました。
【画像生成AI】Stable DiffusionによるCGアバターの置き換え
【画像生成AI】アバターを色んな角度できっちり同一人物にする!
今日やる事
前回、様々な角度で同一人物のように見せるということは達成できました。
一見すると、それだけで「人物固定化」の問題は解決できたように感じるかもしれません。
しかし、角度以上に「距離」つまり、「画像の中に映る被写体の面積」というのが生成AIにとって鬼門となるのです。
今回は、同一プロンプトであっても、距離の違いでどのような結果を生むのかを見ていき、最後はそれをどう解決したのかをご説明します。
今回の目標
- 遠距離のアバターの顔をリアルにする
- 距離が違っても同一人物になるようにする
- CGの服とAIの顔がうまくつながるように合成する(服はCADデータに基づく正確なCGでないといけないため)
検証1:カメラの距離が違うと何が起こるのか?
それではさっそく距離の違いがどんな問題を起こすのか見ていきましょう。
カメラからの距離が離れるほど、映っているアバターの面積が小さくなり、解像度が少なくなります。
つまり、「カメラの距離が異なる」=「解像度が異なる」という事になります。
今回使う画像
CLOのアバターをBlenderでレンダリングしたものになります。
表示されるアバターに対するすべての権利は、CLOバーチャル・ファッション・インコーポレーテッドに帰属します。https://www.clo3d.com/解像度の違い
Stable Diffusionで2種類の解像度(512px / 1024px)で画像生成するとどんな違いが出るのか比較します。
CGと合成する用途で、ControlNetのSoftEdge(輪郭検出)を使ってポーズや顔立ち等を固定しています。
他に、Restore FaceをONにして顔の崩れを防ぐ設定にしています。
プロンプトは以下を使い、シード値を継承します。
Prompt: Photo, photorealistic
Negative prompt: 3DCG, low quality,
このように解像度を引き上げたところ高画質になった半面、年齢まで変わってしまいました。
カメラの違い
では次に、バストショットとクローズアップの比較的近い距離の2種類のカメラでどのような違いがでるか見てみましょう。
結果は、距離が近いクローズアップでは、よりCGっぽくなっていますね。
ネガティブプロンプトでCGを打ち消すようにという指示を出しています。
そしてその指示への忠実度はCFG Scaleで、元の画像からの改変度合いはDenoiseというパラメータでコントロールしています。
しかし、この2種類の画像においては、それぞれのパラメータのかかり具合が変わっているように見受けられます。
検証1まとめ:
このように、距離…つまり解像度の違いによってControlNetやプロンプト、シード値などによる人物の固定化は簡単に崩されてしまいます。
これまでにこのブログで様々な工夫をこらして人物のリアル化に取り組んできましたが、何か方法はないのでしょうか?
検証2:Roopによる顔の置き換え
Roopとは
顔の崩れを防いだり、同一人物に似せるなどの拡張機能は色々と出回っています。
Reference-only, Adetailer等色々な機能を試しましたが、ControlNetとの併用に難があったりなどであまり良い結果が出ませんでした。
CGとの合成であればControlNetは必須なのです…。
そして最後に辿り着いたのがRoopです。
Roopはディープフェイク(AIによる顔の置換)を行う拡張機能です。
ディープフェイクというと、なにか危ないものをイメージしがちかと思います。
大統領や有名人の顔を勝手に差し替えたりしてトラブルが起きていますよね。
正しく使う事が出来れば、強力な技術です。
元々は専用の環境構築が必要でしたが、Stable Diffusionでは簡単に外部拡張としてインストールして使うことが出来ます。
詳しくはこちらを見ると分かりやすいかと思います。モナリザ可愛い!
【Stable Diffusion】web UI拡張機能で簡単ディープフェイク
今回はこの技術を使って、有名人ではなく、AIが生成した顔に置き換える、という事を行います。
Roopのテスト:ロングショットでの変化
CGをベースに 生成してリアルになったこちらの画像で、ロングショットの顔を置き換えしてみたいと思います。
結果は、無事入力した画像に近い顔に置き換わっていますね!
これがディープフェイクの力。すごいですね!
今回使う画像
ここからの検証は、実証も兼ねて別のシーンを使う事になります。よりECサイトを意識した画像になります。
表示されるアバターに対するすべての権利は、CLOバーチャル・ファッション・インコーポレーテッドに帰属します。https://www.clo3d.com/
Roopを実戦で使う!
まずは、Roopで置き換えするための顔を色々と生成してみましょう。
今回は日本人にしたいので、アジア人の生成に定評のあるBRAVという学習モデルを使います。
こちらの顔を使って置き換えてみます。
使い方は非常に簡単で、拡張機能からRoopを立ち上げて入力する顔画像を指定するだけです。
そして、顔はAI、服はCGで合成した結果がこちらです。
いかがでしょうか。様々な距離・角度であってもある程度似たような人物の顔になっています。
少なくとも、先ほどまでのように顔が崩れたり、年齢が違ってしまうというようなことは起こりません。
Roopを使う事で、難易度の高かった解像度の違いを克服する事が出来るようになります。
Roopで出来る事・出来ない事
では、Roopをもう少し深掘りしてみましょう。
ただ置き換えるだけではなく、プロンプトにテキストを入れて追加の変更をする事も出来ます。例えば、表情を変えたり、目線を指示する事も出来ます。
上の例のように、人種を変えることはできますが、肌の色は変えることが出来ませんでした。
また、あくまで「顔」だけを置き換えるので、髪型は継承する事が出来ません。
検証2まとめ:
このようにディープフェイクという技術は必ずしも実在する人物の顔を置き換えるだけではなく、AIが生成した人物の顔を固定化するという目的でも使う事が出来るのです。
そして、距離、角度の違いがあっても、AIが同一人物を描画できるようになる事で、最終的な納品物としての信頼性も出てきます。
AIのフォトリアルな顔をCGの服と合成する事で、ECサイトの広告画像が、より一層魅力的になるでしょう。