DeepFaceLabを使った、Deepfakeの作り方

この記事では実際にDeepFaceLabを使って動画を制作する方法を解説していきます。

Deepfake系のソフトはDeepFaceLabの他にFakeappというものがありますが、 DeepFaceLab のほうが高機能ですし、途中で落ちることもなく、train(学習)途中でセーブもされるので、 DeepFaceLab のほうが優秀です。

DeepFaceLabを使うのに必要なもの

vRAMが2GB以上のNVIDIAもしくはAMDのビデオカード推奨となっています。

性能の高いGPUほど、vRAMの大きいGPUほど、高品質な動画を制作することができます。一応、ビデオカードなしでも、できなくはないみたいですが、難しいのではないかなと思います。時間があったらまた試してみます。

DeepFaceLabの種類

DeepFaceLabには環境に合わせて下記の3つの種類が用意されています。

DeepFaceLabCUDA9.2SSE – GTX 1080 TiまでのNVIDIA GTXシリーズのビデオカード用

DeepFaceLabCUDA10.1AVX – NVIDIA製 RTXシリーズのビデオカードとAVX対応のCPU用

DeepFaceLabOpenCLSSE – AMDまたはIntelの 64-bit CPU用

私の環境はGTX 1080 Tiですので、今回「 DeepFaceLabCUDA9.2SSE 」を例に解説していきます。

CUDA9.2のインストール

NVIDIA製のGTXシリーズのビデオカードで、DeepFaceLabを使用する場合、CUDA9.2をインストールする必要があります。

CUDA9.2以外がインストールされている場合はアンインストールして、CUDA9.2をインストールします。

下記のNVIDIAのWebサイトからインストーラーをダウンロードし、インストールします。

https://developer.nvidia.com/cuda-92-download-archive

RTXシリーズの場合はCUDA10.1をインストールします。

DeepFaceLabをダウンロードする

こちらのページの「DOWNLOAD HERE」からダウンロードするのですが、登録してログインしないと、ダウンロード用のリンクが表示されないので、登録してない方は「Register」から登録してログインしてください。

https://mrdeepfakes.com/forums/thread-deepfacelab-explained-and-usage-tutorial

「DOWNLOAD HERE」をクリック するとMEGAが開かれます。必要なヴァージョンのexeを右クリックして、ダウンロードします。datasetsやfacesetsには、サンプルが入ってるようですが、不要なのでダウンロードしません

ダウンロードしたらダブルクリックして解凍します。最初は「実行」ボタンが表示されないので、詳細情報を押すと「実行」ボタンが表示されます。

適当な場所に解凍します。場所はどこでも構いません。

解凍したフォルダを開きます。

フォルダを開くとこんな感じになっています。これを見ると「なんかややこしそう」と思ってしまいますが、意外と簡単なので安心してください。

DeepFaceLabはソフトをインストールしてアプリケーションとして利用するタイプのものではなく、工程ごとにバッチファイルを実行していく形になります。

たくさんあって、ややこしそうに見えますが、ザックリと説明すると、素材を準備して、順番にバッチファイルを実行していくだけです。

動画制作のおおまかな流れ

1.素材を準備する

素材となる動画を準備します。素材は何でも構いませんが、まずは1~2、3分程度のもので試してみるのが良いかと思います。

素材は顔を移植する側とされる側の2種類が必要です。

data_src – 「別の人物の体に移植する顔となる素材」

data_dst – 「別の人物の顔を移植される素材」

例えば「ニコラス・ケイジの顔を、ドナルド・トランプに移植する」場合は、ニコラス・ケイジの動画がdata_src、ドナルド・トランプの動画がdata_dstとなります。

用意した素材は、それぞれ上記の例のようにdata_srcとdata_dstに名前を変更し、workspaceフォルダに入れておきます。

最初からサンプルの動画が入ってますので、サンプルは消しましょう。

素材動画の注意点

使用する素材にはいくつか注意が必要です。場合によっては事前に動画編集ソフトで、編集する必要があります。

動画に複数の人物の顔が映っていないこと

この後の工程で人物の顔部分のみを画像で書き出しますが、動画内のすべての顔と認識されるものが書き出されますので、動画には一人の人物の顔しか映らないようにしましょう。

人物の顔が十分なサイズで写っていること

素材となる動画(特にdata_src)は人物の顔がある程度の大きく映っている必要があります。具体的には顔部分の画像の書き出しは256×256ピクセルの正方形なので、動画上の人物の顔のサイズがこの程度のサイズで写っていることが望ましいでしょう。(train時の解像度は最大でも128×128ピクセルなので、この程度でも良いかもしれません)


