姿勢推定モデルの比較 for SFC

こんにちは、今回のSFC Advent Calendar2019の13日目を担当することになったさいもんです。
13日の金曜日の当日ということですがジェイソンが出そうな夜遅くの森の中でこの記事を書いてました。
今回は予定通りに姿勢推定モデルの比較について語ろうと思います。

尚、この記事はSFC生向けに書いているということでMacがメイン環境の人向けに書いています。
Windows,Ubuntuユーザーの方はごめんなさいm(-_-)m


# まず姿勢推定モデルとはなんぞや
```
姿勢推定モデルとは深層学習を用いて人の関節情報を抽出する姿勢推定をする....
```
などとググると書いてありますが、ざっくり言えば

```
機械学習で画面に写っている人間の関節が画面内のどこにあるか教えてくれるという素晴らしいモデル
```
手元にある静止画や動画を入力すれば画面内の人間の座標情報を教えてくれるし、
静止画や動画などのすでにある画像データのみならずリアルタイムの動画も使えるという優れもの
![Shinbashi_St..gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/a44c7507-1e4f-2be9-c843-d9af55251db8.gif)
こんな風にね
<br>
このモデルを使うことで以下の人間の17箇所（keypoint）の情報を出力してくれます。
>##### Nose(鼻)、LeftEye(左目)、Right(右目)、LeftEar(左耳)、Right(右耳)、LeftShoulder（左肩）、RightShoulder(右肩)、
##### LeftElbow（左肘）、RightElbow(右肘)、LeftWrist（左手首）、RightWrist(右手首)、
##### LeftHip（左腰）、RightHip(右腰)、LeftKnee（左膝）、RightKnee(右膝)、LeftAnkle(左足首)、RightAnkle(右足首)

今までKinectとかの専用のカメラで人間の動きを検出していたものをウェブカメとかで同じことができるなんてすごい！


確かにそうなのですが、満足できるレベルで使用するにはそれなりのPCのスペックを求められます.....
(ドンキPCでは流石に動かない....リアルタイムで動かすならなおさら....当たり前ですが....)


それでは、姿勢推定モデルにはどんなものがあるのか紹介していきたいと思います。

# OpenPose
__王道 of 王道__
![pose_face_hands.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/a3c560c6-e220-27b5-2f2d-60ee1ef964d2.gif)
https://github.com/CMU-Perceptual-Computing-Lab/openpose

コンピュータビジョンに関する国際学会CVPR2017でCMU（カーネギーメロン大学）が発表した姿勢推定モデル
研究目的用には無償公開されているということで医療の分野で使われていたりします。(その分信頼性が高い)
商用利用は年間ライセンス$25,000を支払えば使用可、しかしスポーツ分野に使用するのはNG
[ライセンス詳細](https://flintbox.com/public/project/47343/)


Rhizomatiksさんが演出で使用していたりします。
[!['discrete figures' by RHIZOMATIKS x ELEVENPLAY at GRAY AREA](http://img.youtube.com/vi/s_S3fomiXO0/0.jpg)](http://www.youtube.com/watch?v=s_S3fomiXO0)

ダンス系のライブ演出で使われたり、医療系の分野の論文に使われるなどかなり信頼性が高いです。

MacBookProで実行できなくはないですが、モデルを使うのはあくまでちゃんとしたGPUが積まれたパソコンでの実行が前提になっています(MacBookの内蔵GPUはGPUとはいえない....)。
できると言ってもとても難しいです。Amazon EC2 P3 インスタンスなどを使用すれば使えなくはないですが、お試しでやるには難易度が高すぎる...
 
<br><br><br>


そんなsfc生にもある程度つかえるような姿勢推定モデルがこちら
# tf-pose-estimation
__ちょっと手軽になった__
![openpose_macbook_cmu.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/870332fb-cc9c-0555-79b4-f136dbf8efc0.gif)
https://github.com/ildoonet/tf-pose-estimation

ターミナルが少しいじれる、プログラミングちょっとやったことあるっていう人ならば頑張れば導入できるかと思います。

セットアップを詳しく書いてくださっている記事がこちら
https://qiita.com/mdo4nt6n/items/d9523aff14dd9fb70c37

OpenPoseだとFPSが小数点こえるか超えないかぐらいのものがFPSが2~5ぐらいまで上がって、ある程度使えるレベルまでになります。しかしそれでもカクカクしてるな〜と視認できるレベルなのでこれを使って作品を作ったり解析に使うのには向いてないでしょう。

# DensePose
![MzA4ODIyNg.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/9901afed-791d-69cc-0ece-6b4c7e152a65.jpeg)
https://github.com/facebookresearch/DensePose
![43028561-85df13e0-8c4e-11e8-9219-935d0687bc8b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/2a6a49c1-ed80-6fa1-8fba-207916b4f118.gif)
↑これなんか可愛いですね(中身はThe Walking DeadのWalkersですが)

こちらは12月10日にatsuya k(@jg43yr)さんがSFC Advent Calendar 2019で詳しく紹介しているのでリンクを貼っておきます。
https://qiita.com/jg43yr/items/3d933abc68147cbcfcbd

こちらもMacBookPro単体ではうごきません、公式がPython2系&NVIDIA GPUを積んだLinux上でしか動かないとアナウンスをしているのでGoogle Colaboratory上で動かすのが無難でしょう。しかしリアルタイムで動かすのはなかなか困難です。


# PoseNet
![camera.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/2a0ce5e5-3e3c-c48d-0ac9-2b2b3622a9bd.gif)
https://github.com/tensorflow/tfjs-models/tree/master/posenet

Webブラウザで実行できるオープンソースの機械学習ライブラリであるToseorFlow.jsで動作している姿勢推定モデルです。今までの姿勢推定モデルと違いシステムのセットアップが不要なだったり、ウェブカメラとブラウザを持っていれば手元で実行が可能という手軽さがあります。FPSも20以上とぬるぬる動く!
[デモはこちらから](https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html)

ブラウザで動いているのでwebsocketとnode-oscを使えばAbleton Live SuiteやopenFrameworksなどに座標情報を送ることができます。そしてjavascriptを少し変えれば認識できる人数上限を変えることができたりします。(その分FPSは落ちますが....)

# まとめ
以上4つの姿勢推定モデルの紹介をしましたが、何かしらの作品に使いたいなら個人的にはPoseNetがとてもおすすめです。

作品を作ったりするときに環境構築をしたりするのですが、家のワークステーションと持ち歩いてるPC、展示用ののバージョンが違ったりすると、どっちかの環境で動いてたものが別の環境(マシン)では全く動かなくなり、同じ環境構築マシンに合わせてを数回する必要が出てくるという中で、ブラウザベースで動くPoseNetならばその必要性がなくなり自分が管理していないマシンでも動かすことができるというメリットがあります。

最終的にはどのようにアウトプットするかにもよりますが、自分が必要としているものに合わせてモデルをチョイスするのが良いかと思います。

また、紹介したいくつかのモデルは"Runway ML"というクリエイターのための機械学習ツールで試すことができるのでぜひお試しください。
![pAKkcyvn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336586/09229399-6665-4a81-1a0d-3f5fc85c4d46.png)
[RunwayML | Machine learning for creators.](https://runwayml.com/)

それでは