文章目录
概述
从题目可以看出来, 基本思想是从文本合成视频。之前的论文中也有出现过,有的是从文本合成语音,走的还是从语音到视频的路子。这篇文章简介中提到,它的方法是构建了一个 p h o n e m e − p o s e phoneme-pose phoneme−pose词典,是使用强制对齐从训练数据中提取音素及其时间戳 ( t i m e s t a m p s ) (timestamps) (timestamps)的方法提取的。并且通过GAN网络从插值的 p h o n e m e p o s e s phoneme\ poses phoneme poses生成视频。
文章提出了自己的优势:
- 需要的数据量比较少
- speaker independent, 比较灵活
- 处理,训练,推理的时间减少了
作者总结的contributions有下列几个:
- 文本不局限于英文,中文标点什么也可以
- 开发了一种自动姿势提取方法来构建 p h o n e m e − p o s e d i c t i o n a r y phoneme-pose\ dictionary phoneme−pose dictionary,仅需要44个单词或者20个句子就可以构建这样一个dictionary,包含英语的所有音素。
- 为了生成自然的pose sequences和视频引入了插值 ( i n t e r p o l a t i o n ) (interpolation) (interpolation)和平滑方法 ( s m o o t h n e s s m e t h o d ) (smoothness\ method) (smoothness method)
方法
-
每个汉字/英文单词在音频中的时间位置叫做时间戳
-
方法概述如下:
如上图所示,系统的输入是文本,可以是英文,中文,数字和标点符号。输出是会说话的人的视频。
给定输入文本,使用TTS从文本生成语音。然后,应用强制对齐以获得音素时间戳
(
t
i
m
e
s
t
a
m
p
s
)
(timestamps)
(timestamps),并在
p
h
o
n
e
m
e
−
p
o
s
e
phoneme-pose
phoneme−pose字典中查找
p
h
o
n
e
m
e
p
o
s
e
s
phoneme\ poses
phoneme poses。
接下来,应用关键姿势插值和平滑模块来生成
p
o
s
e
s
e
q
u
e
n
c
e
s
pose\ sequences
pose sequences。最后,使用GAN生成视频。
- 方法包含两个关键组成部分:
- 根据训练数据(语音的音频和视频)构建 p h o n e m e p o s e s d i c t i o n a r y phoneme\ poses\ dictionary phoneme poses dictionary,
- 训练模型以根据 p h o n e m e p o s e s phoneme\ poses phoneme poses生成视频。
Build Phoneme-Pose Dictionary
音素是一种语言的声音结构的基本单位。说话时舌头和嘴唇的不同位置产生不同的音素,例如lips rounded (e.g. /u/) or spread (e.g./i/), or wide open (e.g., /a/) or closed (e.g., /m/).
一般英语有40个音素, 英语中的词汇重音共有三个级别:主要重音,次要重音和不重音.
例如,permit中的元音“ er”在名词为名词时会加重,而在其为动词时则不会加重。念出重读的“ er”时,嘴巴张得稍微张大一些。因此,我们在英语
p
h
o
n
e
m
e
p
o
s
e
s
d
i
c
t
i
o
n
a
r
y
phoneme\ poses\ dictionary
phoneme poses dictionary中区分重音。对于汉语普通话,我们使用声母和韵母作为
p
h
o
n
e
m
e
p
o
s
e
s
d
i
c
t
i
o
n
a
r
y
phoneme\ poses\ dictionary
phoneme poses dictionary中的基本单位。
作者分别为英语和普通话建立了一个 p h o n e m e p o s e s d i c t i o n a r y phoneme\ poses\ dictionary phoneme poses dictionary,从音素映射到从 s p e e c h p r o d u c t i o n v i d e o speech\ production\ video speech production video中提取的嘴唇姿势。
Key Pose Extraction
这里使用了这篇论文提出的方法:Open-Pose: realtime multi-person 2D pose estimation using Part Affinity Fields 但是我看这是提取姿态的, 就是人的框架那种, 和关键点有关系吗?
Phoneme Extraction
使用了P2FA对齐器(aligner, 来源于论文:Speaker identification on the scotus corpus)来确定发声及其发声的时间位置。该任务需要两个输入:音频和单词转录(word transcriptions)。使用
p
r
o
n
o
u
n
c
i
n
g
d
i
c
t
i
o
n
a
r
y
pronouncing\ dictionary
pronouncing dictionary或
g
r
a
p
h
e
m
e
t
o
p
h
o
n
e
m
e
r
u
l
e
s
grapheme\ to\ phoneme\ rules
grapheme to phoneme rules,预先将转录的单词(
t
r
a
n
s
c
r
i
b
e
d
w
o
r
d
s
transcribed\ words
transcribed words)映射到
p
h
o
n
e
s
e
q
u
e
n
c
e
phone\ sequence
phone sequence中。
通过比较观察到的语音信号和预训练的基于隐马尔可夫模型(HMM)的声学模型来确定
P
h
o
n
e
b
o
u
n
d
a
r
i
e
s
Phone\ boundaries
Phone boundaries。在强制对准(
f
o
r
c
e
d
a
l
i
g
n
m
e
n
t
forced\ alignment
forced alignment)中,语音信号被分析为连续的一组帧(例如,每10ms)。在给定观察数据和HMM表示的声学模型的情况下,通过找到最可能的隐藏状态序列(受到来自
t
r
a
n
s
c
r
i
p
t
i
o
n
transcription
transcription的已知音素序列的限制)来确定帧与音素的对齐方式。然后,我们根据对齐方式为字典中的每个音素存储pose sequences。根据数据集的视频帧速率和平均讲话速率来确定phoneme-poses的宽度。
Text to Speech
使用百度TTS从文本输入生成音频。系统使用默认的女性和男性声音。对于个性化视频生成,可以使用任何技术来生成自己选择的声音。不同人的声音不会影响我们方法生成的视频质量
Key Pose Insertion
要生成一系列姿势(poses),我们需要为关键姿势之间的缺失姿势进行关键姿势插入。我们在语音中一个接一个地遍历所有音素,并在
p
h
o
n
e
m
e
p
o
s
e
s
d
i
c
t
i
o
n
a
r
y
phoneme\ poses\ dictionary
phoneme poses dictionary中找到它们对应的姿势。当我们在视频中插入一个姿势时,我们会在它们的姿势参数空间中进行插值。我们通过考虑以下因素来确定插值策略:
p
h
o
n
e
m
e
p
o
s
e
s
phoneme\ poses
phoneme poses宽度(代表从
p
h
o
n
e
m
e
p
o
s
e
s
d
i
c
t
i
o
n
a
r
y
phoneme\ poses\ dictionary
phoneme poses dictionary提取的关键姿势序列的帧数)和最小
k
e
y
p
o
s
e
d
i
s
t
a
n
c
e
key\ pose\ distance
key pose distance(确定是否需要插值)
插值策略如下:如果两个
p
h
o
n
e
m
e
k
e
y
p
o
s
e
phoneme\ key\ pose
phoneme key pose帧之间的间隔长度大于或等于最小
k
e
y
p
o
s
e
d
i
s
t
a
n
c
e
key\ pose\ distance
key pose distance,我们将使用
k
e
y
p
o
s
e
i
key\ pose_i
key posei和
k
e
y
p
o
s
e
i
+
1
key\ pose_{i + 1}
key posei+1进行插值。
如果两个
p
h
o
n
e
m
e
k
e
y
p
o
s
e
phoneme\ key\ pose
phoneme key pose帧之间的间隔长度小于
k
e
y
p
o
s
e
d
i
s
t
a
n
c
e
key\ pose\ distance
key pose distance,我们将跳过
k
e
y
p
o
s
e
i
+
1
key\ pose_{i + 1}
key posei+1,并使用
k
e
y
p
o
s
e
i
key\ pose_i
key posei和
k
e
y
p
o
s
e
i
+
2
key\ pose_{i + 2}
key posei+2进行插值。
然后,我们将使用插值将两个
k
e
y
p
o
s
e
s
e
q
u
e
n
c
e
s
key\ pose\ sequences
key pose sequences之间的
k
e
y
p
o
s
e
s
key\ poses
key poses与
p
h
o
n
e
m
e
p
o
s
e
s
phoneme\ poses
phoneme poses的加权总和混合,如下图所示。输出序列中的新帧将在两个
k
e
y
p
o
s
e
f
r
a
m
e
s
key\ pose\ frames
key pose frames之间进行插值,并按它们与这两个frames之间的距离加权. 权重与
k
e
y
f
r
a
m
e
key\ frame
key frame的距离成反比,这意味着距离越大,权重越小。
这个图是啥意思呢?
作者注释是这样的: 这是插值法, 为了生成音素中包括“ me”或“ M IY1”的输出序列,我们首先在
p
h
o
n
e
m
e
p
o
s
e
s
d
i
c
t
i
o
n
a
r
y
phoneme\ poses\ dictionary
phoneme poses dictionary中找到这两个
k
e
y
p
o
s
e
s
e
q
u
e
n
c
e
key\ pose\ sequence
key pose sequence,并在输出帧中找到这两个音素的时间戳。该图显示了两个音素之间的间隔长度大于最小
k
e
y
p
o
s
e
d
i
s
t
a
n
c
e
key\ pose\ distance
key pose distance的情况,我们将这两个音素序列复制到输出帧,并将插值应用于这两个
a
d
j
a
c
e
n
t
k
e
y
p
o
s
e
s
adjacent\ key\ poses
adjacent key poses之间的中间poses。
Smoothing
在插值步骤之后进行平滑处理。音素姿势会直接复制到视频中的时间点。姿势运动的平滑由平滑宽度参数控制。为了使人的动作更加稳定,我们平滑了除嘴部以外的所有面部关键点。因为直接平滑嘴巴会牺牲与音素相对应的嘴巴形状的准确性,所以我们计算嘴巴中心并针对与嘴巴中心相对应的所有巴关键点进行平移。对新帧进行线性插值,并根据它们与滑动窗口中其他帧的距离进行加权。最后,我们将口关键点复制到每个帧的口中心。我们在滑动窗口中一一平滑帧,直到姿势序列结束。
Train Video Generation Network
我们利用vid2vid [16]生成网络将姿势序列转换为真实的人类语音视频。
我们修改了GAN网络,以增加对脸部的权重,以强调这一部分。
- 使用了VidTIMIT dataset , 其由43人(19位女性和24位男性)的视频和相应的音频记录组成,它们读取从TIMIT语料库中选择的句子[18]。每个人有十个句子。句子的平均持续时间为4.25秒,或约106个视频帧(25 fps)。
实施细节。
在我们的实验中,视频帧速率为25 fps。
我们将音素姿势宽度设置为等于7,最小键姿势距离设置为4,并将平滑滑动窗口的大小设置为9。图3显示了VidTIMIT输出。