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には、サンプルが入ってるようですが、不要なのでダウンロードしません

「build_06_XX_2019」を使用してください
2019年9月11日現在、「build_06_02_2019」「build_06_20_2019」に続き、「build_08_30_2019」、「build_09_08_2019」がリリースされていますが、最新版2つは顔合成の品質が低下しています。具体的には、顔を合成した部分に正方形のエッジが明らかに見えたり、Convertする際にOverlayを使用すると、周りに黒いスジが入ってしまします。現時点では「build_06_02_2019」もしくは「build_06_20_2019」が一番高品質な動画を制作することができます。

「DeepFaceLabCUDA9.2SSE_build_06_02_2019」のダウンロードリンク

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

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

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

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

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を使って動画を制作することができると思います。私もこの手の専門家ではないので、うまくいかないところや、間違っているところがありましたら、指摘していただけると幸いです。

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

Deepfakeを作るのに必要なマシンのスペック等については、こちらの記事に詳しく書いてますので、併せてご覧ください。

また、学習する素材に写真・静止画も使うことができます。詳細はこちらの記事をご覧ください。

55 COMMENTS

trainは終わったら自動でコマンドプロンプトは閉じられるのでしょうか?
それともある程度学習したと判断したら自分で閉じてconvertに移っても問題ありませんか?

返信する
deepfake.xyz

返信遅くなりまして申し訳ないです。
この記事の解説だと、エンドレスに学習するようにしているので、ある程度学習したら、trainを終了する必要があります。
train中に画像が表示されているウィンドウを一度クリックしてから、Enterキーを押すと任意のところでtrainを終了できます。
その後にconvertを開始してください。

返信する
ゆーた

6番まではうまくいったのですが、最後の7番で「reference_file not found.」と出て処理されません。。。
「data_dst」内の「merged」に合成された画像群もできていて、あとはつなげて動画にするだけなんですが。。。

返信する
deepfake.xyz

ここで不具合が起こったことがないので、なんとも言えません…。
何かしらのファイルがないのは明白なのですが。何回か別の学習もやってみて、再発するようでしたら、またコメントしてください。

返信する
名無し

使用OS:windows10 Home
CPU :Core i7 4770K
RAM :16GB
GPU :GeForce760(2GB)
CUDAバージョン:9.2
使用したDeepFaceLabバージョン:DeepFaceLabCUDA9.2SSE

上記条件でどのエグゼを実行しても
「No CUDA devices found with minimum required compute capability: 3.5. Falling back to OpenCL mode.」「Running on[CPU]」と表示され、またタスクマネージャーで確認してもCPUの占有率は98パーセント以上になるのにGPUは殆ど使われていません。これはGPUでの処理ができていなとの認識で間違いないでしょうか。

返信する
deepfake.xyz

DeepFaceLabのbatはすべてのbatでGPUを必要とする訳ではなく、CPUだけで処理するものもあります。
ただ質問者さんの言う通り「No CUDA devices found with minimum required compute capability: 3.5. Falling back to OpenCL mode.」と表示されているということは、CUDAが正常に動作してないものと思われます。

返信する
ちょっぷ

工程ごとに
No CUDA devices found with minimum required compute capability: 3.5. Falling back to OpenCL mode
と出ますが作業は普通に進んでいきました
これが普通なのかはわかりませんが
一応作れましたのでご報告です
お騒がせしました

返信する
deepfake.xyz

No CUDA devices found with minimum required compute capability: 3.5. Falling back to OpenCL modeと表示が出ているとのことですが、
ビデオカードを積んでいるマシンを使用されてないのでしょうか。
ビデオカードを積んでいるのにこの表示が出るのであれば、ビデオカードが正常に使用されてないのではないかと思います。

返信する
ちょっぷ

自分もこの方と同じ状態です
もし解決できていたなら教えていただけたら幸いです

返信する
Otis

初めまして。
こちらのページを参考に動画を一つ作ることが出来ました。ありがとうございます!
試しに作ってみたところ精度がかなり悪かったので素材選びも少し考えた方が良さそうでした…。ところで、1度学習に使った動画または画像をそのままに、追加で学習させて精度を上げるというようなことは可能なのでしょうか??答えにくい質問だったらすみません。

