3D Face Reconstruction from A Single Image Assisted by 2D Face Images in the Wild (2DASL)

1. 文章大致介绍

  • 先看本文的人脸重建效果图:
    results

图片备注:第一三行是借助人脸重建实现的人脸密集对齐(当然这里仅仅展示了人脸的68个点),第二四行是人脸重建最终的渲染效果。我们可以看到第三四五列的人脸有侧脸情况,所以对于一般的人脸对齐方法而言,效果可能不是很好,但是借助三维人脸重建实现的密集人脸对齐能够有效地解决侧脸情况;第六七八列有手遮挡脸部或者本身图片显示人脸不完全,我们也可以看到能够比较稳定地显示人脸关键点或人脸三维模型

  • 一句话概括本文,本文提出的方法叫做2D-assisted self-supervised learning,简称为2DASL,其实核心思想就是通过CNN来回归3DMM系数,所以说并没有摆脱3DMM的框架,但是比较新颖的一点是借助自监督训练,解决了人脸三维数据集不足的问题,具体贡献如下所示:
  1. 一般的三维人脸重建方法都过多依赖于三维标注的数据集,但是本文提出了一种自监督训练的方法能够充分利用未标注的野生(in-the-wild)数据辅助人脸三维重建,不再依赖于稀缺的数据集
  2. 其中发明了一种“自我评估训练”(self-critic)的方法能够有效地提升模型的学习质量(后文可知类似于GAN网络),尽管标注的野生的数据可能有噪声
  3. 在AFLW2000-3D数据集和AFLW-LFPA数据集上的实验表明本文的方法对于人脸重建与稠密人脸对齐都有比较好的效果

2. 相关工作

其实几乎每篇三维人脸重建论文都要提一嘴3DMM的问题,可以看一下我写的GANFIT相关研究介绍部分,这里不再赘述

2.1 关于三维人脸重建与密集人脸对齐

  • 三维人脸重建与密集人脸对齐其实差不多可以看成一回事,给你一张图片,只要你能够进行三维人脸重建,往往再进行人脸对齐其实就是轻而易举的事情,举个例子,我进行三维人脸重建只要得到了人脸的3DMM系数即可,而人脸的3DMM系数经过转化,将得到人脸的53215个点,其中68个关键点的位置都有固定的索引,能够轻而易举地得到。当然并不是所有的三维人脸重建方法都能同时进行人脸密集对齐,比如VRNet,用空间的体素进行人脸重建,却无法得到各个关键点的具体位置。
  • 关于人脸对齐,刚开始其实只是称之为稀疏的人脸对齐,用CNN进行回归即可取得不错的效果,但是缺点就是对于large pose(参考图1的三四五列)与occlusion(参考图1的六七八列)的情况会失去效果,因此密集人脸对齐应运而生,我直接建成人脸的三维模型之后(或者说进行3DMM fitting),要继续得到侧脸或者被遮挡的关键点其实就是轻而易举的事情了。
  • 起初的3DMM拟合方法通过最小化输入图片与渲染图片之间的像素差异进行优化,但是时间成本花费过大;后面提出的基于CNN的方法取得了更加不错的效果,时间花费也比较少,但是缺点在于需要三维标注的数据集进行训练,而这种数据集却比较少,比较广泛使用的也就是300W-LP,但是即使是300W-LP,其中的人脸的多样性(比如较大的拍摄角度,夸张的表情等)也是稀缺的

3. 本文核心方法

本文框架如图所示:
frame
首先记住下面几点再往后看:

  • 左边上面的数据集是有三维标注的数据集,左边下面的数据集是野生数据集
  • 2D FLM (2D facial landmark map) 是人脸关键点图,是一张二值图像,有关键点的像素就是1,没有关键点的像素就是0,与图像的RGB通道一起,作为第四通道输入CNN
  • 野生数据集的关键点是用现成方法提取的
  • 上面的数据集对应右上方的训练路径,下面的数据集对应右下方的训练路径, α ∗ \alpha^* α代表左边上面三维标注数据集的ground truth, α j \alpha_j αj α i \alpha_i αi都是CNN的相同输出,只不过为了区分两条训练路径而写成不同下标

