目录
PhotoWakeUp —— 创新实训(1)
具体工作:
遇到的问题:
cpm模型:
spml模型:
环境的安装:
源码阅读与修改
在本次创新实训的第一周时间里,在研读论文的基础上,主要完成了输入图片,通过cpm模型得到人体十四个主要节点的信息,处理后作为输入传递到spml模型中,并最终训练生成人物的3d模型。
人体姿势关键点估计目前有着很多方法,如CPM、DeeperCut、CMU OpenPose、 AlphaPose等,我们使用了论文中提到的cpm模型。
论文地址:https://arxiv.org/abs/1602.00134
Convolutional Pose Machines(CPM)是一种2D人体(手势)姿态估计算法。输入是一张人体姿势图,输出n张热力图,代表n个关节的响应。这篇论文的主要贡献在于使用顺序化的卷积架构来表达空间信息和纹理信息。顺序化的卷积架构表现在网络分为多个阶段,每一个阶段都有监督训练的部分。前面的阶段使用原始图片作为输入,后面阶段使用之前阶段的特征图作为输入,主要是为了融合空间信息,纹理信息和中心约束。
论文中给出了较为清晰的framework,如下所示
可以看到核心是构建多个FCN网络来预测part/joint的heat maps并构成了cpm模型。有位大神总结的CPM的网络结构流程图如下:
可以看到,在cpm中,网络有一个格外的输入: center map,center map为一个高斯响应。因为cpm处理的是单人pose的问题,如果图片中有多人,那么center map可以告诉网络,目前要处理的那个人的位置。 因为这样的设置,cpm也可以自底向上地处理多人pose的问题。
论文中附带的效果图如下:
论文地址 http://files.is.tue.mpg.de/black/papers/SMPL2015.pdf
SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法,该方法可以进行任意的人体建模和动画驱动。这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。如下面这种情况
根据其摘要的说明,该模型具有以下的特点
一、cpm开源地址 https://github.com/timctho/convolutional-pose-machines-tensorflow
cpm要求的环境是
不支持Tensorflow过高版本
首先下载文件,并放入models/weights 文件夹中
修改测试图片路径及测试运行环境,
发现cpm模型模型环境搭建成功。
二、smpl 模型地址http://smpl.is.tue.mpg.de/downloads
我的环境是64位ubuntu16.04,因为是新建了一个虚拟机,因此环境缺失较多,配置起来花费了一点时间,也出现了很多问题
1.OpenGL 安装方法
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
参考地址 https://blog.csdn.net/huangkangying/article/details/82022177
2 Opencv 安装方法
pip install opencv-python
参考地址 https://blog.csdn.net/jinxin521125/article/details/76910012
3 Ubuntu下为python下载python-tk软件包
sudo apt-get install python-tk
参考地址 https://blog.csdn.net/daydayjump/article/details/78430706
4 ubuntu下修改环境变量以及添加PYTHONPATH方法
暂时 :
在当前终端中输入:export PATH=$PATH:<你的要加入的路径>
永久 :
$ gedit ~/.bashrc
添加export PATH=<你的要加入的路径>:$PATH
保存后在终端输入 $ source ~/.bashrc 使环境变量立即生效
参考地址 https://blog.csdn.net/jasonzzj/article/details/53941147
在解决完相应问题后,运行模型
发现在tmp文件夹下有模型生成
spml模型环境也搭建成功。
既然demo都跑通了,下一步就是将这些模型能为我所用。通过对smpl源码的阅读,发现该模型男女性是分别训练的,并且对生成模型其关键作用的主要是人体十四个关节点的数据。通过进一步分析知道了节点的顺序( Right ankle,Right knee,Right hip,Left hip, Left knee, Left ankle,Right wrist, Right elbow,Right shoulder, Left shoulder, Left elbow ,Left wrist, Neck ,Head top)以及节点信息存储的位置。节点信息存储在/smplify_public/results/est_joints.npz文件中,读取该文件,发现是一个键为‘est_joints’值为(28, 14, 2000)的列表的字典。
因此阅读cpm的源码,将其中表示关节点的信息存储到npz文件中,同时修改相应的性别信息,运行cpm模型,得到并存储关节点信息
运行spml模型
发现大体的姿态是正确的
ps:当cpm得到的节点的位置与spml所需要的位置不对应时,便会出现如下啼笑皆非的事情
参考资料
https://link.springer.com/chapter/10.1007/978-3-319-10605-2_3
https://blog.csdn.net/zimenglan_sysu/article/details/52077138
https://blog.csdn.net/qq_36165459/article/details/78321054
https://blog.csdn.net/yeahDeDiQiZhang/article/details/78131566?locationNum=1&fps=1
https://blog.csdn.net/mpsk07/article/details/79522809
https://blog.csdn.net/cherry_yu08/article/details/80846146