【論文読解】VIBE: Video Inference for Human Body Pose and Shape Estimation

# 概要
動画中の人物の密な3次元ポーズを推定する手法であるVIBE（**V**ideo **I**nference for **B**ody Pose and Shape **E**stimation）の論文を読んだので紹介します。
以下の図のように、一連のフレームを元に、人の3次元ポーズを推定できることが目的です。公式の[Colab](https://colab.research.google.com/drive/1dFfwxZ52MN86FA6uFNypMEdFShd2euQA)が用意されているので、興味のある方は先に確認しておくと良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/82ca456f-b23f-cc26-12e0-faa5517286bd.png)

VIBEは現時点（2020年8月29日）でのSOTAとされています。以下のグラフは[paper with code](https://paperswithcode.com/sota/3d-human-pose-estimation-on-3dpw)からの抜粋で、3DPWというデータセットにおけるPA-MPJPEという評価指標のグラフです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/cc88d889-4585-418b-3fa7-a65ce74d6b19.png)

本記事では、ここ数年の密な3次元ポーズの推定に使用されるSMPLと呼ばれる3Dメッシュ表現方法について簡単に触れたのち、VIBEの内容を見ていきます。なお、本論文はCVPR2020採択論文です。

# 書誌情報
- Kocabas, Muhammed, Nikos Athanasiou, and Michael J. Black. "VIBE: Video inference for human body pose and shape estimation." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.
- [公式実装（PyTorch）](https://github.com/mkocabas/VIBE)
- [プロジェクトページ](https://github.com/mkocabas/VIBE)

# SMPL
SMPL[^SMPL]は、Skinned Multi-Person Linear modelの略で、人間の自然なポーズにおける多種多様な体型を正確に表現することを目的とした、スキンメッシュモデルです。関節が曲がった時にメッシュが破綻しやすいという問題を解決することを重視した、軽量な表現とされています。

ざっくりとした理解で良ければ、体型パラメータ$\beta$とポーズパラメータ$\theta$を入力すると、$N=6890$個の頂点を持つ3次元メッシュが微分可能な形で得られるモデル、という認識で良いと思います。また、$N$個の頂点の重み付き和から、$P=23$個の関節位置を求めることができます。この重みも、SMPLに含まれています。

もう少しだけ細かく見ると、以下のような流れで人物の3次元形状が表現されるようです。

- テンプレートとなる頂点集合$\overline{\mathbf{T}} \in \mathbb{R}^{3\times6890}$を体型パラメータ$\beta$によって更新する。
- 体型を反映したテンプレートの頂点の重み付け和によって、テンプレートにおける関節の位置を算出する。
- ポーズパラメータ$\theta$から、ポーズを反映させた時にテンプレートの関節位置がどこに移動するかを算出する。
    - ポーズパラメータは、事前に定義された関節の関係を木構造で表したKinematicTree内を元に、親関節に対する子関節の回転を表したもの。rootの回転と23個の関節ごとの相対的な回転の$\mathbb{R}^{3 + 23 \times 3}$という72次元のパラメータとなっている。
- ポーズパラメータ$\theta$によって、テンプレートの頂点位置を修正する。雰囲気的には、あるポーズを取ったら肉がこういう風にたわむから、それをあらかじめ考慮してテンプレートに反映させておこう、という感じ。
- 各関節を動かすと各頂点はどれくらい動く、という関係を表す重み$\mathcal{W}$と、上記で求めた回転操作によって得られた各頂点の位置の重み付け和によって、最終的な各頂点の位置が決定される。

なお、[SMPLの公式ページ](https://smpl.is.tue.mpg.de/)ではSMPLの後継となる表現方法であるSTAR[^STAR]が紹介されています（公開は2020年8月23日）。必要なパラメータ数が20%に減っていながら、SMPLよりも優れた一般化が得られているとこのことです。[PyTorchやTensorFlow2向けの実装](https://github.com/ahmedosman/STAR)もすでに公開されています。今後のスタンダードになるかもしれません。

[^SMPL]: Matthew Loper, Naureen Mahmood, Javier Romero, Gerard Pons-Moll, and Michael J. Black. SMPL: A skinned multiperson linear model. In ACM Trans. Graphics (Proc. SIGGRAPH Asia), 2015.

[^STAR]: Osman, Ahmed AA, Timo Bolkart, and Michael J. Black. "STAR: Sparse Trained Articulated Human Body Regressor." arXiv preprint arXiv:2008.08535 (2020).

# VIBE
以下にVIBEのアーキテクチャを示します。VIBEへの入力は、特定の人物を中心に置いた複数枚のフレームからなる動画です。特定の人物を中心におくために、前処理が必要になることもあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/cbedd79c-475e-f396-f392-f6b3cdbac15f.png)

## Generator
まず、動画中の$T$枚のフレームをもとに、それぞれのフレームにおけるSMPLパラメータを推定するGeneratorについて見ていきます。

各フレームは、それぞれCNNによって画像特徴量に変換されます。このCNNは、静止画を対象としたSMPL推定モデルであるSPIN[^SPIN]のpretrainedモデルにおけるCNNを使用し、パラメータは固定されています。モデルの訓練の際には、事前に画像特徴量を抽出しておき、訓練時間を短縮することができます。

[^SPIN]: Nikos Kolotouros, Georgios Pavlakos, Michael J. Black, and Kostas Daniilidis. Learning to reconstruct 3D human pose and shape via model-fitting in the loop. In International Conference on Computer Vision, 2019.

$T$個の画像特徴量はそのままでもSMPLパラメータを推定するのに有用な特徴量ですが、VIBEでは時間性を考慮することによって、これらをより良い特徴量に補正している、と解釈することができます。画像特徴量は2層のGRUと2層のMLPを通し、スキップ接続によって元の画像特徴量と足し合わされることで補正されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/205efaff-e589-a2f0-4d89-dd8218ea0bb1.png)

最後に、Rと表記されている回帰モデルによって、SMPLのポーズパラメータ$\theta\in\mathbb{R}^{72}$と体型パラメータ$\beta\in\mathbb{R}^{10}$、およびカメラパラメータ$s \in \mathbb{R}, \mathbf{t} \in \mathbb{R}^2$が推定されます。全体としては、各フレームごとに$85$次元の出力となります。この回帰モデルは、特徴量と85次元のパラメータを入力すると、パラメータの補正値を出力する、というモデルになっています。このモデルは３回程度繰り返し適用されることで、最終的な推定結果が得られます。

各フレームのSMPLパラメータを元に、動画に対するSMPLパラメータ$\hat{\mathbf{\Theta}} = [（\hat{\theta}_1, ..., \hat{\theta}_T）, \hat{\beta}]$ を得ることができます。動画中に写っている人物は同一人物であるため、体型パラメータは全フレームで一定という前提をおくことができるため、体型パラメータ$\hat{\beta}$は各フレーム推定結果の平均が使われています。

## 損失関数
データセットによっては、SMPLパラメータそのものがアノテーションされているために、直接損失に使用することができます。

```math
L_{S M P L}=\|\beta-\hat{\beta}\|_{2}+\sum_{t=1}^{T}\left\|\theta_{t}-\hat{\theta}_{t}\right\|_{2}
```

しかし、多くの人のポーズに関するデータセットでは、関節レベルの平面的な位置しかアノテーションされていません。そのため、本手法はもちろん、ベースとなっているSPINなどの手法でも、推定されたSMPLパラメータを元に得られるメッシュ表現とカメラパラメータから2次元の関節位置を求め、真の2次元位置との比較を行い、損失を計算します。

SMPLを使用すると、3次元的な関節位置は以下のように算出されます。$\mathcal{M}, W$はいずれもSMPLそのもので事前に学習されているモデルです。$\mathcal{M}(\theta, \beta)$によって3次元メッシュが得られ、$W$によってそれらの重み付け和としての各関節の位置が算出されるという流れです。

```math
\hat{X}(\Theta)=W \mathcal{M}(\theta, \beta)
```

SMPLによるアノテーションが付けられているデータセットであれば、この3次元的な関節位置に対する損失も計算できます。

```math
L_{3 D}=\sum_{t=1}^{T}\left\|X_{t}-\hat{X}_{t}\right\|_{2}
```

3次元的な関節の位置を画像中の位置と比較するためには、SMPLパラメータと同時に推定されたカメラパラメータ$s \in \mathbb{R}, \mathbf{t} \in \mathbb{R}^2$を用いて3次元点を２次元平面上の点$\hat{x}$に投影する必要があります。正投影$\Pi$とカメラの回転$R$は固定値が使われ、以下のように算出されます。

```math
\hat{x} \in \mathbb{R}^{j \times 2}=s \Pi(R \hat{X}(\Theta))+t
```

このように推定された関節の２次元位置に対して、以下のように損失がかけられます。

```math
L_{2 D}=\sum_{t=1}^{T}\left\|x_{t}-\hat{x}_{t}\right\|_{2}
```


## Discriminator
「関節の2次元位置は同じだが、3次元的な位置は異なる」という曖昧性のために、2次元における位置を使った損失関数では訓練がうまくいかないことがあります。そこで、静止画を対象とした既存の手法[^30]では、SMPLパラメータが不自然にならないような正則化の役割のためにDiscriminatorを導入しています。

[^30]: Angjoo Kanazawa, Michael J. Black, David W. Jacobs, and Jitendra Malik. End-to-end recovery of human shape and pose. In IEEE Conference on Computer Vision and Pattern Recognition, 2018

本手法では、そのDiscriminatorを時系列のSMPLパラメータ列に対して適用できるよう拡張し、動画に対するSMPLパラメータ$\hat{\mathbf{\Theta}} = [（\hat{\theta}_1, ..., \hat{\theta}_T）, \hat{\beta}]$を対象とした敵対的学習を構成しています。これによって、ここのフレームにおけるSMPLの推定が不自然にならないことに加え、時系列で見たときの不自然な動きも生じないように訓練することができるということが期待されます。

Discriminatorは、大規模なSMPL動画データセットであるAMASS[^AMASS]からサンプルした真のパラメータ$\mathbf{\Theta}_{\text{real}}$とGeneratorによって推定された偽のパラメータ$\hat{\mathbb{\Theta}}$を見抜けるように訓練されます。

Discriminatorは2層のGRUと全フレームの特徴量を集約する層、Linear層から成っています。全フレームの特徴量を集約する方法としては、いくつかの方法が提案されていますが、結論としては、Self-Attention機構による重み付け和が最も良い結果となっています。

[^AMASS]: Naureen Mahmood, Nima Ghorbani, Nikolaus F. Troje, Gerard Pons-Moll, and Michael J. Black. AMASS: Archive of motion capture as surface shapes. In International Conference on Computer Vision, 2019

また、論文中ではDiscriminator以外の正則化の方法として、MPoserが提案されています。MPoserは、VPoser[^VPoser]という手法のシーケンシャルなバージョンとして作られています。VPoserは、パラメータをVAEによって学習し、事前分布を活用した損失を適用できる手法で、MPoserはシーケンシャルなVAEに拡張したものです。こちらの方法でも正則化の効果は認められたそうですが、Discriminatorによる正則化の方が良い結果となった、と結論づけています。

[^VPoser]: Georgios Pavlakos, Vasileios Choutas, Nima Ghorbani, Timo Bolkart, Ahmed A. A. Osman, Dimitrios Tzionas, and Michael J. Black. Expressive body capture: 3D hands, face, and body from a single image. In IEEE Conference on Computer Vision and Pattern Recognition, 2019.

# 実験
最後に実験結果を簡単に確認しておきます。ここでは、3DPWの結果について見ていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/92394667-2ebd-88a3-eb7e-a945f57c0181.png)

3DPWは、IMUセンサーと手持ちカメラを使用してSMPLアノテーションが付与されたの動画データセットです。このデータセットには、いくつかの屋外および屋内でのアクティビティの60本のビデオ（Training: 24本、Test:24本、Validation:12本）が含まれています。

本手法は、既存の静止画・動画を対象とした手法と比較して、3DPWのTestデータに対して最も良いPA-MPJPEが得られています。

PA-MPJPEは、関節の2次元位置の二乗誤差が最小になるように重ね合わせた上でのユークリッド距離の平均で、点同士の対応が取れる場合の点群のレジストレーションなどで使用される評価指標です。VIBEは他の手法と比べて良い結果となっていることが確認できます。なお、(direct comp.)と書かれているのは、 (31, 56) と同様の動画データセットで学習したバージョンで、書かれていない方は3DPWの学習セットの追加データを用いて学習したケースを表しています。

また、MPJPE（関節のユークリッド距離）やPVE（頂点のユークリッド距離）も最良の結果となっています。

唯一Accell（関節の加速度）のみ、(31)の手法であるTemporal-HMRのほうが良い結果となっています。しかし、関節位置の正確さと動きの滑らかさの間にはトレードオフがあるということが確認されており、Temporal-HMRは、動きの滑らかさを重視しすぎている傾向があるそうです。

下図に示すように、Temporal-HMRでは動きの速い動画や極端なポーズの動画では精度が低下する傾向が確認できたそうです。上段はVIBE、下段がTemporal-HMRですが、確かにVIBEの方がぱっと見た感じでは良い結果になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/8893218c-7597-eeca-c308-a9660526ca59.png)

# まとめ
以上、簡単にですが動画中の人物のSMPL表現を推定する手法VIBEを紹介しました。

馴染みのない分野で、SMPLの元論文を読むのはだいぶ苦労しましたが、なんとかざっくり説明できる程度には理解できたかなあと思います。