摘要:本文描述的深度神经网络模型结构:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions。

本文分享自华为云社区《什么?语音合成开源代码不会跑,我来教你跑Tacotron2》,作者: 白马过平川 。

Tacotron-2:

这个 github 包含了对该论文的其他改进和尝试, 因此我们使用paper_hparams.py文件,该文件保存精确的超参数以重现了paper的结果,而无需任何额外的附加功能。默认使用的建议hparams.py文件包含带有额外内容的超参数,在大多数情况下可以提供更好的结果。 按照自己的需要随意修改参数,差异将在文件中突出显示。

Repository Structure:

  • 步骤 (0): 获取数据集, 这里我设置了Ljspeech,en_US和en_UK(来自M-AILABS)的示例。
  • 步骤 (1): 预处理您的数据。这将为您提供training_data文件夹。
  • 步骤 (2): 训练你的Tacotron模型。产生logs-Tacotron文件夹。
  • 步骤 (3): 合成/评估Tacotron模型。给出tacotron_output文件夹。
  • 步骤 (4): 训练您的Wavenet模型。产生logs-Wavenet文件夹。
  • 步骤 (5): 使用Wavenet模型合成音频。给出wavenet_output文件夹。

注意:

  • 步骤2,3和4可以通过Tacotron和WaveNet(Tacotron-2,步骤(*))的简单运行来完成。
  • 原有github的预处理仅支持Ljspeech和类似Ljspeech的数据集(M-AILABS语音数据)!如果以不同的方式存储数据集,则需要制作自己的preprocessing脚本。
  • 如果同时对两个模型进行训练,则模型参数结构将不同。

一些预训练模型和demo:

您可以在此处.查看模型性能的一些主要见解(在预训练阶段)。

模型架构:

图1:Tacotron2模型结构图

作者描述的模型可分为两部分:

  • 谱图预测网络
  • Wavenet声码器

要深入探索模型体系结构,训练过程和预处理逻辑,请参阅 作者的 wiki

如何开始

环境设置:

首先,您需要与Tensorflow一起安装python 3 。

接下来,您需要安装一些Linux依赖项以确保音频库正常工作:

apt-get install -y libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg libav-tools
最后,您可以安装 requirements.txt. 如果你是一个 Anaconda 用户: (可以用 pip3 代替 pip 并 用python3 代替 python)
pip install -r requirements.txt

Docker:

或者,可以构建docker镜像以确保自动设置所有内容并使用docker容器内的项目。

Dockerfile is insider “docker” folder

docker image可以用以下内容构建:

docker build -t tacotron-2_image docker/

然后容器可以运行:

docker run -i --name new_container tacotron-2_image

数据集:

该github在 ljspeech dataset数据集上测试了上面的代码,该数据集有近24小时标记的单个女演员录音。(下载时,README文件中提供了有关数据集的更多信息)

该github还在 新的M-AILABS语音数据集 上运行当前测试,该数据集 包含超过700种语音(超过80 Gb的数据),超过10种语言。

下载数据集后, 解压压缩文件, 而该文件夹放在克隆的github里。

Hparams设置:

在继续之前,您必须选择最适合您需求的超参数。 虽然可以在预处理/训练期间从命令行更改超参数,但我仍然建议直接在hparams.py文件上一劳永逸地进行更改。

为了选择最佳的fft参数,我制作了一个griffin_lim_synthesis_tool笔记本, 您可以使用它来反转实际提取的梅尔/线性光谱图,并选择预处理的好坏程度。所有其他选项都在hparams.py中得到了很好的解释,并且具有有意义的名称,因此您可以尝试使用它们。

AWAIT DOCUMENTATION ON HPARAMS SHORTLY!!

预处理

在运行以下步骤之前,请确保您在Tacotron-2文件夹中

cd Tacotron-2

然后可以使用以下命令开始预处理:

python preprocess.py

可以使用 –dataset 参数选择数据集。如果使用M-AILABS数据集,则需要提供 language, voice, reader, merge_books and book arguments 以满足您的自定义需求。默认是 Ljspeech.

示例M-AILABS:

python preprocess.py --dataset='M-AILABS' --language='en_US' --voice='female' --reader='mary_ann' --merge_books=False --book='northandsouth'
或者如果你想一个说话人使用所有书籍:
python preprocess.py --dataset='M-AILABS' --language='en_US' --voice='female' --reader='mary_ann' --merge_books=True

这应该不会超过几分钟。

训练:

按顺序训练两个模型:

python train.py --model='Tacotron-2'

特征预测模型Tacotron-2可以分别被训练使用:

python train.py --model='Tacotron'

每5000步记录一次,并存储在logs-Tacotron文件夹下。

当然,单独训练wavenet是通过以下方式完成的:

python train.py --model='WaveNet'

logs will be stored inside logs-Wavenet.

注意:

  • 如果未提供模型参数,则训练将默认为Tacotron-2模型培训。(与tacotron模型结构不同)
  • 训练模型的参数可以参考  train.py 有很多选项可以选
  • wavenet 的预处理可能得单独使用 wavenet_proprocess.py脚本

合成

合成音频 以 端到端 (文本到音频) 的方式 (两个模型同时运行):

python synthesize.py --model='Tacotron-2'

对于频谱图预测网络,有三种类型的mel谱图的预测结果:

  • 推理测试(对自定义句子的综合评测)。 这是我们在拥有完整的端到端模型后通常会使用的。
