Help us understand the problem. What is going on with this article?

論文まとめ:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

More than 1 year has passed since last update.

はじめに

今更ながらOpenPoseとして知られる以下の論文をまとめてみる。

論文:[1] Z. Cao, et. al. "Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields"
https://arxiv.org/abs/1611.08050

既にslideshareにもまとめがあがってる。
松尾研の大野氏:
https://www.slideshare.net/ShunsukeOno/realtime-multiperson-2d-pose-estimation-using-part-affinity-fields-78988208

概要

  • 下図のように2Dにおいて人の姿勢推定を行うモデル
  • 関節の位置を推定しつつ、PAFs(part affinity fields:後述)を用いてaffinityの推定を行う
  • ボトムアップ方式
  • リアルタイムな検出を行いつつ高い精度を達成した

openpose_img11.png
[1]figure 1より

アーキテクチャ

全体図

全体的なアーキテクチャは以下の図([1]のFigure 3より)

openpose_img_01.png

まず複数のstageに分かれている

各stageでは2つのbranchがあって、一方で関節位置 $S^t$ 、もう一方で骨格の向き $L^t$ を推定する。

Branch 1 (confidence map)

上側のBranch 1 では各関節位置 $S = (S_1, S_2, \cdots , S_J )$ の確信度マップを出力する。J は関節で、Jチャンネル存在する。

t stage目の出力は前のstageの出力 $S^{t-1}$ 、 $L^{t-1}$およびstage1への入力値 $F$ を複数回畳み込んだもの。

\begin{eqnarray}
S^t &=& \rho^t (F, S^{t-1} , L^{t-1}) , \forall t \ge 2, 
\end{eqnarray}

各 stageごとに目標値confidence mapとの2乗誤差で loss を求め、それを足し合わせる。

F^t_L = \sum^J_{c=1} \sum_p W(p) \cdot \parallel S^t_j(p) - S^*_j(p) \parallel_2^2 

confidence map の作り方

ここで問題は confidence map の目標値 $S^*$ をどうやって作るか。

画像中のk番目の人の関節jの confidence map の目標値を $S^*_{j,k}$ とする。

$x_{j,k} \in \mathbb{R}^2$ をk番目の人の関節jのground truthとする。

$p \in \mathbb{R}^2$ ピクセルの $S^*_{j,k}$ は

S^*_{j,k}(p) = exp \left( -\frac{\parallel p - x_{k,j} \parallel ^2_2}{\sigma ^2} \right)

とする。つまりground truthのピクセル $x_{k,j}$ を中心として分散σのgauss分布をかける感じ。

最終的な confidence map はk 人に渡って足し合わせる。この時、各人の最大値とする。

S^*_{j}(p) = \max_k S^*_{j,k} (p)

推論の段階では non-maximum supressionを使う。

Branch 2(Part Affinity Fields)

関節位置がわかっただけでは、骨格は作れない。画像中に複数の人がいる場合、どの右肩とどの右ひじを対応させるべきか定まらない。

そこでPart Affinity Fieldsという考え方を使う。例えばこの図

openpose_img12.png
[1]の図より

において関節 $x_{j_1, k}$ と $x_{j_2, k}$ がある。この両者を結びつけるものがPart Affinity Fields。それはこの図

openpose_img10.png
[1]figure 1より

のように関節と関節の間の領域をベクトル場にする。具体的には関節と関節の間をlimb $c$ としたときに part affinity vector field $L^*_{c,k}$ は

L^*_{c,k}(\bf{p}) = \begin{cases}
    v & if\:  \bf{p} \: \rm on \: limb \: c,k \\
    0 & otherwise
  \end{cases}

ここで $v$ は

v = \frac{(x_{j_2,k} - x_{j_1,k})}{\parallel x_{j_2,k} - x_{j_1,k} \parallel_2}

と関節 $x_{j_1,k}$ から関節 $x_{j_2,k}$ 方向への単位ベクトルとなる。

つまり対象のピクセル $\bf{p}$ が四肢(limb)の領域なら $v$ 、そうでないなら 0 とあする。

また四肢(limb)の領域かどうかは以下で定める。

0 \leq \bf{v} \cdot (p - x_{j_1, k}) \leq \rm and \: |\bf{v}_{\perp} \cdot (\bf{p} - x_{j_1, k}) | \leq \sigma_l

