OpenPoseに代表される骨格推定AI、実環境で使えるのはこれだ！


# はじめに

こんにちは、(株) 日立製作所 [Lumada Data Science Lab.][5] の森田です。
Lumada Data Science Lab. では、映像解析技術・映像解析ソリューションの研究開発を行っています。
この記事では、街頭にある防犯カメラの映像に適用する際に重要となる「検知サイズ」の観点で、人物骨格推定OSSの評価を行います。
[5]: https://www.hitachi.co.jp/New/cnews/month/2020/03/0330d.html


# 0. 忙しい方へのまとめ
- 大型ショッピングモール、スタジアム、駅、空港などの防犯カメラは、広範囲を少ない台数で撮影したいので画角が広角になりがち
- 広角で撮影した画像は人物は小さく写るので、小さく写る人物の骨格を検出できることが重要
- 今回は骨格推定AIのOSSとして、openpifpafとtf-pose-estimationをピックアップし、最小検知可能サイズの指標で評価
- openpifpafの方が最小検知可能サイズが小さいことを確認


# 1. 防犯カメラ向け映像解析

駅・空港・商業施設などの社会インフラ施設では、施設利用者の安全・安心を担保するため、様々な場所に防犯カメラが設置されています。そして、社会インフラ施設に設置された大規模な防犯カメラシステムを有効活用するため、複数のカメラ映像について並行して注視し、大勢の施設利用者の中から不審者を見分ける、という監視業務が行われています。監視業務は、人の作業負荷が大きく、また、システム規模と監視時間に比例してコスト負担も大きくなります。
そこで、Lumada Data Science Lab. では、監視業務の省力化・自動化・監視漏れ低減を実現可能な映像解析ソリューションを提供することを目的に、不審者の発見・検知のための物体認識技術・属性推定技術・行動認識技術などについて研究開発しています。この記事では、防犯カメラに骨格推定を活用する際の評価指標を説明し、その評価指標を軸とした骨格推定OSSの比較評価結果について記載します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802177/e51a7e64-3267-afeb-22d9-e31c712feeec.png" width=100%> 


# 2. 防犯カメラ映像向け骨格推定の評価指標

社会インフラ施設向けの防犯カメラシステムでは、通常、広いエリアを出来るだけ死角なく撮影したいという要求と、カメラ本体や設置のコストは可能な範囲で低くしたいという要求のトレードオフがあります。トレードオフを解消するために、防犯カメラは、出来だけ広い範囲を撮影できる画角の設定となることが多いです。結果として、社会インフラ施設の防犯カメラの映像解析では、小さく映る人物を解析出来ることが重要となってきます。
カメラ映像を用いた骨格推定は、工場・工事現場の作業解析やスポーツ科学における運動・動作解析など、多分野で活用されていますが、それらの分野では、防犯カメラに比べると少人数を映す場合が多く、意図通りの位置へのカメラ設置やカメラの画角調整がしやすく、人物が小さく映る問題は生じにくいと考えられます。
そこで、本記事では、防犯カメラ向けの映像解析ならではの視点として、骨格推定可能な最小検知サイズを評価軸として、骨格推定の代表的な OSS をピックアップし、それぞれの最小検知サイズについて説明したいと思います。


# 3. 比較評価に用いた骨格推定OSS

骨格推定には、大別して、ボ トムアップ型とトップダウン型の 2 種類が存在します。  

- ボトムアップ型(Multi Person Pose Estimation; MPPE)  
  最初に画像全体からキーポイントを推定し，その後，各骨格位置の対応関係を解析して人物別に分離する手法。
  CNNによる推論が一回で済むため、計算コストが低いと考えられる。
- トップダウン型(Single Person Pose Estimation; SPPE)  
  画像中の人物の検知と検知された各人物の切り出しとリサイズの前処理を前提に、各人物の検知領域別に骨格推定を行い、キーポイントを推定する2段構成の手法

本記事の検討では、原理的に計算コストが低いボトムアップ型(MPPE)の骨格推定のOSSとして、openpifpafとtf-pose-estimation をピックアップしました。選定の理由は、operpifpafは低解像度な画像における骨格推定に強みがあると報告されていること、tf-pose-estimationは2017年にSoTAとして発表されたOpenPoseのtensorflow実装かつ、Apache License 2.0 となっていることです。OpenPoseは、caffeベースで実装されたOSSが公開されており高速推論が可能という利点がありますが、骨格推定の最小検知サイズについてはtf-pose-estimationと同等と考えれます。このため、今回の評価では、openpifpafとtf-pose-estimationの2手法を評価対象としました。
以下にそれぞれの手法の特徴を整理します。

<table>
<tr>
<td><b>OSS</b></td>
<td><b><a href="https://github.com/vita-epfl/openpifpaf"> openpifpaf </a><b></td>
<td><b><a href="https://github.com/ildoonet/tf-pose-estimation"> tf-pose-estimation </a></b></td>
<td><b><a href="https://github.com/CMU-Perceptual-Computing-Lab/openpose"> OpenPose </a></b><br> (本記事では評価対象外) </td>
</tr>
<tr>
<td> 各手法の論文誌による<br>ベンチマーク</td>
<td> 2019年時点の <br> SoTA</td>
<td> - </td>
<td>2017年時点の<br> SoTA</td>
</tr>
<tr>
<td> 特徴 </td>
<td> 低解像度の画像に対応 </td>
<td> OpenPose の<br> tensorflow版実装</td>
<td>高速な推論 </td>
</tr>
<tr>
<td> ライセンス</td>
<td> 商用有償、<br> 研究用途は AGPL v3 </td>
<td> 商用無償、<br>Apache License 2.0 </td>
<td>商用有償、<br>スポーツ分野以外の<br>非営利非商用はフリー</td>
</tr>
</table>


