太感人了!历时三天终于把openpose编译成功了,(大哭~~
其实openpose安装本身并不难,按照官方给的教程应该一个钟头就可以装完,这里给个中文贴参考。
安装中文参考贴:https://www.aiuai.cn/aifarm706.html
注意:强烈建议使用openpose团队在Github第三方库中给的自带caffe版本,否则容易出错。也就是在使用cmake-gui编译时,勾选BUILD_CAFFE选项,默认编译自带第三方库里的caffe。
电脑很久之前装过cuda7.5,后来卸载重新安装cuda9.0,然而旧版本cuda并没有卸载完全,导致使用cmake-gui编译时,cmake检测到的cuda版本为7.5,与opencv依赖的cuda版本(9.0)冲突。
当将7.5版本的所有库文件都删除,并将/usr/bin/nvcc文件中内容修改(参考上一篇博客),cmake检测到正确版本的cuda,然而编译时又提示opencv中的某个库依赖被删掉的cuda7.5库,吐血。
唔只能重新安装opencv,让opencv纯粹地只依赖cuda9.0。Cuda9.0环境下重新安装opencv3.3.0,安装过程中又踩了一些新坑,记录见这篇博客。
这里提示一下,如果你的电脑里已经安装了caffe,那么你最好安装与之前相同版本的opencv,因为caffe是依赖opencv的。
当然你也可以删掉caffe文件夹,重新安装caffe。caffe的安装可以参考这篇博客。
当下的一个不严谨,放过一个warning,未来的某一天它就有可能变成一个绊你的大坑。血泪教训!
1、勾选BUILD_CAFFE、BUILD_PYTHON选项,Configure,Generation。
2、关掉cmake-gui,输入命令:
cd build
cmake ..
make -j12 (根据cpu核数具体调整 )
3、到这里,如果100%没有报错的话,就是基本编译成功了。在openpose根目录下,输入命令,验证:
./build/examples/openpose/openpose.bin --video examples/media/video.avi
如图所示,即安装成功。
1、openpose/3rdparty/pybind11/include/pybind11/detail/common.h:112:20: fatal error: Python.h: 没有那个文件或目录
参考:https://stackoverflow.com/questions/21530577/fatal-error-python-h-no-such-file-or-directory
解决办法:sudo apt-get install python3.6-dev (根据自己python具体版本下载)
2、编译成功后,在输入命令验证时,出现以下错误:
./build/examples/openpose/openpose.bin --video examples/media/video.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.
[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "caffe.NetParameter" because it is missing required fields: layer[0].clip_param.min, layer[0].clip_param.max
F1218 11:40:38.155475 12638 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: ***
@ 0x7f7395e885cd google::LogMessage::Fail()
@ 0x7f7395e8a433 google::LogMessage::SendToLog()
@ 0x7f7395e8815b google::LogMessage::Flush()
@ 0x7f7395e8ae1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f7395a059a1 caffe::ReadNetParamsFromBinaryFileOrDie()
@ 0x7f7395a2feaa caffe::Net<>::CopyTrainedLayersFromBinaryProto()
@ 0x7f73978ed5a7 op::NetCaffe::initializationOnThread()
@ 0x7f739794af4e op::addCaffeNetOnThread()
@ 0x7f739794ba08 op::PoseExtractorCaffe::netInitializationOnThread()
@ 0x7f7397950080 op::PoseExtractorNet::initializationOnThread()
@ 0x7f73979476c1 op::PoseExtractor::initializationOnThread()
@ 0x7f7397942851 op::WPoseExtractor<>::initializationOnThread()
@ 0x7f739792a951 op::SubThread<>::initializationOnThread()
@ 0x7f739792fbd8 op::Thread<>::initializationOnThread()
@ 0x7f739792fddd op::Thread<>::threadFunction()
@ 0x7f739724ac80 (unknown)
@ 0x7f739699c6ba start_thread
@ 0x7f7396cb941d clone
@ (nil) (unknown)
Aborted (core dumped)
参考:https://github.com/CMU-Perceptual-Computing-Lab/openpose/issues/939
解决方法:使用openpose自带3rdparty中的caffe编译,可以避免这个问题。亲测。
以上,祝大家都能快速地成功编译openpose,省下更宝贵的时间学习算法。