cedro-blog

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秒くらいまでにして下さい(長いとクラッシュします)。

https://cedro3.com/wp-content/uploads/2022/01/yui_angelina_result.mp4

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

 では、また。

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

(twitter投稿)