A certain engineer "COMPLEX"

開発メモ その161 UbuntuでOpenPoseを動かす

Introduction


かなりはまったのでメモ。

How to


ビルドするだけなら簡単なのだが、動かすとどうしても動かない。
例えば下記のようなエラーが出る。


$ ./pose_1_extract_from_image.bin
Starting OpenPose demo...
F1219 20:52:30.150040 24594 upgrade_proto.cpp:97] Check failed: ReadProtoFromBinaryFile(param_file, param) Failed to parse NetParameter file: models/pose/body_25/pose_iter_584000.caffemodel
*** Check failure stack trace: ***
@ 0x7f91236e55cd google::LogMessage::Fail()
@ 0x7f91236e7433 google::LogMessage::SendToLog()
@ 0x7f91236e515b google::LogMessage::Flush()
@ 0x7f91236e7e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f91230ac311 caffe::ReadNetParamsFromBinaryFileOrDie()
@ 0x7f912322351a caffe::Net<>::CopyTrainedLayersFromBinaryProto()
@ 0x7f912501ae17 op::NetCaffe::initializationOnThread()
@ 0x7f912503b48e op::addCaffeNetOnThread()
@ 0x7f912503bf7a op::PoseExtractorCaffe::netInitializationOnThread()
@ 0x7f9125040b80 op::PoseExtractorNet::initializationOnThread()
@ 0x404320 tutorialDeveloperPose1()
@ 0x403613 main
@ 0x7f9123f52830 __libc_start_main
@ 0x403649 _start
@ (nil) (unknown)
Aborted (core dumped)

この現象はissueとして登録されている。

Executed Command (if any) cd /path/to/openpose/build/examples/openpose/ ./openpose.bin --face --logging_level 0 OpenPose Output (if any) /path/to/openpose/in...

ただし、一部のUbuntuで発生しているようで、作者の環境では再現できていない模様。
解決策は、

  • OpenPoseに含まれているCaffeを使わずシステムに登録されているCaffeを使う
  • OpenPoseに含まれているCaffeのリビジョンを変更する

となる。

後者の解決策は

Executed Command (if any) cd /path/to/openpose/build/examples/openpose/ ./openpose.bin --face --logging_level 0 OpenPose Output (if any) /path/to/openpose/in...

で提示されていた。

まず


$ vi openpose/CMakeLists.txt

でファイルを開く。次に、caffeのソースを取得する箇所を修正する。
具体的な行数はリビジョンによって変わるため、下記の行番号は参考であるが、下記の記述はソース中に2つあるため、探せば必ず見つかる。


# Build Process
set(CAFFE_CPU_ONLY OFF)
if (${GPU_MODE} MATCHES "CUDA")
- execute_process(COMMAND git checkout master WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
+ execute_process(COMMAND git checkout f019d0dfe86f49d1140961f8c7dec22130c83154 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
elseif (${GPU_MODE} MATCHES "CPU_ONLY")
if (USE_MKL)
#execute_process(COMMAND git checkout intel WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
@@ -682,7 +682,7 @@ if (UNIX OR APPLE)
"${CMAKE_BINARY_DIR}/caffe/lib/libmkldnn.so"
)
else (USE_MKL)
- execute_process(COMMAND git checkout master WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
+ execute_process(COMMAND git checkout f019d0dfe86f49d1140961f8c7dec22130c83154 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
endif (USE_MKL)
set(CAFFE_CPU_ONLY ON)
set(USE_CUDNN OFF)

この修正を完了後、


$ sudo apt install -y cmake libopencv-dev
$ sudo apt install -y libgflags-dev libgoogle-glog-dev libprotobuf-dev protobuf-compiler libhdf5-serial-dev
$ sudo apt install -y libatlas-base-dev
$ sudo apt install -y --no-install-recommends libboost-all-dev
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release

でビルドが可能になる。

また、利用するCUDAは9.2未満にすること。
これは、caffeがlibcublas_device.aを参照しているが、CUDA 9.2で削除されてためである。

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。