【deepfacelab】顔を部分的、一部のみ変更する方法【XSeg】
deepfacelab では、face type に応じておでこから顎まで、または頭全体を標準でスワップさせます。
ただ、表情をうまく再現できなかったり、顔でない部分まで顔として認識してしまうケースが起こりえます。
この対策として deepfacelab には、こちらから能動的に「どこまでが顔なのか」を指示できる「XSeg」という機能があります。
さらに、この機能を利用することで、学習効率・学習品質を大きく向上させることも可能です。
今回はその使い方について説明していきます。
face type について詳しく知りたい方は以下の記事をご覧ください。 頭全体をスワップする方法などを紹介しています。
ちなみにそもそも PC のスペックが低く、高度な学習設定を利用できない場合は、Google が提供している Google Colaboratory を利用することで、業務用 GPU を無料で利用することができます。
以下の記事を参考にしてみてください。
XSeg とは
Xseg とは、通常は学習により自動的に検出される顔の輪郭情報を、ユーザーが能動的に設定することができる機能です。
バージョン 2.0 にアップデートされる前に存在していた、FANSeg を代替する機能になります。
XSeg には通常の学習時に作成される通常のモデルデータとは別に、専用の XSeg モデルデータを持っています。
ユーザーが行う作業の手順
XSeg は専用のモデルデータをもっているため、通常のモデルと同様に、学習によって作成されます。
通常のモデルデータには学習素材としてフェイスセットが必要でしたが、XSeg モデルの場合は学習時の「正解」にあたる、基準となる輪郭情報をユーザーがいくつか定義する必要があります。
通常ユーザーが行う作業としては、
- 学習時の正解となる輪郭情報を、手動で数個~数十個定義
- XSeg モデルをトレーニング
- 作成された XSeg モデルを使って、全ての顔データに輪郭情報を反映
- 通常のモデルデータをトレーニング
といった流れになります。
DeepFaceLab には輪郭情報を登録するためのツールが含まれていますので、これを使って正解データを作成します。詳細は後述しますが、以下が登録ツールです。
- 5.XSeg) data_dst mask - edit.bat
- 5.XSeg) data_src mask - edit.bat
手っ取り早く実現する
ジェネリック XSeg モデルを活用する
前述した通り XSeg モデルを作成するためには、ユーザーがある程度正解データを用意する必要があります。
ただ、DeepFaceLab にはジェネリック XSeg と呼ばれる、様々なフェイスセットを使って予め学習を行ったモデルデータが存在します。
これを呼び出してフェイスセットに適用させることで、自分で XSeg モデルを用意しなくてもある程度の障害物を除いた輪郭を定義することができます。
- 5.XSeg Generic) data_dst whole_face mask - apply.bat
- 5.XSeg Generic) data_src whole_face mask - apply.bat
上記のバッチファイルがそれぞれ dst, src に対応しています。
事前学習を活用する
もしご自身で XSeg モデルを作成する場合、通常のモデルと同様に事前学習機能が存在します。
こちらを活用することで、学習効率を高めることが可能です。
事前学習については、以下の記事をご覧ください。
deepfacelab でうまく学習させるために注意すべきポイント、コツを紹介
XSeg に関係するその他のバッチの説明
XSeg に関係するバッチファイルを紹介します。
後述するバッチファイルには、data_dst と data_src が存在し、それぞれスワップ先、スワップ元に対応します。
5.XSeg) data_dst mask - edit
ここで輪郭情報を手動で定義できます。
専用のトレーナーアプリが立ち上がります。
5.XSeg) data_dst mask - fetch
フェイスセットの中から、edit を使って手動で定義した画像データだけを、別フォルダへコピーします。
学習リソースの再利用に活用することができます。
5.XSeg) data_dst mask - remove
手動で定義した輪郭情報を削除し、標準の情報を復元します。
5.XSeg) train
XSeg モデルデータを学習により作成します。
5.XSeg) data_dst mask - edit および 5.XSeg) data_src mask - edit で作成したフェイスセットのみが使用されます。
5.XSeg) data_dst trained mask - apply
train によって作成したモデルデータを使って、data_dst 内の全てのデータセットへ輪郭情報を反映します。
5.XSeg) data_src trained mask - remove
trained mask - apply を使って反映した輪郭情報を削除します。
手動で定義した輪郭情報は保持されます。
TL;DR
非常にわかりやすい動画がありました。
こちらを見ていただくだけでも、全体の流れを理解できると思います。
手順に沿って作業していただくことで高品質なモデルデータを作成することのできるロードマップを用意しています。
こちらのページをご参照ください。