Chapter4-1_Speech_Synthesis(Tacotron)

本文为李弘毅老师【Speech Synthesis - Tacotron】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 3-2 Deep Clustering, PIT

下篇 - 4-2 More than Tacotron

总目录

1 TTS before End-to-end

我们现在的TTS(Text-to-Speech)都是end-to-end的神经网络,那么,在没有end-to-end之前,TTS是怎么做的呢?李老师在这里简单介绍了几个技术,最老的可以追溯到1939年。这里来看一下最接近end-to-end的Deep Voice,其他的有兴趣可以直接看李老师的视频,这里就不介绍了。

Deep Voice其实就是四个神经网络分别train好之后合在一起的模型。首先text会进入一个Grapheme-to-phoneme的模型,把书写的基本单元转化为发音的基本单元。然后这个phoneme会进入一个Duriation Prediction的模型,输出每个phoneme的发音时长是多少。同时这个phoneme也会进入一个叫做Fundamental Frequency Prediction的模型,用来输出每个phoneme的发音音调是怎样的。最后有一个模型,同时接收phoneme,发音时长和音调,然后输出合成的语音。
ch4-1-1

2 Tacotron

Tacotron在17年和18年都有发表论文,是一个end-to-end的语音合成模型。它的输入是character,输出是 (linear) spectrogram,spectrogram和真正的语音之差一个phase的信息,所以可以说是end-to-end的模型了。Tacotron中的Taco就是墨西哥料理中的Taco,作者们应该是一群吃货,在论文的注释中还特别注释了哪些人喜欢吃Taco,哪些人喜欢吃寿司。
ch4-1-2
Tacotron的整体结构如下图所示,可以分为Encoder,Attention,Decoder和Postprocessing四个部分。下面将对每个部分分别介绍。
ch4-1-3

2.1 Encoder

Encoder就是类似于讲Grapheme转化为phoneme的东西。首先输入的文本会经过一层embedding,然后经过一个由全连接+dropout组成的Pre-net,接着经过一个叫做CBHG的模块,最后输出一串sequence。这个CBHG是一个有点复杂的东西,李老师在这里没有细讲,就是几句话带过。总之,就是输入一个sequence,吐出一个sequence。
ch-4-1-4
在第二版的encoder当中,CBHG就被砍掉了,所以这其实也就是一个可有可无的东西,这也是李老师不做过多介绍的原因之一。第二版的encoder结构如下图所示。
ch4-1-5

2.2 Attention

这里的Attention就是正常的Attention,如果不知道Attention的原理的话,可以参考我的这篇博客。这里attention的作用其实就很像是预测每个phoneme的duration。输入的文字和输出的语音在时间上其实是有一种对应关系的,下图中纵坐标表示的是encoder steps,横坐标表示decoder steps,中间的这幅图就是attention的大小,如果学出来像是左图这样的一条斜直线的话,就说明学的比较好,如果学出来像右图这样的话,就说明没学好。
ch4-1-6

2.3 Decoder

Decoder就是一个会经过Pre-net且有Attention的RNN,不过每个time step的输出都会有3个或者多个sequence,因为一个phoneme对应的语音是比较长的。不过这里还有一个额外的model,用来判断这个RNN在这个time step是否可以结束了。
ch4-1-7

2.4 Post processing

decoder输出的sequence会再丢到一个CBHG里去,可以把CBHG想象成一大堆的CNN,然后再输出一个sequence。需要这个post processing的原因是,decoder产生的每个time step的输出是依赖于前一个time step的输出的,所以如果错了就没法修正了,加一个CBHG就是给模型一个修正的机会。最后的loss会结合decoder输出和Mel-spectrogram的偏差,以及CBHG输出和Mel-spectrogram的偏差。最终Inference的时候,我们用的是CBHG的输出。
ch4-1-8
当然这个输出不是语音,还需要一个额外的Vocoder才行,但这个Vocoder是单独train好的,这里不多做介绍。
ch4-1-9

有一点需要指出的是,Tacotron在Inference的时候,是需要加Dropout的,不然输出会坏掉~

3 How good is Tacotron?

再来看一下Tacotron的效果如何。这里用到的评价指标叫做mean opinion score。这个就是找一堆人,来听声音打分,分数为1分到5分的整数,1分最低,5分最高,觉得声音越真实,打分就可以越高。话说这个其实和历史模型做比较,就有点不太靠谱,不同人的主观感受是不太一样的。

