这篇文章也是解决从一张2D图到3D人脸精细重建的问题的。
文章自称是第一个将图神经网络用于3D人脸重建的。并且说自己的模型不需要精细的人脸纹理做监督,只需要随便的人脸图片就行。
结构如图所示,黄色的部分都是用的别人已经训练好的模型,灰色的是不可训练的,蓝色的就是需要训练的部分。
模型分为三个部分:
1.3DMM参数回归和粗粒度的纹理提取,这就是regressor这一部分一直到R图的流程,和经典的训练流程完全一致,就是预测3DMM的光照,位姿,形状,表情和纹理参数,然后用可微渲染器渲染出最终图像。而且模型完全是照搬别人的。
2.细粒度的纹理提取。这就是从facenet一直到R'这一路的流程。具体来说就是使用FaceNet来提取人脸的身份信特征,然后输入GCN decoder来获得基于身份的纹理信息。之后再将Regressor中获取的纹理用GCN精炼一遍,再将两个结果拼接到一起,最后输入combine net来预测最终的人脸纹理。
3.对抗训练,就是将最终生成的R'和输入的图片I做一个对抗训练,来让模型生成更真实的纹理。
具体loss如下:
1.像素损失:就是先用语义分割器将人脸遮挡部分去掉,对剩下的皮肤部分做L2损失
2.身份损失:就是将渲染出的R'再放回FaceNet提取身份特征,再与原图得到的身份特征做cosine loss。
3.顶点损失:因为像素损失是将被遮挡的地方都去掉的,所以模型在训练的一开始可能不稳定,因此作者这里提取了R'中每个顶点的颜色,然后与R中每个顶点的颜色做l2损失。这个损失的权重会随着训练慢慢减小。
4.对抗损失:就是用WGAN的loss做了个对抗损失。