TL;DR
- AWS EC2上のVM( g3s.xlarge, Ubuntu 18.04LTS )で,姿勢解析システムOpenposeを作り,実験する手順(2019年03月03日時点)を紹介します.
- nvidiaのGPUを持っていないので,Amazon AWSのg3インスタンスを使いますが,ローカルのGPUでもほぼ同様の方法が使えるはずです.
EC2 g3インスタンスの作成
AWS EC2 Management Consoleで,仮想マシンを作成します.
留意点は以下の通りです.
- インスタンスタイプはGPU(cuda)が使用できるg2またはg3のものを選びます(g3s.xlargeなど).
- 初期状態では,インスタンスタイプの作成制限によって,g3タイプのインスタンスが作れない場合があります.その場合は,上限緩和申請フォーム から,上限緩和申請をしてください
- マシンイメージは「 Ubuntu Server 18.04 LTS (HVM), SSD Volume Type 」を使用します
- 動画を解析対象にする場合は,ストレージ(EBS)を大きめに確保しておいたほうが良いです
- 動画サイズにもよるが,解析結果をデフォルトのaviファイル形式で出力すると,サイズが大きく膨らみます
- この実験では,100GBで作成しました
- 費用はそれほど安くないので,使用していない時間はVMのシャットダウン,EBSの削除をしましょう(1敗).数時間の使用ならば500円もかかりません.
- VMがUSD 1.04/hour (g3s xlarge,東京リージョンの場合)
- EBSでUSD 0.12/GB/月
- データアウト通信 USD 0.114/GB
Openposeのセットアップ
cmakeのインストール
Openposeのビルドに必要なcmakeをインストールします( cmake-3.13.4を使用しました ).
パッケージでは古いバージョンがインストールされるので,ソースからコンパイルします.
sudo apt-get install \
qtbase5-dev \
build-essential \
gdebi \
libopencv-dev
wget https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4.tar.gz
tar xzvf cmake-3.13.4.tar.gz
cd cmake-3.13.4
./configure --qt-gui
./bootstrap
make -j6
sudo make install
GPGPU環境のセットアップ
NVIDIAドライバ,ツールキット,ライブラリのインストール
- 一般的なCUDA環境のインストールです.
-
CUDA Toolkit 10から,当該のツールキットをダウンロード
- [Linux][Ubuntu][18.04][x86_64]を選ぶ
- OpenPoseのビルドでコケた気がするので,バージョン10.1以降の方が望ましい
-
NVIDIA cuDNNをダウンロード
- debファイルでlibcudnn7, libcudnn7-devをダウンロードする
wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run
sudo sh cuda_10.1.105_418.39_linux.run
# いくつか聞かれたとおりに答える
# (ライセンス条項にAcceptするとか,
# /usr/local/cudaにシンボリックリンクを張るとか.
# X driverは入れなくて良いかも)
sudo gdebi libcudnn7_7.5.0.56-1+cuda10.0_amd64.deb
sudo gdebi libcudnn7-dev_7.5.0.56-1+cuda10.0_amd64.deb
PATHの設定
.bashrc, .zshrcなどに以下の行を追加して,NVIDIAツールに対するパスを通します.
export PATH=/usr/local/cuda/bin:$PATH
Openposeのビルド
mkdir -p ~/local/src && cd ~/local/src
git clone \
https://github.com/CMU-Perceptual-Computing-Lab/openpose
cd openpose
sudo bash ./scripts/ubuntu/install_deps.sh
mkdir -p openpose/build
cd openpose/build
cmake ..
make -j4
sudo make install
上記手順で,~/local/src/openpose/build/examples/openpose/openpose.bin
が作られ,利用できるようになります.
OpenPoseで姿勢解析
動画ファイル対象でポーズ情報をJSON形式で出力して解析結果の動画も作る
~/local/src/openpose/build/examples/openpose/openpose.bin \
--write_json outputJSON/ \
--display 0 \
--model_folder ~/local/src/openpose/models \
--video "./inputVideo.mp4" \
--write_video outputVideo.avi
Starting OpenPose demo...
Configuring OpenPose...
Starting thread(s)...
Auto-detecting all available GPUs... Detected 1 GPU(s), using 1 of them starting at GPU 0.
OpenPose demo successfully finished. Total time: 264.185226 seconds.
- openpose.binのオプションは以下の通り OpenPose - コマンド一覧(Qiita)が詳しい
-
--write_json
: 時刻ごとの姿勢情報(JSON形式)が出力されるディレクトリ -
--display 0
: 姿勢推定結果を表示しない( AWSのVMなので途中結果の表示は不要 ) -
--model_folder
: 使用する学習モデルも格納位置の指定 -
--video
: 解析対象となる動画ファイル -
--write_video
: 解析結果を含んだ動画のファイル
-
手と顔の検出も含めた解析
--face
,--hand
,--part_candidates
のオプションを追加すると,顔,手の検出も行えます.計算時間もかなり(5倍〜10倍)増えるのが注意点です.
~/local/src/openpose/build/examples/openpose/openpose.bin \
--face --hand --part_candidates
--write_json outputJSON/ \
--display 0 \
--model_folder ~/local/src/openpose/models \
--video "./inputVideo.mp4" \
--write_video outputVideo.avi
画像解析
動画ではなく,静止画も解析対象にできます.
- 写真は,フリー素材ぱくたそ( www.pakutaso.com )から,「空前絶後の肉まんを食べる男性 [モデル:大川竜弥]」(https://www.pakutaso.com/20181221337post-18843.html) を使用させてもらいました
- オプション(--image_dirおよび--write_images)を,画像用(入出力のフォルダ指定)に変更するだけです
~/local/src/openpose/build/examples/openpose/openpose.bin \
--face --hand --part_candidates \
--write_json ./output_json \
--display 0 \
--model_folder ~/local/src/openpose/models
--image_dir ./image \
--write_images ./output_image \