3D【9】人脸重建:Joint3D Face Reconstruction and Dense Alignment with Position Map Regression

该论文同时预测人脸特征点和3D mesh的顶点坐标x,y,z。人脸特征点没什么好说的,现在已经有很多成功的案例了。主要关注该论文是如何预测顶点坐标的。其实大概想想,就能够大致确定直接预测顶点坐标是有不少困难的。首先是,你不能把所有的顶点拉成一个向量,用全连接层预测;要用卷积层作为输出的话,mesh又不能直接表示成一个固定大小的张量(这正好是用cnn来预测所需要解决的问题,比如将mesh立方体化)。

该论文通过将mesh的顶点用uv图表示,从而达到了将mesh用一个固定大小的张量表示(256×256×3)。一个3D mesh的顶点的纹理坐标可以用uv信息找到。而作者则利用了这一点,将40K的顶点映射到了256×256(60K+个顶点)的图片过去,每个点的内容为归一化后的顶点坐标x,y,z。作者这个uv图做的很好,每个顶点映射到这张uv图上都没有重叠的。如下:
3D【9】人脸重建:Joint3D Face Reconstruction and Dense Alignment with Position Map Regression
上图左边是真是图片和相应的3D 人脸。右边上面那一行分别是:真实图片,uv纹理图,mesh映射到uv图上;下一行分别是mesh映射到uv图上的x,y,z。

有了上面的表示方法,就可以用CNN网络像预测一张图片那样直接预测顶点坐标了,具体没什么好说的。下图:
3D【9】人脸重建:Joint3D Face Reconstruction and Dense Alignment with Position Map Regression

作者为了更好的预测坐标,或者说,为了使预测出来的mesh更有意义。他们在计算损失函数的时候,对不同区域的顶点的误差进行加权:
3D【9】人脸重建:Joint3D Face Reconstruction and Dense Alignment with Position Map Regression
上图分别是纹理uv图,mesh顶点uv图,不同区域的加权(4个大区域,特征点,鼻子眼睛嘴,人脸其他部分,脖子),加权比例图(16:4:3:0)。加权是在损失函数上进行的:
3D【9】人脸重建:Joint3D Face Reconstruction and Dense Alignment with Position Map Regression
其中P和P~ 是预测的坐标点和真是的坐标点,W就是加权图。

作者给出了代码:https://github.com/YadiraF/PRNet

跑了一下结果,发现该论文重建出来的人脸还是存在问题的,这个问题跟我之前做的遇到问题是一样的。就是生成的mesh会有明显的条纹状出现:
3D【9】人脸重建:Joint3D Face Reconstruction and Dense Alignment with Position Map Regression
期待后续的改进。