Python

DeepFaceLab 2.0のインストール/使い方【フェイク動画をつくる】

2020年4月14日

DeepFaceLab 2.0とは

DeepFaceLab 2.0は機械学習を利用して動画の顔を入れ替えるツールです。

以前にDeepFaceLab 1.0を記事としてアップしていましたが、2.0は以前より高速化され精度も向上しました。ただAMDに対応されなくなったので注意です。

合わせて読みたい

お使いのGPUおよびCPUで適度な時間内にトレーニングができない場合であれば、Google Colabを用いてDeep Face Labを実行してみると良いでしょう。GPUがなくてもクラウド上で実行することが可能です。

DeepFaceLab 2.0 フェイク動画をつくる

DeepFaceLab 2.0のダウンロード

DeepFaceLab2.0の最新のアップデート情報等はGithubから確認できます。

DeepFaceLab2.0はバグ修正等で頻繁にアップデートがされています。

今回「DeepFaceLab_NVIDIA_build_04_13_2020.exe」を使用しています。必ずしも同じバージョンを使う必要はないので、基本的にバグ修正のされたアップデート済みのものを使うと良いでしょう。

▼ダウンロードしたexeファイルを実行すると「DeepFaceLab_NVIDIA」フォルダが作成され中身は以下のようになります。

基本的に"workspace"に動画像のデータが保存されていて、用途に応じてパッチファイルを実行していく流れです。

DeepFaceLab 2.0の使い方

以前のDeepFaceLab 1.0との使い方と大きく変わっていません。

今回実行したパッチファイルは赤線のみになります。より質の高い動画を作成したい方は他のオプション機能を駆使すると良いでしょう。

Workspaceに動画を用意する

"workspace"に使用する動画を2つ用意します。今回は元々入っていたサンプル動画を使用しています。

  • data_src.mp4:顔を入れ替えたい人物の動画
  • data_dst.mp4:顔を入れ替えたい目的の動画

つまり"data_src.mp4"に映っている人物の顔を"data_dst.mp4"の顔に埋め込むという形になります。

clear workspace[ワークスペースの削除]

"1) clear workspace"はワークスペース内のファイルを削除しますが、特に操作する必要はありません。

"workspace"フォルダのすべてのデータを削除されてしまうので、誤って実行しないように注意しましょう。

Frames extraction from source video[動画のフレーム抽出]

"2) extract images from video data_src"はdata_src.mp4からフレーム抽出し"data_src"フォルダに保存します。ソースビデオを事前に準備し、名前を"data_src.mp4"とします。

オプション:

-FPS-

フレーム抽出する際のフレームレートをスキップするか、フレームレートの数値を入力します。基本的にスキップで良いと思います。

-JPG / PNG-

抽出するフレームの形式を選択します。jpgは容量が小さく一般的に十分な品質があるため、推奨されます。

▼"dara_src"フォルダには動画から抽出されたフレームが保存されます。

Frames extraction from destination video[動画のフレーム抽出]

"3) extract images from video data_dst FULL FPS"はdata_dst.mp4からフレーム抽出し、"data_src"フォルダに保存します。この動画も事前に準備し、名前を"data_dst.mp4"とします。

オプション:

-JPG / PNG-

抽出するフレームの形式を選択します。jpgは容量が小さく一般的に十分な品質があるため、推奨されます。

▼"dara_dst"フォルダには動画から抽出されたフレームが保存されます。

Data_src faces extraction/alignment["data_src"から顔画像を抽出]

"4) data_src faceset extract"は"data_src"フォルダにある画像から顔フレームを抽出し、"dara_src/aligned"に保存します。

▼"data_src/aligned"フォルダ

この中から顔画像として適切でないものを取り除く必要があります。

いくつかオプションがありますが、"data_src sort,bat"で画像整列をして不鮮明な画像や誤検知された画像、他の人の顔などを削除します。

▼例えばこのような画像

data_dst faceset extract["data_dst"から顔動画を抽出]

"5) data_dst faceset extract"は"data_dst"フォルダにある画像から顔フレームを抽出し、"dara_dst/aligned"に保存します。

▼"data_dst/aligned"フォルダ

同様に不鮮明な画像や不適切な画像があれば取り除く必要があるので、"5.2) data_dst sort"を実行し画像整列してから確認しておきます。

Training[学習する]

トレーニングには2つのモデル「SAEHD」「Quick96」があります。使用しているGPUが高性能であればSAEHDを使うことを推奨します。少しお試しで使用する場合でもSAEHDで性能を低く設定することができるので、あえてQuick96を使う必要はないです。

SAEHD(6GB +): ハイデフィニションスタイルのAutoEncoderモデル-少なくとも6 GBのVRAMを備えたハイエンドGPUのハイエンドモデル。

