🐶

facefusionを用いてdeepfake動画を作成する

2024/04/17に公開1

おはこんばんにちは。
最近、AIやdeepfake, ML周りを触っているYです。

今回はdeepfake動画を簡単に作成できるfacefusionというオープンソースプロジェクトの使用方法について解説していきます。
※pythonを軽く触ったことがあるという前提

1. 環境構築

今回はPCのスペック差もあるかと思いますので、クラウド上での実行を想定してセットアップを行います。(要領的にはローカルも同様)

まず、本記事ではPaperspaceというクラウドGPUサービスを使用します。
https://www.paperspace.com/

サインアップが完了しましたら、MLGradientにて新規でprojectを作成し、notebookを立ち上げましょう。
今回使用するmachineは無料枠のP5000です。
(なお、FREEプランの場合マシン自体の無料枠が見当たらなかった為、クレジットバランス内での使用を行えば大丈夫かと思われます)

そして、startしましたらターミナルを開き仮想環境を立ち上げ、facefusionをgitcloneします。
https://github.com/facefusion/facefusion

プロジェクトファイルのfacefusionに移動して必要なパッケージ類をインストールします。
requirements.txtに格納されているため、そちらを使用してください。

また、cudaエンコーダを使用するためのパッケージが入っていないみたいなので、下記コマンドでインストールしてください。

python install.py --onnxruntime cuda-11.8

2. 実行

パッケージインストールが完了しましたら、実際にファイルをアップロードして実行していきます。
facefusionのディレクトリ内にinput, outputのフォルダを新規作成し、deepfake加工を行う元動画ファイルとfaceswapする画像をinputフォルダ内にアップロードしてください。

今回はvitalikを元動画として使用します。
https://www.youtube.com/watch?v=HXwTnsP5Q7w

なお、画像は危機感ニキでお馴染みのジョージコーチを使いますw

そして、下記コマンドで実行を行います。
(ファイル名はそれぞれ合わせてください)

python3 run.py --source input/face.png --target input/video01.mp4 --output /notebooks/facefusion/output/swapped.mp4 --frame-processors face_swapper face_enhancer --face-enhancer-model gpen_bfr_512 --execution-providers cuda --headless

そして、実際に出力されたものがこちらになります。
https://www.youtube.com/watch?v=gGUp6097M28

3. 更なるクオリティを求めて

さらにクオリティを向上させるために、face_swapperの学習モデルを色々トライしてテストしていきます。
下記リンクの公式docにてconfigできます。
https://docs.facefusion.io/usage/cli-arguments

それは僕も同意見ですので、別の動画をサンプルとして使用させていただきます。

今回のテストで使用する動画はこちらです。
https://www.tiktok.com/@meku_0421/video/7221137722201722114?is_from_webapp=1&sender_device=pc&web_id=7356130757646321169

そして、個人的に藤咲凪さんが好みですので下記のツイート画像を使用させて頂きます。
https://x.com/fujisakinagi/status/1761710938808521202

テスト1 blendswap_256 + enhancer-blend 100

https://youtu.be/7B8iMupWztw?si=ARs0-7Kl-BTfplNr

まぁ割といいですね。
ただ、目の箇所や涙袋あたりが凪さんの要素として入ってないようにも見えます。

テスト2 simswap_256 + enhancer-blend 100

https://www.youtube.com/watch?v=AYI2mPtwjkM

はい。
プラシーボ効果が効いてるのか、そう思えば変化してます。

次に移ります。

テスト3 inswapper_128_fp16 + enhancer-blend 100 + real_esrgan_x4_fp16

https://www.youtube.com/watch?v=xXXaQsPrYLk

お、いい感じ。
目の感じが上手いこと取れてるように思えます。

そして、frame_enhancerのmodelを標準の上位互換であるx4_fp16に変更しました。

全体比較

https://www.youtube.com/watch?v=--qBNLKyd54

blendswapとsimswapの違いは特に無いですが、inswapperがやはり強いですね。

元動画とinswapperの比較画像からも違いがわかるかと思います。

4. 最後

以上がfacefusionを用いたdeepfake動画の作成方法でした。
割と簡単に作成でき、通常のパッケージ化されたアプリやソフトでするよりも、無料でこの自由度が実現されているのは感激です。。

また、本記事ではクラウドサービス上での構築と実行を行いましたが、ローカル環境ですとWebUI上で操作ができるみたいなので、高性能なGPUをお持ちでしたらそちらで行ったほうが良いかもしれません。

では、お疲れ様でしたー。

Discussion

mttmtt

現在でも上記の方法で動いていますか?

"python install.py --onnxruntime cuda-11.8"

を実行するとエラーが起き inquirer のインストールを促され、インストール後は
 "Conda is not activated"
という文言で停止します。

現状、" --execution-providers cuda" を " --execution-providers cpu" に変更して実行できてはいます。
PaperspaceのGPUはA4000、VENV環境下です。