つまり、関節 $x_{j_1,k}$ と関節 $x_{j_2,k}$ の間にあって、垂直方向にσの範囲に入ってるものを $\bf{p}$ とする。

PAFsのground truthに関しては、confidence mapと違って全ての人にわたった平均で求める。

\bf L_{\rm c}^*  (\bf p \rm )  =  \frac{1}{n_c (\bf{p} \rm )} \sum_k \bf L_{ \rm c,k}^* \rm (\bf p \rm )

$n_c (\bf p \rm)$ は値が0とならない人。

推論する段階では、このPAFsのベクトル向きに沿って線積分すればいい。

つまり候補の関節位置が $\bf d_{\rm j_1} $ 、$\bf d_{\rm j_2} $ であったとして、予測されたPAFsを $\bf L_{\rm c}$ とすると

E = \int^{u=1}_{u=0} \bf{L}_{\rm c}\rm (\bf{p} \rm (u)) \cdot \frac{(\bf{d}_{\rm j_2} \rm - \bf{d}_{\rm j_1} \rm)}{\parallel \bf{d}_{\rm j_2} \rm - \bf{d}_{\rm j_1} \rm \parallel_2}du

$\bf p \rm (u)$ は

\bf{p} \rm (u) = (1-u)\bf{d \rm}_{\rm j_1}\rm + u \bf d \rm _{j_2}

多人数いるときの骨格の決定法

関節の候補を

\mathcal{D}_\mathcal{J} = \{ \bf{d}^{\rm m}_{\rm  j} \rm : for \: j \in \{ 1 \cdots J \}, \: m \in \{ 1 \cdots N_j \} \}

とする。 $\bf{d}^{\rm m}_{\rm j} \in \mathbb{R}^2$ は関節jのm番目候補。

2つの関節候補が接続するか否かは

z^{m, n}_{j_1, j_2} \in \{0,1 \}

で表す。

全ての関節候補の組み合わせは

\mathcal{Z} = \{ z^{m, n}_{j_1, j_2} \: : \: for \: j_1, j_2 \in \{ 1 \cdots J \}, m \in \{1 \cdots N_{j_1} \}, \: n \in \{1 \cdots N_{j_2} \} \}

とする。

limb $c$ に対する関節の組み合わせは以下のmaximum weight で求める。

\begin{eqnarray}
\max_{Z_c} &=& \max_{Z_c} \sum_{m \in \mathcal{D}_{j_1}} \sum_{n \in \mathcal{D}_{j_2}} E_{mn} \cdot z^{m, n}_{j_1, j_2} \\
s.t. && \forall m \in \mathcal{D}_{j_1}, \sum_{n \in \mathcal{D}_{j_2}} z^{m, n}_{j_1, j_2} \leq 1 \\
s.t. && \forall m \in \mathcal{D}_{j_2}, \sum_{n \in \mathcal{D}_{j_1}} z^{m, n}_{j_1, j_2} \leq 1 \\
\end{eqnarray}

実験と結果

以下2つのデータセットで実験を行なった。

  1. MPⅡ human multi-person dataset
  2. COCO 2016 keypoints challenge dataset

いずれにおいてもstate-of-the-artな手法を上回った。

MPⅡ human multi-person dataset を用いた結果

MPⅡのtest dataでmAP等を他のstate-of-the-artsな手法と比較した結果が以下。

openpose_img_21.png

他の手法を大きく上回っている。

次に ablation analysis。下図の左はPCKH-0.5でMAPを比較したもの。

PAFを用いた手法が従来のmidpointよりも優れている。

openpose_img_23.png

右側はstageの個数を変えてMAPを見たもの。stageが増えるに従って上昇している。

COCO dataを用いた学習結果

以下の図はCOCO 2016 keypoints challenge datasetのtest dataを用いた他の手法とのMAPの比較。

openpose_img_24.png

概ね勝ってるが、G-RMI(Towards Accurate Multi-person Pose Estimation in the Wild)に負けてる。

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

G-MRIは人をdetectionして領域を切り取り、それをrescaleして骨格推定に投げる手法。(下図参照)

openpose_img_30.png
[2]のFigure 1より

このような手法は人の領域がrescaleされて大きい情報として扱われるので、その点有利なのか?

演算時間の比較

書きかけ

masataka46
株式会社ウェブファーマー代表。 人工知能システムの開発、人工知能のコンサルティング、人工知能の本執筆など。 2006年に株式投資を始め、8年で資産を75倍にする。
http://web-farmer.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away