はじめに
姿勢推定のOpenPoseの実行を行ったのでその方法をまとめておきます。GPU環境があれば、Dockerを使うことで簡単に使うことができました。
公式の環境構築手順に沿うのはなかなか大変なので、Dockerで環境を用意して使いたいと思います。
環境構築
以下のDockerfileを使用しました。
FROM nvidia/cuda:8.0-cudnn5-devel ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -y \ && apt-get install -y \ build-essential \ apt-utils \ openssl \ git \ cmake \ git \ curl \ vim \ ca-certificates \ libjpeg-dev \ libfreetype6-dev \ zlib1g-dev \ openssh-client \ bash \ g++ \ tzdata \ mariadb-client \ gcc \ xz-utils \ file \ sudo \ tmux \ libmecab-dev \ wget \ unzip \ lsof \ lsb-core \ libatlas-base-dev \ libopencv-dev \ python-opencv \ python-pip \ python3-pip \ ffmpeg \ zip \ cython \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV PYTHONPATH /usr/local/python/openpose WORKDIR /root # openpose RUN git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git WORKDIR /root/openpose RUN git checkout tags/v1.4.0 \ && git submodule update --init --recursive \ && sed -i -e "s/ubuntu\/Makefile.example/ubuntu_deprecated\/Makefile.example/g" ubuntu_deprecated/install_openpose_if_cuda8.sh \ && sed -i -e "s/ubuntu\/Makefile.config/ubuntu_deprecated\/Makefile.config/g" ubuntu_deprecated/install_openpose_if_cuda8.sh \ # && sed -i -e "s/git submodule update --init --recursive//g" ubuntu/install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh \ && sed -i -e "s/ubuntu/ubuntu_deprecated/g" ubuntu_deprecated/install_caffe_and_openpose_if_cuda8.sh \ && sync \ && sleep 1 \ && bash ./ubuntu_deprecated/install_caffe_and_openpose_if_cuda8.sh # python API RUN cd build && cmake -DBUILD_PYTHON=true .. RUN cd build && make -j `nproc` RUN cd build && sudo make install
$ nvidia-docker build . -t openpose
結構時間かかります。
実行
data
フォルダに処理したいデータを入れます。またresult
ディレクトリに処理後のデータを入れます。以下のようにデータのディレクトリをマウントして、run
します。
$ nvidia-docker run -v /home/ubuntu/openpose/data:/root/openpose/data -v /home/ubuntu/openpose/result:/root/openpose/result --rm -it openpose /bin/bash
あとは、docker内で以下のように処理を行います。出力はjson
形式でだけ出しています。また、model_pose
でcoco
のデータポイントを出力するようにしています。defaultではBODY_25
のデータポイントになるので注意が必要です。
$ ./build/examples/openpose/openpose.bin --image_dir data --write_json result --display 0 --render_pose 0 --model_pose COCO
引数の詳細はドキュメントや以下のhelp
で確認して下さい。
./build/examples/openpose/openpose.bin --help
以上でresult
ディレクトリを確認するとデータがあるはずです。非常に簡単に実行することができました。
おまけ: nvidia-docker導入時のエラー
nvidia-dockerの導入は検索すればいくつか出てくると思いますが、試してみると、私の場合はUbuntu16.04環境で以下のようなエラーが出てしまいました。
docker: Error response from daemon: create nvidia_driver_367.35: VolumeDriver.Create: internal error, check logs for details.
以下のissueにあるようにすれば解決したので参考になれば。
$ systemctl edit nvidia-docker
以下を追記。
[Service] ExecStart= ExecStart=/usr/bin/nvidia-docker-plugin -s $SOCK_DIR -d /usr/local/nvidia-docker-test
以下を実行。
sudo mkdir /usr/local/nvidia-docker-test sudo chown nvidia-docker /usr/local/nvidia-docker-test sudo systemctl restart docker nvidia-docker