好耶!
在做之前总要先知道你做这个能干嘛吧
大部分的语音转换系统都假设有并行训练数据,就是两个说话的人必须要说出相同句子的语音对,无法接受非并行数据的训练,这样在声音转换的任务上就出现了第一道门槛 - 资料蒐集与对齐的困难。
在少数几个能处理非并行数据的现有算法中,能够用於多对多转换的算法就又更少了,但还是有像是 CycleGAN, StarGAN-VC 可以做到 (而且这两篇还是同一个作者)。
而在 AutoVC (2019)出现以前,没有任何语音转换系统能够执行零样本转换 (他们这样宣称),就是仅通过观察一个没听过的人的少数话语就可以转换成另一个人的声音。
传统的语音转换 ( 例如:用 NMF 将频谱分解为与说话人有关的和说话人无关的特徵 ) 的问题正被重新定位为风格转换问题,将音质视为风格 (style),将说话的人视为领域 (domains)。
我们昨天做的 D_VECTOR 就是萃取出 "说话的人" 的资讯模型
我们假设语音是由以下随机过程产生的。
说话的人身份 U 是从一群人 pU(·) 中抽取的随机变量
内容是指语音和韵律信息
内容向量 Z = Z(1 : T) 是由联合内容分布 pZ(·) 得出的随机过程。
在给定说话的人身份和内容的情况下,X(t) 就可以代表语音波形的一个样本,或者语音频谱图的 1 帧
语音片段 X = X(1 : T) = pX(·|U, Z) 它表示了发出 Z 内容的说话人语音的分布情况
接着,再假设大家讲话的长度一样
H(X|U = u) = hspeech = constant,
现在,假设两组变量 (U1 , Z1 , X1) 和 (U2 , Z2 , X2) 是独立且同分布的随机样本则 (U1 , Z1 , X1) 属於源说话的人,(U2 , Z2 , X2) 属於目标说话的人。
# 理想的语音转换器应该具有以下理想的性质
pXˆ1→2 (·|U2 = u2, Z1 = z1) = pX(·|U = u2, Z = z1)
当 U1 和 U2 都出现在训练集中时,问题就是一个标准的多说话人转换问题,已经有一些模型解决这个问题了。
当 U1 或 U2 不在训练集中时,问题就变成了零样本语音转换问题,这就是 AutoVC 解决的困难。
今天我们了解到声音转换的困难,也知道非并行数据的解决办法了,就是两种,Feature Disentangle 跟直接硬转,但硬转的下场就是不能够做零样本转换,接着就等明天让我们更详细的钻研 AutoVC 吧!
>>: 从零开始的8-bit迷宫探险【Level 2】Xcode 开发环境介绍
大家好,距离完赛越来越近了,过完最後一天的双十连假,心情也开始忧郁了QQ,还好本系列复杂的文章差不多...
昨天介绍了 Gradle 的 Build Scan 功能,让我们可以清楚的了解 Build 过程中的...
about variable 不管在哪一个程序语言中,我们都需要变数,有了基本的变数,才可以进行数值...
输入输出函式(printf、scanf)是 C 语言中非常重要、也很常用到的函式。如果要用到这两个函...
有效的使用 Observability 的资料 系列文章 (1/4) - 透过 Machine Le...