驚異の処理速度! SberSwapで顔置換(フェイススワップ)をやってみた

こんにちは、テリーです。物申す系YouTuberのヘライザーを毎日見てます。ヘライザーのサブチャンネルのとある動画の中で、別の女優さんに顔を置換して話をしているシーンがありました。おそらく芸能人の写真1枚から顔データを取り込み、自身の顔を芸能人に置き換える処理をしています。



今回は顔置換技術(フェイススワップ)の中でも特に最新のSberSwapを紹介します。従来のフェイススワップは学習用に大量の顔画像が必要で、学習処理に大量の時間(数時間)が必要でした。そのため、大量の画像が手に入らない人に置き換えることが難しく、また気軽に試すこともできませんでした。それらの欠点を克服し、短時間で学習し、置換することができるSberSwapは、フェイススワップの中でも大本命の技術と期待され始めています。

動作確認環境

  • SberSwap v2.0
  • Chrome 99.0.4844.74
  • Google Colaboratory

M1 Mac上で動かそうと試みましたが、NVIDIA GPUを搭載した環境でないと動作しませんでした。GitHubのページをよく見ると、Google Colaboratoryで動作するためのリンクがあります。ローカルで動作させる前にColaboratoryで試す方が簡単です。本記事でもColaboratoryでのサンプル実行の様子を紹介します。

サンプル実行

こちらのページを開きます。すぐに試すことができるようになっています。メニューから「ランタイム」-「すべてのセルを実行」をクリックし、5分ほど待つと全てのサンプル動作が完了します。

下記の警告が出ることがあります。納得したら「このまま実行」をクリックしてください。

各セルごとに説明します。
1セル目「Check GPU and CUDA vesion」では、GPU付きのコンピュータであることと、GPUの種類、CUDAのバージョンを確認できます。下図の例ではTesla K80というGPUが割り当てられています。GPUの種類は選べません。T4、K80、P100など日によって、スペックの異なるものが割り当てられますので、ベンチマークを取る場合や最新機能を使用する場合は注意が必要です。

2セル目「Clone github & download models」では、SberSwapのプログラムをGitHubからダウンロードし、学習モデルデータもダウンロードします。
3セル目「Install required libraries」では、SberSwapに必要なPythonライブラリをインストールします。
4セル目「Preparation」からは実行処理です。ここではPythonのライブラリを全てインポートします。
5セル目「Initialize models」では、モデルデータを読み込みます。

6セル目「Upload source image and video」では、顔用画像ファイル名(source_path)と、変換元の静止画ファイル名(target_path)または動画ファイル名(path_to_video)を指定します。画像の顔を処理するか、動画内の顔を処理するかをtarget_typeで指定します。動画の全フレームをメモリに読み込んでいるように見えます。

7セル目「Inference」では、顔の置換処理を実行し、ファイルに書き出します。書き出しファイル名はプログラムの中でハードコードされています。

8セル目「Visualize Image to Image swap」では、変換前後の画像を並べて表示します。下図の例ではサッカー選手(ベッカム)の顔がイーロン・マスクの顔に置き換えられています。肌の色はベッカムの色になっています。

9セル目「Visualize Video Swap」では、変換処理後のビデオを再生して確認します。リック・アストリーの顔がイーロン・マスクの顔に置き換わっています。

動画の顔置換

6セル目「Upload source image and video」で、target_typeを「image」から「video」に変更します。6セル目を実行(下図左上のボタン)し、次に7セル目を実行し、8セル目は飛ばして、9セル目を実行します。6セル目は動画の読み込み処理、7セル目は動画の置換処理と書き出し処理、9セル目は再生処理です。

7セル目の処理は動画の全フレームに対して処理を行うため、静止画1枚よりもかなり多くの時間がかかります。静止画の場合は9秒でしたが、このサンプル動画の場合、2分38秒かかりました。

自分の写真で置き換え

サンプルだけではなく、自分の写真で試してみましょう。顔写真を2枚(自分の写真と、顔置換する人物の写真)用意します。Colaboratoryの左のアイコンからファイルリストを表示し、/sber-swap/examples/imagesフォルダに画像をアップロードします。ここでは自分の写真をme.jpg、顔置換する人物の写真をmodel_11.pngというファイル名にしました。

動画の置換処理は時間がかかるので、静止画でまず試して、この顔画像が適切かどうかを判断します。6セル目のtarget_typeを「image」に戻し、source_pathを「examples/images/me.jpg」に変更、「target_path」を「examples/images/model_11.png」に変更します。

6,7,8セルを順に実行します。似てなくはないが、メガネの処理は難しいようです。

動画の方も、6セル目のtarget_typeを「video」に変更し、6,7,9セル目を順に実行すると、顔置換された動画が生成されます。試してみてください。

まとめ

短時間の処理で顔を置換する技術SberSwapをご紹介しました。ヘライザーの動画の中では、明らかに顔を置き換えていることを明示していますが、明示せずに他人の顔を使用するYouTube動画が増えてきそうだなと予感しました。カラオケやダンスなど、自分の苦手分野を映像上で解消することにも使えます。自身の若い頃の顔に置き換えることもできるでしょう。処理速度が追いつき、ライブ配信やビデオ会議の中でも気軽に活用できる時代が間近に迫っています。本サンプルはとても気軽に試すことができるので、ご自身の動画や顔でぜひフェイススワップを楽しんでください。

有料サービスのご紹介

WebRTCを利用した会員制ライブ配信サービスを短期間で導入したい方、大規模配信のためのサーバ構築・インフラ運用を専門家に任せたい方は「ImageFlux Live Streaming」をご検討下さい。ポスプロ会社様向けに動画編集のコラボレーションシステムとして利用された実績があります。WebRTC SFUという技術を用いて、配信映像をサーバに中継させる仕組みです。1対多の会員制映像配信に特に強みがあり、初期の利用コストが低価格に抑えられます。