3.1 如何生成三维模型

本文的最终目的是根据输入的图片得到3DMM系数,可以用如下式子表示
s
其实和3DMM的公式一样,只不过正宗的3DMM公式里shape系数有199个,exp系数有29个,这里shape系数取了40个,exp系数取了10个。得到S(人脸53215个点的三维坐标)之后,为了渲染,经过局部坐标到世界坐标变换,相机坐标变换,正交投影变换,就能完成栅格化之前的一系列操作,这些栅格化之前的变换合并起来,能简化成如下式子:
v
f代表缩放,Pr代表正交投影,PI代表投影矩阵,t代表位移矩阵(其实就是个仿射变换),这些系数加上前面的3DMM系数总共62个,记作
a
而本文最终的目的,就是为了得到这62个系数

3.2 损失函数的定义

3.2.1 普通训练损失

  • weighted coefficient prediction loss: L 3 d L_{3d} L3d
    其实就是最基本的衡量生成的这62个系数的损失函数,一般来说直接和ground truth进行 l 2 l_2 l2损失的计算即可,但是本文却为每一个系数添加了不同的权重,具体式子如下所示:
    l3
    在这里插入图片描述
    有了这些权重有什么好处呢,模型肯定会优先优化权重大的系数(我让投影之类的系数权重大一点),这样先把渲染出的landmark对齐,后面再专心优化表情,纹理等一些比较细节的东西,提高效率。
    上面的H应该就是代表了一种各个系数拥有的权重的计算方法

3.2.2 自监督训练损失

self
上面的图显示了作者构思的自监督训练过程,左上角的输入图片的68个关键点二维坐标 X 2 d X_{2d} X2d,经过本文的模型之后得到68个关键点的三维坐标 X 3 d X_{3d} X3d,再将其映射回平面,再次得到68个关键点的二维坐标 Y 2 d Y_{2d} Y2d,我得到的坐标其实还可以继续充当输入,得到 X ^ 3 d \hat{X}_{3d} X^3d,之后类似的, X ^ 3 d \hat{X}_{3d} X^3d继续投影得到 X ^ 2 d \hat{X}_{2d} X^2d,而将二维与二维比较,三维与三维进行比较,就得到了 L 2 d − c o n L_{2d-con} L2dcon L c y c L_{cyc} Lcyc L 3 d − c o n L_{3d-con} L3dcon

  • 2D landmark consistency loss: L 2 d − c o n L_{2d-con} L2dcon
    这里的损失不是将68个关键点进行求欧式距离,而是简化为了18个点,并各自加了不同的权重,如图所示:
    2d
    在这里插入图片描述
  • 3D landmark consistency loss: L 3 d − c o n L_{3d-con} L3dcon
    这里是计算了68个点的三维坐标距离
    在这里插入图片描述
  • cycle consistency loss: L c y c L_{cyc} Lcyc
    作者所提出的循环一致性在此得到了体现
    在这里插入图片描述
  • self-critic loss: L s c L_{sc} Lsc
    selfcri
    自我评估损失在结构图中的右下的路径进行,简而言之,结构图的右下训练路径和前面构成了一个GAN网络,生成器就是为了生成3DMM系数,鉴别器就是为了判断3DMM系数到底像不像真的人。在训练的过程中,告诉鉴别器所谓真的东西,是三维标注的图片3DMM系数与图片经过编码器的潜在表示(这当然是真的,毕竟是ground truth),而所谓假的东西,是我根据野生图片生成的3DMM系数与该野生图片经过编码器之后的潜在表示(为了以假乱真,我需要让鉴别器不断否定我生成的东西,以训练我去努力生成真的东西,也就是越来越像ground truth的3DMM系数)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值