python synthesize.py --model='Tacotron'
  • 自然合成 (让模型通过将最后一个解码器的输出输入到下一个时间步来单独进行预测).
python synthesize.py --model='Tacotron' --mode='synthesis' --GTA=False
  • 有效的对齐合成 (默认: 模型是在有效真实的标签下强制训练产生的). 当预测用于训练wavenet的mel频谱时,使用该合成方法. (如文中所述,产生更好的结果)
python synthesize.py --model='Tacotron' --mode='synthesis' --GTA=True

用先前合成的Mel频谱合成波形:

python synthesize.py --model='WaveNet'

注意:

  • 如果未提供模型参数,则默认使用Tacotron-2模型合成。(End-to-End TTS)
  • 选择的合成参数,你可以参考synthesize.py

参考文献和源码:

点击关注,第一时间了解华为云新鲜技术~

什么?语音合成开源代码不会跑,follow me!的更多相关文章

  1. 一个可随意定位置的带色Toast——开源代码Crouton的简单使用

    今天在公司要求的代码中,要求显示的提示能够更加具有多样化,而不是简单的Toast字样,第一想法肯定是自定义View呀,结果在浏览中发现还有这样的一个开源代码——Crouton. 几经折腾,发现这个东西 ...

  2. GitHub + VSTS 开源代码双向同步

    GitHub已经是全球开源代码的大本营了,通过以下统计你可以看到仅仅javascript在github就有超过32万个活动的repo.很多开发人员都会把自己的一部分代码分享到github上进行开源,一 ...

  3. CWMP开源代码研究5——CWMP程序设计思想

    声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...

  4. iOS流行的开源代码库

    本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/ ...

  5. CWMP开源代码研究2——easycwmp安装和学习

    声明:本文是对开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文所有笔记和代码可以到csdn下载:http://download.csdn.n ...

  6. CWMP开源代码研究1——开篇之作

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...

  7. 开源代码Window下搭建rtmp流媒体服务器

    合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综合:有这样需求,将摄像头 ...

  8. 你的C#代码是怎么跑起来的(二)

    接上篇:你的C#代码是怎么跑起来的(一) 通过上篇文章知道了EXE文件的结构,现在来看看双击后是怎样运行的: 双击文件后OS Loader加载PE文件并解析,在PE Optional Header里找 ...

  9. AgileEAS.NET SOA 中间件平台 5.2 发布说明-包含Silverlight及报表系统的开源代码下载

    一.AgileEAS.NET SOA 中间件简介      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速 ...

  10. 苹果刷机相关开源代码(如iRecovery等)收集汇总(不断更新中...)

    下面截图是在下面开源代码下使用VS2015修改部分代码后适配而成,可以在Windows平台上运行, 下载连接: http://pan.baidu.com/s/1i4zKGx3.

随机推荐

  1. 【Qt6】列表模型——几个便捷的列表类型

    前面一些文章,老周简单介绍了在Qt 中使用列表模型的方法.很明显,使用 Item Model 在许多时候还是挺麻烦的--要先建模型,再放数据,最后才构建视图.为了简化这些骚操作,Qt 提供了几个便捷类 ...

  2. Velocity之Hello World(入门实例)

    参考:http://blog.csdn.net/mengxuwq/article/details/1871161 (非常感谢这篇文章,让我初步入门) 自己调试完全能运行后,写在此,供新人参考,供自己温 ...

  3. OpenGL 基础光照详解

    1. 光照 显示世界中,光照环境往往是相对复杂的.因为假设太阳作为世界的唯一光源,那么太阳光照在物体A上A将阳光进行反射后,A又做为一个新的光源共同作用于另一个物体B.所以于B来讲光源是复杂的.然而这 ...

  4. Senparc 基础库全面适配 .NET 8.0

    概要 Senparc 全家桶中的基础库已经全面适配 .NET 8.0,目前随着 .NET 8.0 的 RC 版本不断发布,对应的版本号也将同步进行更新,直到本月 Ignite 大会微软官方发布 .NE ...

  5. MVC控制器传值到JS

    1.传递整形数字 1 <script> 2 var data=@ViewBag.ID; 3 </script> 2.传递字符串 1 <script> 2 var d ...

  6. lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O

    -- create a class Animal={name = "no_name" , age=0 } function Animal:bark(voice) print(sel ...

  7. VBA常用的函数

    space(8)加空格 vbcrlf换行 trim()去掉两侧空格 lrim()去掉左侧空格 rtrim()去掉右侧空格 left()取字符的左侧 right()取字符串的右侧开始 mid()取字符串 ...

  8. Linux笔记02: Linux环境_2.2 Linux系统安装

    2.2 Linux系统 本文使用的Linux系统为CentOS 7.9.2009,读者可以根据自己的需要选择不同的版本. 2.2.1 CentOS版本 CentOS基本上是安装在i386.x86_64 ...

  9. ssm整合-异常处理器

    异常处理器   程序开发过程中不可避免会遇到异常现象 类似于这样的异常 异常出现的种类: 各个层均可能出现异常,当我们出现异常时,处理代码应该写在哪一层?   表现层,因为要把异常网上抛,在表现层进行 ...

  10. C#_Win32_PInvoke源码生成器

    介绍 一个源代码生成器,用于向 C#项目添加一组用户定义的 Win32 P/Invoke 方法和相关的类型. 链接地址: https://github.com/microsoft/CsWin32 还在 ...