这篇发表于是ECCV2018,利用神经网络直接预测了3D landmark,取得了不错的效果
2D face alignment技术已经比较成熟,3D face reconstruction和3D face alignment一直是一个热点问题。目前普遍的方法是基于3DMM或者3D face template,但是本文不需要3DMM系数或者TPS扭曲参数,直接通过神经网络,建立从2D图片到3D模版的映射关系,效率很高。
项目地址:https://github.com/YadiraF/PRNet
平台:tensorflow
训练数据集:300W-Large Pose Face Alignment,97967张图片用于训练,24483张图片用于测试,训练集和测试集无重叠。该数据集包含了从正负5度到90度的多Pose人脸以及3D landmark。
一、如何建立2D人脸和3D人脸的映射关系?
这篇文章提出用UV position map来表现3D Face。 UV position map,记录UV空间中所有点的3D位置。如下图左所示, 3D空间的原点与输入图像的左上方重叠,正x轴指向图像的右侧。当投影到x-y平面时,地面实况3D面部点云与2D图像中的面部精确匹配。因此,我们可以很容易地理解我们的位置图,即用x,y,z坐标替换纹理贴图中的r,g,b值。
右图第一行分别表示,输入的2D图片,UV texture map,UV position map。
第二行分别表示,UV position map的x,y,z通道。
二、网络结构和Loss Function?
这篇文章的网络结构很简单,就是一个Encoder-Decoder结构。该文章的Encoder包含10个Residual blocks,输入是256x256x3的RGB图片,经过5次下采样得到了8x8x512的特征图。Decoder据说有17个transposed convolution layers,经过5次上采样得到了256x256x3的position map。
这篇文章采用了MSE Loss(Mean Square Error),来计算预测的position map与ground truth的差距。
三、输出文件格式以及如何应用?
作者给的开源代码地址已经贴了,通过运行demo.py可以生成各种结果。由于项目需要,我们运行了该代码,获取了后缀为.obj的3D人脸模型文件。
Obj文件是Wavefront公司开发的一种标准3D模型文件格式,用想python导入该文件格式并显示需要安装pywavefront包。
Obj文件是一种3D模型文件,文件主要支持多边形(Polygons)模型。在OBJ文件中,每行的格式如下:
前缀 参数1 参数2 参数3 ...
这篇文章生成的Obj文件中仅包含以下两种关键字:v 几何体顶点(Geometric vertices)和 f 面(Face),下图是实际生成的Obj文件。
v 表示本行指定一个顶点。此前缀后跟着6个单精度浮点数,分别表示该定点的x、y、z坐标值以及归一化后的x、y、z坐标值。
f 表示本行指定一个表面,即一个三角形图元。
将Obj文件读取之后,我们可以通过Opengl将生成的3D人脸模型做各种骚操作,届时我会开另外一篇文章进行介绍。