本文基于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,
X
i
X_i
Xi 为3*4纬度的变换矩阵,
v
i
=
[
x
,
y
,
z
,
1
]
T
v_i=[x,y,z,1]^T
vi=[x,y,z,1]T 为模板顶点,
T
T
T为匹配的距离
v
i
v_i
vi最近的目标点,
w
i
w_i
wi为该匹配点对的权重;
式3为stiffness term,
∣
∣
∗
∣
∣
F
||*||_F
∣∣∗∣∣F为Frobenius范数,
G
:
=
d
i
a
g
(
1
,
1
,
1
,
γ
)
G:=diag(1,1,1,\gamma)
G:=diag(1,1,1,γ)为权重矩阵,
γ
\gamma
γ为设定的控制变换矩阵旋转和扭曲部分和平移部分的系数,
ε
\varepsilon
ε为有邻接关系的模板顶点的集合;
式4为landmark term,
L
L
L为匹配的模型关键点和目标点云关键点的集合。
注:
-
1)如何求解就不介绍了,该目标函数有解析解,具体可参考原始论文[7],网上也有一些开源代码;
-
2)我们常用的
BFM
模型,最早是采用UV
展开建立密集对应的,简单来说就是将3D人脸进行圆柱展开,然后将问题转化为在2D图像上做对齐的问题,可参考[5]。
3.统计分析-PCA
PCA
是一种数据降维算法,算法理解可参考[8],具体步骤如下:
假设数据为 X X X ( n ∗ m n*m n∗m, n n n为维度, m m m为条目数,在本例中即每列对应一个人脸的顶点坐标集合),具体步骤如下:
- 1)去均值,即将 X X X 每行的元素减去该行的均值;
- 2)计算协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT ( n ∗ n n*n n∗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
(
α
)
>
θ
f
F(\alpha)>\theta_f
F(α)>θ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小心心,谢谢。