NVIDIA Jetson AGX XavierにOpenPoseを入れる

NVIDIA Jetson AGX XavierにOpenPoseを入れる

従来機の20倍のパフォーマンスと言われるXavierにOpenPoseを入れてみました。
以前はCUDAのバージョン等によってOpenPoseのコンパイル(というよりOpenPoseが使用する周辺モジュールのコンパイル等)に苦労することが多かったのですが、意外なほどすんなり入りました。

NVIDIA Jetson AGX Xavier

最初に結果を書いておきますが、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

NVIDIA Jetson AGX XavierにOpenPoseを入れるにコメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です