こんな感じなので、ドラマや映画を素材にする場合は、素材にする人物の顔がある程度大きいサイズで写っているカットのみを抽出して、ひとつの動画につなげておく必要があります。また、同じ画面上に別の人物の顔が映りこんでいる場合は顔と認識されないよう、モザイクをかけておく等の処理も必要になります。

2.素材動画を全フレーム画像書き出し

2) extract images from video data_src.bat」を実行し、data_srcの動画を画像で書き出します、data_srcは顔を移植する側、つまり画像は学習にしか使用しないないので、全フレーム書き出す必要はありません。書き出すフレームレートを選択できます。素材が短い場合は全フレーム書き出したほうが良いかもしれません。

3.2) extract images from video data_dst FULL FPS.bat」を実行し、data_dstの動画を全フレーム画像で書き出します。こちらは顔を移植される側なので、最後に顔を移植して動画にする際に全フレーム必要になるので、自動的に全フレーム書き出しとなります。

途中、アルファチャンネル(透過)ありのPNGで書き出すオプションを尋ねられます。data_dstの動画に透過部分があり、DeepFaceLabで制作した動画を、あとで動画編集ソフトで合成する際などはyにします。通常はnで良いです。

書き出された画像はそれぞれ、workspaceフォルダの中の「data_src」「data_dst」のフォルダの中に書き出されます。

3.顔部分のみを抽出

前の工程で書き出した画像から、さらに顔部分のみを抽出し画像で書き出します。

4) data_src extract faces S3FD best GPU.bat」を実行しdata_srcの画像から顔部分のみを抽出します。

5) data_dst extract faces S3FD best GPU.bat」を実行しdata_dstの画像から顔部分のみを抽出します。

書き出された画像は、それぞれ「data_src」「data_dst」のフォルダ内の「aligned」というフォルダに書き出されます。

4.誤検出された画像を削除

前工程での顔部分のみの抽出ですが、残念ながら必ず何かしらの誤検出があります。これらが学習時に入っていると悪影響を及ぼすので、削除する必要があります。よくあるのは「耳」や「グーにした状態の手」、「家具の模様」など思わぬものが顔として認識されいます。

「4.2.2) data_src sort by similar histogram.bat」を実行すると、data_srcフォルダの中のalignedに入っている、画像がヒストグラムで並べ替えられます。ここではヒストグラムが何なのかは説明しませんが、これを実行すると似た画像で並べ替えられるので、誤検出された画像を見つけやすくなります。並べ替えが終わったら、フォルダを開き誤検出された画像を削除します。

data_dstも同様に「5.2) data_dst sort by similar histogram」を実行し、並べ替えた後、誤検出された顔画像を削除します、

5.学習させる(train)

ここで肝心の機械学習です。学習には「6) train H64.bat」もしくは「6) train H128.bat」のどちらかを使用します。

6) train H64.bat

64×64ピクセルで学習させます。顔が正面を向いているシーンなどはこちらで十分とのこと。vRAM2GB以上 推奨。

6) train H128.bat

128×128ピクセルで学習させます。当然こちらのほうが「 6) train H64.bat 」よりも高解像度なため高品質になりますが、学習に時間がかかります。欧米人よりも顔が平たいアジア人にはこちらのほうが適しているようです。vRAM3GB以上 推奨。

「6) train H64.bat」もしくは「6) train H128.bat」 を実行すると、まず下記のオプションを尋ねられます。

train時のオプション

Model first run. Enter model options as default for each run.
Write preview history? (y/n ?:help skip:n) :

yにすると、プレビュー画面を保存してくれるそうですが、不要なのでいつもnにしています。


Target iteration (skip:unlimited/default) :

無限に学習させるので、Enterでskipします


Batch_size (?:help skip:0) :

バッチサイズが大きいほどモデルの精度が高くなりますが、その分学習が遅くなります。またバッチサイズの値が大きすぎると、trainが始まらない場合もあります。私の環境(GTX 1080 Ti)だと、バッチサイズ64にするとtrainが始まりませんでした。いつもはバッチサイズを32にしています。


Feed faces to network sorted by yaw? (y/n ?:help skip:n) :

data_dstと比較してdata_src画像が少ない場合にyにしておくと良いそうです。通常はnです。


Flip faces randomly? (y/n ?:help skip:y) :

垂直軸で画像を反転することで、反対側にから見た場合もカバーしようというものですが、人間の顔はピッタリ左右対称という訳はないので、通常はnにしておきましょう。左右どちらか片方から見た素材しかない、という場合には有効かもしれません。


Use lightweight autoencoder(y/n ?:help skip:n) :

軽量版のエンコーダーを使用するかのオプションです。vRAMの使用が少なく済みますが、品質が低下します。vRAMが4GB以下の場合はy選択する必要があります。vRAMが4GBよりも大きい場合はnにします。


Use pixel loss? (y/n, ?:help skip: n/default ) : ?

