Motion Diffusion Model：Diffusion Modelを用いたテキストからのモーション生成


# はじめに
こんにちは、東京大学松尾研究室B4の大庭弘己です。
今日の記事では、画像生成などで巷を騒がせたdiffusion modelを用いてモーションを生成する手法を提案した論文であるMDM:Human Motion Diffusion Modelを紹介します。

# 概要
Human Motion Diffusion Model（以下MDM）は、任意のテキストからモーションを生成する手法です。論文内では自由に叙述したテキストからのモーション生成、アクションのラベル（走る、蹴るなど）からのモーションの生成、モーションの編集の主に三つの機能が紹介されていますが、この記事ではテキストからのモーション生成について詳しくまとめようと思います。
![punch.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003946/497c47aa-19a7-bc4b-b1f4-f8a31113b87d.gif)
"A person punches in a manner consistent with martial arts"の生成結果（公式プロジェクトページより引用）

# 基盤モデルとの関わり
[一日目の小林さんの記事](https://trail.t.u-tokyo.ac.jp/ja/blog/22-12-01-foundation-model/)でも説明されている通り、基盤モデルとは「大量で多様なデータを用いて訓練され, 様々なタスクに適応できる大規模モデル」ですが、その定義から見てMDMは基盤モデルをタスクに適応した例であり、さらにそれ自体が基盤モデルとも言えます。というのも、後の章でも説明しますがテキストの埋め込みに[二日目の記事](https://trail.t.u-tokyo.ac.jp/ja/blog/22-12-02-clip/)で松嶋さんが紹介されていた基盤モデルであるCLIP（言語と画像の大規模言語モデル）を用いており、またこのMDM自体も大量のデータで訓練されており、様々なタスクでの応用可能性があるのです。

# 生成の流れ
![スクリーンショット 2022-12-08 203802.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003946/ae11a720-6ad2-59c1-90b7-096f926131e0.jpeg)

上図が生成の流れになっています。
diffusion modelを用いた生成は、人間にとっては無意味なデータからノイズを除去していくことで意味のあるデータを生成するのですが、この手法ではMDMでノイズを除去し、Diffuseでノイズを付与することを繰り返すことで望みのモーションに近づけていきます。
xは全フレームのモーションの関節の位置、Tがノイズを取り除いていくステップ数、cが指定されたプロンプトをCLIPによって変換したベクトルで、ノイズを除去する過程でcをガイドにすることでプロンプトで意味されていることを表現しています。また、最終的な出力も同様に関節の位置です。

## MDMのモデルアーキテクチャ（上図のピンク色部）
![スクリーンショット 2022-12-08 203627.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003946/b61f71c6-10ad-18fe-a1a6-45e20fa5bc66.jpeg)


問題のノイズ除去をしているMDMの内部機序は上図のようになっています。
Nがモーションの長さ（フレーム数）で、xが前節で説明した通り関節の位置を表しているので、添え字i,t付きのxは、iフレーム目で除去tステップ目の関節の位置ということになります。
テキストをCLIPに入れた結果であるcとノイズ除去が何ステップ目かを表すtをまとめた情報と、関節の位置を表すxをトランスフォーマーエンコーダーに入れることで除去の１ステップが完了するという流れです。


# 学習に使用されたデータセット
MDMの学習には、HumanML3Dという人間のモーションを遍く広く収録したデータセットが用いられています。このHumanML3Dは、HumanAct12とAmassというデータセットで構成されており、さらに源流をたどるとモーションキャプチャを利用した実際のモーションにたどり着きます。

# 実際に生成した結果
気になるのはやはり、どこまで複雑な感情・動作を表現できるのかという点です。
そこで、複雑な感情や複雑な動作の出力を見てみることにします。

### 複雑な感情表現
・だるそうに歩く（People walks sluggishly)
![だるそうに歩く.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003946/a3bc32f5-724b-7747-296f-c1172e961e31.gif)

嬉しい悲しいより若干複雑な感情を入れて生成してみた結果。単純な線で構成されている割に上手くだるさが表現されているように感じられます。

### 動作を複数入れた場合
・匍匐前進とジャンプを幸せそうに行う
![sample00_rep00-_4_.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003946/efdef5bb-9d35-215e-2a8b-737f16576d94.gif)
匍匐前進してからジャンプしてくれることを期待しましたが、匍匐前進の方は無視されてしまいました。動作を複数入れた場合は上手くいかないこともあるようです。





# MDMを発展させた研究
MDMの弱点として、物理的な環境を加味して学習されているわけではないので、そのまま使うと手が地面を突き抜けてしまうなどの欠点がありましたが、それを補強するための研究の一例として、PhysDiff:Physics-Guided Human Motion Diffusion Modelなどが発表されています。
![スクリーンショット 2022-12-09 000439.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003946/f93c82c1-3cab-41ca-8432-7f5f6f4bd86b.jpeg)
この研究では、学習の工程にシミュレーション環境を新たに入れ込むことによって、物理的にあり得ないモーションの排除などにある程度成功しています。

https://nvlabs.github.io/PhysDiff/



# まとめ
MDMは、感情の表現力やプロンプトを正確に表現する力が高く、アニメーションなどの芸術表現的な場面に使用できる可能性が高い反面、出力が関節の位置だけでありトルクなどの情報は出力に含まれないこと、物理的な環境も含めた学習になっていないことから、即座にロボットに応用することは難しいものであることがわかりました。しかし、この記事でも紹介した実環境とのギャップを埋めるような研究も続々と出てきており、今後そういったものが重要になってくると思われます。