前言
随着深度学习的发展,越来越多的CNN结构被提出,使得图像特征的提取变得越发的简单有效。
在这个基础上,与图像相关的“基于图像的人脸重建”也有了长足的进步与发展。但是由于3维模型的数据量过大,如何合理、有效的使用CNN进行人脸重建也存在一个问题。
因此,本文对在近年来相关CNN在三维人脸重建中的应用的文章思路进行总结。
总结的过程中,会把重点放在思路、数据集、网络结构以及相关的loss函数上,因为这几点是使用深度学习来解决一个问题最重要的部分。
总览
预计先总结这几篇文章,其他的有空再更
方法类别
使用CNN估计3DMM系数
使用3DMM进行人脸建模的原理和方法在之前这篇博客( )中均有提及,但是在仅仅依靠二维照片的人脸特征点进行3DMM系数估计的时候,由于必须要求图像中检测得到的特征点准确等等因素,估计出的3DMM系数往往存在较大的偏差。
于是便有人提出借助CNN对图像强大的特征提取能力,来对3DMM系数进行估计的想法,在2017年的CVPR中,“Regressing robust and discriminative 3D morphable models with a very deep neural network.”,这篇论文便使用Resnet-101进行3DMM系数的估计。
论文项目地址在:https://talhassner.github.io/home/publication/2017_CVPR (有预训练好的模型以及相关代码)
论文的提出主要解决以下问题:
- 得到较为准确的3DMM参数估计
- 解决在同一个人不同视角的照片下,生成三维模型不一致的问题
整体论文的流程较简单,修改预训练好的Resnet-101网络输出,使其映射为参数。
对于同一个人不同视角的照片,假设其训练得到的3DMM系数是相同的。
以下是论文的pipeline,:
数据集
由于没有现成的数据集,作者借助这篇文章(“Automated 3D Face Reconstruction from Multiple Images Using Quality Measures”)方法,来对CASIA的人脸数据集进行重建(在这个数据集中,照片已经按个人分离开来),并且针对每个人不同角度的照片重建出的人脸模型进行整合,得到照片-人脸数据集。
具体整合操作如下:
其中,不同的是从不同照片进行人脸重建时相关的置信度。
loss函数
这里论文使用到的Loss函数为:
整体的loss函数设置为L2范数,不过有意思的地方是作者设置了两项loss项。
因为在回归多个参数的任务中,一般假设得到的参数服从多元正态分布(隐含条件为参数部分以原点为均值,在原点两侧分布),因此在进行训练的时候,得到的参数可能会比label更加靠近原点(在之前关于3DMM文章中中已经指出,如果过于靠近原点,那么得到的人脸模型往往会与平均人脸模型相似), 因此在进行训练的时候,不仅仅要满足得到的参数值与label相近,也要满足得到的参数值尽可能远离原点,这样才能得到更具特征的人脸。
表示真实的label,表示取正,相当于对label数值加了绝对值号。
表示预测得到的系数,同样的,表示加了绝对值号的预测值。
表示取预测值和label值中绝对值较大的一个。
- over-estimate,当时,,这时,第二项为0,
- under-estimate, 当时,,这时,第一项为0,
之前看到这里有点懵,这两种情况除了前面的系数不一样,并没有什么区别啊?
在重新看了论文后,原来发现两个loss项代表的意义不同
- over-estimate,当时,即预测得到的值相较于label比原点更远,,占较小的权重。
- under-estimate,当时,即预测得到的值相较于label比原点更近,,占较大的权重。
这样训练得到的模型系数可以使3DMM模型更能表现人脸特征。
…