团队: 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
OpenPose,强大的姿态估计开源项目,包括 Body, Face, Hands,3D Reconstruction等.
OpenPose 是对单张图像的人体肢体Body, 手部Hand, 面部Facial 等关键点的实时多人检测系统(共135 个关键点).
1. 最新更新
- Jan 2019: Unity plugin released!
- Jan 2019: Improved Python API released! Including body, face, hands, and all the functionality of the C++ API!
- Dec 2018: Foot dataset and new paper released!
- Sep 2018: Experimental single-person tracker for further speed up or visual smoothing!
- Jun 2018: Combined body-foot model released! 40% faster and 5% more accurate!
- Jun 2018: Python API released!
- Jun 2018: OpenCL/AMD graphic card version released!
- Jun 2018: Calibration toolbox released!
- Jun 2018: Mac OSX version (CPU) released!
- Mar 2018: CPU version!
- Mar 2018: 3-D keypoint reconstruction module (from multiple camera views)!
更多更新细节,参考: all released features 和 release 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. 其它
- 命令行 Demo,C++ 封装接口,C++ API
- Python API.
- Unity Plugin.
- CUDA (Nvidia GPU), OpenCL (AMD GPU), 和 CPU 版本.
- 训练代码:Github - ZheC/Realtime_Multi-Person_Pose_Estimation
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_DIRS
和 OpenCV_LIBS_DIR
指定 OpenCV 安装的 libraries
路径和 include
路径. 或者,也可以通过设置 OpenCV_CONFIG_FILE
来指定 OpenCVConfig.cmake
的路径.
对于 Caffe,采用 Caffe_INCLUDE_DIRS
和 Caffe_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_MODE
为 CPU_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/
路径.)