返信する
deepfake.xyz

返信遅くなりまして、申し訳ないです。
お役に立ってよかったです。精度については素材の選び方もありますが、trainの時間によっても変わってくるので、いろいろ試してください。
学習に使ったmodelを別の学習で使用することはできませんが、学習に使用するalignedのフォルダに入っている、顔の画像は他の学習で使用することができます。
data_srcを別のもので使用する場合は、alignedのフォルダの中に顔の画像が入っていればOKです。
data_dstを別のもので使用する場合は、動画にする際に顔画像以外もも必要なのでdata_dstの中身が丸々必要です。

ここまで素材がそろっていればいきなりtrainから始めても問題ありません。

また、分からないことなどありましたら、お気軽にご質問ください。

返信する
KENKEN

明日、1060、6GBをメモリ16GBのPCに実装して始めます。
一通り拝見しましたがsrc側の素材に静止画を使う場合はどのように放り込めば良いのでしょうか?静止画で一旦スライドショーを作り、動画素材と連結させて作った動画を連結させて放り込めば理屈的には出来そうですが、そういうことしなくてもこうやって放り込めば静止画のまま使えるよ、と言うのがあれば教えて頂きたいです。

返信する
deepfake.xyz

静止画は簡単に素材に追加することができます。
まず「DeepFaceLabCUDA9.2SSE」のDeepFaceLab本体のフォルダを複製して、作業用にひとつフォルダを作りましょう。
(必須ではないですが、分けておいたほうが便利かなと思います。)

次に、素材に使用したい画像をすべて「workspace/data_src」の中にいれます。
そして「4) data_src extract faces S3FD best GPU.bat」を実行すれば、data_src内に入れた画像から、顔部分のみを切り出した画像が「workspace/data_src/aligned」のフォルダ内に出力されます。
その静止画だけで、学習することもできますし、他の動画素材から切り出したalignedの画像と混ぜて使用することもできます。画像のファイル名は連番でも、何でも構いません。

返信する
KENKEN

早々のご返信ありがとうございます!
また大変丁寧にご教授いただいて幸甚です!
今後ともよろしくお願いいたします!

返信する
やっく

お世話になります。貴重な記事ありがとうございます。以下記事をチェックしたのですが今回の同じアルゴリズムを適用していると思われますか?GANについて詳しくなく本技術がgithubにあれば教えて頂きたいです。またこの技術解説もぜひしてください!待ってます!

顔写真1枚で簡単にディープフェイク映像を作成できる無料アプリ登場、中国で大人気に
https://gigazine.net/news/20190903-iphone-deepfake-app-zao/

返信する
deepfake.xyz

私は情報分野の人間ではありますが、実は深層学習・機械学習についてはあまり詳しくないので、断言はできませんが、
この「ZAO」というアプリでは、DeepFaceLabのようにAさんの顔をBさんの顔に変換するように学習させるというよりかは、
サーバー側に、アップロードされた1枚の顔画像をどのように動画に合成するか、事前に学習させてあり、それに従って動画に合成しているのではないかなと思います。
いちいちGANで学習させていては、大量のユーザーに対応できませんし、時間もかかるので。

DeepFaceLabについては、Githubでも公開されています。
https://github.com/iperov/DeepFaceLab

返信する
KENKEN

お世話になっております。
顔素材の抽出までは上手くいったのですがTRAIN段階になってつまづいています。
具体的にはTRAINが始まらない事。
コマンドプロンプトの中では動きがあるのですが、決定とした後コマンドの画面は閉じてしまいエラーも出ず、しかし待てど暮らせどTRAINのプレビューが表示されません。
src側の素材数が多すぎるのかなと思い(14,000点ほど)、試しにソフトに付いてくるヒゲのおっさんのサンプルで試してみたのですが、やはり学習段階で同様の症状が起きます。
CUDAは9.2、メモリ16GBでグラボはgtx10606GBです。
バッチ数を落としてみても同様の症状です。
何か必須の事が出来ていない気がするのですが考えられる原因はありますでしょうか。

返信する
KENKEN

失礼しました。
私、結局ご指示頂いた手順のとおりに進めていませんでした。
今後ともよろしくお願いいたします!

返信する
初心者

