3DDFA:深度学习在三维人脸重建中的经典应用与代码解析

本文主要基于开源项目3DDFA[1],对采用深度学习训练方法的3DMM模板人脸重建算法整体流程做一个介绍。如有错误,欢迎评论指正。


一.算法流程

二.具体步骤

1.数据

数据集:300W-LP,AFLW,AFLW2000-3D

身份GT、表情GT和姿态GT生成

采用analysis-by-synthesis的方法生成[6],可以参考笔者之前的公众号文章[7],当然论文里提及下一步face profiling用到的MFF[4]生成的,具体区别在于引入了一些额外的损失函数进来。

数据增强

1)face profiling

3D-meshing[5]

face profiling[1]

人脸姿态增强,大概步骤如下:

  • 利用GT关键点,采用MFF[4]算法进行3DMM拟合,并进一步补全得到完整的带耳朵脖子的全头模型;
  • 选定三组锚点:boundary anchors,surrounding anchors,background anchors,然后进行delaunay三角剖分(当然这一步对于后两组的锚点需要进行一些估计);
  • 施加想要的姿态变换到3dmm模型上,投影到图像上,也就对应了另一组三角剖分,然后按照论文提到的约束构建方程求解,最后就得到了姿态变换后的图像。

**注:**论文关于face profiling这里介绍不多,官方的matlab代码注释也很少比较难懂,笔者参考[11]中提到的人脸对齐步骤,最终的理解:

  • 首先在人脸图像上的关键点上做三角剖分;
  • 然后对于人脸图像对应的拟合3DMM模型运用姿态变换得到新视角,投影回图像平面进而得到一个新的三角剖分,计算这两个三角剖分的仿射变换,从而就可以得到姿态变换后的人脸图像了。
2)in-plane rotation
     图片旋转。
3)bbox perturb
     人脸框扰动。

2.网络

输入

1)PAF(model-view feature)

具体步骤如下:

  • 对施加了当前身份、表情、姿态参数的3DMM模型进行柱面展开[2][3],然后按照固定的方位角和高度进行采样得到(3,64x64)维度的三维点,并进一步投影到图像平面得到(2,64x64)维度的anchor。

柱面展开并采样

anchor

  • 假设取kernel size为3,取每个anchor附近的3x3邻域的像素,然后连接到一起,最后得到一张(64x3,64x3,3)大小的图像。

生成paf的代码

生成的paf图像

2)PNCC(image-view feature)

PNCC生成比较简单,具体步骤如下:

  • 归一化3DMM的平均脸,使得x,y,z均在(0,1)范围内

  • 将NCC作为顶点像素值,采用Z-Buffer将施加了当前身份、表情、姿态参数的3DMM模型投影得到一张渲染图,即PNCC。

生成的pncc图像

输出

式中,q0q_0q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值