以前書いたFakeAppの記事が古くなりました。FakeAppの後、OpenFaceSwap、MyFakeApp、DeepFaceLabを軽く触りましたが、更新が続いているDeepFaceLabをまとめたいと思います。
*言い訳→筆者は専門家ではなく、個人で使ってみた感触を覚え書きレベルでまとめています。英語にはなりますが、より詳細な情報は海外フォーラム等をオススメします<m(__)m>
DeepFaceLabは以前のVerで試していましたが、2019/10/15に更新があったので追い切れていません..順次更新しています・・・
Contents
DeepFaceLabとは
GitHub:https://github.com/iperov/DeepFaceLab
- FakeAppと同様のディープラーニングソフト
- 更新が続いている
- 最近のCPU(AVX)、GPU(RTX)に対応している
- 利用者が多いことで情報も多い(主に海外)
詳細はDeepFaceLab GUIDE よくある質問まとめ(英語)
動作環境
筆者はintel CPU,NVIDIA GPU環境なので、AMDについては記載しませんが対応しています。
ハード
CPU:GPUを使用するので不等
GPU:VRAM2GB以上搭載のGPU
(ミドルクラスで6GB~8GB搭載なので問題ないかと)
Memory:16GB~32GB
既存ソフトや設定によって使用率が変わるので難しい所ですが、最近のPCは16GB以上、追加購入しても単価が昔に比べれば安いので16GBで試して、足りなかったら32GBにする・・等でもいいと思います。筆者は32GB搭載、ディープラーニング起動で9GB使用率が増加しました。ただしFakeappの結果なので、DeepFaceLabで設定も詰めたら改めて記載したいと思います。
余談:昨年まであったビットコインのマイニング特需が過ぎ去り、新GPUの発売でPCパーツの値段も落ち着いています。また、昨今のゲーム実況ブームやE-Sportsブームで下火だったゲーミングPCが盛り上がっています。昨年よりは品物が手に入りやすかったり企業間競争によりゲーミングPCの価格も、パーツ単位で購入して組み立てるより安いケースがあったりと、ハード環境を整えるのが楽になりました。2018年は在庫が枯渇状態の中からGPUを買うので、選択肢などありませんでした(涙・・・年初から半導体も値下がりし、SSDも大分安くなりましたね。(SSD1TB買った翌週に5000円近く下がって涙しました)
PC構成例:
mouse ゲーミング デスクトップパソコン G-Tune NM-S711SHR6SZI/Corei7 9700/2060Super/16GB/256GB/1TB/Win10
ソフト
OS:Windows7またはWindows10
CUDA for NVIDIA GPU :verはDeepFaceLabのverに合わせてインストール
cuDNN
DeepFaceLab本体:
- DeepFaceLabCUDA9.2SSE - for NVIDIA video cards up to GTX 1080 Ti(GTX1080 Ti以前のGPU環境の場合)
- DeepFaceLabCUDA9.2AVX - for NVIDIA video cards up to GTX 1080 Ti with a CPU that supports AVX(AVXに対応したCPUかつ、GTX1080 Ti以前のGPU環境の場合)
- DeepFaceLabCUDA10.1AVX - for RTX NVIDIA video cards with a CPU that supports AVX(RTXのGPUとAVX対応CPUの環境の場合)
- DeepFaceLabOpenCLSSE - for AMD/IntelHD cards plus any 64-bit CPU(CPU搭載グラフィックス利用の場合。。時間が掛かりすぎるので通常使用しない)
例えば、最近発売されているPCに搭載されているRTX系を利用する場合は3.DeepFaceLabCUDA10.1AVXのインストールが必用になります。
環境構築
ダウンロード&インストール
CUDA9.2:https://developer.nvidia.com/cuda-92-download-archive
または
CUDA10.1:https://developer.nvidia.com/cuda-10.1-download-archive-base
cudnn:https://developer.nvidia.com/rdp/cudnn-archive
CUDAに対応したverを選択。無料会員登録必用
cudnnは解凍後、インストールではなくCUDAフォルダにコピーする必用があります。cudaフォルダ内を全てコピーします。フォルダを分けてもいいですが、環境変数のPATH変更が必用になります。
CUDAインストール先を開きます。通常はC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2またはv10.1
コピーしたファイルを貼り付けます。
DeepFaceLab本体:https://rutracker.org/forum/viewtopic.php?p=75318742
リンク先の画像箇所からダウンロードします。
torrentのmagnet形式になっていますので、torrent環境がない場合は先にインストールが必用です。
μTorrent:https://www.utorrent.com/intl/ja/desktop フリー版でokです。
必用なverにチェックを入れてダウンロードします。
ダウンロードファイル(exe)を実行してイントールします。
作業の流れ
公式動画はロシア語でさっぱりなので英語版の解説動画を載せています。ざっくりと流れの雰囲気は掴めるかと。
フォルダを開くとファイルが沢山ならんでいて、操作も大変そうに思えますが基本的にはファイルをフォルダに入れる→batファイルをクリックして順番に実行→結果を見て微調整 この繰り返しです。
STEP0-準備
ダウンロードしたDeepFaceLab本体を解凍します。解凍ソフトは7zipを使っています。ファイル名はverや更新日時によって異なります。
解凍先を指定します。2バイト文字(日本語等)が含まれない場所に解凍が望ましいです。
解凍すると以下のようにファイルが沢山でてきますが、全て使うわけではありません。
workspaceフォルダを開きます
data_dst:ベースとなる顔データファイルを格納するフォルダ
data_src:上書きしたい顔データファイルを格納するフォルダ
model:train後のファイルが格納されるフォルダ
data_dst.mp4:ベースとなる顔データの動画ファイル
data_src.mp4:上書きしたい顔データファイルの動画ファイル
最初にサンプルデータが入っているので、そのまま実行して流れを確認できます。実際に使用する前には削除して"ファイル名はそのままに"ファイルを入れ替えます。
素材となる動画ファイルを2つ用意する
それぞれの動画ファイルをリネームしてworkspaceフォルダに入れます。ファイル形式はmp4、ファイル名はdata_dstとdata_src これは変更できません。
例えばトランプ大統領の顔をニコラスケイジにする場合は、data_dst.mp4がトランプ大統領、ニコラスケイジがdata_src.mp4になります。
data_dst.mp4:ベースとなる顔データの動画ファイル
輪郭など顔の特徴が上書きしたい対象と似ているのが望ましいです。また、動画の明るさも上書きしたい顔データファイルdata_srcで使用するものに近いと上手くいきやすいです。
data_src.mp4:上書きしたい顔データファイルを格納するフォルダ
できればHD画質以上(元の画質が悪いと抽出する画像ファイルも荒くなってしまいます)で全体的に明るい映像、例えば照明がセットされたスタジオ、インタビュー映像などが望ましいです。
ホラー映画や薄暗い室内ロケ映像、雨や雷などが映る映像は基本的に使用しません。
また、顔が小さすぎる(カメラから遠い)、手を顔や髪に当てる仕草の映像はカットします。動画編集ソフトはPC付属品かフリーソフトなどお好みで。後の作業 5.2) data_dst sort by similar histogram.bat で最終的に余分な画像は削除しますが、余計な作業は少ない方がよいので可能なら編集しておきます。
無劣化動画カット&結合も動画変換もできる動画編集ソフトBandicut
短時間ならキャプチャソフトで必用な部分だけ録画した映像を使うのも楽でいいです。
最初は数分の映像を用意して試してみると感覚が掴めます。
STEP1-画像抽出
2) extract images from video data_src.bat
用意した動画ファイルから画像ファイルを抽出します。data_srcからは上書き用に学習させる顔画像を抽出します。映像を一般的な30FPS・60FPSで取り出しても顔の動きに変化がないので、1秒に1枚の頻度で抽出すると無駄な画像が増えるのを防げます。
例:例えばFPS30、7分30秒の動画でFPSを1に設定した場合、452枚の画像が作成されました。
3.2) extract images from video data_dst FULL FPS.bat
data_dst.mp4から画像ファイルを抽出します。こちらは最終的に動画に戻すことになるので、fullFPSとなっており動画サイズ(時間)によって大量の画像ファイルが抽出されますが正常な動作です。
3.other) denoise extracted data_dst.bat
どうしてもノイズが載ってしまう場合に使用します。通常は使用しません。
STEP2-顔画像を抽出
サンプルで試した時の画像、1533枚で約6分かかりました。(i7-3770k GTX1070ti)
4) data_src extract faces S3FD best GPU.bat
STEP1は動画を画像ファイルにしただけでパラパラ漫画の状態です。更にそこから顔画像のみを取り出します。
以下は必用に応じて実行することで画像ファイルを自動で並べ替え、不要な画像削除を楽に行えます。
4.2.1) data_src sort by blur.bat
ぼやけた画像を自動で並び替えます。元の動画でカメラの動きが速いシーンがある、被写体がくしゃみをする、驚いて振り向くなど動きがある場合など。
4.2.2) data_src sort by similar histogram.bat
画像の明るさや複数の人物が写っている似通った画像を順に並べ替えてくれます。取りあえずこれだけを実行して無駄な画像を削除すればOKです。
5) data_dst extract faces S3FD best GPU.bat
上記と同様にdata_sdtも画像抽出を行います。
5.2) data_dst sort by similar histogram.bat
こちらも同様にソートされた画像からぼやけたものや、顔以外の画像を削除します。
STEP3-train
抽出した顔画像を使って機械学習を行います。数時間~数十時間パソコンの電源を入れたままになるので、オートパワーオフ設定や、他ソフトの設定でシャットダウンされないようにします。TVチューナー録画後のシャットダウン、ソフトアップデートの強制再起動など。
6) train はそれぞれ特徴がありますので、素材に合わせて実行します。基本は6) train H128.bat
6) train H64.bat
主に正面を向いた画像を使っている場合。顔画像サイズは64*64で大きくはないがVRAM2G以上推奨。
6) train H128.bat
主に正面を向いた画像を使っている場合。顔画像サイズは128*128でVRAM3G以上推奨、アジア系の顔に適している。
6) train DF.bat
横顔が多い画像を使っている場合。顔画像サイズは128*128でVRAM5G以上推奨、data_src素材の明るさが一定、data_dstと輪郭が近い素材を推奨。
train作業は終わりがありませんので数時間経ったら一度停止(cmd画面選択状態で任意のキー入力)してSTEP4~5まで進み、状態を確認してSTEP3に戻ります。
サンプルを使って設定は全てデフォルト値とSKIPで2時間程trainしたら変化が確認できるレベルでした。ただ横を向いているシーンや顔に腕が被さるシーンは元の画像に戻ってしまうので、そのあたりは学習時間と設定を詰めていかなければなりません。train設定は詰め切れてないので現状は以下画像のようにしています。
上記環境でのGPUメモリ使用率7.1GB/8.0GB
STEP4-convert
trainで学習されたデータを用いて対象画像と合成します。
7) convert H128.bat
7) convert も複数ファイルがありますが、STEP3で実行したtrainと同様のファイル名で実行します。
例えば6) train H128.bat なら7) convert H128.bat を実行します。
STEP5-動画作成
STEP4でコンバートした画像を動画に変換します。
8) converted to mp4.bat
お疲れまでした。ここまでで一連の流れは終了です。あとは完成した動画(workspaceフォルダ内 result.mp4) をチェックし、素材データを変更やtrainを再度実行するなどして最適化を繰り返します。