Liquid Warping GAN with Attention で、動画の人に合わせて、静止画の人を動かす

1.はじめに

 2018年に、Everybody Dance Now という、ダンスの達人の動画があれば、普通の人が達人と同じ様に踊る動画を生成できるディープラーニング の技術が提案され、ビックリしたことを覚えています。

 それから2年が経ち、技術はもう一段レベルアップしました。当時の出力画像はボケボケでしたが、かなりシャープなものに改善されて来ました。今回は、その技術 Liquid Warping GAN with Attention をご紹介します。

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

2.Liquid Warping GAN with Attention とは?

  Liquid Warping GAN with Attention とは、リファレンス(動画の人)に合わせて、ソース(静止画の人)の動画を生成するネットワークです。 以下がそのアーキテクチャーです。

 Generatorは、背景を生成するGbg、ソースの特徴量を抽出するGsid、背景情報・ソースの特徴量・リファレンスの3つを合成するGtsf の3つによって構成されています。Attentional Liqiid Warping Block は、ソースの特徴量をリファレンスに反映させる役割を果たします。

 Discriminatorは、全体を判定するDglobal、ボディーのみクロップして判定するDbody、頭のみクロップして判定するDheadの3つによって構成されています。

 そして、このネットワークでは、骨格データではなく、SMPLと呼ばれる簡易3次元モデルを使っています。

3.コード

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

 まず、下記のコードを実行し、セットアップを行います。

  続いて、下記のコードを実行し、初期設定を行います。

 変換時のソース(静止画の人)の与え方には3種類あり、①ソースが正面のみ、②ソースが正面+背面、③ソースが正面+背面+背景、があります。

 まず、①ソースが正面のみの場合です。src_pathソース(静止画)を指定し、この時の name?出力フォルダー名です。ref_pathリファレンス(動画)を指定し、この時の name?リファレンスの処理フォルダー名です。

 ※このシステムでは、一度実行完了した出力フォルダー・リファレンスの処理フォルダーには上書きしないことに注意して下さい。

 ソースとなる画像は、全身が写っていて両手が体と少し離れていると綺麗に変換が出来ます。リファレンスが前しか向かない場合はこれでOKですが、後ろを向く場合は次の方法をとる必要があります。でないと、リファレンスが後ろを向くとソースは後ろを向きますが、後ろの画像も前を使うので怖い感じになります(笑)。

 次に、②ソースが正面+背面の場合です。コード上は先程とほぼ同じですが、今度はソースのフォルダーを指定しその中に正面と背面の2つの画像を入れます。

 この動画の中ではリファレンスは後ろを向いていませんが、これでリファレンスが後ろを向いても大丈夫になりました。

 そして、③ソースが正面+背面+背景の場合です。厳密に言うと、ソースの人物に隠された背景は、どうなっているか分かりません。なので、背景の画像を加えるとさらに仕上がりが良くなります。その場合は、7行目の bg_path背景の画像ファイルを指定します。

 Githubのコードには、沢山のリファレンス(動画)とソース(静止画)が保存されていますので、自分の写真も含めて、色々組み合わせて楽しんでみて下さい。

 この Attention Liquid Warping GAN は、上海科技大学を中心としたメンバーで開発されていて、最先端のAI開発における中国の存在の大きさを感じます。今回、公開されたコードは、近日中にGUIで動かすアプリケーションとしても公開されるということで、こちらも楽しみにしたいと思います。

 最後に、私が作ったオリジナルをご紹介します。

 ソースを私の写真、リファレンスをシャッフルダンスのビデオにすると、私はシャッフルダンスの達人になれます。

 ソースを女性の写真、リファレンスを中国拳法のビデオにすると、彼女は中国拳法の達人になれます。

 ソースを西郷さんの写真、リファレンスをダンスビデオにすると、西郷さんがダンスをしてくれます。

 では、また。

(オリジナル)https://github.com/iPERDance/iPERCore

(Youtubeへの投稿)

 さらに分かりやすい解説+操作方法+コードリンクをYoutubeにアップしました。

(Twitterへの投稿)

 ①ソースが正面のみで7名分を変換し、編集したものをTwitterに投稿しました。

6 件のコメント

  • 正面画像1枚だけならエラーもなく動画を生成することができたのですが
    表裏の画像を使って生成するのから、フォルダの指定が間違っているのかfailedエラーが発生してしまいます
    申し訳ないですが、詳しいHowtoを記事にしてくださると助かります。

  • hello
    I faced a problem with ‘neural_renderer’ (No module named ‘neural_renderer’) when I run the cell No.3 (3.動画の生成(5〜10分かかります)

    can you help me please

  • ご助力ありがとうございます

    しかし、私はまだ同じエラーが発生しました
    File”/content/iPERCore/iPERCore/tools/human_digitalizer/renders/nmr.py”、6行目、
    nrとしてneural_rendererをインポート
    ModuleNotFoundError:「neural_renderer」という名前のモジュールがありません

  • コメントを残す

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

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

    ABOUTこの記事をかいた人

    アバター

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