2020年01月01日

Faceswap で deepfake 動画を作ってみる (その2)

つづき

2.機械学習
作成したデータを機械学習にかけて、モデルを作成します
04.png
Train タブ
@ Input A
変換元の顔画像のフォルダを指定します。
A Input B
変換後の顔画像のフォルダを指定します
Alignments は、指定する必要はありません(すでに顔だけ切り出してあるため)

B Model Dir
学習結果を保存するフォルダを指定します。

C Trainer
学習方式を指定します。精度や性能や演算負荷のトレードオフとなります。
Original が faceswap の初期バージョンから実装されてるもので軽量です

D Training Batch Size
一度にどれだけ多くの学習を実行するかを指定します。
数を増やせばスピードはあがるが、GPUやメモリ容量と要相談

Train をクリックすると学習を開始します。
定期的に自動保存するので、学習を一時中断(Stop)しても、また Train で再開できます。
ただ、開始直後は、Stopかけてもなかなか止まらないので要注意

学習の進行状況は、Graph と Preview で確認できます。
数値的は、0.02 が目標

Preview は 3枚の画像があり、元画像(Original)、中間画像、学習結果(Swap) となっている。
学習結果が満足のいく出来になったら Convert へ進む。


3.動画作成
学習結果で動画を作成します

07.png
Convert タブ
@ Input Dir
変換元の動画本体をを指定します。
A Output Dir
変換後ファイルのフォルダを指定します

B Model Dir
学習結果を保存したフォルダを指定します。

C Writer
変換結果のファイルフォーマットを指定します。
mp4 ファイルなら Ffmpeg
動画GIFや一連の静止画も可能

モデル学習と違う動画を Input に指定すると alignments ファイルが存在しないため、動的に顔検出処理をします。
でも、エラーになることが多い気がするので、モデル学習用の動画で試してみてください。

Happy deepfake !

posted by とーふ at 14:03| Comment(0) | PCソフト

Faceswap で deepfake 動画を作ってみる

ツイッターで、とある人が deepfake についてつぶやいていた
気になって調べてみると、GPUパワーをガンガン使うようだ
もしや、余剰のマイニング用 GPUで商売できるか?と思ったが、レンタルGPUは難しそうだった。
マイニングと違って、CPUもRAMも必要。
でも、8GBあればギリギリなんとか。

まず、deepfake とはなんでしょう?という人は、こちらを参照ください

さて実際に使うツールは faceswap 。サイトはこちら


01.png
download タブから windows 用のインストーラのリンクをクリックして保存します
本体は github にあります

必要なパッケージ(Python, MiniConda3)は勝手にダウンロードしますが、faceswap とは別フォルダです
MiniConda3 は、c:\user\username\MiniConda3 に格納されます。

インストーラ実行後、デスクトップの faceswap というアイコンで起動します。

1.学習用画像の準備

1000個以上データが必要なので、動画から切り出すほうが楽です
変換元A,変換後B の二人分のデータを作成します。
02.png
Extract タブ

@ Data Input Dir
動画本体を指定するか、静止画が入っているフォルダを指定します。

A Output Dir
切り出した顔画像の格納フォルダを指定します。

B Alignments
顔の位置(align) を記憶するファイルの保存フォルダを指定します。(省略可)
デフォルトファイル名は、動画名_alignments.fsa です。

メモ:
変換(Convert)対象の顔は、動画からExtract で切り出したものです。
alignments に保存された顔だけが変換されます。
学習モデルと別の動画を使用するときは工夫が必要です。

CPlugins
検出、位置判定、顔のマスクなど、アルゴリズムを選べます。まずはデフォルトで。

03.png
DFace Processing
Min Size に顔画像の最小サイズを対角ピクセル数で指定できます。
学習用顔画像は 64x64 ぐらいを使うらしいので、ゴミ画像除去のため 100 ぐらいでいいかも?

EOutput
動画から切り出す顔画像の間引く数を指定します
動画の全フレームを検索するので、静止画が大量に作成されます。
Extract Every N に 100 と指定すれば、枚数が 1/100 になります

メモ:
ただし、この数値を元に alinments も作成するので、変換する動画の場合は、あきらめて1を指定します
(alinments ファイルなしの動画を convert するときは、自動で顔検出しながら実行する仕様だが、うまくいかないことが多い)


Generate をクリックするとコマンドラインを表示します(表示するだけ)
Extract をクリックすると実行します。終了を気長に待ちましょう。

終了するとAのフォルダに顔画像がたくさんできます。
顔じゃない画像や、向きがおかしい画像や、ターゲット以外の顔ファイルを削除します。

エクスプローラで、中アイコンぐらいで表示して、下の方から消しておくと効率がいいです。

(つづく)
posted by とーふ at 13:59| Comment(2) | PCソフト