# 4. 骨格推定OSSの導入方法

openpifpafもtf-pose-estimationも、それぞれのgithubに記載の方法でインストールできましたが、簡単に記載しておこうと思います。

- openpifpaf  
  ソースコードに手を加えずに骨格推定するだけであれば、2行で済みます。  versionは、0.10.1を使用しました。

```py
  #インストール
  pip3 install openpifpaf==0.10.1
  #骨格推定
  python3 -m openpifpaf.predict 画像ファイルパス
```

- tf-pose-estimation  
  githubのインストール指示通りで導入出来ました。  
  tensorflow version 1 が前提となっているため、verson 1.13.2 を使用しました。

```py
   #インストール 
   $ git clone https://www.github.com/ildoonet/tf-pose-estimation
   $ cd tf-pose-estimation
   $ python setup.py install

   #骨格推定
   python run.py --model=cmu --image=画像ファイルパス
```


# 5.評価結果と考察

人物矩形の Ground Truth をアノテーション済みの "VOC2005_1" データセットの "TUGraz_person" クラスの画像について、tf-pose-estimation と openpifpaf を適用し、アノテーション情報の人物矩形に該当する人物の骨格を推定出来るか確認しました。
結果を、赤色の点が骨格推定できなかった点、青色の点が骨格推定出来た点としてプロットしたものが下図です。横軸はアノテーションデータの人物矩形の横幅、縦軸はアノテーションデータの人物矩形の高さです。いずれの手法も、人物矩形サイズが小さくなるほど骨格推定に失敗している様子がわかります。


<h3> openpifpaf と tf-pose-estimation の比較結果 </h3>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802177/aa8ba132-e25a-8cbe-3b3f-e3f83041d7a2.png" width=100%>  


人物矩形の高さ別に各手法の適合率（骨格推定出来たサンプル／アノテーションサンプル数）を算出しました。  下表のとおり、40ピクセル以下、40ピクセル以上80ピクセル以下の小さな人物の場合、openpifpaf の方が適合率が高い結果とりました。

| Recall             | 0 < height ≦ 40 | 40 < height ≦ 80 | 80 < height ≦ 200 |
| :---               |    :---:         |   :---:           |   :---: |
|[openpifpaf][1]     | 0.18             |  0.82             |     0.98 |
|[tf-pose-estimation][2]|   0.09        |    0.73           |    1.00  |

[1]: https://github.com/vita-epfl/openpifpaf
[2]: https://github.com/ildoonet/tf-pose-estimation
[3]: https://github.com/CMU-Perceptual-Computing-Lab/openpose

つまり、openpifpaf の方が小さく映る人物の骨格推定には適していると考えて良さそうです。
この結果は、[CVPR_2019におけるopenpifpafの論文][4]でも記載されている通り、サブピクセルの情報を活用できるネットワークモデルが有効に働いたためであると考えます。

[4]: https://openaccess.thecvf.com/content_CVPR_2019/papers/Kreiss_PifPaf_Composite_Fields_for_Human_Pose_Estimation_CVPR_2019_paper.pdf



> we recap this technique in the language of composite fields and add a scale $σ$ as a new component to form our PIF field. We create this high resolution part confidence map $f(x, y)$ with a convolution of an unnormalized Gaussian kernel $N$ with width $p_σ$ over the regressed targets from the Part Intensity Field weighted by its confidence $p_c$:  

>```math
f(x, y) = \sum_{ij}  p^{ij}_c N (x, y|p^{ij}_x, p^{ij}_y, p^{ij}_σ) 
```

> This equation emphasizes the grid-free nature of the localization. The spatial extent σ of a joint is learned as part of the field.


# 6. 骨格推定例

我々が独自に撮影して取得したVGAサイズの画像に、openpifpaf と tf-pose-estimation のそれぞれを適用して骨格推定した結果は以下のようになりました。
openpifpafを使用すれば、画面右側奥の小さく映る人物も骨格推定出来ていることが分かります。

<h3> 骨格推定結果の例 </h3>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802177/40c71dfd-1300-6512-9f3b-f3d75f19355d.png" width=100%>

<h3>右上領域の拡大</h3>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802177/63728e02-a032-1564-d511-27afb691201a.png" width=100%>


## おわりに
本記事では、最小検知サイズについて、代表的な骨格推定手法である openpifpafとtf-pose-estimation を比較しました。その結果、openpifpaf の方が最小検知サイズが小さく、画面奥側の小さく映る人物を捉えられることを説明しました。
[Lumada Data Science Lab.][5] は、行動認識や混雑解析などの研究開発を行っています*。これらの研究開発成果を人を支援する様々なアプリケーションとして社会実装していくことで、社会に貢献していきます。  


### *参考情報
1:  [MMAct dataset][6]
2:  [MMAct: A Large-Scale Dataset for Cross Modal Human Action Understanding][7]
3:  [Cycle-Contrast for Self-Supervised Video Representation Learning ][8]
4:  [BCaR: Beginner Classifier as Regularization Towards Generalizable Re-ID][9]

[6]:https://mmact19.github.io/2019/
[7]:https://openaccess.thecvf.com/content_ICCV_2019/papers/Kong_MMAct_A_Large-Scale_Dataset_for_Cross_Modal_Human_Action_Understanding_ICCV_2019_paper.pdf
[8]:https://proceedings.neurips.cc/paper/2020/file/5c9452254bccd24b8ad0bb1ab4408ad1-Paper.pdf
[9]:https://www.bmvc2020-conference.com/assets/papers/0303.pdf