论文阅读
FaceWarehouse
摘要:这是一个3D数据库的构建过程。作者在文中使用了体感捕捉的RGBD相机(RGB表示颜色,D表示Deep,即深度)来拍摄输入图片。数据库包括150名不同年龄不同人种的志愿者,每一个人分别拍摄1个自然表情和19个其他表情。对于每一张原始图片,一组面部特征点被标识出来,例如眼角、嘴巴轮廓。这些都是自动编码的,如果有更高的质量要求可以人工调整。得到上诉数据之后,他们就将一个原始的3D模型进行形变,使得在特征点匹配的前提下,模型和深度数据尽可能的匹配。这样就得到一系列的个人独特的表情模型。这些有一致拓扑结构的数据由一个三阶的矩阵表达,构建一个有两种属性,身份和表情的双线性人脸模型。
引言:人脸3D模型一直是计算机视觉和计算机图形学的热门。许多应用都需要应用到人脸模型。我们提出的模型的原始数据是150个不同年龄(7—80)不同种族背景的受试者,每个人拍摄20张不同表情的照片(一个自然表情,19个其他表情)。由这些原始数据我们可以生成一系列的混合形变模型。这个混合形变模型包含46个运动单元,模拟了脸部肌群的运动。它可以很好地平衡真实感和可调节性,并且充分地描述了一个人脸的绝大部分表情。该数据库可以 应用在四大方面:人脸图片处理,人脸部位迁移,基于性能的实时脸部动画,从视频到图片的人脸动画重现。
FaceWarehouse:我们使用微软的立体感知系统来捕捉每一个受试者不同表情的几何形状和纹理信息。我们标记不同视角下的同一个表情的帧来形成一个平滑、低噪的深度图。由深度图和RGB图像来指导标准模板形变成表情模板。一旦我们得到单一目标的所有表情模板,我们就生成个性化的混合模板。最后,所有受试者的混合模板形成我们的数据库。
A.数据获取: 640 × 480 640\times480 640×480的2D图片和每秒30帧的深度图。每个人20个表情图,一个自然表情,19个经过选择的在不同个体中变化很大的常见面部动作。每一个表情都会有一个指导模板提供给受试者参考,如有需要会得到员工的协助。
B.表情模型和混合个性化模型的形成:使用ASM在彩色图上定位74个特征点,对于一些变化较大的图片需要手动调节。74个特征点被分为两类:在人脸内部的 m i m_i mi内部特征点和人脸轮廓的 m c m_c mc特征点。给出彩色图与深度图的一致性,我们可以很容易地得到彩色图内部特征点对应的深度图3D位置。
中性表情:用两步生成中性表情的3D模型。先用Blanz和Vetter的形变模型自动生成一个最初的模型,然后用一个变形算法去改善,使得模型更加拟合深度图和特征点。Blanz和Vetter的形变模型在200个中性人脸模型上执行PCA,单独一张人脸可以表达为一个平均人脸和
l
l
l个引导PCA向量的线性组合。
V
=
F
‾
+
∑
i
=
1
l
α
i
F
i
V=\overline F+\sum_{i=1}^l \alpha_iF_i
V=F+∑i=1lαiFi,他们的目标是算出系数
α
i
\alpha_i
αi使得模型在PCA平面最接近真实值。损失的计算是:
E
f
e
a
=
∑
j
=
1
m
i
∥
v
i
j
−
c
j
∥
2
+
∑
k
=
1
m
c
∥
M
p
r
o
j
v
c
k
−
s
k
∥
2
E_{fea}=\sum_{j=1}^{m_i}\Vert\mathbf{v}_{ij}-\mathbf{c}_j\Vert^2+\sum_{k=1}^{m_c}\Vert\mathbf{M}_{proj}\mathbf{v}_{ck}-\mathbf{s}_k\Vert^2
Efea=j=1∑mi∥vij−cj∥2+k=1∑mc∥Mprojvck−sk∥2
第一项计算内部特征点的匹配,
c
j
\mathbf{c}_j
cj是第j个特征点的3D坐标(由彩色图和深度图的一致性获得,上文有提到),
v
i
j
\mathbf{v}_{ij}
vij就是模型上对应的顶点。第二项计算轮廓点
s
k
\mathbf{s}_k
sk是彩色图的轮廓点,
v
c
k
\mathbf{v}_{ck}
vck是模型对应的3D特征点,
M
p
r
o
j
\mathbf{M}_{proj}
Mproj是相机的投影矩阵。在模型V上面的轮廓特征点是这样得来的:我们首先将V的脸部投影到图片上去得到2D人脸网格,然后我们寻找凸包得到轮廓周围的点。在这些点中,我们寻找离彩色图片中轮廓特征点最近的那一个标记为它对应的模型中的特征点。深度图的损失公式如下:
E
p
o
s
=
∑
j
=
1
n
d
∥
v
d
j
−
p
j
∥
2
E_{pos}=\sum_{j=1}^{n_d}\Vert\mathbf{v}_{dj}-\mathbf{p}_j\Vert^2
Epos=j=1∑nd∥vdj−pj∥2
v d j \mathbf{v}_{dj} vdj是模型中的顶点, p j \mathbf{p}_j pj是深度图中最接近 v d j \mathbf{v}_{dj} vdj的点,而 n d n_d nd是模型中有对应点在深度图中的顶点的数量。由于有遮挡的现象,模型中不是所有的顶点在深度图中都有对应的点。
还有一个损失需要计算,那就是
α
i
\alpha_i
αi的正则化,基于形状的概率估计分布:
p
(
α
)
∼
exp
[
−
1
2
∑
(
α
i
/
σ
i
)
2
]
p(\alpha)\sim\exp[-\frac{1}{2}\sum(\alpha_i/\sigma_i)^2]
p(α)∼exp[−21∑(αi/σi)2]
σ
i
\sigma_i
σi是PCA人脸协方差矩阵的本征值,令
Λ
=
d
i
a
g
(
1
/
σ
1
2
,
1
/
σ
2
2
,
…
,
1
/
σ
L
2
)
\Lambda=diag(1/\sigma_1^2,1/\sigma_2^2,\dots,1/\sigma_L^2)
Λ=diag(1/σ12,1/σ22,…,1/σL2),则
E
c
o
e
f
=
1
2
α
T
Λ
α
E_{coef}=\frac{1}{2}\alpha^T\Lambda\alpha
Ecoef=21αTΛα
总损失就是:
E
1
=
ω
1
E
f
e
a
+
ω
2
E
p
o
s
+
ω
3
E
c
o
e
f
E_1=\omega_1E_{fea}+\omega_2E{pos}+\omega_3E_{coef}
E1=ω1Efea+ω2Epos+ω3Ecoef
ω
1
=
2
\omega_1=2
ω1=2,
ω
2
=
0.5
\omega_2=0.5
ω2=0.5,
ω
3
=
1
\omega_3=1
ω3=1。这个损失可以通过最小二乘优化,在他们论文中是迭代了5-8次。在迭代过程中
E
p
o
s
E_{pos}
Epos和
E
f
e
a
E_{fea}
Efea由于对应点位置的更新每次都有变化。
当一个初始模型生成之后,一个基于拉普拉斯的形变算法用于优化模型。
E
l
a
p
=
∑
i
=
1
n
∥
L
v
i
−
δ
i
L
v
i
L
v
i
∥
2
E_{lap}=\sum_{i=1}^{n}\Vert L\mathbf{v}_i-\frac{\delta_i}{L\mathbf{v}_i}L\mathbf{v}_i\Vert^2
Elap=i=1∑n∥Lvi−LviδiLvi∥2
L
L
L是基于余切的离散拉普拉斯算子,
δ
i
\delta_i
δi是在变形前的原始拉普拉斯坐标的量级,
n
n
n是模型的顶点数目。模型的变形损失定义为:
E
2
=
ω
1
′
E
f
e
a
+
ω
2
′
E
p
o
s
+
ω
3
′
E
l
a
p
E_2=\omega_1'E_{fea}+\omega_2'E_{pos}+\omega_3'E_{lap}
E2=ω1′Efea+ω2′Epos+ω3′Elap
式中,
ω
1
′
=
0.5
,
ω
2
′
=
ω
3
′
=
1
\omega_1'=0.5,\omega_2'=\omega_3'=1
ω1′=0.5,ω2′=ω3′=1,可以使用模糊高斯——牛顿理论来优化上面的损失。
得到表情模型之后,我们可以用这些表情来生成一个混合模型 B = { B 0 , B 1 , … , B 46 } \mathbf{B}=\{B_0,B_1,\dots,B_{46}\} B={B0,B1,…,B46},这些数据表示一个自然表情加46个FACS混合模型,一个人的表情 H H H可以表示为 H = B 0 + ∑ i = 1 46 α i ( B i − B 0 ) H=B_0+\sum_{i=1}^{46}\alpha_i(B_i-B_0) H=B0+∑i=146αi(Bi−B0), α i \alpha_i αi表示自然表情 B 0 B_0 B0变形至 B i B_i Bi的程度。
由上面的步骤我们获得了150个人的脸部几何结构,每一个人包含47个面部表情。由于这些模型共享相同的拓扑结构,所有的模型顶点数目一致。因此我们可以用一个三阶(3-model)矩阵 T T T(11K顶点x150个身份x47个表情)表达模型。
我们使用N模奇异值分解来分解张量。由于大部分的应用只需要合成整张人脸,我们不执行顶点部分的分解(分解150个身份和47个表情)。
T
×
2
U
i
d
T
×
3
U
e
x
p
T
=
C
T\times_2\mathbf{U}_{id}^T\times_3\mathbf{U}_{exp}^T=C
T×2UidT×3UexpT=C
T是数据张量,C是核心张量。
U
i
d
\mathbf{U}_{id}
Uid和
U
e
x
p
\mathbf{U}_{exp}
Uexp是标准正交的转换矩阵,分别包含了身份空间和表情空间的左奇异值。N-modeSVD可以帮助我们旋转数据张量,同时使得每个模型在C的方差由大到小排列。这样我们可以去除C中无意义的部分,得到一个缩减的数据集模型,从而去拟合原始数据集。
T
≃
C
r
×
2
U
ˇ
i
d
×
3
U
ˇ
e
x
p
T\simeq C_r\times_2\check{\mathbf{U}}_{id}\times_3\check{\mathbf{U}}_{exp}
T≃Cr×2Uˇid×3Uˇexp
C
r
C_r
Cr是缩减的核心张量,只保留原始核心张量左上角数据,而后面两项则是移除了相应的后续列。
我们称
C
r
C_r
Cr为FaceWarehouse的双线性人脸模型。任何人脸表情可以这样表示:
V
=
C
r
×
2
w
i
d
T
×
3
w
e
x
p
T
V=C_r\times_2\mathbf{w}_{id}^T\times_3\mathbf{w}_{exp}^T
V=Cr×2widT×3wexpT
w
i
d
\mathbf{w}_{id}
wid和
w
e
x
p
\mathbf{w}_{exp}
wexp分别是身份和表情的列向量。
作者探讨了核心张量取多少的问题,他们做了一张图,展示了不同数量的行列取法对原始数据的拟合情况。直观结果展示当身份取50表情取25时结果最理想。
应用
A.人脸图片处理:我们首先为双线性模型中的身份属性学习一个回归模型来拟合用户定义的人脸属性,然后根据输入的图片计算身份和表情的权重。用户定义的属性变化通过线性回归模型传至身份权重,一个新的3D人脸模型将根据这些权重生成。新模型最后根据输入的图片描绘纹理颜色,最终生成一张人脸。
人脸特征分析:对于每一个人脸,我们有他(她)的身份权重(k维向量
w
i
d
\mathbf{w}_{id}
wid)和
l
l
l个从脸部几何获取的个性化属性
{
f
1
,
f
2
,
…
,
f
l
}
\{f_1,f_2,\dots,f_l\}
{f1,f2,…,fl},我们需要一个两者之间的转换矩阵
M
f
e
a
[
f
1
,
…
,
f
l
,
1
]
T
=
w
i
d
\mathbf{M}_{fea}[f_1,\dots,f_l,1]^T=\mathbf{w}_{id}
Mfea[f1,…,fl,1]T=wid
我们将所有150人的身份权重和个性化属性聚合成两个矩阵
W
i
d
(
k
×
150
)
\mathbf{W}_{id}(k\times150)
Wid(k×150)和
F
(
(
l
+
1
)
×
150
)
\mathbf{F}((l+1)\times150)
F((l+1)×150),则转换矩阵是
M
f
e
a
=
W
i
d
F
+
\mathbf{M}_{fea}=\mathbf{W}_{id}\mathbf{F}^+
Mfea=WidF+
F
+
\mathbf{F}^+
F+是
F
\mathbf{F}
F的左伪逆矩阵:
F
+
=
F
T
(
F
F
T
)
−
1
\mathbf{F}^+=\mathbf{F}^T(\mathbf{F}\mathbf{F}^T)^{-1}
F+=FT(FFT)−1
那么,个性化特征的变化就可以和用户身份权重匹配到一起了: △ w i d = M f e a △ f \triangle\mathbf{w}_{id}=\mathbf{M}_{fea}\triangle\mathbf{f} △wid=Mfea△f
3D模型和图片的拟合:对于模型中的每一个顶点,投影到图片中是
p
k
=
s
R
v
k
+
t
\mathbf{p}_k=s\mathbf{Rv}_k+\mathbf{t}
pk=sRvk+t
其中,s是转换的比例系数,
R
\mathbf{R}
R是旋转矩阵,
t
\mathbf{t}
t是平移矩阵。
那么,损失函数就变为:
E
k
=
1
2
⋅
∥
s
R
(
C
r
×
2
w
i
d
T
×
3
w
e
x
p
T
)
(
k
)
+
t
−
s
(
k
)
∥
2
E_k=\frac{1}{2}\cdot\Vert s\mathbf{R}(C_r\times_2\mathbf{w}_{id}^T\times_3\mathbf{w}_{exp}^T)^{(k)}+\mathbf{t}-\mathbf{s}^{(k)}\Vert^2
Ek=21⋅∥sR(Cr×2widT×3wexpT)(k)+t−s(k)∥2
s
(
k
)
\mathbf{s}^{(k)}
s(k)是彩色图上的特征点。
B. 人脸部件转换
通过人脸部位的复制和粘贴,我们可以在人脸图片上修改表情。输入是同一个人的两张照片,一张是目标图片但包含不需要的表情,另一张是参考图片包含我们想要的表情。由于两张照片是同一个人的,它们在身份权重上应该是一样的,因此,我们需要计算出统一的身份权重(
w
i
d
T
\mathbf{w}_{id}^T
widT)和两个表情的权重(
w
e
x
p
−
1
T
a
n
d
w
e
x
p
−
2
T
\mathbf{w}_{exp-1}^T \quad and\quad \mathbf{w_{exp-2}^T}
wexp−1Tandwexp−2T)损失就是
E
k
j
o
i
n
t
=
1
2
∑
j
=
1
2
∥
s
j
R
j
(
C
r
×
2
w
i
d
T
×
3
w
e
x
p
−
j
T
)
(
k
)
+
t
j
−
s
j
(
k
)
∥
2
E_k^{joint}=\frac{1}{2}\sum_{j=1}^2\Vert s_j\mathbf{R}_j(C_r\times_2\mathbf{w}_{id}^T\times_3 \mathbf{w}_{exp-j}^T)^{(k)}+\mathbf{t}_j-\mathbf{s}_j^{(k)}\Vert^2
Ekjoint=21j=1∑2∥sjRj(Cr×2widT×3wexp−jT)(k)+tj−sj(k)∥2
我们首先用最后一节的方法计算出一个初始的身份和表情的模仿3D模型,然后通过上面的损失函数修改
w
i
d
T
\mathbf{w}_{id}^T
widT、
w
e
x
p
−
1
T
\mathbf{w}_{exp-1}^T
wexp−1T、
w
e
x
p
−
2
T
\mathbf{w_{exp-2}^T}
wexp−2T。首先我们固定
w
e
x
p
−
1
T
\mathbf{w}_{exp-1}^T
wexp−1T、
w
e
x
p
−
2
T
\mathbf{w_{exp-2}^T}
wexp−2T,由最小化损失函数计算出
w
i
d
T
\mathbf{w}_{id}^T
widT,接下来固定
w
i
d
T
\mathbf{w}_{id}^T
widT分别计算出
w
e
x
p
−
1
T
\mathbf{w}_{exp-1}^T
wexp−1T、
w
e
x
p
−
2
T
\mathbf{w_{exp-2}^T}
wexp−2T。后面的步骤迭代进行直到结果收敛。两张人脸模型表示为
V
1
=
C
r
×
2
w
i
d
T
×
3
w
e
x
p
−
1
T
,
V
2
=
C
r
×
2
w
i
d
T
×
3
w
e
x
p
−
2
T
.
V_1=C_r\times_2\mathbf{w}_{id}^T\times_3\mathbf{w}_{exp-1}^T,\\ V_2=C_r\times_2\mathbf{w}_{id}^T\times_3\mathbf{w}_{exp-2}^T.
V1=Cr×2widT×3wexp−1T,V2=Cr×2widT×3wexp−2T.
我们使用两个人脸模型去为目标图片计算一个表情流,使得目标图片的表情拟合我们需要的表情。同时我们也计算一个2维校准流,使得参考人脸形变为一个合适的大小和一致的位置,方便转换。最后,我们在参考图片上选择一个实验区域,将它转移到形变之后的目标图片上。
C. 基于性能的实时人脸图片动画
我们首先用第四节A的理论去计算身份和表情权重,然后为输入图片生成一个3D模型,并且为这个模型生成混合形变模型。最后,我们用基于体感的人脸动画系统去捕捉人脸表情,并作为混合形变模型的系数。
假设一个人脸的身份权重是
w
i
d
\mathbf{w}_{id}
wid,我们可以构造表情混合模型
B
1
=
C
r
×
2
w
i
d
T
×
3
(
U
ˇ
e
x
p
d
i
)
,
0
≤
i
≤
47
B_1=C_r\times_2\mathbf{w}_{id}^T\times_3(\check{\mathbf{U}}_{exp}\mathbf{d}_i),\quad 0\le i\le 47
B1=Cr×2widT×3(Uˇexpdi),0≤i≤47
U
ˇ
e
x
p
\check{\mathbf{U}}_{exp}
Uˇexp是第三节C描述的转换矩阵的截短矩阵,
d
i
\mathbf{d}_i
di是表情权重向量,仅第i位元素值为1,其余元素值为0。只要设定好系数
β
i
\beta_i
βi,根据公式
V
=
B
0
+
∑
i
=
1
46
β
i
(
B
i
−
B
0
)
V=B_0+\sum_{i=1}^{46}\beta_i(B_i-B_0)
V=B0+∑i=146βi(Bi−B0),我们可以在相同的照片上生成不同的表情。
阵, d i \mathbf{d}_i di是表情权重向量,仅第i位元素值为1,其余元素值为0。只要设定好系数 β i \beta_i βi,根据公式 V = B 0 + ∑ i = 1 46 β i ( B i − B 0 ) V=B_0+\sum_{i=1}^{46}\beta_i(B_i-B_0) V=B0+∑i=146βi(Bi−B0),我们可以在相同的照片上生成不同的表情。