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

# はじめに

今回は、2020年に採択された最新論文の中から、2D姿勢推定モデルに関する論文『[**DARK**](https://arxiv.org/abs/1910.06278)』を紹介します。

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

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

<img width="100%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/02ca577f-4dd3-a996-4adf-84016a0fb28e.png">

<font color="#999999">ヒートマップ例：Stacked Hourglass Networks for Human Pose Estimationより[^0]</font>

# 本論文の3つの要点

:white_check_mark: *COCOデータセットに対して* **SOTA[^1] ( AP: 77.4 )** *を達成！*

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

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

# 提案手法

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

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

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


## ①エンコード（圧縮）

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/672ae7c9-1c08-9512-0b23-ecf66b1447da.png)



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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/d0a98a0c-9f3c-f325-87b3-6ca77ee02c9e.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/79220bdf-1571-268a-7d09-ef6f6b5d0bf3.png)

## ②デコード（復元）

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

### 従来のデコード方法

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

```math
\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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/737536d8-3fde-242d-0b75-e4fffd189d0d.png)


#### （a）ヒートマップ補正

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

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

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

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

<img width="80%"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/78c2990a-44bb-71ad-e9a3-c456ef73fe77.png">

#### （b）分布を意識した解の探索

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

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

```math
\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$ を導き出すことができます。（詳しくは、二次近似のテイラー展開を使って解きます。）

```math
\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）オリジナル画像解像度への復元

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/e19524ce-9aeb-4833-37f6-f6d99b0a7f41.png)

# まとめ

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

DARKは、色んな姿勢推定モデルに組み込むことができるので、今、使っているモデルに組み込むのも良いと思います！興味があれば、ぜひ [論文](https://arxiv.org/abs/1910.06278)と[GitHub](https://github.com/ilovepose/DarkPose) をチェックしてみてください。



# おわりに

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

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

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

[^0]: [Stacked Hourglass Networks for Human Pose Estimation](https://arxiv.org/abs/1603.06937)
[^1]: State of the art: 世界最高水準