ピクセルロスをオンにすると、モデルが崩れたり壊れたりする危険性が高まるため推奨されないようです。通常はnにします。

train開始

上記のオプションを選択し終えると、Train Preview ウィンドウが立ち上がりTrainがはじまります。 Train Preview ウィンドウ選択中に、下記の操作をすることができます。

Pキー – プレビューのリフレッシュ、プレビューを最新の状態に更新してくれます。何も押さなくてもプレビューは15分おきに自動的に更新されます。

Sキー – Sキーを押した時点のTrainをセーブしてくれます。何も押さなくても15分おきに、自動的にセーブしてくれます。

Enterキー – Trainをセーブして終了します。Trainを後で再開する場合は、「6) train H64.bat」もしくは「6) train H128.bat」を実行すると、自動的に前回セーブされたところから、Trainを再開してくれます。

Trainの時間ですが、マシンのスペックや素材にもよりますが、数時間から数十時間はかかります。

6.顔を移植した画像を書き出し(convert)

Trainを終了したら、学習したモデルを使って、data_dstの動画を書き出した画像に、顔を移植していきます。

「6) train H64.bat」 でTrainしたmodelなら「7) convert H64.bat」を、 「6) train H128.bat」 でTrainしたmodelなら「7) convert H128.bat」を 使ってconvertします。

実行すると、下記のオプションが尋ねられます。

convert時のオプション

Choose mode: (1) overlay, (2) hist match, (3) hist match bw, (4) seamless, (5) raw. Default – 4 :

モードによって下記のような違いがあります。詳しくは引用元のページを読んでみてください。

https://mrdeepfakes.com/forums/thread-deepfacelab-explained-and-usage-tutorial

convertのモードですが、 (1) overlay が一番違和感なく仕上がるかと思います。1を入力してEnterを押します。


Mask mode: (1) learned, (2) dst . Default – 1 :

通常は (1) learned で問題ありません。 1を入力してEnterを押します。


Choose erode mask modifier [-200..200] (skip:0):

通常は0で良いので、Enterでskipします。

https://mrdeepfakes.com/forums/thread-deepfacelab-explained-and-usage-tutorial

Choose blur mask modifier [-200..200] (skip:0) :

顔を移植したときの、境界のぼかしですが、ぼかしが弱くても、ぼかしが強すぎても変なので、通常は中間の0で良いので Enterでskipします。

https://mrdeepfakes.com/forums/thread-deepfacelab-explained-and-usage-tutorial

Choose output face scale modifier [-50..50] (skip:0) :

顔を移植する際の大きさを調整できます。通常は0で良いので Enterでskipします。 明らかにdata_srcとdata_dstの人物の顔の大きさが異なる場合は、微調整するとよいかもしれません。

https://mrdeepfakes.com/forums/thread-deepfacelab-explained-and-usage-tutorial

Apply color transfer to predicted face? Choose mode ( rct/lct skip:None ) :

顔を移植する際に肌の色の違いを補正してくれます。rctもしくはlctを入力してEnterを押します。ここをNoneにしてしまうと、肌の色が異なって不自然になります。

https://mrdeepfakes.com/forums/thread-deepfacelab-explained-and-usage-tutorial

Apply super resolution? (y/n ?:help skip:n) :

通常はnで良いです。data_dstの動画が低品質の場合にyにすると良いらしいです。


Degrade color power of final image [0..100] (skip:0) :

値を大きくすると、移植した後の顔の鮮やかさが上がります。ただし基本的に階調が悪化してしまうため、通常は0のほうが良いです。Enterでskipします。


Export png with alpha channel? (y/n skip:n) :

画像をアルファチャンネル(透過)ありのpngで書き出すオプションです。data_dstの動画に透過部分があり、DeepFaceLabで制作した動画を、あとで動画編集ソフトで合成する際などはyにします。通常はnで良いので、Enterでskipします。


オプションを選択し終えると、data_dstに顔を移植された画像の書き出しがはじまります。画像は「data_dst」のフォルダ内に自動的に「merged」というフォルダが作成され、ここ書き出されます。

7.書き出した画像を動画にする

あとは前の工程で書き出した画像をつなげて動画にするだけです。

「8) converted to mp4.bat」を実行します。オプションはEnterでskipして構いません。

アルファチャンネルを利用する場合は「8) converted to mov(lossless+alpha).bat」もしくは「8) converted to mp4(lossless+alpha).bat」を実行します

動画は「workspace」フォルダ内にresult.mp4という名前で出力されます。

さいごに

これで一通りDeepFaceLabを使って動画を制作することができると思います。私もこの手の専門家ではないので、うまくいかないところや、間違っているところがありましたら、指摘していただけると幸いです。

質問・コメントなどもありましたら、私の答えられる範囲で回答させていただきます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA