3DMM 相关知识

一个允许形变的三维模型。可以理解成这是一个标准的人脸模型,这个世界上的所有人脸都可以由这张标准量经过一些变形而生成。
有点像一些游戏里的捏脸,给一个初始模型,对五官进行调整。3DMM给定了两组系数,分别是:形状系数,颜色系数。不同的3DMM模型定义的系数是有些许差别的,实际上,后面还延伸出一种表情系数。我们简单对这三组系数做一下说明:

  1. 形状系数:指定人脸的三维形状,有了这组系数,我们就可以生成一个面无表情的,光秃秃(没色彩)的三维模型。或者叫它原型比较合适。
  2. 颜色系数:指定颜色。有了这组系数,就可以对模型进行上色了,这时会得到一个逼真的有色彩的可是面无表情的三维模型。
  3. 表情系数:指定表情。有了这组系数,我们的模型可以微笑、难过、大笑、甚至噘嘴、眨眼。是的,模型活了。

微软这篇论文中选用 BFM2009(3DMM大家庭中的一个版本,由Basel大学制作并公开,官网)作为模板,用于生成三维人脸。
在BFM2009中,形状系数是一个长度为199的向量,论文中只用了80个数。对此的理解是,数越少,损失的信息也会越多。不过,它是有进行重要性排序的,也就是这80个数是这199个系数中最重要的数。可能会丢失一些沟壑、边边角角的信息,但是整体的轮廓仍然是准确的。颜色系数同理。

注意本文采用的是弱监督学习方式,牛就牛在这里。三维人脸数据集非常有限,本文不需要任何标注训练集。唯一需要的训练集就是尽量多的仅包含一张人脸的照片,当然有标注68个关键点的话更好。

如何根据单张图片获得3DMM系数?
论文中采用的是神经网络的方法。输入单张长宽都为224的人脸图片,使用ResNet-50进行特征提取,修改了最后一层的神经元个数,设为239,也就是会输出239个数,其中80个是形状系数,80个颜色系数,64个表情系数,还有9个球面谐波系数,6个3D人脸姿态系数。球面谐波系数是光照,人脸姿态是旋转和偏移量。

而一个神经网络要发挥指定的作用,损失函数是关键。损失函数让神经网络按照我们的意愿来进行学习,所以论文关键点之一就是提出了混合损失函数

通过神经网络回归得到的系数,已经足够我们生成一个模型,并且生成三维人脸的二维投影。有了这个投影,我们就可以用投影得到的图和原图进行一个颜色比对,这个比对过程就可以得到重构过程的损失。

人脸三维重建与表观建模

视频:https://www.bilibili.com/video/BV164411J7VR?p=5
ppt:https://pan.baidu.com/s/1ACty-kEOyO8peuaEMPVrgg#list/path=%2F
主讲人:李琛-腾讯优图实验室

image.png

3DMM:获取很多人脸,PCA降维,提取2个维度的特征向量,长相和表情,取平均,得到标准模板。
image.png

image.png

image.png
目标参数:投影方式,长相identity,表情expression和皮肤texture。
约束:

  1. 特征点对齐,比如68个人脸关键点。
  2. 颜色一致。

image.png
透视投影,能呈现近大远小的效果,但是计算很复杂。
弱透视投影可以实现类似近大远小的效果,减小了计算量。

image.png
直接检测人脸3D特征点,不用2D的,解决边界问题。