NVIDIA Jetson AGX XavierにOpenPoseを入れる
従来機の20倍のパフォーマンスと言われるXavierにOpenPoseを入れてみました。
以前はCUDAのバージョン等によってOpenPoseのコンパイル(というよりOpenPoseが使用する周辺モジュールのコンパイル等)に苦労することが多かったのですが、意外なほどすんなり入りました。
最初に結果を書いておきますが、net_resolutionを320×240ぐらいまで下げても約5~6fpsと期待したほどのパフォーマンスは出ませんでした。
yolo v3のようにTensorコア対応のライブラリはかなり高速に動きますが、OpenPoseのようなライブラリだとそこまで高速には動かないようです。
(tf-poseのような選択肢もありますが、精度的に優位なCMUのOpenPoseをそのまま使っています)
JetPack等の使用環境
以下、今回使用した環境です。
- JetPack 4.1.1 Developer Preview (CUDA 10, cuDNN 7.3.1, OpenCV 3.3.1)
- OpenPose v1.4.0 (ただし日々更新されており、2019年4月12日時点での最新版です)
Xavier JetPack 4.1.1 DPフラッシュ後の作業
いきなり本題からそれますが、JetPackをフラッシュした直後にpython3からcv2をimportすると
ImportError: numpy.core.multiarray failed to import
というエラーが出ましたので、numpyをアップデートしておきました。
普通にインストールするときと同じように以下のコマンドを実行します。
sudo apt-get install python3-numpy
XavierへのOpenPoseインストール手順
OpenPoseのインストールは公式ドキュメントに従って行います。
まずGitHubよりOpenPoseをgit cloneします。
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
CMakeのインストール
buildのためにcmake-guiを使いますので、インストールについてのPrerequisitesのドキュメントに従いcmake-guiをビルドします。
XavierはUbuntu 18.04系なので、aptでインストール可能なcmake-qt-guiだと3.10とバージョンが古くて使えません。
バージョン3.12以降をダウンロードしてビルドします。
まず、qtbase5-devをインストールします。
sudo apt-get install qtbase5-dev
続いて、CMakeダウンロードサイトからcmake-guiのソースをダウンロードして解凍します。
今回は3.14.1を使いました。
wget https://github.com/Kitware/CMake/releases/download/v3.14.1/cmake-3.14.1.tar.gz tar xvzf cmake-3.14.1.tar.gz
続いてビルドします。
configureのあと特にエラー等がなければbootstrap、make、make installを続けて実行します。
cd cmake-3.14.1 ./configure --qt-gui ./bootstrap && make -j8 && sudo make install -j8
OpenPoseのインストール
git cloneしたOpenPoseのディレクトリに移動します。
必要なモジュールをインストールするためのシェルを実行します。
ここが変にCUDAとかのインストールと一体化されておらずスムーズに進められるようになったのはとてもありがたいです。
sudo bash ./scripts/ubuntu/install_deps.sh
必要に応じてlibeigen3を入れます。
sudo apt-get install libeigen3-dev
cmake-guiでビルドオプションを設定し、Generateします。
cmake-gui
ソースディレクトリはOpenPoseをgit cloneしてできたディレクトリ、ビルドディレクトリはその配下のbuildを指定します。
Configureを押すと、buildディレクトリが無い場合はディレクトリを作成するか聞かれます。
コンパイラはデフォルトのもので良いでしょう。
必要なモジュールのダウンロード等も同時に走るので少し待ちます。
ここでエラーが出なければGenerateします。
自分の場合はPython APIとCOCO Modelを使うので、BUILD_PYTHONとCOCO Modelのダウンロードにチェックを入れてGenerateしました。
makeしたら完了です。
cd build make -j 8
サンプルの実行
試しにサンプルを実行してみましょう。
OpenPoseディレクトリに移動し、openpose.binを実行します。
(filename.mp4)のところは書き替えてください。
./build/examples/openpose/openpose.bin --video (filename.mp4) --net_resolution 320x240