post Image
GPU無しで画像のみから人間のボーン推定が出来るtf-openposeを導入する

概要

CVPR2017でOpenPoseというライブラリが公開されました。
これは、画像のみから人間のモーションのボーン推定ができます。

image

GIF動画を見てもらえればわかりますが、このような動画(画像)のみから、人間のボーン位置が推定できます。昔、Kinectでわざわざデプスセンサを駆使して、こういうことをやっていた時代から考えると信じられませんね。
原理については以下の動画があるのでご覧ください。(クリックするとyoutubeに飛びます。)

IMAGE ALT TEXT HERE

かなり面白そうなプロダクトなので、自分でも動かしてみたい!と思いました。
しかし、OpenPose自体、CPUのみの動作は対応していないらしく、まだこれから実装する予定のようです。

CPU only code #150
“CPU ONLY” works? #200

ただソースコードレベルでは、CPUのみの実装があるらしく、先人の方も、CPU版をビルドしてみたそうですが、失敗していらっしゃいました。

CPU版の OpenPoseのビルドに失敗した。

そこで、いろいろと試行錯誤した結果、“OpenPoseっぽいもの”をCPUのみで動作させることができましたので、それをご紹介いたします。

image.png

実際の動作画面。先人に習って画像はぱくたそ( https://www.pakutaso.com )からもってきました。

導入方法

答え自体は簡単でOpenPoseの公式は使っていないです。本家のOpenposeはCaffeeをベースに作られていますが、これは公式を元にTensorflowの方へ移植した実装となっています。リポジトリは以下のURLです。

https://github.com/ildoonet/tf-pose-estimation.git

導入自体はすごく簡単です。

$ git clone https://www.github.com/ildoonet/tf-openpose
$ cd tf-openpose
$ pip3 install -r requirements.txt

ただモデルのインストールが若干の癖があり、この方法がなかなかややこしかったです。
詳細はこのissueに書いてありますが、色々なモデルを学習させたりしているようなので、動くモデルというものがフィックスしていないような印象を受けています。
そこで、私が動作確認済みの方法をご紹介します。

$ mkdir -p ./models/trained/mobilenet_368x368/
$ cd ./models/trained/mobilenet_368x368/
$ wget https://www.dropbox.com/s/09xivpuboecge56/mobilenet_0.75_0.50_model-388003.zip
$ unzip mobilenet_0.75_0.50_model-388003.zip
$ mv model-388003.data-00000-of-00001 model-release.data-00000-of-00001
$ mv model-388003.index model-release.index
$ mv model-388003.meta model-release.meta

これで導入は完了です!
まず始めに、画像からのボーン推定を行います。

#ぱくたその画像をダウンロードします。
$ wget https://www.pakutaso.com/shared/img/thumb/150415022548_TP_V.jpg
#あとは実行するだけ!!
$ python3 inference.py --model=mobilenet --imgpath=./150415022548_TP_V.jpg 

image.png

tf-openposeにはwebcamでのリアルタイムで動くデモも付いています。

$ python3 realtime_webcam.py

image.png

フィギュアもある程度認識します。CPUで回して、FPSが1.2程度で結構リアルタイムというにはキツイですが、ボーン推定自体はうまくいってます!

まとめ

前々からこのOpenPoseはすごくやりたい!と思っていました。しかし、GPUがないとつらいんだろうなぁ。とか、機械学習の導入周りはあんまりやってないし、苦労した挙句入らない・・・みたいな悲しい結果になりそうだと思っていました。
しかし、少しずつTensorFlowやCaffeeまわりを調べているうちに、有名なモデルは別のDeepLearningのフレームワークへすぐ移植されるということに気づきました。というわけで、OpenPoseのTensorFlow実装を調べて見て、これを導入してみました。
使わせてもらっている分際でなんともいないのですが、本家より精度は悪い気がします。しかし、ちょっとやってみる分には、十分に使える実装ですし、CPUだけで出来るのは手軽で非常に良いです。
みなさんも正月休みにOpenPoseいかがでしょうか??

参考


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。