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 にアップロードして下さい。

それでは、モーション転送を行ってみましょう。表示されているファイルの中から source と video にそれぞれ1つづつ選んでファイル名を記入し、実行します。ここでは、source:04.jpg, video:04.mp4 と設定し、実行します。
モーション転送は source と video の開始フレームで、顔のランドマーク位置や目や口の開け具合を大体合わせておく必要があります。また、コードの「設定」を 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
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’
huraipanさん
ご指摘のポイントに加えて、config_path = ‘config/vox-256.yaml’ を config_path = ‘config/ted-384.yaml’ に変更し、#画像の連結のところに、black = cv2.resize(black, dsize=(384,384)) を追加すればOKです。なお、画像と動画は384×384にしてください。
詳細は、下記のcolabをご覧下さい。
https://colab.research.google.com/github/cedro3/Thin-Plate-Spline-Motion-Model/blob/main/ted_test.ipynb
早速ご確認頂きありがとうございます!
ted動きました!助かります。
Thin-Plate-Spline-Motion-Modelですが、Colabの「動画の生成」でランタイムエラーになってしまいます。設定はデフォルトの04.jpgと04.mp4を指定したままです。何が原因でしょうか?
よしのぼりさん
情報ありがとうございます。colabのpythonバージョンアップに伴うエラーでした。修正済です。再度ブログのリンクからお試しください。
ご対応ありがとうございました。
引き続き利用させていただきます。