【Pythonでディープフェイク動画作成】SimSwapのインストール

【Pythonでディープフェイク動画作成】SimSwapのインストール 機械学習

「Colabでディープフェイクが禁止事項になって困っている・・・」
「ローカル環境でディープフェイク動画作成を試してみたい」

このような場合には、SimSwapがオススメです。
この記事では、SimSwapのインストールについて解説しています。

本記事の内容

  • SimSwapとは?
  • SimSwapのシステム要件
  • SimSwapのインストール
  • SimSwapの設定
  • SimSwapの動作確認

それでは、上記に沿って解説していきます。

SimSwapとは?

SimSwapとは、顔交換のための効率的なフレームワークのことです。
SimSwapを利用すると、ディープフェイク(Deepfake)動画を作成できます。

ディープフェイクと言えば、Faceswapが有名ですね。
しかし、Faceswapはもう長い間更新されていません。

2020年8月中旬にリリースされたV2.0.0が、最後です。
2年以上も更新がないということになります。

また、機械学習の分野では日々新しい技術が生まれています。
どうせなら、新しいモノを利用したいです。

何個か候補がありますが、SimSwapはその一つということになります。
何個か試した中で、ローカル環境でも動くという点でSimSwapはオススメです。

GoogleのColaboratory(Colab)では、ディープフェイク動画作成を禁止行為に位置付けています。
倫理的な理由やリソースの浪費が、その理由に挙げられています。
本当のところは、わかりませんけどね。

そのような事情もあり、ローカル環境でディープフェイクを扱えるのはデカいです。

以上、SimSwapについて説明しました。
次は、SimSwapのシステム要件を説明します。

SimSwapのシステム要件

現時点(2022年9月)でのSimSwapの最新バージョンはわかりません。
バージョン管理は、行われていないようです。

ただ、更新はたまに実施されています。

SimSwapのシステム要件は、以下をポイントにして説明します。

  • Pythonバージョン
  • GPU
  • PyTorch
  • ONNX Runtime
  • InsightFace
  • その他ライブラリ

それぞれを以下で説明します。

Pythonバージョン

サポート対象となるPythonのバージョンは、Python 3.6以降です。
ここでは、以下のPython公式開発サイクルに従ってPython 3.7以降を推奨しておきます。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

GPU

GPUは、必須となります。
動画の編集には、CPUだけは無理があります。

8GBメモリのGPU(検証マシン)では、特に問題はありませんでした。
容量の大きな動画を対象としたら、支障が出てくるかもしれません。

PyTorch

「pytorch1.5+」と記載されています。
最新のGPU版PyTorchをインストールしましょう。

GPU版PyTorchのインストールは、次の記事で解説しています。

ONNX Runtime

ONNX RuntimeについてもGPU版をインストールしましょう。
最新版のインストールを推奨しておきます。

InsightFace

SimSwapは、InsightFaceを顔認識で用いています。
InsightFaceのインストールは、次の記事で説明しています。

InsightFaceのインストールには、ONNX Runtimeがシステム要件となります。

その他ライブラリ

Numpyなどのライブラリが、システム要件となっています。
しかし、それらのほとんどは下記をインストールする過程でインストール済みです。

  • PyTorch
  • ONNX Runtime
  • InsightFace

個別にインストールが必要なのは、以下のライブラリとなります。

  • MoviePy
  • OpenCV
  • Fraction

MoviePyとOpenCVについては、下記の記事で説明しています。

まとめ

上記のシステム要件を満たすために、以下のコマンドを実行しています。
PyTorchは、各自の環境に合ったコマンドを利用する必要があります。

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
pip install onnxruntime-gpu
pip install insightface
pip install moviepy
pip install opencv-python
pip install Fraction

以上、SimSwapのシステム要件を説明しました。
次は、SimSwapのインストールを説明します。

SimSwapのインストール

SimSwapのインストールは、Python仮想環境を利用しましょう。

検証は、次のバージョンのPythonで行います。

> python -V
Python 3.10.4

インストール済みパッケージ状況を確認しておきます。
上記のシステム要件を満たしていることを前提とします。

