最近の姿勢推定モデルを解説してみた（Cascaded Pyramid Network）

# はじめに

今回は、姿勢推定における一般的なアプローチの紹介と、最新論文を１つ紹介する。
紹介する論文は、Cascaded Pyramid Network for Multi-Person Pose Estimation[^0]。

（特に断りのない限り，本記事で使用する画像は、こちらの論文[^0]からの引用。）

# 姿勢推定の主なアプローチ
姿勢推定モデルには、大きく２つのアプローチがある。

- **ボトムアップ型**: 画像中のキーポイントを全て洗い出したあと、人物ごとにマッチングさせて繋ぎ合わせていくやり方。
- **トップダウン型**: まず人物を検知し、その後、それぞれの人物についてsingle person pose estimationを行うやり方。

## ボトムアップ型

ボトムアップ型は、最初にキーポイントを洗い出したあと、それらを繋ぎ合わせていくことで、姿勢を推定する。
トップダウン型の手法に比べると、計算量は抑えられるが、<font color="red">**画像全体のコンテキストを十分に考慮できていないため、部位間の繋ぎ合わせの精度が低い**</font> という欠点がある。

![Screenshot from 2019-04-16 14-10-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/f41cac3b-0e3f-4b9c-746c-3c9519ed7adf.png)
参照：DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation[^1]

## トップダウン型

①物体検知アルゴリズムで人物を検出
　↓
②それぞれの人物について、姿勢を推定

人数に比例して計算量も増加してしまうのが欠点だが、<font color="red">**各人に対して姿勢推定を行う（single person pose estimation）ので、精度高く推定できる**</font>。

![Screenshot from 2019-04-16 14-06-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/23b10e41-3ef2-ce59-8926-9534f11fd60e.png)
参照：Multi-Person Pose Estimation with Local Joint-to-Person Associations[^2]


### 両方に共通する課題

次のような状況のときは、ボトムアップ型・トップダウン型を問わず、推定が難しい。

- 物に隠れて見えないとき
- 背景と人が同化（例：白シャツに白い背景）しているとき

# 最新論文（Cascaded Pyramid Network）の紹介

今回は、Cascaded Pyramid Network（CPN） for Multi-Person Pose Estimation[^0]という論文を紹介する。

この論文では、**トップダウン型**のアプローチによる姿勢推定手法が提案されている。
トップダウン型なので、ステップは次の２段階：**人検出** ➔  **姿勢推定**

CPNのブレイクスルー： <font color="red">**キーポイントが隠れていたり、背景が紛らわしい場合でも、高い精度で推定が可能！**</font>

## 1. 人検出

人検出には、Feature Pyramid Network(FPN)**[^3]をベースにしたモデルを使っている。ただし、RoI Poolingの部分は、RoI Alignに変更されている。（※RoI PoolingよりRoI Alignのほうが優れている理由は、[**こちらの記事**](https://qiita.com/yu4u/items/5cbe9db166a5d72f9eb8)で解説。)

## 2. 姿勢推定

この論文では、Cascaded Pyramid Network(CPN)と呼ばれるネットワーク構造が提案されている。

CPNは、**GlobalNet**と**RefineNet**と呼ばれる２つのステージから成っている。
GlobalNetは、ResNet[^3] backboneをベースにしたFPN[^4]のようなU字型構造をしたネットワークで、"簡単明瞭(simple)"なキーポイントを探すことができる。一方、RefineNetは、GlobalNetで生成したそれぞれの階層の特徴量をアップサンプリングし、HyperNet[^5]のようにconcatenateすることで特徴量の情報を統合するネットワークで、見つけ難いキーポイントの推定を可能にしている。

![Screenshot from 2019-04-16 15-21-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/d6242d9b-847e-b9ff-a1d5-0ce28c9b5804.png)

下の画像では、顔や肩ははっきり見えているが、ヒップは映っていないため推定が難しい。
![Screenshot from 2019-04-16 15-30-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/d8d207ed-3826-3594-8edf-273430e7d607.png)



ヒップのように隠れたキーポイントを推定する場合、局所的な特徴量よりも、抽象度が高い意味情報(コンテキスト)が必要で、その役割を担うのがRefineNet。
RefineNetは、[Stacked hourglass](https://arxiv.org/abs/1603.06937)に似ているが、stacked hourglassのようにアップサンプリングされた最後の特徴量だけを使うのではなく、GlobalNetで生成された全ての層の特徴量を、concatenateして余すとこなく使っている点が異なる。

![Screenshot from 2019-04-16 15-21-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/1b17574d-2f42-2d76-8a63-fa6bdcfe11c9.png)

これらによって、以下の画像のように姿勢推定が可能になる。３枚目の右端の男性は、足が一部見えないが、おおよそ正しい位置を推定できている。
![Screenshot from 2019-04-16 22-24-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/a5b59228-dcb8-b8da-371d-d152ccce302c.png)

# まとめ

姿勢推定における一般的なアプローチ２種類の紹介と、最新論文を１つ紹介した。
最新論文では、隠れて推定しづらいキーポイントでも、精度高く推定できる手法を紹介した。

# おわりに

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

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

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

[^0]: [Cascaded Pyramid Network for Multi-Person Pose Estimation](https://arxiv.org/abs/1711.07319)
[^1]: [DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation](https://arxiv.org/abs/1511.06645)
[^2]: [Multi-Person Pose Estimation with Local Joint-to-Person Associations](https://arxiv.org/abs/1608.08526)
[^3]: [ResNet: Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385)
[^4]: [Feature Pyramid Networks for Object Detection](https://arxiv.org/abs/1612.03144)
[^5]: [HyperNet: Towards Accurate Region Proposal Generation and Joint Object Detection](https://arxiv.org/abs/1604.00600)