PhotoWakeUp —— 创新实训(1)

PhotoWakeUp —— 创新实训(1)


目录

PhotoWakeUp —— 创新实训(1)

具体工作:

遇到的问题:

cpm模型:

spml模型:

环境的安装:

源码阅读与修改

 

在本次创新实训的第一周时间里,在研读论文的基础上,主要完成了输入图片,通过cpm模型得到人体十四个主要节点的信息,处理后作为输入传递到spml模型中,并最终训练生成人物的3d模型。


具体工作:

  1. 对cpm spml模型进行学习
  2. 寻找相应模型,并理解模型的架构,搭建环境
  3. 对模型的输出进行分析
  4. 用自己的图片作为输入,建立cpm模型与spml模型之间的联系

遇到的问题:

  1. 搜寻资料很困难,英文阅读也增加了难度
  2. 环境的安装
  3. 图片输入输出尺寸对应问题
  4. cpm与spml之间的联系

人体姿势关键点估计目前有着很多方法,如CPMDeeperCutCMU OpenPose AlphaPose等,我们使用了论文中提到的cpm模型。

cpm模型:

论文地址:https://arxiv.org/abs/1602.00134

Convolutional Pose Machines(CPM)是一种2D人体(手势)姿态估计算法。输入是一张人体姿势图,输出n张热力图,代表n个关节的响应。这篇论文的主要贡献在于使用顺序化的卷积架构来表达空间信息和纹理信息。顺序化的卷积架构表现在网络分为多个阶段,每一个阶段都有监督训练的部分。前面的阶段使用原始图片作为输入,后面阶段使用之前阶段的特征图作为输入,主要是为了融合空间信息,纹理信息和中心约束。

论文中给出了较为清晰的framework,如下所示

 

PhotoWakeUp —— 创新实训(1)_第1张图片

 

可以看到核心是构建多个FCN网络来预测part/joint的heat maps构成了cpm模型。有位大神总结的CPM的网络结构流程图如下:

PhotoWakeUp —— 创新实训(1)_第2张图片

 

  • 在Stage1阶段:原始图片经过卷积层,得到初始响应图
  • Stage2阶段:输入也是原始图片,但是在卷积层的中段,加入一个串联的结构,用来融合三部分的信息:一是stage1的响应图,二是阶段性卷积结果,三是高斯模版生成的中心约束
  • Stage n阶段:输入的不再是原始图片,而是stage2的阶段性卷积结果,即中间层特征图

可以看到,在cpm中,网络有一个格外的输入: center map,center map为一个高斯响应。因为cpm处理的是单人pose的问题,如果图片中有多人,那么center map可以告诉网络,目前要处理的那个人的位置。 因为这样的设置,cpm也可以自底向上地处理多人pose的问题。

 

论文中附带的效果图如下:

PhotoWakeUp —— 创新实训(1)_第3张图片

 


spml模型:

论文地址  http://files.is.tue.mpg.de/black/papers/SMPL2015.pdf

 SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法,该方法可以进行任意的人体建模和动画驱动。这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。如下面这种情况

 

PhotoWakeUp —— 创新实训(1)_第4张图片

 

根据其摘要的说明,该模型具有以下的特点

  • 有皮肤(骨骼蒙皮),纹理。
  • 基于顶点的模型,方便调整以适应各种人体形状以及姿态。
  • SMPL模型是从数据里面学习出来的,这个模型比目前业界效果更好,且和工业界的Unity,Maya是打通的。

环境的安装:

一、cpm开源地址 https://github.com/timctho/convolutional-pose-machines-tensorflow

cpm要求的环境是

  • Windows 10 / Ubuntu 16.04
  • Tensorflow 1.4.0
  • OpenCV 3.2

不支持Tensorflow过高版本

 

首先下载文件,并放入models/weights 文件夹中

  • Body Pose Model
  • Hand Pose Model (.pkl)
  • Hand Pose Model (tf)

修改测试图片路径及测试运行环境,

 

PhotoWakeUp —— 创新实训(1)_第5张图片

发现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

 

在解决完相应问题后,运行模型

 

PhotoWakeUp —— 创新实训(1)_第6张图片

发现在tmp文件夹下有模型生成

 

PhotoWakeUp —— 创新实训(1)_第7张图片

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模型,得到并存储关节点信息

PhotoWakeUp —— 创新实训(1)_第8张图片

运行spml模型

 

PhotoWakeUp —— 创新实训(1)_第9张图片

发现大体的姿态是正确的

ps:当cpm得到的节点的位置与spml所需要的位置不对应时,便会出现如下啼笑皆非的事情

               PhotoWakeUp —— 创新实训(1)_第10张图片

 

参考资料

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

 

你可能感兴趣的:(计算机视觉)