> pip list
Package                Version
---------------------- ------------
albumentations         1.2.1
certifi                2022.9.14
charset-normalizer     2.1.1
colorama               0.4.5
coloredlogs            15.0.1
contourpy              1.0.5
cycler                 0.11.0
Cython                 0.29.32
decorator              4.4.2
easydict               1.9
flatbuffers            2.0.7
fonttools              4.37.2
Fraction               2.2.0
humanfriendly          10.0
idna                   3.4
imageio                2.21.3
imageio-ffmpeg         0.4.7
insightface            0.6.2
joblib                 1.2.0
kiwisolver             1.4.4
matplotlib             3.6.0
moviepy                1.0.3
mpmath                 1.2.1
networkx               2.8.6
numpy                  1.23.3
onnx                   1.12.0
onnxruntime-gpu        1.12.1
opencv-python          4.6.0.66
opencv-python-headless 4.6.0.66
packaging              21.3
Pillow                 9.2.0
pip                    22.2.2
prettytable            3.4.1
proglog                0.1.10
protobuf               3.20.1
pyparsing              3.0.9
pyreadline3            3.4.1
python-dateutil        2.8.2
PyWavelets             1.4.1
PyYAML                 6.0
qudida                 0.0.4
requests               2.28.1
scikit-image           0.19.3
scikit-learn           1.1.2
scipy                  1.9.1
setuptools             65.3.0
six                    1.16.0
sympy                  1.11.1
threadpoolctl          3.1.0
tifffile               2022.8.12
torch                  1.12.1+cu113
torchaudio             0.12.1+cu113
torchvision            0.13.1+cu113
tqdm                   4.64.1
typing_extensions      4.3.0
urllib3                1.26.12
wcwidth                0.2.5
wheel                  0.36.2

ここまで準備が整っていれば、GitHubからプロジェクトを取得します。
そして、リポジトリルートに移動。

git clone https://github.com/neuralchen/SimSwap.git
cd SimSwap

SimSwapのインストールは、これで終わります。
システム要件を整えるのが、ヤマと言えます。

なお、Windowsでgitコマンドを利用するには次の記事が参考になります。

以上、SimSwapのインストールを説明しました。
次は、SimSwapの設定を説明します。

SimSwapの設定

SimSwapの動作確認を行う前に必要な設定があります。
その設定は、次の作業です。

  • ディレクトリ作成
  • ファイルダウンロード
  • ファイル配置
  • プログラム修正

それぞれを以下で説明します。

ディレクトリ作成

SimSwapのリポジトリルートで処理を行っていきます。
まずは、ディレクトリの作成からです。

mkdir ./arcface_model
mkdir ./insightface_func/models
mkdir ./results
mkdir ./parsing_model/checkpoint

ファイルダウンロード

SimSwapを動かすために必要となるファイルをダウンロードします。
ここで言うファイルとは、学習済みモデルなどを指します。

とりあえず、デスクトップでも/tmpでも適当な場所に保存します。

checkpoints.zipとarcface_checkpoint.tar

SimSwapで利用する学習済みモデルです。
SimSwapの中枢とも言えるでしょうね。

ダウンロード先URL
https://drive.google.com/drive/folders/1jV6_0FIMPC53FZ2HzZNJZGMe55bbu17R

antelope.zip

画像の前処理で用いる学習済みモデルとなります。
顔認識のために、InsightFaceで利用するモデルです。

ダウンロード先URL
https://onedrive.live.com/?authkey=%21ADJ0aAOSsc90neY&cid=4A83B6B633B029CC&id=4A83B6B633B029CC%215837&parId=4A83B6B633B029CC%215834&action=locate

79999_iter.ptn

face-parsing.PyTorchの顔パースです。
このファイルは、画像の後処理で利用することになります。

ダウンロード先URL
https://drive.google.com/file/d/154JgKpzCPW82qINcVieuPH3fZ2e0P812/view

ファイル配置

arcface_checkpoint.tarは、作成したディレクトリ「arcface_model」に配置します。
checkpoints.zipは、解凍したモノをSimSwapのリポジトリルートに配置します。

それぞれの配置が完了すれば、上のような構成になります。
次に、antelope.zipは解凍したモノを作成した「insightface_func/models」に配置します。

最後は、79999_iter.ptnを作成した「parsing_model/checkpoint」に配置します。

プログラム修正

プログラム修正が必要な場合とそうではない場合が、あります。
動作確認を行う上では、以下のエラーが発生することがありえます。

  • ‘cp932’ codec can’t encode character ‘\xe0’
  • This ORT build has [~省略~] enabled. Since ORT 1.9
  • RetinaFace.detect() got an unexpected keyword argument ‘threshold’

それぞれの対応方法を説明します。

‘cp932’ codec can’t encode character ‘\xe0’

Windowsの場合に発生するエラーです。
PyTorchのファイルを編集します。

torch\serialization.py

上記ファイルの765行目を次のように変更します。

