DeepFaceLab
実行環境
PCスペック
- OS : Windows 10 Pro
- CPU : Intel Core i5-9600K
- RAM : 32GB
- GPU : RTX2060 SUPER
GPUはなくてもDeepFaceLabを実行することは可能みたいですが、おすすめしません。学習時間がとんでもなく長くなります。
また、CUDAのインストールをしていない方はインストールが必要になります。(↓参照)
DeepFaceLabのインストール
DeepFaceLab1.0の最新のアップデート情報等はGithubから確認できます。
- 現在DeepFaceLab 2.0がありますので興味ある方はこちらも参考にしてみてください。
▼ダウンロードしたファイルの中に複数のパッチファイルがあります。これでDeepFaceLabのインストールは終了です。

DeepFaceLabの操作手順
今回使っているデータセットは、もともとフォルダに入っていたサンプル動画を使用しています。
フォルダ内のパッチファイルを実行していきます。すべてのパッチファイルを説明するととても大変なのでサンプル動画にdeepfaceを適応するのに必要なパッチのみ説明を載せますので他のパッチファイルの詳細を知りたい方は「https://mrdeepfakes.com/forums/thread-guide-deepfacelab-explained-and-tutorials」を参照してください。

2) extract images from video data_src
workspaceフォルダ内の "data_src"という名前のビデオファイルが取得され、ビデオをフレームにカットして、顔を抽出します。使用するFPS((1 FPS / 5 FPS / 10 FPS / FULL FPS))を選択できます。FPSが高いほど、より多くのフレームが生成されます。
▼data_srcフォルダにdata_src動画のフレーム毎の画像を取得する。

3.2) extract images from video data_dst FULL FPS
これは目的のビデオを取得し、すべてのフレームをPNG画像にカットします。このオプションではフルFPSのみを使用できます。 FPSを元のものと同じにする必要があります。
▼data_dstフォルダにdata_dst動画のフレーム毎の画像を取得する。

4) data_src extract faces S3FD best GPU
これはモジュールを実行し、顔検出によりビデオ「data_src」のフレームから生成された画像から顔を抽出します。これはDLIBよりも時間がかかる場合がありますが、DLIBよりも多くの角度をキャッチします。
▼data_srcフォルダの画像から顔検出をする。

5) data_dst extract faces S3FD best GPU
これはモジュールを実行し、顔検出によりビデオ「data_dst」のフレームから生成された画像から顔を抽出します。これはDLIBよりも時間がかかる場合がありますが、DLIBよりも多くの角度をキャッチします。
▼data_dstフォルダの画像から顔検出をする。

4.2.2) data_src sort by similar histogram
これにより、data_srcフェイスセットがヒストグラムでソートされます。つまり、画像の同様の照明/色の広がりがグループ化されます。これにより、異なる顔も一緒にグループ化されます。フレーム内に抽出された複数の顔がある場合、これを実行してから手動で顔セットを調べて、不要な顔を削除できます。
5.2) data_dst sort by similar histogram
data_dstフェイスセットがヒストグラム(照明と色の広がり)で並べ替えられ、類似の顔がグループ化されます。フェイスセットに複数の人の顔がある場合、これにより、それらがグループ化され、不要な顔を簡単に削除できるようになります。
▼このような顔がハッキリとしないような画像データが並び替えにより後ろのほうにあるので適切でない画像は削除します。

6) train H64
これは学習させるモジュールですが、いくつかモデルタイプがあり画像データの特徴により変化が大きいため詳細は、https://mrdeepfakes.com/forums/thread-guide-deepfacelab-explained-and-tutorialsを参照してください。
trainのオプションがいくつか表示されますが、基本的にはすべてデフォルトのままで構わないと思います。Batch_sizeは指定しておきましょう。(32/64/128)
すべてデフォルトの場合「Target iteration:unlimited」となり学習を無限に重ねることになるのである程度精度が高まってきたら頃合いを見て終了しましょう。
Model first run. Enter model options as default for each run.
Enable autobackup? (y/n ?:help skip:n) :
Write preview history? (y/n ?:help skip:n) :
Target iteration (skip:unlimited/default) :
Batch_size (?:help skip:0) : 64
Feed faces to network sorted by yaw? (y/n ?:help skip:n) :
Flip faces randomly? (y/n ?:help skip:y) :
Src face scale modifier % ( -30...30, ?:help skip:0) :
Use lightweight autoencoder? (y/n, ?:help skip:n) :
Use pixel loss? (y/n, ?:help skip: n/default ) :
Training previewウィンドウが立ち上がり、学習経過のプレビューを見ることができます。
操作は画像上にもありますが説明しておくと、
- Sキー:学習経過を保存します。押さなくても数分毎にオートセーブされます。
- Enterキー:学習経過を保存しつつ終了します。学習経過を保存しておくと、次回学習時に前回の経過から学習を始めることができます。
- Pキー:プレビューの更新をします。押さなくても数分毎に自動で更新されます。
- paceキー:次のプレビューを見ることができます。
▼学習を始めてすぐだとこんな感じ。まだ学習途中では画像が荒いです。

▼学習を始めて数十分経つと、精度が高まってきました。

▼ダメ押しで数時間学習したところかなり精度が高まってきた。ここで終了します。
画像を見てもらえばわかるが、移植した画像が5列目の画像となっており、3列目の男性の表情をしつつ顔は1列目の男性の顔になっていますね。

7) convert H64
これにより、トレーニング済みモデルが取得され、dstフェイスがターゲットのsrcフェイスに「変換」されます。変換された画像が保持されるdata_dstフォルダーに「merged」というフォルダーが作成されます。
convertのオプションがいくつかありますが基本デフォルトのままで構わないと思います。とりあえず全項目Enterでスキップ構いません。
Choose mode:
(0) original
(1) overlay
(2) hist-match
(3) seamless2
(4) seamless
(5) seamless-hist-match
(6) raw-rgb
(7) raw-rgb-mask
(8) raw-mask-only
(9) raw-predicted-only
8) converted to mp4
これは、元動画とマージされたフォルダから変換された画像を取得から、mp4形式のビデオをコンパイルします。
▼元動画の切り取った画像

▼コンパイル後の画像
