Motivation
- 人类行为需要从身体、手部和面部多角度理解
Contribution
- 构建了一个 3D 全身网格标注数据集以解决数据集稀缺的问题
- 第一个提出根据语音自回归合成真实多样的三维肢体动作、手势和面部表情的方法
Dataset
数据集由全身网格和同步语音组成,包含身体姿势、手势和面部表情。相较其他数据集,对人体的表征更加精细。
Dataset Building:
- 手动筛选低质量视频,得到来自 4 个说话人的 26.9 小时的高质量数据集
- 采用 SMPL-X 模型的拓扑结构来重建 3D 全身网格
P-GT Improving:
- 初始化:使用 PIXIE、PyMAF-X、DECA 来分别初始化身体姿势参数 θ b \theta^b θb、手部姿势参数 θ h \theta^h θh、面部参数 θ f \theta_f θf
- 引入多种信息:从 DeepLab V3 获取身体轮廓信息,用于更准确地约束身体的重建;从 MediaPipe 获取面部标记信息,从 MICA 获取面部形状信息,以更好地重建面部细节
- 正则化:在身体和运动姿势引入平滑项,减小由噪声 2D 检测到的关键点引起的抖动结果;对关节位置添加常数—速度平滑项;使用 Collision Penalizer 以防止两手的相互穿透。
Training Loss:
E
(
β
,
{
θ
}
t
=
1
T
,
{
ψ
}
t
=
1
T
,
ψ
l
i
g
h
t
,
ψ
l
b
s
,
t
F
S
)
=
∑
t
=
1
T
(
E
S
M
P
L
i
f
y
−
X
(
t
)
)
+
λ
F
E
L
F
E
+
λ
F
S
L
F
S
+
λ
F
R
L
F
R
+
λ
m
b
M
b
+
λ
m
h
M
h
+
λ
m
j
M
j
+
λ
s
i
l
L
s
i
l
+
λ
p
e
n
L
p
e
n
,
\begin{array} {c} {{{E ( \beta, \{\theta\}_{t=1}^{T}, \{\psi\}_{t=1}^{T}, \psi_{l i g h t}, \psi_{l b s}, t_{F S} )=}}} \\ {{{\sum_{t=1}^{T} ( E_{S M P L i f y-X} ( t ) )+\lambda_{F E} \mathcal{L}_{F E}+\lambda_{F S} \mathcal{L}_{F S}+\lambda_{F R} \mathcal{L}_{F R}+}}} \\ {{{\lambda_{m b} \mathcal{M}_{b}+\lambda_{m h} \mathcal{M}_{h}+\lambda_{m j} \mathcal{M}_{j}+\lambda_{s i l} \mathcal{L}_{s i l}+\lambda_{p e n} \mathcal{L}_{p e n},}}} \\ \end{array}
E(β,{θ}t=1T,{ψ}t=1T,ψlight,ψlbs,tFS)=∑t=1T(ESMPLify−X(t))+λFELFE+λFSLFS+λFRLFR+λmbMb+λmhMh+λmjMj+λsilLsil+λpenLpen,
其中:
- ∑ t = 1 T ( E S M P L i f y − X ( t ) ) \sum_{t=1}^{T} ( E_{S M P L i f y-X}(t)) ∑t=1T(ESMPLify−X(t)) 是原始 SMPLify-X 方法中的约束条件和损失函数
- L F E \mathcal{L}_{FE} LFE 是面部表情相关损失项,通过计算 MediaPipe 提取的面部标记与相应 3D 关节投影的 2D 标记之间的差异来衡量面部表情重建的准确性
- L F S \mathcal{L}_{FS} LFS 是面部形状相关的学习目标损失项,通过比较 SMPL-X 模型在中性姿势下的顶点与从 MICA 模型获取并经过调整后的面部形状之间的差异来衡量面部形状重建的准确性
- L F R \mathcal{L}_{FR} LFR 是获取面部细节相关的损失项,通过比较面部表情跟踪和微分渲染得到的头部图像与原始输入图像中的头部部分之间的差异来衡量面部细节重建的准确性
- M b \mathcal{M}_b Mb 是身体姿势 P b P^b Pb 的平滑项,通过计算身体姿势在时间序列上相邻帧之间的差异来衡量身体姿势的平滑性,以防止出现抖动等不稳定的情况
- M h \mathcal{M}_h Mh 是手部姿势 P h P^h Ph 的平滑项,通过计算手部姿势在时间序列上相邻帧之间的差异来衡量手部姿势的平滑性
- M J \mathcal{M}_J MJ 是关节位置 J J J 的平滑项,通过计算关节位置在时间序列上相邻三帧之间的差异来衡量关节位置的平滑性
- L s i l \mathcal{L}_{sil} Lsil 的身体轮廓相关的损失项,通过比较由 DeepLab V3 生成的人物语义掩码与预测的语义掩码经过特定处理后的差异来衡量身体轮廓重建的准确性
- L p e n \mathcal{L}_{pen} Lpen 是防止两手相互穿透的损失项,通过检测碰撞三角形并计算距离场来定义
Method
由于不同身体部位与语音信号的相关程度不同,例如语音信号与嘴部动作的相关程度最强,而与身体动作、手势的相关程度较弱。因此使用 AE 对嘴部动作进行建模,使用 VQ-VAE 对身体姿势和手势进行建模。然后训练一个条件自回归模型来预测未来身体和手部运动的多项分布。从这些分布中可以采样得到码本索引,然后通过码本查找检索相应的量化运动元素,最后将这些元素送入解码器进行最终的合成
个人理解:由于嘴部动作与语音信号的强相关性,不同人对于同一段话的嘴部动作差异不大,因此使用自编码器进行简单的编解码建模就行了。而身体姿势和手势与语音信号的相关性较低,而且不同人的风格也有所差异。因此采用多样性更好的 VQ-VAE 方式进行建模。

