Human Motion Diffusion Modelによるテキストから3Dモーションの自動生成

この記事では、Human Motion Diffusion Modelによって、人の動きの3Dアニメーションモデルを生成する方法を紹介します。

Human Motion Diffusion Modelとは

Human Motion Diffusion Modelは、拡散モデルの仕組みを利用して人の3Dモーションを生成するモデルです。

Human Motion Diffusion Model

学習時の予測対象を工夫することにより、よりリアルなモーションの生成を実現しているところに大きな特徴があります。ここでは、入力したテキストに沿った3Dモーションを生成するText-to-Motionのデモのみ行いますが、特定のクラスのアクションの3Dモーションを生成するAction-to-Motion、モーションをテキストで修正するMotion Editingも同じモデルで実現することができます。理論面の詳細は論文をご覧ください。

デモ

それでは、Google Colaboratoryを使って実際に実行していきます。

なお、記事内で紹介したコードをすべて含むノートブックは、以下のリンクから直接参照することができます。

Open In Colab

環境設定

はじめに、画面上部のメニューから、「ランタイム」、「ランタイムのタイプを変更」と進み、「ハードウェアアクセラレータ」を「GPU」に変更しておきます。これにより、推論時にGPUを利用することができます。

※ 2022年10月よりGoogle Colaboratoryの料金プランがこちらの内容に変更されました。ご利用の際はご注意ください。

conda環境を利用するため、condacolabをインストールします。colab上でcondaを利用する方法については、下記の記事をご覧ください。

!pip install -q condacolab
import condacolab
condacolab.install()

続いて、リポジトリをクローンし、conda仮想環境を構築します。

!git clone https://github.com/GuyTevet/motion-diffusion-model.git
%cd motion-diffusion-model
!conda env create -f environment.yml

必要なライブラリ等をインストールします。

%%bash
eval "$(conda shell.bash hook)" 
conda activate mdm
python -m spacy download en_core_web_sm
pip install git+https://github.com/openai/CLIP.git

最後に、描画に必要なSMPLモデルのパラメータをダウンロードしておきます。

!bash prepare/download_smpl_files.sh

モデル設定

学習済みのパラメータをダウンロードします。

import gdown

# 学習済みパラメータのダウンロード
url = 'https://drive.google.com/uc?id=1PE0PK8e5a5j-7-Xhs5YET5U5pGh0c821'
output = 'humanml_trans_enc_512.zip'
gdown.download(url, output, quiet=False)
!unzip humanml_trans_enc_512.zip -d ./save/

推論

モーションを生成します。text_promptでプロンプトを指定することができます。

%%bash
eval "$(conda shell.bash hook)" 
conda activate mdm
pip install ipykernel
python -m sample --model_path ./save/humanml_trans_enc_512/model000200000.pt --text_prompt "the person walked forward and is picking up his toolbox."

出力された結果がこちら。

前掲のYoutubeの動画のように、人型のメッシュで動画化するためのobjファイルやsmplパラメータを生成したい場合は、以下のコードを実行します。input_pathには、上記のコードで出力されたmp4ファイルのパスを入力します。

%%bash
eval "$(conda shell.bash hook)" 
conda activate mdm
python -m visualize.render_mesh --input_path /content/motion-diffusion-model/save/humanml_trans_enc_512/samples_humanml_trans_enc_512_000200000_seed10_the_person_walked_forward_and_is_picking_up_his_toolbox/sample00_rep00.mp4

まとめ

テキストから3Dモデルを生成し、さらにそれをテキストで動かす、といった技術があっという間に現実的になってきました。今後の発展に要注目です。

参考文献

Human Motion Diffusion Model