SberSwapで、個別の学習プロセス無しでFaceSwapを実現する

1.はじめに

 今までのFaceSwapは、個別に学習プロセスが必要なため処理に時間がかかるのが難点でした。今回ご紹介するのは、個別の学習プロセス無しでFaceSwapを実現するSberSwapという技術です。

2.SberSwapとは?

 下記の図は、SberSwapのモデル図でAEI-Netと呼ばれており、3つの部分で構成されています。

 1つ目がIdentity Encoderで、画像XsからベクトルZidを求めます。2つ目がMulti-level Attributes Encoderdで、U-Netと同様な構造を持ち画像Xtから特徴Zattを取り出します。そして、3つ目がAAD Generatorで、これらの情報から目的とする画像を生成します。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、セットアップを行います。

 

 最初に、画像をFaceswapしてみましょう。sourceとtargetに画像を指定して実行すると、targetの顔がsourceの顔に置き換えられます。ここでは、sourceを松嶋菜々子、targetを石原さとみに設定しています。

 自分で用意した画像を使う場合は、examples/imagesにアップロードして下さい。

 石原さとみの写真の顔だけが、松嶋菜々子に入れ替わったのが分かると思います。

 次に、動画をFaceswapしてみましょう。sourceに画像を、videoに動画を設定して実行すると、videoの顔がsourceの顔に置き換えられます。ここでは、sourceをアンジェリーナ・ジョリー、videoを新垣結衣に設定しています。

 自分の用意した画像や動画を使いたい場合は、画像はexamples/imagesに、動画はexamples/videoにアップロードして下さい。なお、オンメモリで処理するので、動画はHDで20秒くらいまでにして下さい(長いとクラッシュします)。

 新垣結衣のビデオの顔だけがアンジェリーナ・ジョリーに入れ替わりました。

 では、また。

(オリジナルgithub)https://github.com/sberbank-ai/sber-swap

(twitter投稿)

3 件のコメント

  • 公式(SberBank AI)のcolab notebookの推論のセルは、バッチサイズが可変できますが、cedroさんのnotebookでは省略されているように見受けました。
    省略した意図を教えていただければ幸いです。
    (公式版でバッチサイズを40、100、1と可変して推論しても、生成される動画はすべて一律に同じものでしたので、現状でバッチサイズを指定しても無意味ということでしょうか)

    • 出川さん
      バッチサイズは小さくすると速度に影響し、大きくするとメモリの制約の問題があり、デフォルトの40くらいが良いのではと考えてUIからは省き内部の設定のみにしました。UIに出すのは調整する意味が明確にあるものだけにしたいと思っています。

  • ご回答ありがとうございます。
    バッチサイズは精度(生成品質)に影響するものかと思っていましたが、生成速度とメモリ消費に関わる部分なのですね。
    私はPRO+を契約しているのでバッチサイズ100でも動きましたが、1でも入力する動画によっては1分程度の尺ですらクラッシュしますね。

    とはいえ、DeepFaceLabやFaceSwapはメモリ消費が穏やかな代わりに処理時間が冗長になるので、今後はSimSwapやSberSwapの路線が流行るかもですね。

  • コメントを残す

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

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

    ABOUTこの記事をかいた人

    アバター

    ディープラーニング・エンジニアを趣味でやってます。E資格ホルダー。 好きなものは、膨大な凡ショットから生まれる奇跡の1枚、右肩上がりのワクワク感、暑い国の新たな価値観、何もしない南の島、コード通りに動くチップ、完璧なハーモニー、仲間とのバンド演奏、数えきれない流れ星。