src側alignedフォルダの顔が合成されるわけですが、convertの際にその顔の「鼻から上を使う(口はdst側を使用する)」などといった範囲指定の様な事は可能なのでしょうか?

返信する
deepfake.xyz

ユーザーがマニュアルで顔の位置合わせをする機能はあるようですが、data_dstも、data_srcも「鼻から上」だけを使って学習するというのは、できないかと思います。

返信する
ザック

コメント(質問)を失礼します。
2点質問がありまして、お知恵を拝借したいです。

1)trainについて
100000ほど反復させると毎回パソコンがフリーズしてしまうのはなぜでしょう。

2)GPUの使用率について
NVIDIA 1660 Tiを使用していますが、全体の使用率がtrain時に5%程しか使っていません。
CUDAの使用率は99%程なのですが、これはGPUをちゃんと使えているのでしょうか?

初心者なものでよろしければご教授お願いします。

返信する
deepfake.xyz

>1)trainについて
100000ほど反復させると毎回パソコンがフリーズしてしまうのはなぜでしょう。

なぜかは分からないです。少し海外のフォーラムを漁ってみます。
ただ8万回程度の学習でも、そこそこ高品質なものができているのではないでしょうか。
あとはフリーズした後に強制終了等して、再度trainのbatを実行すれば前回のセーブしたところから再度学習をスタートできますが、これでもフリーズしてしまうでしょうか。

2)GPUの使用率について
NVIDIA 1660 Tiを使用していますが、全体の使用率がtrain時に5%程しか使っていません。
CUDAの使用率は99%程なのですが、これはGPUをちゃんと使えているのでしょうか?