UTF-8でファイルを処理するように処理を変更しました。
これで、該当するエラーは出なくなります。

This ORT build has [~省略~] enabled. Since ORT 1.9

ONNX Runtimeのバージョンによって、エラーが発生してしまいます。
SimSwapが指定する次のバージョンであれば、エラーは出ません。

"onnxruntime-gpu==1.8.1"

しかし、ONNX Runtime 1.9以降の場合にはエラーが発生します。
エラーの全内容は、以下となります。

ValueError: This ORT build has ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'] enabled. Since ORT 1.9, you are required to explicitly set the providers paramet 
er when instantiating InferenceSession. For example, onnxruntime.InferenceSession(..., providers=['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'], ...)

要するに、どのでプロバイダーでONNX Runtimeを動かすのかを明示する必要があるということです。
デフォルトでは、次のような順番でプロバイダーを利用することになります。

['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']

次のどれに計算処理を依存するのかという指定です。

  • TensorRT(GPU)
  • cuDNN(GPU)
  • CPU

該当エラーが出るということは、cuDNNを利用していることになります。
そのため、次のようにプロバイダーの指定を明示的に行う必要が出てきます。

['CUDAExecutionProvider', 'CPUExecutionProvider']

そこで次のような修正を加えています。

onnxruntime\capi\onnxruntime_inference_collection.py

正直、この修正はかなり強引と言えます。
本来であれば、ONNX Runtimeの設定ファイルのようなモノを修正するだけで済ましたいです。

しかし、その設定ファイルのようなモノが見つかりません。
存在するのかもしれませんが、上記の対応で事足ります。

そもそも、ONNX Runtimeを指定されたバージョン以外で利用していることが原因です。
イレギュラーな場合には、このようなイレギュラー対応もアリでしょう。

RetinaFace.detect() got an unexpected keyword argument ‘threshold’

このエラーは、余計なパラメータがあるという内容です。
これは、InsightFaceのバージョンが指定とは異なる場合に出るのでしょう。

以下が、指定されたInsightFaceのバージョンです。

"insightface==0.2.1"

修正するのは、次のファイルです。

SimSwap\insightface_func\face_detect_crop_multi.py

単純に「threshold」をコメントアウトにするだけでOK。

以上、SimSwapの設定を説明しました。
次は、SimSwapの動作確認を説明します。

SimSwapの動作確認

SimSwapの動作確認を行います。
SimSwapの設定までが完了していれば、難なく動くはずです。

公式で公開されているコマンドをそのまま使いましょう。
それであれば、必要となる画像や動画をわざわざ自分で用意する必要がありません。

まずは、画像と画像を使った顔の入れ替えです。
利用する画像は、以下の2枚になります。

6.jpg

ds.jpg

具体的には、6.jpgとds.jpgの合成を行います。
そのためのコマンドは、以下となります。

python test_one_image.py --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path crop_224/6.jpg --pic_b_path crop_224/ds.jpg --output_path output/

上記コマンドを実行すると、「output」ディレクトリにresult.jpgが作成されます。
途中で「SourceChangeWarning」という警告が出るかもしれません。
処理に影響はないので、無視してOKです。

合成された画像は、以下のような画像となります。

result.jpg

表情や肌色はそのままで、顔だけがディカプリオになっています。
これだけでもスゴイとなりますが、さらには動画も合成できます。

アイアンマンの俳優の顔を使って、合成動画を作ってみましょう。

Iron_man.jpg

このアイアンマンの顔を使って、次の動画を加工します。

multi_test_swapmulti.mp4(サムネイル)

動画を生成するコマンドは、以下。
8GBのメモリを持つGPUで10分ほどかかっています。
そこそこ時間がかかるので、要注意です。

python test_video_swapmulti.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --video_path ./demo_file/multi_people_1080p.mp4 --output_path ./output/multi_test_swapmulti.mp4 --temp_path ./temp_results

上記コマンドを実行すると、「output」ディレクトリにmulti_test_swapmulti.mp4が作成されます。

作成された動画は、次のように顔部分が入れ替わっています。

multi_test_swapmulti.mp4(サムネイル)

3人とも、アイアンマンになってしまいました。
もちろん、特定の顔だけ対象にすることも可能です。

ちなみに、次の動画の作成時間は1分未満でした。

SimSwapによるディープフェイク動画(Deepfake)

対象となる人数や、動画の長さ・質によっても処理時間が異なってくるということでしょうね。

以上、SimSwapの動作確認を説明しました。

タイトルとURLをコピーしました