前言
随着深度学习的发展,越来越多的CNN结构被提出,使得图像特征的提取变得越发的简单有效。
在这个基础上,与图像相关的“基于图像的人脸重建”也有了长足的进步与发展。但是由于3维模型的数据量过大,如何合理、有效的使用CNN进行人脸重建也存在一个问题。
因此,本文对在近年来相关CNN在三维人脸重建中的应用的文章思路进行总结。
总结的过程中,会把重点放在思路、数据集、网络结构以及相关的loss函数上,因为这几点是使用深度学习来解决一个问题最重要的部分。
总览
预计先总结这几篇文章,其他的有空再更
方法类别
使用CNN估计3DMM系数
使用3DMM进行人脸建模的原理和方法在之前这篇博客(https://blog.csdn.net/likewind1993/article/details/81455882 )中均有提及,但是在仅仅依靠二维照片的人脸特征点进行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的人脸数据集进行重建(在这个数据集中,照片已经按个人分离开来),并且针对每个人不同角度的照片重建出的人脸模型进行整合,得到照片-人脸数据集。
具体整合操作如下:
其中,不同的
w
i
w_i
wi是从不同照片进行人脸重建时相关的置信度。
loss函数
这里论文使用到的Loss函数为:
整体的loss函数设置为L2范数,不过有意思的地方是作者设置了两项loss项。
因为在回归多个参数的任务中,一般假设得到的参数服从多元正态分布(隐含条件为参数部分以原点为均值,在原点两侧分布),因此在进行训练的时候,得到的参数可能会比label更加靠近原点(在之前关于3DMM文章中中已经指出,如果过于靠近原点,那么得到的人脸模型往往会与平均人脸模型相似), 因此在进行训练的时候,不仅仅要满足得到的参数值与label相近,也要满足得到的参数值尽可能远离原点,这样才能得到更具特征的人脸。
γ
\gamma
γ表示真实的label,
γ
+
\gamma^+
γ+表示取正,相当于对label数值加了绝对值号。
γ
p
\gamma_p
γp表示预测得到的系数,同样的,
γ
p
+
\gamma^+_p
γp+表示加了绝对值号的预测值。
γ
m
a
x
=
m
a
x
(
γ
+
,
γ
p
+
)
\gamma_{max}=max(\gamma^+, \gamma^+_p)
γmax=max(γ+,γp+)表示取预测值和label值中绝对值较大的一个。
-
over-estimate,当 γ + < = γ p + \gamma^+<=\gamma^+_p γ+<=γp+时, γ m a x = m a x ( γ + , γ p + ) = γ p + \gamma_{max}=max(\gamma^+, \gamma^+_p)=\gamma^+_p γmax=max(γ+,γp+)=γp+,这时,第二项为0, L = λ 1 ∣ ∣ γ + − γ p + ∣ ∣ 2 2 L=\lambda_1|| \gamma^+ - \gamma^+_p||^2_2 L=λ1∣∣γ+−γp+∣∣22
-
under-estimate, 当 γ + > = γ p + \gamma^+>=\gamma^+_p γ+>=γp+时, γ m a x = m a x ( γ + , γ p + ) = γ + \gamma_{max}=max(\gamma^+, \gamma^+_p)=\gamma^+ γmax=max(γ+,γp+)=γ+,这时,第一项为0, L = λ 2 ∣ ∣ γ p + − γ + ∣ ∣ 2 2 L=\lambda_2||\gamma^+_p - \gamma^+||^2_2 L=λ2∣∣γp+−γ+∣∣22
之前看到这里有点懵,这两种情况除了前面的 λ \lambda λ系数不一样,并没有什么区别啊?
在重新看了论文后,原来发现两个loss项代表的意义不同
-
over-estimate,当 γ + < = γ p + \gamma^+<=\gamma^+_p γ+<=γp+时,即预测得到的值相较于label比原点更远, λ 1 = 1 \lambda_1=1 λ1=1,占较小的权重。
-
under-estimate,当 γ + > = γ p + \gamma^+>=\gamma^+_p γ+>=γp+时,即预测得到的值相较于label比原点更近, λ 1 = 3 \lambda_1=3 λ1=3,占较大的权重。
这样训练得到的模型系数可以使3DMM模型更能表现人脸特征。