Github 项目 - openpose

团队: CMU-Perceptual-Computing-Lab

论文1:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields - CVPR2017

论文2:Hand Keypoint Detection in Single Images using Multiview Bootstrapping - CVPR2017

论文3:Convolutional Pose Machines - CVPR2016

OpenPose,强大的姿态估计开源项目,包括 Body, Face, Hands,3D Reconstruction等.

OpenPose 是对单张图像的人体肢体Body, 手部Hand, 面部Facial 等关键点的实时多人检测系统(共135 个关键点).

1. 最新更新

更多更新细节,参考: all released featuresrelease notes.

1.1. Features

1.功能

[1] - 2D 实时多人关键点检测

  • 15 或 18 或 25 个关键点的肢体估计. 运行时间不受图片中检测到的人体数量的影响.
  • 2x21 手部关键点估计. 现阶段,运行时间取决于检测到的人体数量.
  • 70 个关键点的面部估计. 现阶段,运行时间取决于检测到的人体数量.

[2] - 3D 实时单人关键点检测

  • 从多个单视角的 3D 三角测量(triangulation)
  • FLIR摄像机的同步处理
  • 与 Flir/Point Grey 摄像机兼容,但提供了 C++ Demos,以添加自定义输入.

[3] - 标定工具箱(Calibration toolbox)

  • Easy estimation of distortion, intrinsic, and extrinsic camera parameters.

[4] - 单人追踪(Single-person tracking)

  • 进一步提升速度,视觉平滑.

2. 输入(Input)

  • 图像Image,视频Video,相机Webcam,Flir/Point Grey 和 IP 摄像机.
  • C++ Demos,添加自定义输入.

3. 输出(Output)

  • 图像images + 关键点Keypoints 显示和保存(PNG, JPG, AVI, ...)
  • 关键点Keypoints 保存(JSON, XML, YML, ...)
  • 关键点Keypoints 作为数组类(array class)

4.支持系统(OS)

  • Ubuntu (14, 16)
  • Windows (8, 10)
  • Mac OSX
  • Nvidia TX2

5. 其它

1.2. Results

1. 肢体-脚部关键点估计(Body-Foot Estimation)

2. Body, Face, Hands 估计

3. 3D Reconstruction 模块

4. Body 和 Hands 估计

5. Body 估计

6. Unity Plugin

1.3. 运行实时性分析

对比三个姿态估计开源库:

  • OpenPose
  • Alpha-Pose (fast Pytorch version)
  • Mask R-CNN

分别采用 batchsize=1 对相同的图片进行处理. 重复 1000 次求平均. 基于 Nvidia 1080Ti 和 CUDA8.0.

不包含 Megvii(Face++) 和 MSRA 开源的项目,因为其仅提供了对于给定裁剪人体的姿态估计结果. 不过,其与 Alpha-Pose 和 Mask R-CNN 具有相同的问题,即,运行时间与图像中人体数量线性相关.

2. Ubuntu 安装

OpenPose 支持平台比较丰富,但提供的安装说明也相对比较多,这里仅结合个人安装过程的说明.

2.1. 依赖项

  • 不要安装 Anaconda - Anaconda 的 Protobuf 版本与 OpenPose 内的 Caffe 不兼容(这个貌似通过采用自定义版本的 Caffe 来解决).
  • 安装 CMake GUI.

    sudo apt-get install cmake-qt-gui
  • Nvidia GPU - OpenPose 在 CUDA8.0 和 cuDNN5.1 测试. 个人安装环境:CUDA9.0 和 cuDNN7.1.4.
  • Caffe

2.2. OpenPose 配置

[1] - 打开 CMake GUI,并选择 OpenPose 路径作为项目源码路径,以及对应的 build 编译路径,如果 build 路径不存在,则会出现 YES 以自动创建.

[2] - 点击 Configure 选项,然后 Unix Makefile(Ubuntu,下图左),最后 Finish.

[3] - 点击 Generate 选项,即可关闭 CMake.

注:如果需要用 Python API,则需要在 [2] Configure 后,选择BUILD_PYTHON,如:

2.3. OpenPose 编译

cd OPENPOSE_ROOT/build/
make -j`nproc`

编译无误即可.

2.4. 其它相关

[1] - 编译时不采用 cuDNN

OpenPose 配置中,去除 CMake 的 USE_CUDNN 勾选.

如果不采用 cuDNN,则需要减少 --net_resolution 设定的尺寸,以避免 GPU 显存不足.

