Ribbit.work

【deepfacelab】顔を部分的、一部のみ変更する方法【XSeg】

機械学習python

last modified date2021-8-31

publish date2021-8-11

deepfacelabでは、face typeに応じておでこから顎まで、または頭全体を標準でスワップさせます。

ただ、表情をうまく再現できなかったり、顔でない部分まで顔として認識してしまうケースが起こりえます。

この対策としてdeepfacelabには、こちらから能動的に「どこまでが顔なのか」を指示できる「XSeg」という機能があります。

さらに、この機能を利用することで、学習効率・学習品質を大きく向上させることも可能です。

今回はその使い方について説明していきます。

face typeについて詳しく知りたい方は以下の記事をご覧ください。 頭全体をスワップする方法などを紹介しています。

【顔によって最適が異なる】フェイスタイプ(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

非常にわかりやすい動画がありました。

こちらを見ていただくだけでも、全体の流れを理解できると思います。

この記事をシェア

この記事を読んだ方におすすめの記事

PySimpleGUIで自作テーマを使用する
2021-9-2

PySimpleGUIで自作テーマを使用する

python
deepfacelabでうまく学習させるために注意すべきポイント、コツを紹介
2021-8-16

deepfacelabでうまく学習させるために注意すべきポイント、コツを紹介

機械学習python
Eelを含むPythonプログラムを終了する
2021-8-16

Eelを含むPythonプログラムを終了する

python
【顔によって最適が異なる】フェイスタイプ(Face type)の正しい選び方
2021-8-16

【顔によって最適が異なる】フェイスタイプ(Face type)の正しい選び方

機械学習python

最新の記事

kuromoji.jsで形態素解析
2021-12-4

kuromoji.jsで形態素解析

TypeScriptJavaScript
レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】
2021-12-4

レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】

JavaScriptKintone
レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】
2021-11-29

レコード一覧表示時(app.record.index.show)のサンプルコード集【Kintone】

JavaScriptKintone
スライダーを使って数値を設定できるKintoneプラグイン【無料公開】
2021-11-26

スライダーを使って数値を設定できるKintoneプラグイン【無料公開】

KintoneJavaScriptTypeScript