論文まとめ：3D Human Pose Estimation with Spatio-Temporal Criss-cross Attention

# はじめに

CVPR2023より以下の論文のまとめ
[1] Z. Tang, et. al. "3D Human Pose Estimation with Spatio-Temporal Criss-cross Attention*" CVPR2023

- CVF open access
https://openaccess.thecvf.com/content/CVPR2023/html/Tang_3D_Human_Pose_Estimation_With_Spatio-Temporal_Criss-Cross_Attention_CVPR_2023_paper.html

- Githubコード
https://github.com/zhenhuat/STCFormer

# 概要
1. 2D骨格を3D骨格へliftingする系のモデル。ビデオから取得した2D骨格のようにsequentialな骨格を入力とする
1. ニューラルネットのアーキテクチャとしてはtransformerを用いる系
1. 既存のtransformerを用いるliftingモデルの場合、時空間を同時に処理するか、空間で処理した後に時間で処理するが、いずれも計算コストが高い
1. その代わりに本モデル（STCFormer）では時間と空間を別系統transformし、後に統合する手法をとる
1. その結果、主要なデータセットでSOTAを達成した。また直近のSOTAモデルより計算コストが大幅に低くなった

以下で(a)は時空間でtransformする手法。時間方向と空間方向を加味するとtoken（骨格）は多数にのぼるため計算コストが非常に高い。(b)は空間方向にtransformしてから時間方向にtransformする手法。既存のSOTA手法はこれ。(c)は本モデル：STCFormerで、時間方向のtransformと空間方向のtransformを分けて処理する。


![スクリーンショット 2023-08-09 18.05.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/915a3682-746b-f8cf-b571-e98faee357b4.png)


# ネットワークのアーキテクチャ
以下がネットワークのアーキテクチャ。

![スクリーンショット 2023-08-13 4.42.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/5ac80041-5f15-f674-2aeb-f18c58885c83.png)

## 全体像
上図左側が全体像。

1. 下から入力となるビデオ、それを 2D-poseモデルでembedする。

2. それにTransformer的な STC block x L層を作用させる。具体的には一般的なtransformerと同様、Layer Norm -> attention -> Layer Norm -> MLPを行う。

その出力を3D poseとし、回帰問題として解く。

## STC block
下から（入力側から）見ていく。

### Q, K, Vの生成

<img alt="スクリーンショット 2023-08-13 7.42.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/5790cbee-79e3-5198-49ea-0e91816d1b28.png">

入力 X（2D poseなど）に対しLayer Normをかまし、FCで行列演算してquery, key, valueを生成する。

```math
{\bf Q},{\bf K},{\bf V} = FC(LN({\bf X}))
```

### 時間グループと空間グループとに分ける

<img width="400" alt="スクリーンショット 2023-08-13 5.10.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/95096288-6773-61cf-3c62-6046b15799c6.png">

この論文の特色である時空間 criss-crossな処理を行うため、時間グループと空間グループに分ける。

具体的には Q, K, Vのそれぞれをチャンネル方向でsplitして分ける。

### self-attentionな処理

<img width="400" alt="スクリーンショット 2023-08-13 5.13.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/7a0facc3-3ec0-64bc-148c-ae6f1df6470b.png">

時間グループに関しては時間方向にself-attentionを行い、空間グループに関しては空間方向にself-attentionを行う。

例えば時間グループなら

```math
MSA({\bf Q}_T,{\bf K}_T,{\bf V}_T) = Softmax \left( \frac{{\bf Q}_T \cdot {\bf K}^{\top}_T}{\sqrt{C}} \right) \cdot {\bf V}_T
```

### SPEモジュール
ここの部分。骨格に関する事前知識を活かす。

<img width="400" alt="スクリーンショット 2023-08-13 8.01.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/1ee7d204-17e0-208e-1f75-49ff13bd5911.png">

transformerは任意の間接と間接との関係性を考慮するが、一方で近い間接同士はより関係しているはずだ。具体的には以下のように体の５つのパートは相関が強いはずなので、ここを時間と空間で畳み込んでenbedする。

![スクリーンショット 2023-08-13 7.59.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/de53c009-915a-1c3c-e94b-a6decaa0644e.png)

### 時間グループと空間グループとをconcat

<img width="400" alt="スクリーンショット 2023-08-13 8.06.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/706f505e-b2f8-60a8-634d-17b7057aeaa7.png">

時間グループ、空間グループそれぞれをconcatし、１つにまとめる。

```math
{\bf H} = concat( MSA_T ({\bf Q}_T,{\bf K}_T,{\bf V}_T) , MSA_S ({\bf Q}_S,{\bf K}_S,{\bf V}_S))
```

### Layer NormとMLP

<img width="400" alt="スクリーンショット 2023-08-13 8.14.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/6831fb9b-7a6e-15ec-aac5-9d8fc906fb38.png">

入力とattentionしたものとを足し、Layer Norm, MLPを行う。

```math
\begin{eqnarray}

{\bf Y} &=& {\bf H} + {\bf X} \\
{\bf Z} &=& MLP(LN({\bf Y} )) + {\bf Y} 

\end{eqnarray}
```

# Loss
lossは推定した各間接の3次元位置とそのtargetとでMSEを計算する。

```math
\mathcal{L} = \| \hat{\bf P}_{3D} - {\bf P}_{3D} \|^2
```


# 実験と結果
## device, DLのframework
- deviceはGRX2080Tiを使用
- DLのframeworkはPyTorchを使用
- Adamでlr=0.001から始め、1epochごとに0.96かけし、20epoch学習

## STCFormerのアーキテクチャに関わる設定値
- モジュールは６つ
- hidden embedding channelはbaseが256、Learge modelが512
- transformerのheaderは8つ
- sequenceは81と243


## 用いたdatasetとメトリクス

### Human3.6M
- Protocol1・・・root jointを合わせた上でのMPJPE
- Protocol2・・・さらに角度も合わせた上での（？）MPJPE

### MPI-INF-3DHP
- MPJPE
- 150mmのPCK
- それらのAUC

## Human3.6Mを用いた定量的評価
以下、Human3.6Mを用いた場合の本モデル（STCFormer）と他の主要モデルとの比較で、入力の2D poseはCPNからの推論を用いたもの。上側がProtocol 1, 下側がProtocol 2。

直近のSOTAモデルであったMixSTEと比較しても同じsequence数では勝っている。さらにパラメータ数、推論速度も大きく勝っているらしい。

![スクリーンショット 2023-08-09 12.48.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/b7ea5656-b520-284c-4d56-d43f651ff0f9.png)

また以下は入力としてground truthを用いた場合。Protocol 1 で比較。こちらはpost-processingを用いなければMixSTEに負けている。

![スクリーンショット 2023-08-09 12.53.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/7ea04613-a9b4-23f1-d1fb-88bf36c061fc.png)

## MPI-INF-3DHPを用いた定量的評価

以下はMPI-INF-3DHPを用いた場合の本モデル（STCFormer）と他の主要モデルとの比較。

![スクリーンショット 2023-08-09 12.56.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/643bfa21-6f02-b0e7-1887-03e90919061a.png)

PCK, AUC, Protocol 1 いずれにおいても他のモデルよりよい。