Github 项目 - OpenPose 相关问题FAQ

OpenPose - Frequently Asked Question (FAQ)

1. 显存不足 Out of Memory

错误如,Check failed: error == cudaSuccess (2 vs. 0) out of memory.

有可能是没有使用 cuDNN,默认 Caffe 模型消耗 GPU 显存大于(>) 12GB,cuDNN 能够减少 BODY_25 模型 GPU 显存占用到约 2 GB,COCO 模型 GPU 显存占用减少到约 1.5 GB.

2. 运行速度优化问题

参考:

3. BODY_25 & COCO & MPI 模型的差异

COCO 模型未来会被移除.

BODY_25 模型更快,更准,且新包括了脚部关键点(foot keypoints).

但,COCO 模型消耗 GPU 显存更少(默认参数设置时,可以送入 2GB 的 GPUs 显卡),而且在 CPU 模型运行更快.

MPI 模型只用于对 MPI-keypoints 结构的人体Pose,其比 BODY_25 更慢,精度更低.

BODY_25 - pose_deploy.prototxt

COCO - pose_deploy_linevec.prototxt

MPI - pose_deploy_linevec.prototxt

MPI - pose_deploy_linevec_faster_4_stages.prototxt

4. 其它项目应用 OpenPose API

场景:不只是使用 OpenPose Demo,计划将 OpenPose API 用于其它项目.

安装 OpenPose 头文件headers 和库文件 libraries 到系统环境路径(如:/usr/local//usr/):

cd build/
sudo make install

安装完成后,即可采用 find_package cmake 命令,在其它项目中应用 OpenPose.

如:CMakeLists.txt中的小例子. 为了使用该脚本,需要复制 FindGFlags.cmakeFindGlog.cmake 到项目路径 <project_root_directory>/cmake/Modules/(如果项目中没有该路径,则新创建该路径).

cmake_minimum_required(VERSION 2.8.7)

add_definitions(-std=c++11)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")

find_package(GFlags)
find_package(Glog)
find_package(OpenCV)
find_package(OpenPose REQUIRED)

include_directories(${OpenPose_INCLUDE_DIRS} ${GFLAGS_INCLUDE_DIR} ${GLOG_INCLUDE_DIR} ${OpenCV_INCLUDE_DIRS})

add_executable(example.bin example.cpp)

target_link_libraries(example.bin ${OpenPose_LIBS} ${GFLAGS_LIBRARY} ${GLOG_LIBRARY} ${OpenCV_LIBS})

如果 Caffe 是与 OpenPose 一起编译的,会自动寻找到 Caffe. 否则,需要指定 Caffe 路径. (否则,可能出现错误:/usr/bin/ld: cannot find -lcaffe):

link_directories(<path_to_caffe_installation>/caffe/build/install/lib)
Last modification:December 1st, 2018 at 03:36 pm

6 comments

  1. Jwon

    作者您好,我看了一下openpose_deploy.prototxt文件,观察到它的输入Blob是1*3*16*16,这是什么东西的信息呢?如果是图像的话是不是太小了,如果是图像预处理后的结果,那预处理的文件是哪一个呀?
    还有就是输出的Blob是1*78*2*2,是同时包含了heatmap和PAF么?该怎么理解和怎么提取呢?

    1. AIHGF
      @Jwon

      deploy.prototxt 中的输入 blob 的维度中 16*16 是可变的,根据实际运行时输入来确定. 输出 blob 的维度是 1 x (num_jointx2) x out_heatmap_size1 x out_heatmap_size2. heatmap 是 1:num_joints; PAF 是 num_joints+1:num_jointsx2.

      1. Jwon
        @AIHGF

        感谢老师的答复,对于"根据实际运行时的输入来确定"我还是有些不理解,是只项目的源代码在每次读取一帧图片的时候都改动了prototxt文件吗?

        1. Jwon
          @Jwon

          好了,我解决了这个问题了,应该是在初始化的时候设置了h*w,在运行的过程中对输入的图片先resize再输入神经网络进行处理,输出的信息根据原图大小再恢复

        2. AIHGF
          @Jwon

          没有改动 prototxt,但是 reshape 了 prototxt 的网络输入 size.

          1. Jwon
            @AIHGF

            嗯嗯,非常感谢您及时的解答

Leave a Comment