Python

DeepFaceLabのインストールと実装【ディープフェイク】

2019年10月2日

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形式のビデオをコンパイルします。

▼元動画の切り取った画像

▼コンパイル後の画像

よく読まれている記事

1

DeepFaceLab 2.0とは DeepFaceLab 2.0は機械学習を利用して動画の顔を入れ替えるツールです。 以前にDeepFaceLab 1.0を記事としてアップしていましたが、2.0は以 ...

2

自作PCで、多くのパーツをCorsair製品で揃えたので、iCUEでライティング制御していきました。 私のPCでは、表示されている4つのパーツが制御されています。ここで、HX750i電源ユニットは、L ...

3

コンピュータは有限桁の数値しか扱う事はできないので、桁数の多い場合や無限小数の場合は四捨五入され切り捨てられます。なので実際の数値とは多少の誤差が生じますが、これを丸め誤差といいます。 なので、コンピ ...

-Python