Quick96(2-4GB): SAEモデルから派生したシンプルなモデル-2-4GBのVRAMを備えたローエンドGPU専用。

ここではSAEHDを使用しています。SAEHDには多くのオプションが備わっていますが、よくわからない方は全てEnterでスキップしても構いません。

以下のオプションがありますが、詳細はこちら(https://mrdeepfakes.com/forums/thread-guide-deepfacelab-2-0-explained-and-tutorials-recommended)を参照。

Autobackup every N hour ( 0..24 ?:help ) :  
Target iteration :
Flip faces randomly ( y/n ?:help ) :
Batch_size ( ?:help ) :
Resolution ( 64-512 ?:help ) :
Face type ( h/mf/f/wf ?:help ) :
AE architecture ( dfhd/liaehd/dfuhd/liaeuhd/df/liae ?:help ) :
AutoEncoder dimensions ( 32-1024 ?:help ) :
Encoder dimensions ( 16-256 ?:help ) :
Decoder dimensions ( 16-256 ?:help ) :
Eyes priority ( y/n ?:help ) :
Place models and optimizer on GPU ( y/n ?:help ) :
Use learning rate dropout ( y/n ?:help ) :
Enable random warp of samples ( y/n ?:help ) :
GAN power ( 0.0 .. 10.0 ?:help ) :
'True face' power. ( 0.0000 .. 1.0 ?:help ) :
Face style power ( 0.0..100.0 ?:help ) and Background style power ( 0.0..100.0 ?:help )
Color transfer for src faceset ( none/rct/lct/mkl/idt/sot ?:help ) :
Enable gradient clipping ( y/n ?:help ) :
Enable pretraining mode ( y/n ?:help ) :

▼学習の途中経過

操作方法

  • Sキー:学習経過を保存します。押さなくても数分毎にオートセーブされます。
  • Enterキー:学習経過を保存しつつ終了します。学習経過を保存しておくと、次回学習時に前回の経過から学習を始めることができます。
  • Pキー:プレビューの更新をします。押さなくても数分毎に自動で更新されます。
  • Spaceキー:次のプレビューを見ることができます。

Merging[顔画像をフレームにマージする]

モデルのトレーニングが完了したら、学習した顔画像を元フレームにマージして、最終的なビデオを作成します。

▼顔画像のマージ前と後(数時間学習した結果ですが、途中結果なのでまだ違和感があります。)

mergeのオプション

  1. Use interactive merger? ( y/n ) :
  2. 対話型コンバーターを使用するかどうかを選択します。デフォルト値はy(有効)で、対話型コンバーターはすべての機能とすべての変更の影響を確認しながらマージすることができます。通常のコンバーターよりも精度を向上させることができます。

  3. Choose one of saved models, or enter a name to create a new model:
  4. 保存されているモデルの1つを選択するか、名前を入力して新しいモデルを作成します。

  5. Choose one or several GPU idxs (separated by comma):
  6. マージ(変換)プロセスに使用するGPUまたはCPUを選択します。

▼通常コンバーターでは以下のようなオプションがありますが、よくわからない方は全てEnterでスキップで構いません。

Choose mode
Choose mask mode
Choose erode mask modifier ( -400..400 )
Choose blur mask modifier ( 0..400 )
Choose motion blur power ( 0..100 )
Choose output face scale modifier ( -50..50 )
Color transfer to predicted face ( rct/lct/mkl/mkl-m/idt/idt-m/sot-m/mix-m )
Choose sharpen mode
Choose super resolution power ( 0..100 ?:help )
Choose image degrade by denoise power ( 0..500 )
Choose image degrade by bicubic rescale power ( 0..100 )
Degrade color power of final image ( 0..100 )

▼対話型コンバーターでは以下のような画面で様々なオプションをプレビューを見ながら設定することができます。

コンバータの機能は以下になります。詳細はこちら(https://mrdeepfakes.com/forums/thread-guide-deepfacelab-2-0-explained-and-tutorials-recommended)を参照。

1.Main overlay modes:  
2.Hist match threshold:
3.Erode mask:
4.Blur mask:
5.Motion blur:
6.Super resolution:
7.Blur/sharpen:
8.Face scale:
9.Mask modes:
10.Color transfer modes:
11.Image degrade modes:

Conversion of frames back into video[フレームから動画へ変換する]

最後のステップはマージされた画像を動画に変換し、data_dst.mp4ファイルからの元のオーディオトラックと結合します。

変換する動画の形式はavi、mp4、losless mp4、losless movのいずれか提供されている4つの.batファイルを使用します。

8) merged to mov lossless:movファイルにロスレス変換
8) merged to avi:aviファイルに変換
8) merged to mp4 lossless:mp4ファイルにロスレス変換
8) merged 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