1.はじめに
以前から人の動画から3Dモデルを推定する手法はありましたが、複雑な動きの場合は細部でゆがみやズレが生じていました。今回は、この問題点を改善したVIBEという技術をご紹介します。
*この論文は、2019.12に提出されました。
2.VIBEとは?
VIBEとは、Video Inference for Body Pose and Shape Estimation の略で、ディープラーニング を使って、人の動画から3Dモデルを推定する技術です。
使用しているモデルは、SMPL (Skinned Multi-Person Linear model)と言う人間の自然なポーズにおける多種多様な体型を正確に表現するためのモデルです。
このモデルは、N=6890個の頂点を持っており、頂点の重み付き和からP=23個の関節位置を求めることが出来ます。
下記が、VIBEのアーキテクチャーです。入力は、人物の複数のフレームです。
Generator は、各フレームから CNN によって特徴量を抽出し、GRU による時系列補正を行い、回帰によって3次元モデルを生成し、Motion Discriminator へ入力します。
Motion Discriminator にはもう一つ、大規模な3次元モーションデータセット「AMASS」を入力し、これらを敵対させて学習することによって推定精度を上げています。
言い換えれば、GANを使って、関節の2次元位置は同じだが3次元位置は異なるという様な問題を解決しているわけです。
3.コード
コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。
まず、セットアップを行います。githubからコードをコピーし、ライブラリを取得、そして学習済み重みとSMPLデータをダウンロードします。
1 2 3 4 5 6 7 8 9 10 11 |
# githubからコードをコピー !git clone https://github.com/mkocabas/VIBE.git %cd VIBE/ # ライブラリを取得 !pip install torch==1.4.0 numpy==1.17.5 !pip install git+https://github.com/giacaglia/pytube.git --upgrade !pip install -r requirements.txt # 学習済み重みとSMPLデータのダウンロード !source scripts/prepare_data.sh |
今回使用するのは、この女性がダンスをしている動画(girl_dance.mp4)です。
下記のコードで、デモを実行します。引数は、 –vid_file の次に対象の動画ファイル名、–output_folder の次に出力フォルダーを記載します。–sideview オプションを加えると、横から見たモデルの形も推定します。
1 2 |
# デモの実行 !python demo.py --vid_file girl_dance.mp4 --output_folder output/ |
下記のコードで、推定結果の動画(mp4)をGoogle Colab のインラインで再生します。
1 2 3 4 5 6 7 8 9 10 |
# 作成した動画を再生する from IPython.display import HTML from base64 import b64encode def video(path): mp4 = open(path,'rb').read() data_url = "data:video/mp4;base64," + b64encode(mp4).decode() return HTML('<video width=500 controls loop> <source src="%s" type="video/mp4"></video>' % data_url) video('output/girl_dance/girl_dance_vibe_result.mp4') |
ほぼ正確な3Dモデル推定が出来ているようです。
では、また。