komeの備忘録

東大院卒外資ITエンジニアの技術ブログ

OpenposeをGPUのないUbuntu18にインストールして使えるようにしてみた

はじめに

Openposeとは、カーネギーメロン大学の研究チームが開発した、ディープラーニングを使った人体の検出ライブラリである。 言語はPythonやC++などが公開されており、OSはLinux、Mac、Windowsなど様々なもので実行可能である。

今回はGPUを搭載していないUbuntu18.04にOpenposeをインストールして、実行できるまでの備忘録を記す。試行錯誤しながらちょっと頑張った!

ちなみにOpenposeの最新の実装は次のgithubのページで公開されている。

github.com

環境

OS: Ubuntu18.04 Desktop
RAM: 16GB
CPU: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 4コア

インストール手順

github clone

まずは、最新のリポジトリを自分のローカルにcloneする。
今回は適当なワークディレクトリを作成し、そこにcloneした。

$ mkdir -p ~/work/openpose && cd ~/work/openpose
$ git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git

インストール手順の確認

cloneしたリポジトリの、doc/installation.mdにインストール方法が記載されている。

$ less doc/installation.md

上記テキストの中にあるRequirements and Dependensiesに以下のように書いてある。

・必要な環境
CUDA(NVIDIA GPUの場合):
    - 最低1.6GBのNVIDIAグラフィックスカードが必要(nvidia-smiコマンドでGPUメモリを事前にチェック)
    - BODY_25モデルには最低2.5GBのRAMメモリが必要で、COCOモデルには2GB必要
    - cuDNNがめっちゃ推奨される
OpenCL(AMD GPUの場合):
    - Vegaシリーズのグラフィックカードが必要
    - 最低2GBのRAMメモリが必要
CPUのみで、GPUを使わない場合:
    - 8GB程度のRAMメモリが必要
最低8コアのCPUを強く推奨

・依存関係
OpenCV:
    - バージョン2でも3でもいいから必要
Caffeとその依存関係

ということで、今回はCPUのみのバージョンで実装する。
お気づきかも知れないが私の環境は、メモリは足りているがコア数が最初から足りないのである。
まあでも強く推奨されてるだけだしなんとかなるんじゃないか、、、ということで無視して先に進んでみる。

ちなみにOpenCVについては既にインストールしてある。詳しいインストール方法は下記の過去記事を参照しよう。

www.komee.org

次にCaffeをインストールする。
Ubuntu16以前だとソールコンパイルが必要っぽいが、Ubuntu17以降ならaptでワンライナーインストールが可能になっていた。

$ sudo apt install caffe-cpu    # CPUのみの場合
$ sudo apt install caffe-cuda   # cudaを使う場合

これで依存関係は整った。

makeの環境構成

ドキュメントに書かれているので、これを読んで参考にする。

$ less doc/prerequisites.md

まず、CMake GUIをインストールする。
Ubuntu18の場合は、aptで入れるのではなく、ソースコンパイルをしなさいと書いてあった。めんど
3.12以上のバージョンが必要だが、aptでは3.10がインストールされ、コンパイルに失敗するらしい。

実際にやるコマンドは以下の通り。

$ sudo apt purge cmake-qt-gui   # 既にインストール済みだった場合は最初に削除
$ sudo apt install qtbase5-dev
$ mkdir ~/src && cd ~/src
$ wget https://github.com/Kitware/CMake/releases/download/v3.16.5/cmake-3.16.5.tar.gz # cmakeのlatest releaseのバージョンのソースコードをダウンロード
$ tar xvfz cmake-3.16.5.tar.gz
$ cd cmake-3.16.5
$ ./configure --qt-gui
$ ./bootstrap
$ make -j `nproc`
$ sudo make install -j `nproc`

これでエラーがでないように頑張ってcmakeをmakeする。
普通ソースコンパイルするとパスが通ってなくて自分でバイナリにパスを通すが、cmakeは優しい仕様で最初からパスを通してくれた。ステキ。

あと注意事項として、Anacondaが入っているとmakeが失敗するらしい。

以上でOpenposeをmakeする環境が整った。

makeするぞ!

インストールされたはずのcmake-guiを起動する。
ランチャーでcmakeと入力すると出現する。

f:id:komee:20200319003113p:plain
ランチャー

f:id:komee:20200319003133p:plain
cmake-gui

cmakeのためにbuildフォルダを作成する必要がある。
今回は適当にopenpose以下にbuildというフォルダを作った。

$ mkdir ~/work/openpose/build

sourceフォルダとbuildフォルダをcmake-guiのテキストボックスに入力する。
こんな感じになります。

f:id:komee:20200319004110p:plain
source-build

そして configure->Finishで実行すると、失敗した。

f:id:komee:20200319004048p:plain
configure->finish

なぜか。GPUがないのにCUDAをインストールしろって怒られたのだ。

強めのGPUを積んだPCではないため、CPUのみで今回は実行を想定している。なので、なんとかしてGPUモードをオフにしなければならない。と思ってCMake GUIの中央のパラメタを見てたら、あった!GPU_MODEなる設定が!

f:id:komee:20200319004326p:plain
gpu_mode

ここをCPU_ONLYに変更して、再度configure実行!CUDAを要求されなくなったので成功!勝った!
と思ったら次もまた何やらエラーした。

出力を見ると次のエラーがあった。

No download info given for 'openpose_lib' and its source directory:

わからんけどググると公式のPRで解決法が書いてあったので、何も考えずに実行した。
なんかcaffeのリポジトリがうまく読み込めてないらしい。 github.com

1. $ cd 3rdparty
2. $ git clone https://github.com/CMU-Perceptual-Computing-Lab/caffe.git
3. Now, run cmake gui to Configure and Generate.

そして再度configureしたら"Configuring done"の文字。無事に通った!!
更に続けて隣のgenerateを実行するも、一瞬で完了した。

これで、openposeをmakeするためのmakefileの生成に成功したらしい。

ようやくopenposeをmakeできる

次の手順は、buildで指定したディレクトリに移動し、makeを実行する。なかなか終わらない。

$ cd ~/work/openpose/build   # cmage-guiで指定したbuildディレクトリ
$ make -j `nproc`

終わらないエラー

実行したら次のwarningがでたのだが、コンパイルの過程でのwarningは全てerrorとして扱うようオプションが設定されていたので、makeは一回では完了しなかった。

mkldnn_inner_product_layer.cpp:357:2: error: this ‘else’

上記のエラーコードをググったら嘘だろ・・?みたいな方法で解決した。

github.com

インデントがイケてないらしいww ~/work/openpose/3rdparty/caffe/src/caffe/layers/mkldnn_inner_product_layer.cppを編集し、354行目と357行目の先頭にスペース3つ、355行目と358行目の先頭にスペース4つ挿入するだけである。

これで再度makeしたら、なんと無事に通った。
openpose_libのビルドが完了した。長かった。。

最後に

CPUなしバージョンでインストールに成功した記事はなかなか見つからなかったので、ちょうどいい備忘録になった。ハマりどころが多い気がするが、ちゃんとドキュメントとエラーメッセージを読めばなんとかなった。

ちなみにインストールしたopenposeは無事に使えました。
今回GPUなしUbuntuにインストールしたopenposeの実行デモは、また別の記事で紹介する。

参考文献とサイト

2020/03/18 閲覧

GitHub - CMU-Perceptual-Computing-Lab/openpose: OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation

(C) komee.org