Capture, Learning, and Synthesisof 3D Speaking styles论文阅读笔记 VOCA

Capture, Learning, and Synthesisof 3D Speaking Styles论文阅读笔记

摘要

  1. 制作了一个4D面部(3D mesh 序列 + 同步语音)数据集:29分钟,60fps,12个人
  2. 在该数据集上训练了一个神经网络(这句话原话是we then train a neural network on our dataset that factors identity from facial motion,不知道怎么理解)
  3. 学习的模型VOCA,输入为任意语音信号(不局限为英文),可逼真的还原面部动画
  4. 可加入额外的条件进行训练,来学习不同的说话风格(有的人嘴张的大,有的人嘴张的小)
  5. 可通过动画师控制来改变说话风格、身份相关的面部形状、姿态(点头摇头、眼球转动等)
  6. VOCA可轻易的应用到新的目标上(without retargeting)

1 introduction

挑战

  1. 语音和面部运动非常相关,但又处在两个差异非常大的空间中;因此需要非线性回归来将二者关联起来,我们可以通过DNN来解决这个问题,但是需要大量的训练数据;
  2. 音素phoneme和和面部运动之间是多到多映射。
  3. 真人动画容易产生恐怖谷效应
  4. 缺少语音到3D人脸的多人数据库
  5. 之前的工作表明可以训练特定说话人动画的模型,目前还没有说话人无关的、捕捉不同说话风格的通用方法。

VOCASET

12个说话人,480段序列,每段大概3-4s,句子的分布尽可能最大化语音多样性,60fps
将扫描数据和一个人脸模板mesh对齐

VOCA

说话人无关
整合DeepSpeech来提取语音特征(对噪声和音源更鲁邦);
基于FLAME模型,1)可以建模全脸的运动(包括脖子);2)驱动大范围的成人人脸,FLAME可以通过扫描或图片来重建特定目标的模板;3)编辑身份相关的形状和姿态

2 依赖

DeepSpeech

DeepSpeech是一个端到端的ASR模型,前三层是非循环全连接层+ReLU,第四层是双向RNN,最后一层是全连接层+ReLU,最后通过softmax函数。Tensorflow的实现方式和原文有两点不同:用LSTM替代了RNN,用MFCC替代原本的声谱。

FLAME

不同目标的面部形状和头部运动差异很大,不同人的说话方式也不同。
FLAME使用线性变换来描述身份、表情相关的形变、LBS(linear blend skinning,实现脖子、下巴、眼球的运动)。给定一个静态模型,身份、姿态、表情blendshapes的变化都通过顶点移动来建模。

3 VOCA

overview

输入为特定目标的模板T和原始的语音信号,通过DeepSpeech提取语音特征
输出为目标的3D mesh
采取encoder-decoder网络结构,encoder部分将语音特征转换为低维embedding,decoder部分将这个embedding映射到高位的3D顶点位移空间。
VOCA network architecture
在这里插入图片描述

语音特征提取

给定一段长度为T 秒的语音片段,使用DeepSpeech来提取语音特征。输出特征是未归一化的对数概率(某字母的概率),帧长度为0.02s(每秒50帧),因此输出是50T*D的数组,其中D是字母表中字母的个数+1(空白label)。通过线性插值将输出重采样到60fps。
为了合并时间信息,将语音帧转换为总长度为W*D的重叠窗口,每个窗口长度为W。输出是一个3D数组,每个数组长度为60T*W*D。

Encoder

encoder由4个卷积层和2个全连接层构成。语音特征和最后的卷积层取决于目标的label,在多个目标上训练从而学习到特定目标的风格。对8个训练目标,每个目标j编码为一个one-hot向量 I j = ( δ i j ) 1 ≤ i ≤ 8 I_j=(\delta_{ij})_{1\le i\le 8} Ij=(δij)1i8。该向量和每个D维语音特征向量进行级联(每个窗口输出长度W*(D+8)),并和最后一个卷积层的输出进行级联。
为了学习时间特征,减少输入维度,每个卷积层使用3x1的卷积核,步长为2x1。由于使用DeepSpeech提取的特征不含有任何空域相关性,我们对输入窗口进行reshape,使其维度为 W ∗ 1 ∗ ( D + 8 ) W*1*(D+8) W1(D+8),并在时间维度上进行1D卷积。为了避免过拟合,我们对参数量进行控制,对前两层学习32个滤波器,对后两层学习64个滤波器。
最后的卷积层和目标编码级联后,有两个全连接层,第一个全连接层有128个units,激活函数为tanh,第二个全连接层有50个units,激活函数为线性。