GTX 1660 Tiは使ったことがないので、何とも言えませんがCUDA使用率が99%なら、正常に動いているような気もするのですが・・・
Train中は以下のような表示が出ていると思います。
このような表示の左から3列目の数字は一度の学習にかかる時間なのですが、ここはだいたい何msの表示になっているでしょうか。
あとはフリーズする時点でLOSS値(左から4列目・5列目の数字)どの程度の値になっていますでしょうか。
例)
[19:10:52][#045254][1336ms][0.4241][0.3113]
[19:25:55][#045889][1323ms][0.4229][0.3116]
[19:40:59][#046524][1320ms][0.4204][0.3099]
[19:52:31][#047009][1377ms][0.3849][0.2987]

返信する
ザック

お返事ありがとうございます。

1)trainについて
再開すると2時間ほど稼働し、フリーズする感じです。
trainは進んでいるのですが、パソコンの電源の切り方がコンセントから抜くしか方法がなくなるのでフリーズしない方法はないかと思いまして。

2)GPUの使用率
値は下記のような感じです。
[11:44:15][#123799][0278ms][0.6070][0.3700]
[11:59:17][#127254][0277ms][0.6023][0.3625]
[12:14:20][#130709][0274ms][0.5993][0.3593]
[12:29:22][#134165][0277ms][0.5948][0.3572]
となります。
よろしくお願い致します。

NEON

mergedのフォルダをみると、顔の移植ができていません。

移植がうまくいかない時の改善点などはありますか

返信する
deepfake.xyz

うまく移植(合成)できていないというのは、まったく合成されてないのか、合成はされているが、顔がぼやけている・不鮮明等どちらでしょうか。

後者であれば学習が十分でない可能性や、data_srcの素材が十分でない場合があります。
素材が十分でないというのは、例えばdata_dstに横顔の画像があれば、data_srcにも横顔から写した画像がないと、横顔の学習・合成がうまくいきません。

学習についてですが、学習中下記のような表示が黒い画面に表示されていると思いますが。

例)
[19:10:52][#045254][1336ms][0.4241][0.3113]
[19:25:55][#045889][1323ms][0.4229][0.3116]
[19:40:59][#046524][1320ms][0.4204][0.3099]
[19:52:31][#047009][1377ms][0.3849][0.2987]

2列目の[#045254]は学習した回数を表します、最低でも3万~4万回程度は必要かと思います。
参考程度に、海外のフォーラムには12万まで、やれば十分といった表記もありました。
3列目の[1336ms]は1回の学習にかかる時間です。
4・5列目の[0.4241][0.3113]学習の進行度合い(進むにつれて減少する)を表します。
[0.2000]近くまで行くと良いそうですが、少なくとも[0.4000]~[0.3000]くらいまでいかないと、合成しても、不鮮明かもしれません。

返信する
仗助

お世話になっております。
現在build_06_20_2019がMEGAに上がっておらず、他の種類を使用しているのですが、もうbuild_06_20_2019は手に入らないのでしょうか。
もしくはどこかにあるけど見つけられてないのか・・・。
手順にある通り、オーバーレイだと黒い枠線が出てきてしまって困っております。
今でもDLできるのかどうか、もしできるのならば教えていただけると幸いです。

返信する
deepfake.xyz

確認しました。本当ですね、もうダウンロードできなくなってますね。
とりあえず、記事内に「DeepFaceLabCUDA9.2SSE_build_06_02_2019」のダウンロードリンク設置しました。

どうやら「build_09_13_2019」がリリースされたようで、現在テスト中です。
こちらで改善されていると良いのですが。

返信する
KENKEN

素晴らしい、そして迅速なご対応に感謝します。
特に学習中のcmd画面の説明や旧バージョン入手のリンクは自分がまさに質問しようとしていたコンテンツで完全に神、でした(笑)
また具体的な学習回数についても最低ライン、理想ラインを示して頂いて本当にありがたいです。
バッチサイズが32では全然ダメだったので試しに4から始めたのですが自分の環境では12万回まで学習するのは単純計算で20時間ほどかかるもよう。
ですが、「この辺かな」と言うラインを示していただけたのがとてもありがたいです。
どうやらコマンド画面の説明になって中の4列目、5列目の数字がいわゆる「ロス値」にあたるもののようですね。
この情報もありがたいです。

ちなみにプレビュー画面の見方ですが、何やら合成を試みているようなものも散見されるプレビューが、更新されるうちほぼ同一人物のものの連続に見えて来る、と言うようなことでしょうか?
また上の波形データのようなものが何を表しているのかご教授頂けたら幸甚です。

返信する
KENKEN

あ、このグラフがつまり4~5列目の推移を示してるんでしょうか。
つまり学習が進むにつれ下に張り付いてきてさらに進めると荒い波が徐々に収束してくるとか。
もちろん一本の線になったりゼロになることは絶対にないのでしょうけれども。

返信する
deepfake.xyz

>このグラフがつまり4~5列目の推移を示してるんでしょうか。
おっしゃる通りです。グラフはLOSS値の変化の推移を表しています。
基本的には徐々に下がっていきますが、素材が少なかったり、悪かったりすると
途中で下がりにくくなったり、安定しなくなります。

>ちなみにプレビュー画面の見方ですが、何やら合成を試みているようなものも散見されるプレビューが、更新されるうちほぼ同一人物のものの連続に見えて来る、と言うようなことでしょうか?

こちらもおっしゃる通りです。
プレビュー画面の画像が5列あると思いますが、
左から1列目が元のdata_src、2列目は学習したデータを使ってdata_srcを生成したもの。
3列目は元のdata_dst、4列目は学習したデータを使ってdata_dstを生成したもの。
最後5列目が学習したデータを使って、data_dstをdata_srcに変換したものになります。
ですので、プレビュー画面では視覚的に学習の進行度合いを確認することができます。

返信する
KENKEN

ありがとうございます!
cmd画面の4、5列目の数字が0.2あたりを割ってきて、プレビュー画面の5列目がsrc側の本人に見えてきた時が作り時、という事ですね。
とてもご丁寧に、また分かりやすくありがとうございました。

返信する
ひろぼう

使用時の疑問、質問でなくて申し訳ありません…
何度も繰り返し結果をチェックすれば自分で把握できることなのかもしれませんが
もしご存じでしたら教えて下さい

AIですと「この表情が一番なんだ」といった各人の主観的な部分には不介入だと思います

trainの際には「動画を均等にコマ切りした顔部分」の画像が素材になると思いますがいくつか不明点があります

例えば…(基本的には同一被写体で同一照明条件が望ましいのだと思いますが)

途中から化粧で眉毛の太さが変わったとしたら…
中間になるのでしょうか…
太さは抽出画像の比率で変わったりするのでしょうか…
それともベースや変化中といった区分けがされたりする?
(私のsrc動画の相手は口を尖らせる癖があり、抽出画像のほとんどがおちょぼ口になりそう)

動画で変顔が多い場合に、変顔の抽出画像を削ってからtrainに進んだ方が良いのか、それも学習に入れ込んだ方が良いのか…
真顔や笑顔と比べて、変顔が多い場合は、その変顔を全削除もしくは画像量を減らすべきでしょうか?

画像の中で一番多い位置や角度で顔のベースが確立されるなら表情によって画像量を変えないとならないですが
尖らせた口や鼻を伸ばした顔を、ベースの顔のそういった表情である認識してもらえるものなのでしょうか?

的違いな質問になっていたらごめんなさい
もし知っている部分がありましたら教えてもらえると助かります

返信する
deepfake.xyz

例えば、data_dstの動画の人物が泣いている表情場合、data_srcの動画の人物も泣いている表情が映っている動画にしたほうが、より良いと思います。

というのも、一度、data_dstの人物が泣いている動画で、data_srcの動画の人物は笑顔でインタビューを受けている動画で、学習させたことがありますが、
学習させ合成した動画を観てみたところ、泣いているというのは分からなくもないですが、合成した顔の口角が上がっていて、泣いているにも関わらず、笑っているような動画になっていました。
つまり、本来は泣いているはずだけれども、data_srcに笑顔で写っている場面しかなかったため、これにひっぱられてしまったんだと思います。

他にも色々と試してみましたが、現状のdeepfakeでは、学習させればどんな表情でも違和感なく生成するということは不可能なようで、感覚的には、data_srcの画像から似ている画像を探してきて上手く合成しているというような感じに近い気がします。

ですので、data_srcの中にdata_dstの動画と同じ角度で、同じ表情で映っている部分があるのが一番良いと思います。
data_srcに変顔の画像等が入っていても、真顔や普通の表情で映っている部分があれば、合成後の真顔や普通の表情が変顔に影響を受けることは少ないんじゃないかなと思います。

返信する
ひろぼう

丁寧で分かりやすい説明ありがとうございます

確かに以前、srcを少し上からの撮影だけで進めてdstが下からのアングルが多かった際は合成後は歪な仕上がりになってました

勝手に(画像)素材からお互いの顔が生成されていく?…なんて思っていましたが
どちらかというと近い画像を引っ張ってからコンバートしていく感じなんですね(確かに進行時はそういった処理がみれてます)

素材が足りないと何かしらで生成して進んでしまう…だから色々と入れ込んでおいた方がいいという事ですよね
不要(類似していない)な素材は置いておいてもあまり影響がでない感覚で進めていきます

もう一つ、もし分かる部分があれば教えて下さい

抽出後に顔データとして置いておかない方が良い、(なるべく)フォルダから削除した方が良い画像ってどんなものがあります?
(現在は全く顔でない画像のみ削除してます)

思い当たるのは
顔の1/3や半分ちかく見切れてる
ピントが合っていない
ブレで被写体がはっきりしない(伸びていたり)

やはり処理時間の問題なだけで、不要(不一致)な画像データは触らなく結果に影響がないといった感じなのでしょうか?

そして気になるのは
サイズや色、光などパラメーターとして一括設定しますよね

サイズに関しては抽出時に同一サイズにしているのでFACE SCALEはすべてのコマに同じ状況となりますよね
境界ぼかしやconvertのモードに関しても同じと思われます

そこで肌色の補正に関しても全コマ同一の処理となったりしますか?

色補正の方法やコマごとに補正をかけているのか分からないので、
光源の位置や肌の色合いや撮影時の明るさなど違うものが混在しない方が良いのでしょうか?

返信する
リポD

はじめまして
「build_06_02_2019」もしくは「build_06_20_2019」が一番高品質な動画を制作することができます。との事でしたが、サイトにはリンクが無く最新版のを試してみましたが輪郭部分に四角の枠がハッキリ移ってしまいうまく制作出来ませんでした。

「DeepFaceLabCUDA9.2SSE_build_06_02_2019」のダウンロードリンクはありますがCUDA10.1のリンクも貼って頂けますでしょうか。

宜しくお願い致します。

返信する
deepfake.xyz

あいにく、「build_06_20_2019」以前のCUDA10.1のダウンロードリンクがもうないようで、現在 海外の管理者の方に、過去のバージョンを再度アップロードしていただけないかお願いしています。
進捗ありましたら、また返信もしくは新しい記事でお知らせさせていただきます。

現在の新しいバージョンのものではConvertする際にoverlayを使用すると上手くいかないようで、seamlessを使用するとまだ綺麗に合成することができます。
ただ「build_06_20_2019」のorverlayほど違和感なく合成はできないです。

返信する
リポD

迅速な対応ありがとうございます。

seamlessを使用しましたが綺麗なものと比較するとやはり劣ってしまいますね。

build_06_20_2019が再アップの知らせを待ちつつ、綺麗に作成できる方法を模索したいと思います。

返信する
すない

【一部コメントの内容を変更させていただきました】
食事等の口にものを運ぶシーンで、合成しても口元の部分が不自然にならない動画を作りたいです。

返信する
deepfake.xyz

色々と方法がありますが、私なら動画編集ソフト(PremierProなど)で合成前と合成後のを重ねて、口元の部分だけ合成前のものを使用するようにマスクをかけるなどするのが良いのではないかと思います。

返信する
すない

質問のしかたが愚かですみませんでした!そのやりかたでためしてみます!

返信する
すない

あと、このサイトにはすごく感謝しています。完成度が2%ぐらいですが、作品ができたとき、感動しました!あらためて、ありがとうございます!

返信する
すない

言われた通りにやったらできました!ありがとうございます(*^^*)

くるた

初めまして。
無知な質問で申し訳ないのですが、deepFacelabをダウンロードするには登録が必要とのことですが、登録したことによって料金が発生したり何か損害を被ることがあるのでしょうか?
海外のサイトなので心配で┏〇゛

返信する
deepfake.xyz

特にお金を請求されたり、スパムメールが送られてくる等は発生していません。
当記事内に「DeepFaceLabCUDA9.2SSE_build_06_02_2019」のダウンロードリンク設置していますので、GTXシリーズのビデオカードをご使用でしたら、こちらからダウンロードもできます。

返信する
くるた

ご返答ありがとうございます┏〇゛
機械音痴なのでどっかで躓くかもしれませんか、こちらのサイトを参考に頑張ってみます。

返信する
ナンタン

data_srcでの顔部分のみの抽出のところなんですが、うまくいきません。
動画に映っている人は一人のみにしているのですが、顔がアップにならず、デフォルトの画像になってしまいます。
サンプルで試してみると顔のみ抽出してくれるのですが…
どうすれば良いのでしょうか?

返信する
deepfake.xyz

顔が、顔として認識されてないとしか考えられないですね。
顔が顔として認識されない、人物がいるんでしょうか?…
素材の問題ではないかなと思いますが…

返信する
アキョウ

はじめまして
train時
from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory
と出てしまうのですが、train自体は進んでいる様です。これは問題ないのでしょうか?

また、DeepFaceLabのダウンロードページにCUDA10.1AVXとCUDA10.1SSEの2つ有るのですがこれは何が違うのでしょうか?初心者のためくだらない質問ですいません。

スペックはRTX2070SUPER、HP内でご教示戴いているCUDA10.1を入れれたと思います。という状態です。宜しくお願いします。

返信する
deepfake.xyz

AVXについてはこちらのWebサイトをご覧いただければと思います。
http://blog.livedoor.jp/ocworks/archives/52088704.html
AVXはIntel 第二世代Coreプロセッサー(Sandy Bridge)以降のCPUがサポートしている拡張命令セットのひとつです。

恐らく最近のCPUを搭載したマシンをお使いだと思いますので、CUDA10.1 SSEではなく、CUDA10.1 AVXで問題ないと思います。

「from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory」については、バッチサイズが大き過ぎるのが原因かもしれません。
一度、バッチサイズを小さくして試してみてください。

返信する
なんたん

8の工程までできて、とりあえず動画完成することができたのですが、作り終わった動画を開いてみると「このアイテムは、サポートされていないフォーマットでエンコードされています。」という表示がでて、音声しか再生されませんでした。
どうすればよいのでしょうか?教えていただけると幸いです。

返信する

コメントを残す

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

CAPTCHA