知识星球: 迷途小书童;个人微信:xituxiaoshutong100

3D人体和手势运动估计

ML/DL 迷途小书童 0评论

软硬件环境

  • ubuntu 18.04 64bit
  • NVidia GTX 1070Ti
  • cuda 10.1
  • cudnn 7.6.35
  • pytorch 1.6
  • anaconda with python 3.7

前言

前文介绍过的 OpenPose人体姿态估计 实现的是2D姿态估计,本文给大家介绍的是3D的人体姿态估计,项目名称是frankmocap,是香港中文大学联合Facebook AI研究院提出的人体姿态和形状估计算法,已经在github上面开源,项目地址是 https://github.com/facebookresearch/frankmocap

基本原理

frankmocap算法使用SMPL-X人体模型。给定一张彩色图片,通过两个网络模块分别预测手部姿态和人体姿态,然后再通过整合模块将手和身体组合在一起,得到最终的3D全身模型,整个流程如下图所示

frankmocap

更多理论性的内容请参考对应论文,地址是 https://arxiv.org/pdf/2008.08324.pdf

安装步骤

首先我们准备python的虚拟环境

conda create -n frankmocap python=3.7
conda activate frankmocap

然后开始拉取github上的源码,并安装常规的依赖库

git clone https://github.com/facebookresearch/frankmocap.git
cd frankmocap
pip install cython
pip install -r docs/requirements.txt

如果想体验手部动作捕捉,则需要安装Detectron2pytorch1.6和CUDA10.1可以使用下面的命令安装

python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.6/index.html

如果你的pytorchCUDA的版本跟我的不一样,可以到链接 https://github.com/facebookresearch/detectron2/blob/master/INSTALL.md ,选择自己的环境,获取对应的安装命令

frankmocap

如果想做姿态渲染,则需要安装Pytorch3D

pip install pytorch3d

下载第三方库和模型文件

sh scripts/install_frankmocap.sh

这个install_frankmocap.sh会去调用另外四个sh脚本,主要是去下载一些文件、压缩包,还有就是编译安装hand_object_detector,下载期间是各种网络问题,而且,需要吐槽一下的是,这几个sh写的并不友好,已经存在的文件或文件夹,重新执行的话,还是会重新下载。所以,如果是自己下载这些文件时,可以在对应sh脚本中将已经结束的步骤注释掉,这样可以省掉很多的时间。

最后所有相关的模型文件都在存储在一个extra_data的文件夹里,我把它打包好了,放在网盘里,自己去下。

百度网盘链接:https://pan.baidu.com/s/1JYyKQcNxbnOIcEy1eKmzZQ, 提取码:ljha

这里还需要注意一点,在安装hand_object_detector的时候,我的环境出现了如下的错误

frankmocap

经过翻看官方issues,发现是gcc的版本引起的,默认18.04系统自带gcc7.5,要解决上述的错误,需要将gcc降低至7.3以下,而且无法通过apt install的方法解决,需要从源码去编译gcc,这样的话风险就比较大了,由于我目前的机器,内容较多,就不去测试了。关于这个问题的具体的内容可以参考文末给出的链接。

最后去下载SMPL/SMPL-X模型,来到官方的网站 http://smplify.is.tue.mpg.de/login,需要注册账号

frankmocap

注册好了之后,就可以去下载模型文件、数据集和源代码了,这里我们只下载模型文件

frankmocap

将下载好的压缩包解压后,把其中的SMPLX_NEUTRAL.pkl文件拷贝到extra_data/smpl文件夹下

效果测试

捕捉身体运动

python -m demo.demo_bodymocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output

frankmocap

frankmocap

捕捉手部运动

python -m demo.demo_handmocap --input_path ./sample_data/han_hand_short.mp4 --out_dir ./mocap_output

捕捉全身运动

python -m demo.demo_frankmocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output

最后2个命令操作,由于上边hand_object_detector报错,这边暂时没办法测试,后续有条件的时候再测,下图是官方给出的测试效果图。

frankmocap

frankmocap

最后需要说明的是,目前这套算法的处理速度还是很慢,在没有手部运动捕捉的情况下,1070Ti也达不到3fps,工程化还有很长的路要走,我们持续关注。

参考资料

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址