单目全身捕捉
CVPR19 论文"单目全身捕捉:在野外姿势化面部、身体和手部"的代码
项目网站:[http://domedb.perception.cs.cmu.edu/mtc.html]
依赖项
此代码在搭载GTX 1080Ti GPU的Ubuntu 16.04机器上测试通过,具有以下依赖项。
- ffmpeg
- Python 3.5(安装了TensorFlow 1.5.0、OpenCV、Matplotlib等pip3包)
- cmake >= 2.8
- OpenCV 2.4.13(从源码编译,使用CUDA 9.0和CUDNN 7.0)
- Ceres-Solver 1.13.0(带SuiteSparse)
- OpenGL、GLUT、GLEW
- libigl https://github.com/libigl/libigl
- wget
- OpenPose
安装
- 克隆此仓库;假设您本地机器上的主目录为${ROOT}。
- "cd ${ROOT}"
- "bash download.sh"
- 克隆并编译OpenPose https://github.com/CMU-Perceptual-Computing-Lab/openpose。假设OpenPose的主目录为${openposeDir},编译后的二进制文件位于${openposeDir}/build/examples/openpose/openpose.bin
- 编辑${ROOT}/run_pipeline.sh:将第13行设置为您的${openposeDir}
- 编辑${ROOT}/FitAdam/CMakeLists.txt:将第13行设置为libigl的"include"目录(这是一个仅头文件的库)
- "cd ${ROOT}/FitAdam/ && mkdir build && cd build"
- "cmake .."
- "make -j12"
使用方法
- 假设要测试的视频名为"${seqName}.mp4"。将其放在"${ROOT}/${seqName}/${seqName}.mp4"中。
- 如果已知相机内参,将其放在"${ROOT}/${seqName}/calib.json"中(参考"POF/calib.json"示例);否则,将使用默认相机内参。
- 在${ROOT}中,运行"bash run_pipeline.sh ${seqName}";如果视频中的人物只显示上半身,运行"bash run_pipeline.sh ${seqName} -f"。
Docker镜像
- 安装NVIDIA Docker
- 构建Docker镜像
docker build . --tag mtc
- 运行Docker镜像:
xhost local:root
docker run --gpus 0 -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY -e XAUTHORITY -e NVIDIA_DRIVER_CAPABILITIES=all mtc
- 进入容器后(默认应该在/opt/mtc目录):
bash run_pipeline.sh example_speech -f
在Ubuntu 16.04和18.04上使用Titan Xp和Titan X Maxwell(外置Razer Core)测试通过。
示例
"download.sh"会自动下载2个示例视频用于测试。成功安装后运行
bash run_pipeline.sh example_dance
或
bash run_pipeline.sh example_speech -f
许可和引用
此代码仅可用于非商业研究目的。如果您在研究中使用此代码,请引用以下论文。
@inproceedings{xiang2019monocular,
title={Monocular total capture: Posing face, body, and hands in the wild},
author={Xiang, Donglai and Joo, Hanbyul and Sheikh, Yaser},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2019}
}
@inproceedings{joo2018total,
title={Total capture: A 3d deformation model for tracking faces, hands, and bodies},
author={Joo, Hanbyul and Simon, Tomas and Sheikh, Yaser},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2018}
}
此代码的部分内容修改自lmb-freiburg/hand3d。
Adam模型
我们在此代码中使用可变形人体模型Adam。
Adam与SMPL的关系: Adam的身体部分源自Loper等人2015年提出的SMPL模型。它遵循SMPL的身体关节层次结构,但使用不同的关节回归器。Adam不包含原始SMPL模型的形状和姿势混合形状,而是使用从Panoptic Studio数据库训练的自己版本。
Adam与FaceWarehouse的关系: Adam的面部部分源自FaceWarehouse。具体来说,Adam面部的网格拓扑是FaceWarehouse数据集学习模型的修改版本。Adam不包含原始FaceWarehouse数据的混合形状,由于版权问题,Adam模型的面部表情不可用。
Adam模型仅供研究目的共享,不得用于商业目的。未经许可,也不允许重新分发原始或修改版本的Adam。
特别说明
- 在我们的代码中,ceres::AngleAxisToRotationMatrix的输出始终是行主序矩阵,而该函数设计用于列主序矩阵。为了解决这个问题,请将我们的输出姿势参数视为相反值。换句话说,在将我们的姿势参数导出到其他软件之前,请将它们乘以-1。