「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.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
GPU
GPUは、必須となります。
動画の編集には、CPUだけは無理があります。
8GBメモリのGPU(検証マシン)では、特に問題はありませんでした。
容量の大きな動画を対象としたら、支障が出てくるかもしれません。
PyTorch
「pytorch1.5+」と記載されています。
最新のGPU版PyTorchをインストールしましょう。
ただし、PyTorch 1.13系は避けてください。
インストールするなら、PyTorch 1.12系までにしておきましょう。
https://pytorch.org/get-started/previous-versions/
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 Cython 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行目を次のように変更します。
なお、行数はPyTorchのバージョンにより若干異なります。
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"
しかし、今回は「insightface 0.6.2」をインストールしています。
だから、このようなことはあっても仕方がないでしょう。
修正するのは、次のファイルです。
これは、動作確認で用いるファイルになります。
このファイル以外でも、該当エラーには同じ方法で対応できます。
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の動作確認を説明しました。
SimSwapがインストールできない場合は、roopのインストールを検討してみましょう。