Decoder

decoder为一个全连接层+线性激活函数,输出为5023*3的数组,表示模型顶点的位移。
权重初始化:训练数据的顶点位移做PCA,得到的50个主成分。
bias初始化:0

animation control

inference时,改变8维one-hot向量来调整说话风格。VOCA的输出是一个和FLAME人脸模型具有相同拓扑结构的expressed 3D face。VOCA和FLAME的兼容性允许通过添加blendshapes来改变身份相关的人脸形状,人脸的表情和姿态也可以通过FLAME提供的blendshapes、joints和pose blendshapes来改变。

4 模型训练

训练准备

语音-4D扫描pairs,表示为 { ( x i , y i ) } i = 1 F \{(x_i,y_i) \}_{i=1}^F {(xi,yi)}i=1F
其中, x i ∈ R W × D x_i \in R^{W\times D} xiRW×D是输入语音窗口,窗口中心为第i个视频帧 y i ∈ R N × 3 y_i \in R^{N\times 3} yiRN×3。此外,用 f i ∈ R N × 3 f_i \in R^{N\times 3} fiRN×3表示 x i x_i xi的VOCA输出。
训练时,将采集的数据分成训练集(8个人),验证集(2个人),测试集(2个人)。
训练集每个人有40条句子,共320条句子。
验证集和测试集每个用20条不同的句子,即分别有40条句子。
训练集、验证集、测试集是完全无关的,无论是人还是句子。

损失函数

损失函数由两项组成:位置项和速度项
位置项: E p = ∣ ∣ y i − f i ∣ ∣ F 2 E_p=|| y_i-f_i ||_F^2 Ep=yifiF2计算预测的顶点和训练数据顶点的距离
速度项: E v = ∣ ∣ ( y i − y i − 1 ) − ( f i − f i − 1 ) ∣ ∣ F 2 E_v=||(y_i-y_{i-1})-(f_i-f_{i-1})||_F^2 Ev=(yiyi1)(fifi1)F2

训练参数

我们在验证集上调整超参数,使用1e-4的学习率训练50个epochs。位置项和速度项的权重分别是1和10,训练时使用batch normalization,batch size为64。窗口尺寸W=16,语音特征维度D=29

实施细节

VOCA基于Tensorflow实现,使用Adam优化算法训练。
在单个NVIDIA Tesla K20上训练一个epoch大概耗时十分钟。
DeepSpeech部分使用预训练好的模型,训练时保持不变。

5 VOCASET

数据集简介

audio-4D scan pairs:6男6女。
每个人40句英文,每句3-5秒;27句来自TIMIT语料库,3个全字母句,10个问句(来自SQuAD)。
5句话由所有人共享,15句话由3-5个人共享(50个独特的句子);20句话由1-2个人(200个独特的句子);

采集设置

使用多目相机立体声系统(3dMD LLC, Atlanta),采集高质量的3D头部数据和语音。
采集系统包括6对灰度双目相机,6个彩色相机,5个光斑投影仪,6个白光LED板。
系统以60fps的速度采集3D mesh,每个mesh包括120K个顶点。
彩色图片用来生成UV贴图。
语音和扫描系统同步,采集的采样率为22kHz。

数据处理

原始的3D头部数据使用FLAME模型提供的方法进行对齐。基于图像的关键点检测方法可以增强对齐的鲁棒性。
对齐后,每个mesh包括5023个顶点。所有扫描数据顶点和FLAME模型的绝对距离:中值0.09mm,均值0.13mm,标准差0.14mm。
之后,所有的mesh去除姿态(unposed):旋转、平移、头部绕脖子的旋转。
对于所有的续联,脖子边界和耳朵自动修复,眼镜周围的区域使用高斯滤波器进行平滑,移出采集噪声。嘴部区域不做平滑处理,从而可以保留细微的动作。

7 实验

定量的矩阵,比如预测误差的范数,不适合用来评估动画质量。因为唇型和语音之间是多对多映射。同一段语音序列对应的人脸动作范围很广,所以定量的评估比较棘手。因此我们使用感性和定性的评估。此外,我们训练的模型可用于研究用途。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值