《One-shot Voice Conversion by Separating Speaker and Content Representations with Instance Normaliz》

在这里插入图片描述

任务

其他模型的局限: 只能将声音转换成训练数据中出现的说话人, 缩小了VC的使用范围。
任务: 源说话人和目标说话人可以不出现在训练数据中, 只用一个样本就能进行语音转换。

实现方法

实例规范化说话人和说话内容。

简介

一般VC的目的是将语音信号的语言内容部分保留, 将非语言信息进行转换。非语言信息一般指的是说话人身份, 口音,发音等部分。 VC对一些下游的任务(如多说话人的语音合成, 表达性语音合成, 语音增强, 发音正确)来说是非常有用的。

之前的工作可以分为两种类型:监督和无监督。

监督的语音转换已经取得了不错的效果, 但是需要目标和源话语之间在帧级别上的对齐关系。如果目标域和源域之间有比较大的偏差会严重影响语音转换, 并且收集平行语料是很费时间的, 因此如果将灵活地应用在其他领域, 一般不使用监督的语音转换。

无监督的语音转换不需要收集平行语料。 一些工作尝试引入ASR系统来帮助无监督VC, 将语音先转换为音素序列, 然后再在目标域中合成语音, 这些方法的局限性在于转换的效果极大依赖于ASR系统的准确度。 其他的工作利用生成模型(如VAE,GAN)来做无监督VC, 这些工作将VC当做是一个域之间的映射问题, 将语音在不同域中进行转换。 这些方法的局限是无法合成在训练出现中从未出现的说话人的声音。

语音信号固有地包含静态信息和语言信息。 静态部分如说话人, 声学信息等与实践无关,仅在整个话语过程中发生变化; 而语言部分是每隔几帧都在发生剧烈变化。 因此可以假设一个话语可以分解为说话人表示和内容表示。为了将话语中说话人表示和内容表示分离开来, 模型由三个部分组成: speaker encoder, content encoder 和 decoder。

模型

在这里插入图片描述
假设 p ( z c ∣ x ) p(z_c|x) p(zcx)是条件独立的高斯分布, p ( z c ∣ x ) = N ( E c ( x ) , I ) p(z_c|x)=\mathcal N(E_c(x),I) p(zcx)=N(Ec(x),I). 重构损失为:
L r e c ( θ E s , θ E c , θ D ) = E x ∼ p ( x ) , z c ∼ p ( z c ∣ x ) [ ∣ ∣ D ( E s ( x ) , z c ) − x ∣ ∣ 1 ] L_{rec}(\theta_{E_s}, \theta_{E_c}, \theta _D)= \mathbb E _{x \sim p(x), z_c \sim p(z_c|x)}[||D(E_s(x),z_c)-x||_1] Lrec(θEs,θEc,θD)=Exp(x),zcp(zcx)[D(Es(x),zc)x1]
在训练时, 从 X \mathcal X X中均匀采样一个x(即 p ( x ) p(x) p(x)是在 X \mathcal X X上的均匀分布). 为了使后验概率和先验概率匹配, 需要最小化KL散度损失。 因为这里已经假设了方差为1, 所以这里KL散度可以等价于L2正则化项:
L k l ( θ E c ) = E x ∼ p ( x ) [ ∣ ∣ E c ( x ) 2 ∣ ∣ 2 ] L_{kl}(\theta_{E_c}) = \mathbb E_{x \sim p(x)}[||E_c(x)^2||_2] Lkl(θEc)=Exp(x)[Ec(x)22]

目标函数为:
m i n θ E s , θ E c , θ D = λ r e c L r e c + λ k l L k l min_{\theta _{E_s},\theta _{E_c}, \theta_D}=\lambda _{rec}L_{rec} + \lambda _{kl}L_{kl} minθEs,θEc,θD=λrecLrec+λklLkl

Instance Normalization (IN)

发现在content encoder 引用Instance normalization 而不需要用仿射变换能将speaker information和 content information分离开来。
instance normalization:
M: 卷积层输出的feature map
M c M_c Mc: 第c层的channel, W维的向量
第一步: 计算第c个channel的均值和标准差
μ c = 1 W ∑ w = 1 W M c [ w ] σ c = 1 W ∑ w = 1 W ( M c [ w ] − μ c ) 2 + ϵ \mu _c = \frac{1}{W} \sum_{w=1}^{W} M_c[w]\\ \sigma _c = \sqrt {\frac{1}{W} \sum _{w=1}^W (M_c[w]-\mu _c)^2+\epsilon} μc=W1w=1WMc[w]σc=W1w=1W(Mc[w]μc)2+ϵ
第二步:计算Instance normalization
M c ′ [ w ] = M c − μ c σ c M_c^{'}[w] = \frac{M_c-\mu _c}{\sigma_c} Mc[w]=σcMcμc
关于instance normalization 可参考的文章:
https://zhuanlan.zhihu.com/p/57875010
https://my.oschina.net/u/4135288/blog/4650633
https://zhuanlan.zhihu.com/p/158657861?utm_source=wechat_timeline

为了使speaker encoder 能够生成 speaker representation, 我们将speaker information中提取到的均值 γ c \gamma_c γc和方差 β c \beta_c βc输入到decoder的AdaIN层中,最终decoder的输入为:
M c ′ = γ c M c − μ c σ c + β c M_c^{'} = \gamma_c \frac{M_c-\mu _c}{\sigma_c}+\beta_c Mc=γcσcMcμc+βc
这样能使得保留source utterance的语言信息, 又加入了target utterance的非语言信息。

实现

在这里插入图片描述
实验结果:

  1. speaker embedding是否能将说话人区分开
    在这里插入图片描述

  2. 语音转换是否相似
    在这里插入图片描述

样例链接: https://jjery2243542.github.io/one-shot-vc-demo/.
代码链接:https://github.com/jjery2243542/adaptive_voice_conversion

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值