--net_resolution 可尝试:640x320, 320x240, 320x160, 160x80

如:--net_resolution -1x320.

[2] - 自定义 Caffe 版本:

OpenPose 配置中,去除 CMake 的 BUILD_CAFEE 勾选,手工定义 Caffe include路径和 library路径.

[3] - 自定义 OpenCV 版本:

OpenPose 配置中,如果是从源码编译安装的 OpenCV,导致 OpenPose 不能找到 OpenCV路径,则可以手工指定 OPENCV_DIR 路径.

2.5. CMake 命令行配置

如果已经采用 CMake GUI 配置编译,此部分则不必要.

[1] - 创建 OPENPOSE_ROOT/build 路径:

cd OPENPOSE_ROOT/build
mkdir build
cd build

[2] - 生成 Makefiles 文件. 此时有几种场景: Caffe 可以是用户自定义安装的版本;或者是在 OpenPose 中集成的 Caffe 版本.

场景1 - Caffe 未安装,OpenCV 采用 apt-get安装

cd build
cmake ..

场景2 - Caffe 已安装,OpenCV 采用源码安装

假设 Caffe 和 OpenCV 已经存在.

则,需要给 CMake 提供 libraries路径和 include路径.

对于 OpenCV,采用 OpenCV_INCLUDE_DIRSOpenCV_LIBS_DIR 指定 OpenCV 安装的 libraries路径和 include路径. 或者,也可以通过设置 OpenCV_CONFIG_FILE 来指定 OpenCVConfig.cmake 的路径.

对于 Caffe,采用 Caffe_INCLUDE_DIRSCaffe_LIBS 指定 Caffe 安装的 libraries路径和 include路径.

如:

cmake -DOpenCV_INCLUDE_DIRS=/home/"${USER}"/softwares/opencv/build/install/include \
  -DOpenCV_LIBS_DIR=/home/"${USER}"/softwares/opencv/build/install/lib \
  -DCaffe_INCLUDE_DIRS=/home/"${USER}"/softwares/caffe/build/install/include \
  -DCaffe_LIBS=/home/"${USER}"/softwares/caffe/build/install/lib/libcaffe.so -DBUILD_CAFFE=OFF ..
cmake -DOpenCV_CONFIG_FILE=/home/"${USER}"/softwares/opencv/build/install/share/OpenCV/OpenCVConfig.cmake \
  -DCaffe_INCLUDE_DIRS=/home/"${USER}"/softwares/caffe/build/install/include \
  -DCaffe_LIBS=/home/"${USER}"/softwares/caffe/build/install/lib/libcaffe.so -DBUILD_CAFFE=OFF ..

场景3 - OpenvCV 已安装

如果 Caffe 未安装,但 OpenCV 已安装:

cmake -DOpenCV_INCLUDE_DIRS=/home/"${USER}"/softwares/opencv/build/install/include \
  -DOpenCV_LIBS_DIR=/home/"${USER}"/softwares/opencv/build/install/lib ..
cmake -DOpenCV_CONFIG_FILE=/home/"${USER}"/softwares/opencv/build/install/share/OpenCV/OpenCVConfig.cmake ..

2.6. Python API

OpenPose的 Python API,需要在 CMake GUI 中设置 BUILD_PYTHON.

如:./build/examples/tutorial_developer/python_1_pose_from_heatmaps.py.

2.7. CPU 版本

为了可以手工选择 CPU 版本,则在 CMake GUI 中设置 GPU_MODECPU_ONLY.

注:CPU 版本的精度比 CUDA 版本的精度高大约 1%. 故结果可能有不同.

Ubuntu 中的 OpenPose 利用了 Caffe 的 Intel MKL(Math Kernel Library) 版本. 也可以通过取消选择USE_MKL,利用自定义的 Caffe 版本.

默认 CPU 版本在 Ubuntu 上大概每秒 0.2 张图像(比 GPU 版本慢 ~50X ). MKL 版本能够提升 2X 的速度,每秒 ~0.4 张图像.

2.8. OpenPose 重新安装与删除

[1] - 如果运行了 sudo make install,则,首先在 build/ 中运行 sudo make uninstall.

[2] - 删除 build/ 路径.

[3] - CMake GUI 中,点击 File - Delete Cache.

[4] - 重新安装.(或删除 OPENPOSE_ROOT/ 路径.)

Last modification:May 5th, 2019 at 09:07 pm