本文基于LSFM
[1-3],对于如何从原始扫描获得的3D人脸数据中获得3DMM的基底做一个介绍。如有错误,欢迎评论指正。
一.算法流程
构造
3DMM
核心有两步:1)建立3D人脸之间的密集对应关系,2)PCA
统计分析。
二.具体步骤
1. 3D人脸关键点检测
检测原始3D扫描人脸上的3D关键点,具体步骤如下:
- 1)设置虚拟相机,从原始扫描3D人脸合成不同角度下的图像;
- 2)采用传统的
AAM
[6]方法从合成图片中检测2D人脸关键点; - 3)映射回原始3D扫描人脸上得到3D人脸关键点。
2.密集对应建立-NCIP
将所有原始3D扫描人脸对齐到一个模板人脸上(注:
LSFM
使用的是BFM
同款模板),具体步骤如下:
- 1)利用上述检测得到的3D人脸关键点,对原始扫描人脸和模板人脸做初始配准;
- 2)采用
NICP
[7]做精细配准,目标函数如下:
式1表示该目标函数,由distance term,stiffness term和landmark term三项组成;
式2为distance term,XiX_iXi 为3*4纬度的变换矩阵,vi=[x,y,z,1]Tv_i=[x,y,z,1]^Tvi=[x,y,z,1]T 为模板顶点, TTT为匹配的距离 viv_ivi最近的目标点, wiw_iwi为该匹配点对的权重;
式3为stiffness term, ∣∣∗∣∣F||*||_F∣∣∗∣∣F为Frobenius范数, G:=diag(1,1,1,γ)G:=diag(1,1,1,\gamma)G:=diag(1,1,1,γ)为权重矩阵, γ\gammaγ为设定的控制变换矩阵旋转和扭曲部分和平移部分的系数, ε\varepsilonε为有邻接关系的模板顶点的集合;
式4为landmark term, LLL为匹配的模型关键点和目标点云关键点的集合。
注:
-
1)如何求解就不介绍了,该目标函数有解析解,具体可参考原始论文[7],网上也有一些开源代码;
-
2)我们常用的
BFM
模型,最早是采用UV
展开建立密集对应的,简单来说就是将3D人脸进行圆柱展开,然后将问题转化为在2D图像上做对齐的问题,可参考[5]。
3.统计分析-PCA
PCA
是一种数据降维算法,算法理解可参考[8],具体步骤如下:
假设数据为XXX ( n∗mn*mn∗m, nnn为维度, mmm为条目数,在本例中即每列对应一个人脸的顶点坐标集合),具体步骤如下:
- 1)去均值,即将 XXX 每行的元素减去该行的均值;
- 2)计算协方差矩阵C=1mXXTC=\frac{1}{m}XX^TC=m1XXT ( n∗nn*nn∗n );
- 3)求解 的特征值和特征向量(每个特征向量为 维,每个特征值为1维)
- 4)按特征值大小对特征向量排序,取前 维,即为构成的一组新的基底。
4.错误剔除
由于错误的3D关键点标注或者NICP未收敛,部分错误的密集对应会对统计分析有一定的影响,因此需要进行剔除这部分错误的人脸,具体步骤如下:
- 1)对于当前构建好的PCA基底,拟合经过NICP配准后的原始扫描三维人脸得到形状参数 ;
- 2)计算如下所示的形状参数 的加权和,该加权和:
式5中, λd\lambda_dλd为 αi\alpha_iαi对应的特征值。
- 3) 根据 的分布设定得到一个阈值 θf\theta_fθf,对于 F(α)>θfF(\alpha)>\theta_fF(α)>θf 认为是异常点需要剔除,阈值的选取参考论文描述:
We classify as outliers all shape vectors α with a squared norm F(α) above a threshold θ f . This threshold is selected so that F(α) is expected to be less than θ f with a very high probability p f (e.g. 99%), under the assumed Gaussian distribution. Consequently, θ f is specified by the evaluation of the chi-square inverse cumulative distribution function at the probability p f . Note that the set of shape vectors α with F(α) < θ f corresponds to a hyper-ellipse in the d-dimensional space of shape parameters. Following the aforementioned procedure, we find that less than 1% of the training meshes are classified as outliers.
- 4)剔除错误的人脸后,重新执行上述统计分析步骤,得到最终的
3DMM
基底。
三.实现
搜索了下构建3DMM
的开源实现,除LSFM
[3],我们常用的BFM
后来更新了一版新模型,采用了一套新的流程,代码是用scala
写的[4],感兴趣的可以去看看。
四.参考
[1]A 3D Morphable Model learnt from 10,000 faces
[2]Large Scale 3D Morphable Models
[3]GitHub - menpo/lsfm: Large Scale Facial Model (LSFM) - an automatic pipeline for constructing 3D Morphable Models from large collections of facial meshes
[4]https://github.com/unibas-gravis/basel-face-pipeline
[5]基于3DMM模型的三维人脸建模方法的实现
[6]HOG active appearance models
[7]Optimal Step Nonrigid ICP Algorithms for Surface Registration
[8]CodingLabs - PCA的数学原理
最后,创作不易,如果对您有一点点帮助,希望可以给笔者点点关注、给个免费的赞or收藏or小心心,谢谢。