结果就是第一版的Tacotron分数一般,但是第二版的Tactron就逼近ground truth了。
ch4-1-10
两个版本的最大差异,其实是在vocoder这里。用了WaveNet之后,分数直线飙升。
ch4-1-11

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 耦合矩阵法合成微波滤波器是一种利用耦合矩阵进行滤波器设计和仿真的方法。在MATLAB 2016中,可以使用相应的代码实现此过程。 耦合矩阵滤波器的设计步骤如下: 1. 设定滤波器的中心频率、带宽和增益要求。 2. 构建滤波器的初始拓扑结构,包括色散网络和耦合网络。 3. 根据滤波器的中心频率和带宽,使用MATLAB 2016中的函数生成所需的网络拓扑和滤波器阵列。 4. 基于滤波器的结构,使用耦合矩阵计算滤波器的传输函数。 5. 根据滤波器的传输函数,使用MATLAB 2016中的函数生成滤波器的频率响应。 6. 根据频率响应对滤波器进行优化,以满足设计要求。 7. 最后,使用MATLAB 2016的函数进行滤波器的性能评估和仿真。 使用MATLAB 2016的coupling_matrix_filter_synthesis代码可以实现上述步骤。代码中包含了计算耦合矩阵、生成滤波器阵列、计算传输函数和优化频率响应等功能模块。用户只需输入设计要求和基本参数,即可得到滤波器的性能和响应。这个代码可以大幅缩短滤波器设计和优化的时间,并提供了便捷的仿真和测试环境。 总之,MATLAB 2016的coupling_matrix_filter_synthesis代码使得耦合矩阵法合成微波滤波器的设计和仿真变得更加快速和高效。 ### 回答2: coupling_matrix_filter_synthesis是一个用于耦合矩阵法合成微波滤波器的Matlab2016代码。耦合矩阵法是一种用于设计微波滤波器的方法,其基本原理是通过调整耦合矩阵的元素来实现频率响应的设计要求。 MATLAB代码通过提供一组滤波器设计参数和目标响应,自动计算并生成耦合矩阵,进而合成满足指定要求的微波滤波器。这个过程主要包括以下步骤: 1. 定义目标响应:根据特定的滤波器设计要求,如截止频率、带宽和通带/阻带衰减等,定义目标响应。 2. 类型选择:根据设计需求和滤波器类型(如带通、带阻、低通、高通),选择合适的滤波器类型。 3. 确定滤波器阶数和型号:根据设计要求和性能指标,选择适当的滤波器阶数和型号。 4. 计算耦合矩阵:使用MATLAB代码,通过输入设计参数和目标响应进行计算,获得对应的耦合矩阵。 5. 获得滤波器元件值:根据耦合矩阵算法,计算得到滤波器元件的理论值。 6. 优化和调整:根据实际电路布局、组件选型和制造工艺等考虑因素,对滤波器进行优化和调整,以实现更好的性能和适应特定应用的要求。 通过coupling_matrix_filter_synthesis代码,用户能够通过输入设计参数和目标响应,获得生成的耦合矩阵,并用于合成满足特定要求的微波滤波器。这个代码在微波器件设计和通信系统等领域具有重要的应用。 ### 回答3: 耦合矩阵法是一种用于合成微波滤波器的方法。它通过设计和优化耦合矩阵来满足滤波器的性能要求。 MATLAB 2016的coupling_matrix_filter_synthesis是一个用于实现耦合矩阵法合成微波滤波器的代码。它可以帮助工程师们快速准确地设计出满足特定要求的滤波器。 这个代码的主要功能是基于耦合矩阵法中的理论原理,根据用户输入的要求参数,通过计算和优化得到滤波器的耦合矩阵。通过调用MATLAB中的优化算法和矩阵计算函数,该代码可以自动进行优化过程,从而得到最佳的耦合矩阵。 使用这个代码,用户首先需要确定滤波器的需求,例如带宽、中心频率等。然后,他们需要在MATLAB环境中输入这些要求参数,并运行代码。运行过程中,代码将根据用户输入的参数进行计算和优化,得到最佳的耦合矩阵。最终,用户可以得到滤波器的设计结果,包括耦合矩阵和其他相关参数。 耦合矩阵法合成微波滤波器是一种有效的设计方法,能够满足复杂的滤波器性能要求。MATLAB 2016的coupling_matrix_filter_synthesis代码提供了一个方便、快速和准确的工具,帮助工程师们设计和优化滤波器,提高滤波器的性能和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值