Skip to main content

Human Pose Estimation

Human Pose Estimation は、image や video から人間の関節位置を推定する task です。2D keypoint、3D keypoint、body mesh、pose parameter など、出力形式は複数あります。

2D Human Pose​

2D human pose estimation は、image plane 上の keypoint を推定します。例えば COCO では、nose、eye、shoulder、elbow、wrist、hip、knee、ankle などの keypoint が定義されています。

代表的な approach は二つです。

Approach説明
Top-downまず person detector で人物 box を出し、各 box 内で pose を推定します。高精度ですが detector に依存します。
Bottom-up画像全体で keypoint を検出し、後から人物 instance に grouping します。多数人で高速になりやすいです。

Heatmap と regression​

Keypoint を推定する方法には、heatmap-based と regression-based があります。

  • Heatmap-based は、各 keypoint の確率 map を出します。精度が高いですが、解像度や post-processing に依存します。
  • Regression-based は、keypoint 座標を直接出します。軽量ですが、fine localization が難しい場合があります。

3D Human Pose​

3D human pose は、関節の 3D 座標を推定します。方法は大きく二つです。

  1. 2D keypoint を推定し、それを 3D に lift する。
  2. Image / video から直接 3D pose を推定する。

単眼 3D pose では、depth ambiguity が問題になります。そのため、temporal consistency、body kinematic prior、motion prior、multi-view data が重要です。

代表的 dataset と metric​

Dataset用途
COCO Keypoints2D human pose
MPII Human Pose2D human pose
Human3.6M3D human pose
MPI-INF-3DHP3D human pose

Metric には、PCK、OKS-based AP、MPJPE、PA-MPJPE などがあります。

数式で見る heatmap regression と OKS​

2D human pose estimation では、各関節 kk の heatmap HkH_k を予測することが多いです。Ground truth heatmap を Hk∗H_k^* とすると、基本的な loss は次のように書けます。

Lheatmap=∑k∑p∥Hk(p)−Hk∗(p)∥2\mathcal{L}_{\mathrm{heatmap}}=\sum_k\sum_{\mathbf{p}} \left\|H_k(\mathbf{p})-H_k^*(\mathbf{p})\right\|^2

この式の気持ちは、「関節位置そのものを一点で回帰するのではなく、画像上のどこに関節がありそうかという確率的な山を合わせる」というものです。

COCO keypoint evaluation では、Object Keypoint Similarity(OKS)が使われます。

OKS=∑iexp⁡(−di2/(2s2κi2))δ(vi>0)∑iδ(vi>0)\mathrm{OKS}=\frac{\sum_i \exp\left(-d_i^2/(2s^2\kappa_i^2)\right)\delta(v_i>0)} {\sum_i \delta(v_i>0)}

ここで、did_i は予測 keypoint と正解 keypoint の距離、ss は object scale、κi\kappa_i は keypoint ごとの許容誤差、viv_i は visibility です。大きい人では同じ pixel error が相対的に小さく扱われ、小さい人では厳しく扱われます。

関連ページ​

主なソース​