Face Generator
利用预训练的语音模型 wav2vec 2.0 提取音频特征,与身份信息特征拼接后输入解码器中,从而生成面部运动。
loss: L = M S E ( M ^ 1 : T f , M 1 : T f ) L=MSE(\hat{M}^f_{1:T},M^f_{1:T}) L=MSE(M^1:Tf,M1:Tf)
Body and Hand Generator
利用 VQ-VAE 对身体和手部运动的多模态空间进行建模,然后使用交叉条件自回归模型结合学习到的码本,去预测身体和手势动作,并保持同步性。
-
特征提取:从音频中提取出 64 维的 MFCC 特征
-
码本学习:
-
对身体和手势动作分别进行学习两个独立的码本, Z b = z i i = 1 b ∣ Z b ∣ Z^b=z^{b^{|Z_b|}}_{i\ i=1} Zb=zi i=1b∣Zb∣ 和 Z h = z j j = 1 h ∣ Z h ∣ Z^h=z^{h^{|Z_h|}}_{j\ j=1} Zh=zj j=1h∣Zh∣
-
对于输入的身体和手部动作 M 1 : T b M^b_{1:T} M1:Tb 和 M 1 : T h M^h_{1:T} M1:Th 编码为特征序列 E 1 : τ b = ( e 1 b , … , e τ b ) E^b_{1:\tau}=(e^b_1,\dots,e^b_{\tau}) E1:τb=(e1b,…,eτb) 和 E 1 : τ h = ( e 1 h , … , e τ h ) E^h_{1:\tau}=(e^h_1,\dots,e^h_{\tau}) E1:τh=(e1h,…,eτh) ,然后将特征序列映射到码本上距离最近的特征,得到量化序列 Z 1 : τ b = ( z 1 b , … , z τ b ) Z^b_{1:\tau}=(z^b_1,\dots,z^b_{\tau}) Z1:τb=(z1b,…,zτb) 和 Z 1 : τ h = ( z 1 h , … , z τ h ) Z^h_{1:\tau}=(z^h_1,\dots,z^h_{\tau}) Z1:τh=(z1h,…,zτh)
z t b = arg min z k b ∈ Z b ∥ e t b − z k b ∥ ∈ R 64 , z_{t}^{b}=\operatorname{a r g} \operatorname* {m i n}_{z_{k}^{b} \in\mathcal{Z}^{b}} \| e_{t}^{b}-z_{k}^{b} \| \in\mathbb{R}^{6 4}, ztb=argzkb∈Zbmin∥etb−zkb∥∈R64,
z t h = arg min z k h ∈ Z h ∥ e t h − z k h ∥ ∈ R 64 . z_{t}^{h}=\operatorname{a r g} \operatorname* {m i n}_{z_{k}^{h} \in\mathcal{Z}^{h}} \| e_{t}^{h}-z_{k}^{h} \| \in\mathbb{R}^{6 4}. zth=argzkh∈Zhmin∥eth−zkh∥∈R64.
-
-
训练目标:
L V Q = L r e c ( M 1 : T , M ^ 1 : T ) + ∥ s g [ E 1 : T ] − Z 1 : T ∥ + β ∥ E 1 : T − s g [ Z 1 : T ] ∥ , \begin{aligned} {{{\mathcal{L}}_{V Q}}} & {{} {{}={\mathcal{L}}_{r e c} ( M_{1 : T}, \widehat{M}_{1 : T} )+\left\| \mathrm{s g} [ E_{1 : T} ]-Z_{1 : T} \right\|}} \\ {{}} & {{} {} {{}+\beta\left\| E_{1 : T}-\mathrm{s g} \left[ Z_{1 : T} \right] \right\|,}} \\ \end{aligned} LVQ=Lrec(M1:T,M 1:T)+∥sg[E1:T]−Z1:T∥+β∥E1:T−sg[Z1:T]∥,
其中: L r e c \mathcal{L}_{rec} Lrec 是 MSE 重建项损失,用于保证生成动作逼近真实动作; s g sg sg 是梯度停止操作,用于交替更新编码特征和码本特征
Cross-Conditional Autoregressive Modeling
-
动作表示:将身体和手部动作表示为码本特征序列 C 1 : τ b = ( c 1 b , … , c τ b ) C^b_{1:\tau}=(c^b_1,\dots,c^b_{\tau}) C1:τb=(c1b,…,cτb) 和 C 1 : τ h = ( c 1 h , … , c τ h ) C^h_{1:\tau}=(c^h_1,\dots,c^h_{\tau}) C1:τh=(c1h,…,cτh)
-
建模:根据贝叶斯定律建模身体和手部动作的联合分布,考虑当前时刻的身体和手部动作都会受到之前身体和手部动作的影响
p ( C 1 : τ b , C 1 : τ h ∣ A 1 : τ , I ) = ∏ t = 1 τ p ( c t b ∣ c < t b , c < t h , a ≤ t , I ) p ( c t h ∣ c ≤ t b , c < t h , a ≤ t , I ) . \begin{aligned} {{p ( C_{1 : \tau}^{b}, C_{1 : \tau}^{h} \mid A_{1 : \tau}, I )=\prod_{t=1}^{\tau}}} & {{} {p \left( c_{t}^{b} \mid c_{< t}^{b}, c_{< t}^{h}, a_{\leq t}, I \right)}} \\ {{}} & {{} {p \left( c_{t}^{h} \mid c_{\leq t}^{b}, c_{< t}^{h}, a_{\leq t}, I \right).}} \\ \end{aligned} p(C1:τb,C1:τh∣A1:τ,I)=t=1∏τp(ctb∣c<tb,c<th,a≤t,I)p(cth∣c≤tb,c<th,a≤t,I). -
使用 Gated PixelCNN 模型来学习上述联合概率分布
Experiment
Evaluation Metrics
- L 2 L2 L2:计算 p-GT 和生成的面部标记之间的 L2 距离,用于评估面部运动的真实性
- L V D LVD LVD:计算 p-GT 和生成面部标记之间的速度差异,用于衡量面部动作和语音的同步性
- R S RS RS:训练一个二元分类器来区分真实样本和虚假样本,用于评估身体和手部运动的真实性
- V a r i a t i o n Variation Variation:计算 16 个身体和手部运动样本的方差,用于评估身体和手部运动的多样性。
Result Analysis

