Thin Plate Spline Motion Modelで、モーション転送を行う

1.はじめに

 今回ご紹介するのは、1枚の画像をビデオに連動させて動かす、Thin Plate Spline Motion Model という技術です。

*この論文は、2022.3に提出されました。

2.Thin Plate Spline Motion Model とは?

 下図が、Thin Plate Spline Motion Model の概要です。まず、Driving(ドライブ画像)とSource (ソース画像)それぞれを BG Motion Predictor に入力し、ソース画像からドライブ画像への背景の動き予測します。

 次に、K+1 Transformations で、ソース画像からドライブ画像を予測します。このブロックは、線形変換である Affine Transformation(アフィン変換)と柔軟な表現が可能な非線形変換である TPS Transformations(TPS変換)を組み合わせたものです。そして、Keypoint Detecor からのソース画像とドライブ画像のキーポイントの差の情報と合わせて、ソース画像からドライブ画像を予測しています。

 その後、Dense Motion Network を通して得られた Optical Flow(オプチカル・フロー)とMuti-resolution Occlusion Masks(マルチ解像度のオクルージョン・マスク) を InpaintingNetwork(修正ネットワーク)へ入力し出力を得ます。この様に、様々な解像度で欠落領域の修復を行うことによって、モーション転送の完成度を上げています。

3.コード

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

 まず、セットアップを行います。チェックポイントは、デフォルトでvox.pth.tar をダウンロードし、 コメントアウト(#)を外すとted.pth.tar(上半身)、taichi.pth.tar(全身)、mgif.pth.tar(動物絵)をダンロードすることも出来ます。

 

 次に、サンプルとして保存されているソースとビデオを表示します。ビデオは先頭から10フレーム目の画像を表示しています。

 ソースの仕様は jpg あるいは png で顔画像を align処理(顔のランドマークが所定の位置になるように正方形に切り抜く)をしたもので、内部処理では256×256にリサイズして扱われます。ビデオの仕様は mp4 で大体正方形になっていればOKで、同じく内部処理では256×256にリサイズして扱われます。

 自分の用意したデータを使いたい場合は、ソースは後程説明する方法でアップロードして下さい。ビデオは大体正方形で音付きのものを examples/video にアップロードして下さい。

 

 それでは、モーション転送を行ってみましょう。表示されているファイルの中から sourcevideo にそれぞれ1つづつ選んでファイル名を記入し、実行します。ここでは、source:04.jpg, video:04.mp4 と設定し、実行します。

 モーション転送は sourcevideo の開始フレームで、顔のランドマーク位置目や口の開け具合を大体合わせておく必要があります。また、コードの「設定」を find_best_frame = True に変更すると、source に合う video のフレームを自動的に選ぶことも出来ます。

 滝川クリステルからマリーアントワネットへモーション転送を行いました。かなりニッチな組み合わせですね(笑)。

 作成した動画をダウンロードします。square のチェックボックスにチェックを入れないと今再生したバースタイルでダウンロードし、チェックを入れるとスクエアスタイルでダウンロードします。ここでは、スクエアスタイルでダウンロードします。

 

 別の組み合わせをやってみましょうか。今度は、source:01.jpg, video:01.mp4 です。

 

 もう1つやってみましょう。今度は、source:05.jpg, video:05.mp4 です。

 

 自分の用意したソースをアップロードする方法を説明します。下記を実行し、まずは写真をそのままアップロードします。ここでは例として、100.jpg〜104.jpgをアップロードしています。

 align処理(顔のランドマークが所定の位置になるように正方形に切り抜く)を行います。

 align処理の結果を確認して問題なければ、ソースに追加したいファイル名を1つづつ選んで add: に記入して、下記を実行します。

 では、また。

(オリジナルgithub)https://github.com/yoyo-nb/Thin-Plate-Spline-Motion-Model

コメントを残す

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

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

ABOUTこの記事をかいた人

アバター

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