Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
31
Help us understand the problem. What is going on with this article?
@KYoshiyama

最新の姿勢推定モデル「DarkPose」を解説してみた【CVPR2020】

はじめに

今回は、2020年に採択された最新論文の中から、2D姿勢推定モデルに関する論文『DARK』を紹介します。

姿勢推定モデルにおいて、ヒートマップは座標表現のスタンダードになっていますが、これまで体系的に研究されたことがありませんでした。

今回ご紹介する論文は、そのヒートマップについて体系的に研究し、その上で、新しい座標表現を提案した論文です。

ヒートマップ例:Stacked Hourglass Networks for Human Pose Estimationより1

本論文の3つの要点

:white_check_mark: COCOデータセットに対して SOTA2 ( AP: 77.4 ) を達成!

:white_check_mark: ヒートマップの エンコード手法 をアップデート!

:white_check_mark: ヒートマップの デコード手法 をアップデート!

提案手法

クラス分類器を学習する際は、One-hotベクトルを使うことが一般的ですが、姿勢推定のようなCNNモデルでは、ヒートマップを使うことが一般的です。

しかし、ヒートマップによる表現方法は入力画像の解像度の二乗で計算コストが膨らむという欠点があるため、モデルに通す前に画像を圧縮する必要があります。また、同じ理由で、出力画像の解像度も小さいため、出力画像をオリジナル画像の大きさまで復元する必要があります。

この圧縮(エンコード)復元(デコード)それぞれについて、詳細に見ていったのが本論文です。

①エンコード(圧縮)

まずは、関節点をヒートマップに変換する部分についてです。従来のヒートマップ作成方法から説明します。

従来のヒートマップ作成方法

通常は、floor関数(小数点以下を切り捨てる関数)を使って、ダウンサンプリングした座標(下図の青点紫点)に丸め込み、その座標を中心とした正規分布を作ることでヒートマップを作成します。ご覧いただいて分かる通り、この方法では正確なヒートマップが作れません。

image.png

新しいヒートマップの作成方法

一方、提案手法では、もとの座標を中心に正規分布を作成します。これにより、より精緻なヒートマップを作成することを可能にしています。

image.png

実際の精度も明らかに良くなっています。(Unbiasedが提案手法)↓

image.png

②デコード(復元)

次は、出力されたヒートマップから、(元画像での)関節点位置を探すプロセスについて説明します。
エンコード部分は比較的簡単でしたが、デコード部分は少し複雑です。

従来のデコード方法

まず、従来のデコード方法について説明します。現在主流のデコード方法は、ヒートマップの最大値のみを使うものや、全体の重み付き平均を取るものなどがあります。

\bf p = \rm \frac{ \sum_{\it i \rm = 1}^{\it N} \it w_i \bf x_{\rm \it i}}{ \sum_{\it i \rm = 1}^{\it N} \it w_i}

$\bf x$ はヒートマップのピクセル位置、$\it w$ はヒートマップの値。

新しいデコード方法

一方、今回の提案手法では、下図の通り、3ステップで改善策を提案しています。

image.png

(a)ヒートマップ補正

出力されたヒートマップは、最大値付近の形状がギザギザしていることが多く、後段処理を上手く機能させるために、事前にガウシアンフィルターを使って補正しておきます。

\bf h' = \rm \it K \circledast \bf h

$\circledast$ は、畳み込み操作(ガウシアンフィルター)。

下図は、補正前(左)と補正後(右)のヒートマップです。ギザギザがなくなっていることが分かります。

(b)分布を意識した解の探索

次に、(a)で補正したヒートマップから関節点の位置を探索します。

まず大前提として、推定されたヒートマップは、学習用データと同様に「2次元の正規分布である」という仮定をおきます。

\mathcal{G}(\bf x \rm; \bf \mu \rm , \Sigma) = \frac{1}{(2 \pi)|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(\bf x \rm - \bf \mu\rm)^{T} \Sigma^{-1}(\bf x \rm - \bf \mu \rm)\right)

$\bf x$ はヒートマップのピクセル位置、$\bf \mu$ は正規分布の中心座標(←求めたい座標)、$\rm \Sigma$ は共分散行列。

この仮定をおいた上で、「正規分布の最大値で傾きを取ると傾きはゼロである」という条件を加えることで、関節点の座標 $\bf \mu$ を導き出すことができます。(詳しくは、二次近似のテイラー展開を使って解きます。)

\bf \mu = m - \left( \mathcal{D^{\prime \prime}\rm (\bf m \rm )} \rm \right) ^{-1} \mathcal{D^{\prime}\rm (\bf m \rm )}

$\bf m$ は、最大値のピクセル位置。

(c)オリジナル画像解像度への復元

最後に、推定した関節座標を元画像の大きさに戻すために、定数倍します。(この部分は、従来手法と変わりません。)

\hat{\bf p} = \rm{\lambda} \, \bf p

以上の3ステップによって、精度向上に成功しています。↓

image.png

まとめ

2020年の最新論文の中から、2D姿勢推定モデル 『DARK』 について、解説しました。

DARKは、色んな姿勢推定モデルに組み込むことができるので、今、使っているモデルに組み込むのも良いと思います!興味があれば、ぜひ 論文GitHub をチェックしてみてください。

おわりに

ヒトやモノをデータ化&解析してみたい、という方。
3D技術と深層学習を組み合わせて、何か面白いサービスを作ってみたい!、という方。

弊社では一緒に働いてくれる仲間を大募集しています。

ご興味がある方は下記リンクから是非ご応募ください!
https://www.wantedly.com/companies/sapeet


  1. Stacked Hourglass Networks for Human Pose Estimation 

  2. State of the art: 世界最高水準 

31
Help us understand the problem. What is going on with this article?
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
KYoshiyama
洋服大好きな、Sapeetの3DCG&機械学習エンジニアです/趣味:洋裁、ピアノ、ストリートダンス/大分出身/まったり温泉入りたい

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
31
Help us understand the problem. What is going on with this article?