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

6 件のコメント

  • tedの上半身アニメをやってみたかったのですがお手すきの際に見て頂けませんでしょうかm

    この辺り編集すれば動くと思ったのですが動きませんでした
    gdown.download(‘https://drive.google.com/uc?id=1Oy2X7DTXp8OdbMesQ6bLzJ_sR8X86DtB’, ‘checkpoints/ted.pth.tar’, quiet=False)
    dataset_name = ‘ted’ # [‘vox’, ‘taichi’, ‘ted’, ‘mgif’]
    checkpoint_path = ‘checkpoints/ted.pth.tar’

  • Thin-Plate-Spline-Motion-Modelですが、Colabの「動画の生成」でランタイムエラーになってしまいます。設定はデフォルトの04.jpgと04.mp4を指定したままです。何が原因でしょうか?

    • よしのぼりさん
      情報ありがとうございます。colabのpythonバージョンアップに伴うエラーでした。修正済です。再度ブログのリンクからお試しください。

  • コメントを残す

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

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

    ABOUTこの記事をかいた人

    アバター

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