OpenPoseを動かしてみた。

  • 196
    いいね
  • 0
    コメント

目次

1.OpenPoseを動かしてみた。
2.OpenPoseチュートリアルのソースコードを読む。
3.WindowsでOpenPoseを動かしてみた。
4.OpenPoseのFace Estimationを動かしてみた。

背景

CVPR2017で発表された、DeepLearningを使った、単眼カメラでのスケルトン検出アルゴリズムが、OpenPoseという名称でライブラリ化・公開されました。

早速、Ubuntu(1404)で、OpenPoseのPose Estimationを動かしてみたので、手順を解説します。
https://github.com/CMU-Perceptual-Computing-Lab/openpose

Screenshot from 2017-05-06 23:33:40.png
上記画像ソースは、[ ぱくたそ(www.pakutaso.com)]様のフリー写真素材を使用しました。

論文

Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields, CVPR 2017:
動画:
Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields, CVPR 2017 Oral - YouTube
プレゼン:
Multi-person pose estimation-CMU
論文:
https://arxiv.org/pdf/1611.08050.pdf

使用環境

Description: Ubuntu 14.04.5(x64) LTS trusty
CUDA Version 8.0.61
NVIDIA-SMI 375.66 / Driver Version: 375.66 / GeForce GTX 1050
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
OpenPose 1.0.0rc1(Apr 2017)

ライブラリのインストール

基本的にはdoc/installation.mdを参照してインストールすれば良い。
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md
OpenPoseは、CUDA, cuDNN, OpenCV, Atlas を予めインストールする必要がある。
私の環境はUbuntu1404の為、CUDA8.0とcuDNN5.1をインストールした。

CUDAのインストール

https://developer.nvidia.com/cuda-downloads
から、debをダウンロードしてインストール。

sudo dpkg -i cuda-repo-ubuntu1404-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda

HOMEの.bashrcに以下を追記。

export CUDA_HOME=/usr/local/cuda-8.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CUDA_HOME}/lib64
export PATH=$PATH:${CUDA_HOME}/bin

cuDNNのインストール

https://developer.nvidia.com/rdp/cudnn-download
から、debをダウンロードしてインストール。
ダウンロードにはユーザ登録が必要となる。

ver5.1

sudo dpkg -i libcudnn5_5.1.10-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn5-dev_5.1.10-1+cuda8.0_amd64.deb

ver6.0

sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb 
sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb 

ここで、私の環境では、

libEGL.so.1 is not a symbolic link

が出た為、以下のようにリンクを修正。

sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1

参考:linux - libEGL.so.1 is not a symbolic link - Stack Overflow

OpenCV , Atlasのインストール

これはapt-getでインストールすれば良い。

sudo apt-get install libopencv-dev
sudo apt-get install libatlas-base-dev

openposeのインストール

openpose直下の、下記のファイルを実行すると、付随して必要なライブラリ・学習器のダウンロード・インストールと、サンプルのコンパイルが行われる。
./install_caffe_and_openpose.sh

サンプルを動かしてみる。

1. サンプル動画で動かしてみる

./build/examples/openpose/openpose.bin --video examples/media/video.avi

2. Webカメラで動かしてみる

./build/examples/openpose/openpose.bin

3. サンプル静止画で動かしてみる

./build/examples/openpose/openpose.bin --image_dir examples/media/

ソースをコンパイルしてみる。

openposeは/example/usercode以下にソースコードを格納すると、openpose直下のMakefileでコンパイルが通るようになっている。最小のサンプルである、"1_extract_from_image"(静止画を読み出し、スケルトン推定を行うサンプル)をusercode以下にコピーし、makeする。

cp examples/tutorial_pose/1_extract_from_image.cpp examples/user_code/
make

makeされた実行ファイルは、./build/examples/user_code/の下に格納されている。
./build/examples/user_code/1_extract_from_image.bin

なお、1_extract_from_image.cppは27行目でファイル名を指定している。ここのjpegファイル名を変更すれば、任意の画像を読み出すことができる。

DEFINE_string(image_path, "examples/media/COCO_val2014_000000000192.jpg","Process the desired image.");

所感

 RGB-Dカメラでも、ステレオでもない、単眼のWEBカメラでリアルタイムにスケルトン検出ができてるのを見ると、純粋に技術の進歩を感じる。