※この記事は前回のFaceswapの使い方で大まかな手順を理解した方向けです
前回の記事で複数のソースビデオから画像を集めてトレーニングする事がフォーラムで推奨されていると述べました
今回は複数のソースから抽出した顔画像を束ねる方法と完成度を上げるフィットトレーニングを解説します
※前回の記事はこちらから
- トレーニングデータを見る
- YouTubeから材料となる顔の動画をDLする
- 何度も使いたい人物の顔なら画像集を作成した方が楽
- Mergeで複数のfsaファイルを束ねる
- フィットトレーニングを利用する
- その他のツールやオプション等
- 動画作成に掛かったコストと時間等
- 関連リンク
トレーニングデータを見る
以下の画像は前回の記事のステップ③で作成したトレーニングデータの内容です
合計約28時間位トレーニング後の状態です
新たに出来ているファイルはログと経験値の様な物でトレーニング続けてゆくほど増加して行きますが
同一のデータではある時点で頭打ちとなりそれ以上は無駄な努力にしかなりません、そこでの出来に満足出来たのなら良いですが
過学習では効果が薄いまま無駄に容量が増える為、限界を感じたら新たな顔画像でのトレーニングに移りましょう
YouTubeから材料となる顔の動画をDLする
とにかく様々なソースから目的の人物の顔画像を集めて材料の質を向上させてゆく必要が有ります、材料の質が最も重要になるので
前回述べたように下記の条件が当て嵌まる顔の動画や画像を集めてください
- 多くの角度
- 照明の明暗度
- 老若や過剰なメイクで顔そのものが大きく変化してない
- 写りが良い
顔画像を一番多く取れるのは動画からなので、
顔集めの動画は基本YouTubeから、フィルタ検索で4分以内の短い奴にしましょう
此処↓に動画のURLを貼ると簡単にDL出来ますので活用しましょう
何度も使いたい人物の顔なら画像集を作成した方が楽
前回の記事で述べたようにトレーニングに使用する顔画像は500~10000枚の範囲で納めるべきですが
動画一つで当たり前の様に10000枚越えするケースも多いので
今後何度も使いたい人物の顔であるなら厳選した画像集を作った方が良いです
※今回youtubeに上げたグレタとエマのスワップ動画ではエマの画像集を作成しています
その為には複数のソースから抽出された画像の情報を束ねるfsaファイルを作成する必要が有ります
Mergeで複数のfsaファイルを束ねる
例えばエマワトソンの動画を2種類用意してそれぞれ抽出・選別・クリーンアップを終えている顔画像フォルダB_1とB_2がある状態だとします
その後新たなフォルダ(Train_faces)を作成します
此処にB_1とB_2からあなたが厳選した画像を移すかコピーします
(※一枚一枚移すのが苦痛であれば、フォルダ内で表示される画像の幅を6~10枚程度にした後、縦一列分のみドラッグスクロールしながらコピーして移すと楽です、フォルダ内の必要な画像は大体揃います、自分はそうしました)
※最新版ではMergeその物が削除されてTrain時にfsaファイルが不要になっている用なので以下のこの作業は不要となります
此処まで説明したTrain_facesへの厳選画像の移動だけでokです
厳選が終わったらMergeの設定を行います
Mergeの設定方法
- Tooldタブ-->Alignmentsタブを選択
- jobセクションでMergeを指定
- Alignments FileでB_1とB_2のfsaファイルを同時に指定します、ドラッグで範囲指定して下さい
-
Mergeではfsaファイルを複数指定できる(画像は5つのfsaを指定している所) - Faces FolderにはTrain_facesを指定します
これで準備は完了ですので▷Alignmentsを実行しましょう
すぐ終わる作業ですが一応、一番下のログ表示欄にProcess exitedと表示されたら終了です
Merge後、新たにfsaファイルが生成されました
alignments_merged+"作成年月日"という名前になっている筈です
このmergedファイルがB_1とB_2から厳選した画像を収めたTrain_faces用のfsaファイルとなります
今後もTrain_facesに新たなソースから画像を増やすたびにこの手続きを踏む事で
複数のソースから顔画像の情報を束ねて行く事が可能です
※例えばここからTrain_facesに新たにB_3からの顔画像を追加したのなら
alignments_mergedとB_3のfsaでMergeして下さい
※なおMergeを更新すると生成されるバックアップのfsaファイルはクリーンアップの時と違って
新しく生成される方が更新されたデータになります
Mergeは基本画像を増やす目的で使われ、画像を追加した場合だと容量が増えるので削除後の更新であるRemove-Facesの時と混同しない様に注意してください
フィットトレーニングを利用する
フィットトレーニングとは最終目的のシーンの動画の前に
予め同一人物の他の動画でトレーニングを行いデータを蓄えてから
目的のシーンに変えてトレーニングを再開する手法の事です
ある程度下地が出来上がった(その顔画像集で十分学習できた?)モデルに
同一人物の別の顔画像集に差し替えることで既存の学習に無かったり不足していた
新たなシーンを学習させる事が出来、質を向上させトレーニングの時間も大きく減らせるらしいです
今回のケースだとグレタの別の動画でトレーニングを行って
ある程度仕上がったらトレーニングを中断、Trainタブ内の設定で
Input A、Alignments A、Timelapse Input Aの3か所だけをHow dere youの国連演説の顔画像とfsaに変えて
それ以外は変更せずにトレーニングを再開する形です(前回の記事のステップ③から参考して下さい)
この様にフィットトレーニングではトレーニングモデルを使い回して完成度を上げてゆきます、B側でも同様に画像を変えたり増やしたりしても構いません
トレーニングデータは他の人物には使わない事
なお、今回の解説で作成使用したトレーニングデータはあくまでA(グレタ)の人物とB(エマ)の人物の顔の変換データでありそれ以外の人物には使えません
同じモデルで片方をCという人物の顔に変えるとせっかく作ったトレーニングデータに関係ない人物の顔が混じる事になるので注意して下さい
Cの顔をAやBに変えたいのならCとA、CとBで新たなトレーニングデータを作成しましょう
その他のツールやオプション等
変換前に予め出来をチェック可能なPreview
Tools-->Previewと選択します
- Input Dirに変換対象の動画
- Alignmentsに↑のfsaファイル
- Model Dirにトレーニングデータを指定
- 準備が出来たら▷Previewを実行します
この様な画面が出ます
細かい操作までは語れないので簡潔に述べます
上の行がオリジナルの元動画のフレーム、下が同じフレームをこのトレーニングモデルで実際に変換した際の顔になります
Update Sampleでランダムにシーンが切り替わります
ColorとMask Typeの設定だけは控えて置いてください
これらを弄って気に入った出来なら、実際のConvert時に設定する必要が有ります
Previewはこの様に変換後の状態を予め可視化出来るツールです
変換動画が見込み違いの出来でガッカリしないように事前にこれで確認しましょう
Mixed Precision(※Nvidia製GPUのみ)
Setting-->Train-->Networkの所にあります(画像の赤枠から参照ください)
これはNVIDIA製GPU専用の設定で
チェックを入れるとパフォーマンスが改善され
RTXシリーズだとトレーニングのスピードアップにも繋がるらしいです
おま環なら是非ともチェックを入れておきましょう(※画像では見切れてますが、きちんと下のSaveするのを忘れずに)
動画作成に掛かったコストと時間等
今回作成に使用した動画の数ですがグレタは4、エマは9程使用しました
トレーニングは12時間位でUPした動画の質になり、それ以上続けても殆ど変化は有りませんでした、トレーニング中でもエマの画像集を逐次増やしたりして更新してたので不要な時間も結構あったかなと
グレタ側の厳選顔画像集は作らずフィットトレーニングだけを繰り返してました
それでも遠景からの顔が映るシーンの情報が足りず完全なフェイク動画にはなってなかったり、変なモヤが掛かるのでグレタ側の顔画像から削除してあえて変換対象外にして飛ばしています
今回妥協せざるを得なかった部分ですね
とはいえこの辺りまで理解出来れば何かしらのスワップ動画は作れるかと思います
またまた長い記事になってしまいましたが今回の解説を終わりたいと思います、有難うございました
関連リンク
今回の記事のソースであるフォーラムのトレーニングに関するガイドです
フィットトレーニングの解説も有ります(※英語のページ)
https://forum.faceswap.dev/viewtopic.php?f=6&t=74
こちらは完成動画です、前の記事でも張ってますが(前半はスワップ、後半はオリジナルとの比較)