语音中的风格转换

时间:2024-03-03 21:01:12

图像中的风格转换

风格转换是最早来源于图像领域的概念,一言以蔽之,即是:将一张图片的艺术风格应用到另外一张图片上。
kpve3j.md.png
深度卷积网络具有良好的特征提取能力,不同层提取的特征具有不同的含义。深度卷积网络由一层层的非线性函数组成,可以视为复杂的多元线性函数,该函数完成从输入图像到输出的映射。一般而言,训练风格转换深度网络的损失函数来源于两个方面:

  • 内容损失

    可以使用均方误差度量内容图片\(\vec p\)和生成的feature map即\(\vec x\)之间的距离:

    \[L_{content}(\vec p, \vec x, l)=\frac{1}{2}\sum_{ij}(X_{ij}^l-P_{ij}^l)^2 \]

    其中,\(P^l\)是真实图片;\(X^l \in R^{N_l×M_l}\)\(N_l\)表示滤波器个数,生成图片feature map大小为\(M_l\)\(M_l=width×height\)

  • 风格损失

    一般使用格拉姆矩阵(Gram Matrix)度量风格:\(G^l\in R^{N_l×N_l}​\)

    \[G^l_{ij}=\sum_k X_{ik}^l X_{jk}^l \]

    格拉姆矩阵存储的是图片的风格信息,计算两两特征的相关性,即哪两个特征是同时出现的,哪两个特征是此消彼长的。卷积层中一层的损失为:

    \[E_l=\frac{1}{4N_l^2 M_l^2}\sum_{i,j}(G_{ij}^l-A_{ij}^l)^2 \]

    其中,\(G^l\)是生成图片feature map在第\(l\)层的格拉姆矩阵,\(A^l\)是风格图片在第\(l\)层的格拉姆矩阵。提取风格信息时,通常使用多个卷积层的输出,因此该部分的总损失为:

    \[L_{style}(\vec a,\vec x)=\sum_l^Lw_lE_l \]

    其中,\(\vec a\)是风格图片,\(\vec x\)是生成图片;\(w_l\)是每层损失的权重。

  • 总损失函数

    通过白噪声(高斯分布)初始化输出图片,然后通过深度网络对这个输出图片进行风格和内容两个方面的优化:

    \[L_{total}(\vec p,\vec a,\vec x)=\alpha L_{content}(\vec p,\vec x)+\beta L_{style}(\vec a,\vec x) \]

    其中,\(\vec p\)是内容图片,\(\vec a\)是风格图片,\(\vec x\)是待生成图片

风格迁移 Style transfer

风格迁移背后原理及tensorflow实现

音频中的风格迁移

本文中所谓的风格迁移是一种非常宽泛的说法,包括论文中所谓的“语音克隆”(voice clone)、“多说话人风格迁移”(multi-speaker)、“风格迁移”(style transfer)、“语音转换”(voice conversion)。

Voice Conversion

博客地址:VOICE CONVERSION

本文综述了2017年及之前出现语音风格迁移的方法。文中提到,深度网络对于语音处理困难。一来不如图像和文本领域研究火热,二来语音所具有的信息,难以编码到高维隐空间。一段语音时间序列中,混杂着以下方面的信息:说话人特征(如一个人的音色,音调等);语言学内容(语音表述的内容);副语言特征(如情感等)。

文中提供了4种方法:

  • 直接对频谱图卷积。利用现有的图像风格迁移的方法,直接对频谱图卷积。但是这种方法不能提取语音中的局部信息,更善于识别音频中的全局重复频率。文中使用CycleGAN实现了该方法。

    github上利用该思想实现的语音风格迁移:mazzzystar/randomCNN-voice-transfer

    实验中,该方法生成的语音质量很差,风格迁移效果不明显,生成速度过慢。

  • Supervised latent space / Unconditional generator.

  • Supervised latent space / Speaker conditioned genenrator.

  • Unsupervised latent space / Speaker conditioned generator. 文中使用VQ-VAE实现。

文中使用的数据集:

Uncovering Latent Style Factors for Expressive Speech Synthesis

论文地址:Uncovering Latent Style Factors for Expressive Speech Synthesis

样音:Audio Samples

该篇论文是Style Token系列的开篇之作,在Tacotron的基础上实现的风格转换。

kCk99x.md.png

在原始Tacotron的基础上,添加了如图红框内的Style Attention。其中,Style encoder由K个Style token组成,Style token随机初始化并被全局共享,做无监督学习。训练时,每一帧音频从上图Output t-1传入,作为query进入Text AttentionStyle Attention求得两个Context Vector。

  • Text Attention:

    \[c_t=\sum_s\alpha_{t_{s}}\overline{h_s} \]

    其中,\(\alpha_{t_s}\)是query和key求得的alignment,这里的query是一帧音频,key是每一个编码步上的输出;\(\overline {h_s}\)是每一个编码步上的输出

  • Style Attention:

    \[c\'_t=\sum_s\alpha\'_{t_s}\overline{h\'_s} \]

    其中,\(\alpha\'_{t_s}\)是query和key求得的alignment,这里的query是一帧音频,key是每一个Style token\(\overline {h\'_s}\)是每一个Style token。实验中,该部分的注意力机制是content-based RNN attention,这种注意力机制求alignment的公式是:

    \[e_{ij}=v_a^T\mathop{tanh}(wh_{s-1}+u\overline{h_j}) \]

    其中,\(v_a^T,w,u\)是待训练的参数,\(h_{s-1}\)是上一解码步的输出(query),\(\overline{h_j}\)是编码器的输出(key-value)

求得的两个Context Vector加权求和,实验中,以sigmoid为输出的单层MLP求得权重。

\[c_{t_{final}}=\alpha c_t+(1-\alpha)c\'_t \]

其中,\(\alpha\)是MLP求得的权重,MLP的输入为上一个解码步的输出。

Style Attention的设计,使得模型学习到了文本无关的韵律信息(Style token的训练完全与文本脱离);文本输入以离散的Style embedding为条件(the design of GSTs allows textual input to be conditioned on disentangle style embedding);另外,由于一帧求得一个\(c\'_t\),因此模型实际是对一段音频的局部信息建模。

Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis

论文地址:Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis

样音:Audio Samples

Tensorflow实现:cnlinxi/style-token_tacotron2

该篇是Style Token系列的第二篇,看论文的完成度和样音似乎较为成熟了。该篇文章和上一篇《Uncovering Latent Style Factors for Expressive Speech Synthesis》最大的不同在于:添加Reference encoder,编码一段音频整体的风格特征,该encoder生成的向量,作为Style attention的query求得表征整个音频风格的style embedding。

kCVzqO.md.png

提出了一种"global style tokens"(GSTs)模型,该模型包括三个部分:参考编码器(reference encoder),风格注意力(style attention),风格编码(style embedding)和序列到序列的生成模型(即Tacotron)。

  • Training

    • the reference encoder: 将变长音频的风格压缩到一个固定大小的向量,称此向量为参考嵌入向量(reference embedding)。在训练阶段,参考音频是平行语料中的真实音频。
    • reference embedding送入注意力模块作为query,K个style token作为key-value,求得Style embedding。其中,style token随机初始化,并在整个训练过程中,被所有音频全局共享。这些style token的集合被称作global style tokens, GSTs。实验中,求得的Style embedding直接与Text encoder的每个编码步拼接即可。
  • Inference

    推断阶段有两种模式:一种如上图左侧所示,送入一段想要被模仿风格的音频,深度网络求得该音频的Style embedding进入下游;另一种是手动指定各个style token的权重,注意这里的权重的加和可以不为0,甚至权重可以为负值,同样可以生成Style embedding进入下游。

模型细节

提出的GST-augmented Tacotron系统基于Tacotron,整体模型没有大的改动。最重要的Style Token结构:

  • Reference Encoder

    CNN stack -> RNN, 输入梅尔频谱,输出固定长度的向量

    kCQo4O.png

  • Style Token Layer

    • style token embedding_size: 256-D, tanh activation. 实验中,发现使用10个style token就足以捕获所有的Style信息。
    • content-based tanh attention. 文中称,使用多头注意力能够显著提高风格迁移能力,实验中,使用了4头注意力。

实验

  • 数据:147小时美式英语有声书音频,2013 Blizzard Challenge speaker,富有生动和感情的朗读。
  • 因为Style token部分的训练是无监督学习,因此训练完成之后,并不知道每个token存储的是什么样的Style信息。在训练完成后,可以对每一个token乘以任意scalar作为style embedding,之后生成音频,获知每个token捕获的Style信息。

Predicting Expressive Speaking Style From Text In End-To-End Speech Synthesis

论文地址:Predicting Expressive Speaking Style From Text In End-To-End Speech Synthesis

样音:Audio Samples

该篇是Style Token系列的第三篇。事实上,这篇论文并不是为了做风格迁移,而是希望生成更为自然的语音。在上一篇《Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis》基础上,风格的推断不再是由待模仿音频或手动指定,而是从文本中计算获得。引入一个额外的深度网络,学习原先由Style token layer产生的Style embedding。

kC17Xd.png

kC1q0I.png

上图红框内,即为在《Style Token》基础上添加的两个,能够从文本中推断Style的深度网络,分别为TPCWTPSE。这两种推断Style的深度网络预测的目标不同,其中,TPCW希望预测Style Attention计算出的alignment,即对各个Style Token的加权权重(combination weights);而TPSE希望直接预测Style Token Layer产生的Style Embedding。

两种用于捕获文本特征的深度网络结构相似:

  • 输入:Tacotron文本编码器的输出;输出:固定大小的向量。

  • 网络结构:

    \[CBHG\to GRU\to FC \]

    其中,GRU: 64-units, 最后一个时间步的输出送入全连接层,该层作为变长输出的Text Encoder的summarizer。

  • TPCW

    由于预测的目标是Style attention计算出的alignment,即上图中的\([0.2,0.1,0.2,0.2,0.1,0.4]\),因此从全连接层的输出可以直接与alignment做交叉熵作为损失函数。训练时,先保持TPCW部分不动,其余部分实际和《Style Token》相同。它们先行BP,获得的Style attention的alignment作为真值。然后保持其余部分不动,用刚刚获得的alignment和预测值做交叉熵,更新TPCW部分的深度网络。

    在做推断时,需要使用网络中训练得到的Style Tokens。

  • TPSE

    预测的目标直接是Style Embedding。注意,在该深度网络中,最后一层全连接层可以是多层:

    \[relu\to tanh \]

    以匹配Style token层的tanh激活函数。和上述TPCW类似,只不过直接预测Speaker embedding,对Style Token Layer产生的Speaker Embedding“真值”和TPSE产生的预测值做L1损失。

    在这种模式下,由于从文本中直接预测Style Embedding,推断时可以完全抛弃网络中的Style Tokens。

实验

  • 单说话人

    • 数据:147小时美式英语有声书,富有感情。

    • 20个Style Tokens,Style Attention使用4头注意力。TPSE中的多层全连接层在实验中采用64-units单隐层。

      kC8fzD.png

      这张图可以看到,解决了Tacotron baseline中,预测音频的语调,随时间渐低的现象。

  • 多说话人

    • 数据:190小时美式英语有声书,22个说话人,speaker embedding_size: 64-D. 音频中有的富有感情,有的语气中性。
    • 40个Style Tokens,252-D,Style Attention使用6头注意力。

Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis

论文地址:Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis

样音:Audio Samples

该篇是侧重多说话人语音合成的论文,整个模型结构很简单,只是在Tacotron的基础上增加了一个Speaker Encoder的深度网络,用于表征说话人的音色特征。

kC6eXR.jpg

模型结构

  • Speaker Encoder:正如论文名字所言,Speaker Encoder实际上是谷歌之前提出的说话人鉴别网络,该深度网络单独预训练,训练语料使用大量的说话人音频,不需要对应文本,且音频可以充满噪音,该部分网络输出固定大小的说话人向量(speaker embedding),说话人向量就编码了说话人的声音特征。

    kCbCHU.png

  • Synthesizer:Tacotron2梅尔频谱生成网络。在预测的频谱上加L1+L2正则,有助于在有背噪的训练集上更为鲁棒,但不在speaker embedding引入额外的loss。

  • Vocoder:WaveNet

    kCctGF.jpg

如上,可以证明该模型确实做到了多说话人迁移,使用同一生成网络,不同的speaker embedding。最上面是男性音频,下面两个是女性音频。左侧为reference audio,真实音频;右侧为生成的梅尔频谱。

从上面可以看到:

1.最上面男生有更低的基频,在频谱上显示则是:在最上面的频谱图在低频区域有更密集的谐波分布,竖直条纹更密集。

2.最上面的F2(共振峰)出现在梅尔channel35左右,而中间的F2则出现在梅尔channel40的位置。(注:共振峰F0, F1, F2,…一般关注前3个共振峰)

3.男性的齿擦音如\'s\',0.4s位置在低频处,相比女性有更高的能量。

实验

  • 数据

    • VCTK:44h,109 speakers,英音。声音干净
    • LibriSpeech:436h,1172 speakers,美音。LibriSpeech有背噪,同一说话人的声调和说话风格在不同音频中可能极度不同
  • 自然度

    kCcDVx.jpg

    模型拿到的自然度MOS,同一speaker,值越大,越自然,越像人类发声。Embedding tabel指的是类似于DeepVoice2、DeepVoice3的方法。

    • VCTK的MOS高于LibriSpeech原因:a. LibriSpeech文本缺少标点;b. LibriSpeech有背噪

    • VCTK和LibriSpeech的reference audio是未见说话人所生成的音频MOS相反要高,这可能是因为所引用的音频恰好是正常点的韵律。

    • 学习到了reference audio的“韵律”信息解决方法:a.引入prosody encoder as in [16,24];b.训练时,采用同一说话人不同语句的音频进行训练。

  • 相似度

    kCchqI.jpg

    相似度MOS,度量生成音频和真实音频是同一个人的主观评分。同一speaker,值越大,越相似,越好。Embedding tabel指的是类似于DeepVoice2、DeepVoice3的方法。

    • 在合成seen的LibriSpeech的语音对比中,baseline(embedding table)相似度大于提出的模型(3.70±0.08>3.28±0.08),这可能由于LibriSpeech有更高的内部说话人方差和背噪(which is likely due to the wider degree of within-speeker variation and background noise level in the dataset)

    • speaker encoder是由北美口音训练集训练,而梅尔生成网络和声码器是由英式口音训练而来,这会降低了模型的表现。

    kCglSe.jpg

    生成网络&vocoder的训练集和测试集不相同,同一speaker embedding生成的语音自然度和相似度。从similarity上对比,1.83±0.08<2.77±0.08(VCTK<LibriSpeech)可以看出,生成网络在100个说话人上训练是不足的。

  • 说话人鉴别

    之前使用了相似度MOS作为,度量同一说话人生成音频和真实音频的相似程度。此处使用一个独立的声纹识别系统,度量相似程度。

    kCgdfS.jpg

    上图中的EER, SV-EER: speaker vertification equal error rate,在不同训练集上的生成网络的相同说话人错误率(越低越相同,也就是越好)

    生成的同一说话人的音频相比于真实音频相似度,生成音频和生成音频更相似(EER: 2.86%)。因此,生成音频确实有在模仿目标说话人,但并不足以以假乱真。

  • Speaker Embedding高维空间

    kCgrOs.jpg

    由speaker encoder生成的speaker embedding可视化,同一说话人颜色相同;x表示生成,o表示真实。

    • 同一说话人聚在了一起(左图)。
    • 生成和真实的embedding构成了不同的簇(右图)。也就是说,Speaker encoder是改进的重点之一。
    • embeeding很好的学习到了男女之别(左+右图)。
  • Speaker encoder训练集对生成质量的影响

    kCg6wq.jpg

    LS-Other: 461h, 1166 speakers

    LS-Other+VC: 131k句,1166+1211speakers

    LS-Other+VC+VC2:1.09M句,1166+5944 speakers。另外为了避免过拟,表中上面两栏speaker encoder的网络为256LSTM+64Linear, output: 64-dim embedding vector

    在该模型上,

    • 当speaker encoder训练集中说话人数量增大,自然度和同一说话人生成相似性也都显著提升。

    • speaker encoder的训练数据集大小对整个多说话人语音合成影响显著。由于训练speaker encoder需要的语料只需要音频且音质要求低,因此训练集多多益善。

  • 虚拟说话人

    kCg4l4.jpg

    随机采样的speaker embedding,仍能合成较为自然的音频。另外,低cos相似度,高EER表明了,生成的音频确实与训练集中的说话人相异。

结论

  • speaker encoder的训练集大小对多说话人模型生成质量影响显著;

  • 低维speaker embedding限制了表达说话人特征的能力;

  • 没有达到人类流畅性原因:a.每个说话人数据量很少;b.训练集音质差;c.难以迁移口音(英式生成器,美式speaker encoder,不匹配);

  • 提出的模型,难以抛除reference audio中的韵律信息。

论文附录

  • 对比联合训练和分开训练生成网络和speaker encoder的效果

    kCgOfO.png

    最后一栏,proposed model(Table 1,2,5)的speaker encoder是由未公开数据集,18k说话人语料训练而来(speaker encoder trained separately on a corpus of 18K speakers)

  • 讨论训练集

    kCgv1e.jpg

    LibriSpeech同一说话人风格差异大,角色扮演甚至男扮女。

  • 在VCTK上训练的模型的性能表现与说话人相关

    kC2pnA.jpg

  • 讨论reference audio时长对于模型性能的影响

    kC2Ftf.jpg

    • 仅2s的reference audio即可达到接近最好的表现。

    • 3或5s最好,5s的reference audio似乎已超过了speaker embedding的表达能力。

    • 当有更多的数据时,微调网络甚至仅仅微调speaker encoder都有助于提升模型表现。

  • 虚拟说话人

    kC2E9S.jpg

    每个虚拟说话人的生成音频都有明确的内容信息但却有不同的基频和speaking rate

Deep Voice 2: Multi-Speaker Neural Text-to-Speech

论文地址:Deep Voice 2: Multi-Speaker Neural Text-to-Speech

Deep Voice 2是百度提出的,类似于Tacotron的端到端语音合成系统,对该深度网络不是非常熟悉,但是其中也述及多说话人语音合成的问题。该模型整体结构:

kC2wAx.png

多说话人语音合成

与上述的《Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis》不同,Deep Voice 2只能合成已见说话人的音频。speaker embedding首先被均匀初始化,然后联合模型其它部分,一起参与训练。一个特定数据集训练获得的Deep Voice 2对应着一个特定的speaker embedding集合。

在Speaker embedding的使用方法上,提供了4种使用模式:

  • Site-Specific Speaker Embeddings:在任何用到speaker embedding的地方,使用非线性仿射变换,改变speaker embedding的维度。
  • Recurrent Initialization:使用上述的Site-Specific Speaker Embeddings初始化循环层隐状态。
  • Input Augmentation:在循环层每一个时间步的输入拼接Site-Specific Speaker Embeddings。
  • Feature Gating:将深度网络层的激活值与Site-Specific Speaker Embeddings元素乘。

实验

  • 数据:
    • VCTK:44h,109 speakers
    • 内部数据集:238h有声书,477 speakers,每人平均30min的音频
  • 结论
    • 无论Tacotron和Deep Voice 2,均足够在此基础上做多说话人语音合成;
    • 向后处理网络中的CBHG添加speaker embedding反而会降低音质,但是向text encoder中加入speaker embedding是必要的;
    • 可使用speaker embedding增益decoder,可以在decoder的pre-net添加speaker embedding作为额外输出;另外,可以使用speaker embedding初始化attention的context vector以及decoder的GRU隐状态。

Deep Voice 3: Scaling Text-to-Speech with Convolutional Sequence Learning

论文地址:Deep Voice 3: Scaling Text-to-Speech with Convolutional Sequence Learning

百度的Deep Voice 2升级版。

kCRbRO.png

Speaker embedding添加位置包括:

  • Encoder Pre-Net
  • Encoder Concat
  • Decoder Pre-Net
  • Attention Context Vector

除此之外,这篇论文中还提到了文本预处理步骤,大规模部署等问题。文中声称,使用文本预处理方法,解决字词“错读”、“跳读”,“重复读”等现象。

Neural Voice Cloning with a Few Samples

论文地址:Neural Voice Cloning with a Few Samples

样音:Audio Samples

这篇论文主要讨论使用较少的参考语料,就能够模仿一个说话人的声音。

kCW60A.png

论文中,公开了使用的speaker encoder结构:

kCoPWq.png

上图中,有两个激活函数不常见:

  • ELU:类似于ReLU的激活函数,the exponential linear unit

    \[f(x)=\left\{\begin{matrix} x, & x>0\\ \alpha(e^x-1), & x\leq 0 \end{matrix}\right.\\ f\'(x)=\left\{\begin{matrix} 1, & x>0\\ f(x)+\alpha, & x\leq 0 \end{matrix}\right. \]

    其中,\(\alpha\)是可调参数,它控制着ELU负值部分在何时饱和。

    kCo2kj.png

  • softsign:类似于tanh的激活函数

    \[f(x)=\frac{x}{1+|x|}\\ f\'(x)=\frac{1}{(1+|x|)^2} \]

    tanhsoftsign更容易饱和。

    softsign

    kCTV3t.png

    tanh

    kCTE9I.png

ELU激活函数

ReLU、LReLU、PReLU、CReLU、ELU、SELU

softsign与tanh的比较

另外,

  • 线性变换:\(y=Ax\)
  • 仿射变换(affine transformation):\(y=Ax+b\)

和《Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis》一样,该论文中还使用了多说话人鉴别网络,做相似度客观评价,文中使用的多说话人鉴别网络结构为:

kCTNuT.md.png

其中,PLDA为概率线性判别分析,用于给两段音频的高维编码相似度打分:

\[s(x,y)=w·x^Ty-x^TSx-y^TSy+b \]

其中,\(x,y\)分别是两段音频从全连接层送出的高维编码,\(w,b\)均是标量,\(S\)是对称矩阵。

之后,从概率线性判别出来的\(s(x,y)\)进入sigmoid层,给出两段音频来自同一说话人的分数。该模型使用交叉熵作为损失函数。

另外,百度2017年公布了另一个说话人鉴别网络《Deep Speaker: an End-to-End Neural Speaker Embedding System》,论文地址:Deep Speaker: an End-to-End Neural Speaker Embedding System;Tensorflow开源实现:philipperemy/deep-speaker,Pytorch开源实现:qqueing/DeepSpeaker-pytorch

Effect of data reduction on sequence-to-sequence neural TTS

论文地址:Effect of data reduction on sequence-to-sequence neural TTS

亚马逊这篇文章主要探讨了低语料对多说话人语音合成的影响。事实上,机器翻译、语音合成等都受限于平行语料难以获取的问题,有不少文章提出了解决方案,如Semi-Supervised Training for Improving Data Efficiency in End-to-End Speech Synthesis,以及THUNLP-MT/MT-Reading-ListLow-resource Language Translation部分提及的论文。

Sample Efficient Adaptive Text-to-Speech

论文地址:Sample Efficient Adaptive Text-to-Speech

端到端语音合成的风格迁移不仅仅可以在频谱生成网络或者频谱上动手脚,当然也可以在声码器上想办法。该篇文章介绍了,在部署时,只需少量数据就能快速适应新说话人的声码器网络。