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 を HkH_k^* とすると、基本的な loss は次のように書けます。

Lheatmap=kpHk(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 が相対的に小さく扱われ、小さい人では厳しく扱われます。

関連ページ

主なソース