-
定量分析
和 SOTA 方法(Habibie et al.)相比,TalkSHOW 生成的面部动作更逼真,与语音信号的同步性也更好,同时在身体和手部动作的真实性与多样性表现更好。和 VAE-based 模型对比,TalkSHOW 在真实性和多样性方面都取得了较大的进步。其中,多样性归功于使用 VQ-VAE 进行多模态空间建模,真实性归功于交叉条件自回归模型进行联合分布的学习。


-
定性分析
从图 1 结果中可以看出,TalkSHOW 生成的面部动作中嘴部与相应的音标发音一致,而且身体动作也与单词的表达场景相契合,例如遇到强调时(But),会举起手示意。
Model Ablation
-
Wav2vec Feature:由于面部动作(尤其是嘴部)和语音信号的相关性较大,因此需要更详细的特征表示。(术业有专攻)
The wav2vec-based model outperforms the MFCC-based model in both metrics (0.130 vs. 0.165 in L2 and 0.251 vs. 0.277 in LVD)
-
Compositional Quantized Motion Codebooks:对身体和手势使用 VQ-VAE 进行分别建模的重建误差比只使用一个 VQ-VAE 进行建模更小。(术业有专攻)

-
Cross-Conditional Modeling:有交叉条件的建模方式考虑到身体和手部动作之间的影响,因此建模结果的真实性和连贯性比无交叉条件建模结果更好,但是多样性有略微影响。
Our method w/ c-c yields a higher realistic score than that w/o c-c ( 0. 414 vs. 0. 409)
Our method w/ c-c attains a slight reduction in diversity (0.821 vs. 0.922 in variance)
Gains
这篇文章带给我的主要收获就是对动作数据集的处理。数据集的质量决定模型性能的上限,因此文章中通过多种正则化的约束提升 3D 动作的平滑度。另一点收获就是论文方法的一大优点,对不同领域选取合适的特征提取方式和特征表达,术业有专攻了属于是。
但是在运行代码,查看生成结果中,我发现还是会出现『穿模』、『动作不符合生理结构』等异常情况。应该可以在训练损失函数中继续添加正则项进行约束?或许要制定一些物理性和生理性规则吧?

