LoginSignup
6
4

More than 3 years have passed since last update.

論文まとめ:PersonLab: Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model

Posted at

はじめに

ECCV 2018 から以下の論文のまとめ
G. Papandreou, et. al, "PersonLab: Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model"

モデルのアーキテクチャやdecoder部分のみまとめる。

arXiv:
https://arxiv.org/abs/1803.08225

github:
github上には既にいくつかコードがあり、例えば以下のKeras実装
https://github.com/octiapp/KerasPersonLab
は星が多い。

概要

  1. ボトム・アップ方式で同時に多人数に対し pose estimation を行うモデル
  2. keypoint の検出と同時に人のインスタンス・セグメンテーションを行い、これらを統合してインスタンス・セグメンテーションまで行う
  3. COCO dataset で既存のボトム・アップ手法を上回る精度を達成した

手法の全体像

以下の図が全体像

personLab_img00.png

解説にあるように、左の入力画像に対してCNNで以下の5種類を出力する。
1. 各 keypoint の位置を推定する heatmap
2. 上記推定位置の short-range な offset
3. 同上推定位置の middle-range な offset (四肢の形成に用いる)
4. 人のセグメンテーションマスク
5. keypoint 推定位置の long-range な offset

図中、上側に着目すると、最初の3つの出力により各人の姿勢を推定する。

図中下側で、この姿勢と出力4番目、5番目から人のインスタンスレベルのセグメンテーションを行う。

各人の姿勢推定

1. keypoint を検出する

ここは基本的に文献[2]の手法と同じ。

まず各種定義

$x_i$ :画像上の $i = 1 , \ldots , N$ ピクセルにおける位置。

\mathcal{D}_R(y) = \{ x: \| x-y \| \leq R \

は $y$ を中心とし、半径 $R$ の円内。

$y_{j,k}$ :$j$ 番目の人の $k$ 番目の keypoint。

CNNからの1番目の出力である heatmap $p_k (x)$ では、ピクセル $x$ が $x \in \mathcal{D}_R(y_{j,k})$ なら1、それ以外は0を推定する。$R$ は定数 32 pixel を使用。

CNNからの2番目の出力である short-range offset $S_k(x)$ では、近傍の keypoint の位置をベクトルで指し示す。つまり

S_k(x) = y_{j,k} - x

近傍の範囲はやはり $R = 32$。

heatmap $p_k (x)$ と short-range offset $S_k(x)$ から hough-voting で詳細なkeypoint の位置を求める。

h_k(x) = \frac{1}{\pi R^2} \sum_{i=1:N} p_k(x_i) B (x_i + S_k(x_i) - x)

$B(\cdot)$ は bilinear kernel。$x_i + S_k(x_i) = y_{j,k}$ は $x_i$ が推定するkeypointの位置なので、$x_i + S_k(x_i) - x$ は $x$ から $x_i$ のkeypoint推定位置へのベクトル。これに対して bilinear kearnelをかける。

それに対して $p_k(x_i)$ をかけるので、おおよそkeypointの半径 $R = 32$ ピクセルだけ集計することになる。

集計したものを面積 $\pi R^2$ で割って規格化。

ということで、ざっくり言うと、heatmapの推定したkeypoint周辺領域に関してshort-range offsetの指し示すkeypointの位置を集計することで正確な位置を推定する感じ。

personLab_img20.png

2.keypoint を関連づけて骨格にする

ここでは出力に3番目 middle-range な offset $M_{k,l}(x)$ を用いる。ここで $k,l$ は keypoint $k$ から keypoint $l$ への四肢という意味。具体的には

M_{k,l}(x) = (y_{j,l} - x)I \left( x \in \mathcal{D}_R (y_{j,k})\right)

のように、$j$ 人目の keypoint $k$ の半径 $R$ 内のピクセルに対し、それと関連する keypoint $l$ の位置をベクトル $y_{j,l} - x$ で表す。

更に、以下の図

personLab_img01.png

のように、出力2番目 short-range な offset を利用して keypoint $l$ の位置精度を上げる。

具体的には

M_{k.l}(x) \leftarrow x' + S_l (x'), \ where \ x' = M_{k,l}(x)

とする。つまり、$x$ 位置の指し示す対応する keypoint 位置である $M_{k,l}$ ピクセルに注目し、このピクセルの short-range offset として指し示す keypoint 位置 $S_l (x')$ で更新することで、更に精度の高い位置を得る。この作業を2周繰り返す。

書きかけ

reference

[2] G. Papandreou, et. al. "Towards Accurate Multi-person Pose Estimation in the Wild"

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4