OpenPose 安装过程中的问题
在 cmake-gui 中 configure 时出现错误提示找不到 CUDA_cublas_device_LIBRARY:这时需要更新 cmake 版本,首先完全卸载旧版本的 cmake,再安装新版本(≥3.14)。 编译 OpenPose 完成后运行 example 中的 demo 时出现错误 “Unity plugin only available on Windows”:这是因为在 cmake-gui 配置中错误勾选了 BUILD_UNITY_SUPPORT 项,该项在 Ubuntu 中不能选择。 编译完成后运行 demo 时出现错误 OpenCV Error: No OpenGL support (Library was built without OpenGL support) in cvNamedWindow:出现这个问题的原因在于安装的 OpenCV 不支持 OpenGL,所以需要重新安装 OpenCV,并在 cmake-gui 配置 OpenCV 时勾选 WITH_OPENGL。 编译 OpenCV-4.3.0 时出现错误 fatal error: nvcuvid.h: 没有那个文件或目录:下载 NVIDIA VIDEO CODEC SDK 并解压,然后将其中的 nvcuvid.h 复制到 /usr/local/cuda/include/。 编译完成 OpenPose 后,运行 demo 出错 status == CUDNN_STATUS_SUCCESS (1 vs. 0) CUDNN_STATUS_NOT_INITIALIZED:可能是因为 GPU 版本不高(GeForce GTX 960M),不支持高版本的 CUDA (10.2) 和 cuDNN (7.6.5),所以我重新安装了 cuda-9.1 和 cudnn-7.1.3,然后在此基础上再重新编译安装 OpenCV-4.3 和 Caffe 以及 OpenPose。 在 cmake 中完成配置,重新编译 OpenCV-4.3 时出现错误 unsupported GNU version! gcc versions later than 6 are not supported:这是因为 cuda-9.1 只支持 gcc-6 以下的版本。可以通过如下方式使用 update-alternatives 改变 /usr/bin/gcc 和 /usr/bin/g++ 的指向,让系统默认版本从 7.5 变为 6.5。
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 10
经过测试 cuda-9.1 和 cudnn-7.1.3 因为版本太老,导致 OpenPose 也不能成功编译。因此最终又换成了 cuda-10.0 和 cudnn-7.5.0,gcc 和 g++ 也恢复成默认的 7 版本,在此基础上成功编译了 OpenPose。 在运行 OpenPose 中的 Demo 时,得到 error == cudaSuccess (2 vs. 0) out of memory 的错误提示:这是因为笔记本显卡内存太小(只有 2 GB),而默认的 Caffe 模型需要 12 GB 以上的显存。使用 cuDNN 的话默认的 BODY_25 模型会降低为 2.2 GB,COCO 模型只需要 1.5 GB 的显存。 在 openpose 根目录下,在降低处理分辨率的情下,利用 COCO 或 MPI、MPI_4_layers 模型,可成功运行以下 Demo:
./build/examples/openpose/openpose.bin --model_pose COCO --net_resolution 320x176
./build/examples/openpose/openpose.bin --video examples/media/video.avi --model_pose MPI_4_layers --net_resolution 320x176
./build/examples/openpose/openpose.bin --image_dir examples/media/ --model_pose MPI --net_resolution 320x176
当采取默认的 BODY_25 模型或者添加捕捉面部 --face 和手部特征 --hand 的选项,都会导致 status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR 的错误:究其原因,应该是显存不足导致的结果。