姿勢推定技術の変遷

#目的
姿勢推定技術の変遷を知る。
姿勢推定技術として何が使われているか知る。

#この記事のスコープ
姿勢推定は現在は3D姿勢の推定のフェーズに進んでいる模様だが、
この記事では2Dの姿勢推定をスコープとする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/3cba3e1c-5985-e09e-a437-2d27236b1761.png)

3Dはこんな感じらしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/6008f7a8-2fb9-9a19-d701-bf230416b5eb.png)
 [3D](https://ai-scholar.tech/articles/treatise/3dpw-ai-347)

#2つの姿勢推定手法
姿勢推定の手法には①Top Downの方式と②Bottom Upの方式がある。

①Top Down方式
対象物（人）を検出した後に、対象物ごとの座標点を推論する手法。

②Bottom Up方式
最初に人の検知を行うのではなく、関節点を推定した後にグループ化して人物を構成する手法。


#姿勢推定に登場する評価手法
###①Percent of Correct Parts(PCP)
正解の長さに何％同じであれあば正解とみなすか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/1358b3a5-20de-41c9-51cc-85215f5b1ee0.png)
 [参考](https://www.slideshare.net/mitmul/deeppose-human-pose-estimation-via-deep-neural-networks)

###②Object Keypoint Similarity(OKS)
アノテーションされている関節点について推定座標と正解座標の類似度の平均を表す。
OKS＝1だと完全一致。IoUみたいなもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/8d930dfa-ecf7-81bf-acd8-69ab69e3065d.png)

di*は関節点iの推定座標と正解座標の距離
s*は人物のサイズ（COCOではアノテーションされている人物領域の面積を用いる
ki*は関節点の種類毎に設定される定数（推定が難しい関節点ほど大きい値を設定する）
vi*は関節点がアノテーションされているかどうかを表す

#DNNを初めて使った方法：DeepPose
[論文](https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Toshev_DeepPose_Human_Pose_2014_CVPR_paper.pdf)
2014年 CVPR Google
Top Downの手法
[こちらの資料が詳しいのでこちらを参照](https://www.slideshare.net/mitmul/deeppose-human-pose-estimation-via-deep-neural-networks)

↓はほぼメモ書き
考え方
決まった画像サイズN(x)における各関節の座標を求めたい　
→ ２k次元（ｋ：関節数　2:ｘ,y座標）の連続ベクトルを求めたい
座標は回帰関数により求める
回帰関数（ψ）をDNNで近似する
→DNNを学習したい
求めた座標は元の画像の座標に最終変換する
	![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/6c76bcbc-8981-d6bb-0bb0-a1953fec0275.png)

1stageだと精度が低いのでより精度を上げるようにstageを増やしている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/97427966-d34c-714a-11dd-be896314d8b3.png)
		
#小さく映った人にも対応した手法：HRNet
 [論文](https://arxiv.org/pdf/1902.09212.pdf)
Bottom Upの手法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/9085a37a-a7dc-be01-0bf8-4a348a0f048b.png)
		
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/cf4311d5-4c39-9c8f-a39e-c574628ee65e.png)

2020年に改良版のHigher HRNetが発表されている。
HRNetが1/4の解像度を保持したのに対し、HigherHRNetでは1/2の解像度を保持できる。
 [論文](https://arxiv.org/pdf/1908.10357.pdf)

#交差/重なった姿勢の推定：Clip Tracking Network
[Combining detection and tracking for human pose estimation in videos](https://arxiv.org/pdf/2003.13743.pdf)
Amazonが2020年に発表した手法。

問題意識：人が重なった時に、どちらの人のキーポイントの割り当てが難しい。
対策：前後のフレームの姿勢推定結果を使って現フレームの姿勢推定を行うことにより重なりや交差に対応する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/a1f030b6-da48-acac-9b24-ebe1eb07a549.png)

①あるFrame中の各バウンディングボックスに対してTube　Tβを作る
前後のフレームで切り出すバウンディングボックス位置は同じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/5bc835bb-df50-1479-7fdb-94d966b1e63f.png)

②HRNetに入れ各フレームの姿勢推定を行い、そこから切り抜いたタイミング(t)の姿勢を推定する
Pは2k次元のベクトル。βpでどのバウンディングボックスか。tがどの時間か。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/7d32b985-f1ad-5864-56db-2a129692a8f7.png)
	
	
○ 学習時ロス
平均二乗誤差
Kは関節分。I,jは幅と高さ分。
＝１枚の画像中の誤差をK枚の関節分のHeatMapに対して行う
	
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/73cf30d8-9aab-00ed-ea96-7f853f4db162.png)

これを全クリップに対して行う
クリップ：どのタイミングのフレームを抜き出すか
	![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/96161942-53fc-9392-644f-bf9e71a1ac22.png)
	
	
③前後フレームの姿勢推定のマージ作業。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/961b7de9-139f-caba-efeb-5c696a3a84b3.png)

ハンガリアンアルゴリズムで同一人物のキーポイントの割り当てを行う。
前後のフレームでオーバーラップしているキーポイントに対して類似度を取る。

OKSによるSimilarityをとる。
Pβ3-6：t=6時点での3つ目バウンディングボックスの姿勢推定結果を意味する。
OKSは類似度が1に近いほど一致している＝同じ人である
以下の例ではt=2のボックス2の姿勢推定結果とt=6のボックス3の姿勢推定結果が似ているため、t=2→t=6 でAさんの位置が変わっていることが分かる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/2bd2aeac-1771-0445-85f9-47439a9c9676.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/bd37dbc3-8f13-5abf-ad2b-1555cf595295.png)



④人の重なりに対する対処
以下は理解不十分な箇所
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/4c591078-3b01-9bb4-0259-5138e8713bef.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/5b5079e1-baa1-e525-726e-f6d7a9e11d84.png)

関節の最適な位置は、複数の候補の間で空間的にも、時間的（フレーム間）にも一貫性があると仮定して対応している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/dcdc0103-e7e9-7903-6097-8c9a13624883.png)

空間的（１フレームの中で仮定した座標と推測座標の差分）にも時間的（関節の中心位置が連続フレームで最小）にも誤差が小さくなるように割り当てる？
各フレームで右くるぶしの位置が遠くなったり近くなったりしないようにする。常に最短距離になるように割り当てている？
？