什么?语音合成开源代码不会跑,follow me!
摘要:本文描述的深度神经网络模型结构:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions。
本文分享自华为云社区《什么?语音合成开源代码不会跑,我来教你跑Tacotron2》,作者: 白马过平川 。
Tacotron-2:
TTS论文大全: https://github.com/lifefeel/SpeechSynthesis
DeepMind的Tacotron-2的Tensorflow实现。 本文描述的深度神经网络模型结构:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions
github地址:https://github.com/Rookie-Chenfy/Tacotron-2
还有一些其他版本的Tacotron2开源项目:
这个 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
参考文献和源码:
- Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions
- Original tacotron paper
- Attention-Based Models for Speech Recognition
- Wavenet: A generative model for raw audio
- Fast Wavenet
- r9y9/wavenet_vocoder
- keithito/tacotron
想了解更多的AI技术干货,欢迎上华为云的AI专区,目前有AI编程Python等六大实战营供大家免费学习。(六大实战营link:http://su.modelarts.club/qQB9)
什么?语音合成开源代码不会跑,follow me!的更多相关文章
- 一个可随意定位置的带色Toast——开源代码Crouton的简单使用
今天在公司要求的代码中,要求显示的提示能够更加具有多样化,而不是简单的Toast字样,第一想法肯定是自定义View呀,结果在浏览中发现还有这样的一个开源代码——Crouton. 几经折腾,发现这个东西 ...
- GitHub + VSTS 开源代码双向同步
GitHub已经是全球开源代码的大本营了,通过以下统计你可以看到仅仅javascript在github就有超过32万个活动的repo.很多开发人员都会把自己的一部分代码分享到github上进行开源,一 ...
- CWMP开源代码研究5——CWMP程序设计思想
声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...
- iOS流行的开源代码库
本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/ ...
- CWMP开源代码研究2——easycwmp安装和学习
声明:本文是对开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文所有笔记和代码可以到csdn下载:http://download.csdn.n ...
- CWMP开源代码研究1——开篇之作
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- 开源代码Window下搭建rtmp流媒体服务器
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综合:有这样需求,将摄像头 ...
- 你的C#代码是怎么跑起来的(二)
接上篇:你的C#代码是怎么跑起来的(一) 通过上篇文章知道了EXE文件的结构,现在来看看双击后是怎样运行的: 双击文件后OS Loader加载PE文件并解析,在PE Optional Header里找 ...
- AgileEAS.NET SOA 中间件平台 5.2 发布说明-包含Silverlight及报表系统的开源代码下载
一.AgileEAS.NET SOA 中间件简介 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速 ...
- 苹果刷机相关开源代码(如iRecovery等)收集汇总(不断更新中...)
下面截图是在下面开源代码下使用VS2015修改部分代码后适配而成,可以在Windows平台上运行, 下载连接: http://pan.baidu.com/s/1i4zKGx3.
随机推荐
- PTA乙级1099
#include"bits/stdc++.h" using namespace std; int prime(int x) { if(x<2) return 0; for(i ...
- k8s Rabbitmq安装部署
安装方式 kubectl apply -f rabbitmq.yaml -n yunda-dev-cache rabbitmq.yaml ##创建PV # 注意更换存储方式 --- apiVersio ...
- QT(1)- QString
QT(1)- QString 1 简介 在Qt中表示字符串的类是QString类,它存储字符串是采用的Unicode码,编码方式是使用UTF-16来进行编码的,也就是一个字符(两个字节),一个中文汉字 ...
- idea的git插件,可以显示每一行代码的git版本记录,很好用
再给大家推荐一款idea的git插件----GitToolBox,可以显示每一行代码的git版本记录,很好用 效果图如下 可以在光标所在行代码的后面显示git的版本记录信息(提交的用户名,提交的时间等 ...
- PZthon
一道新式题目,python.exe的分析 这个时候没有思路不要紧,直接wp 先用特别的软件执行.exe程序,就是对.exe进行反编译 然后在反编译脚本的目录写就有了一个打包文件夹 在里面找到文件的.p ...
- python列表之索引及len()函数
我们在刚开始使用列表的时候,经常会遇到这种错误 list_1 = ['one', 'two', 'three', 'four', 'five'] print(list_1[5]) 这段代码看上去是没有 ...
- Netty源码学习5——服务端是如何读取数据的
系列文章目录和关于我 零丶引入 在前面<Netty源码学习4--服务端是处理新连接的&netty的reactor模式>的学习中,我们了解到服务端是如何处理新连接的,即注册Serve ...
- Vue07-Axios
Axios axios是一个网络请求相关的库. axios: ajax i/o system 使用axios编写的网络请求代码,可以运行在浏览器端,也可以在Node环境中运行. 01. 支持的请求方式 ...
- Lucene和索引
全文索引的原理: 是 扫描每个词 对每个词创建索引,指明这个词在文章出现的次数和位置 全文检索的流程:对 检索的对象(文章,文档,网页内容) 预先建立 文档域 和 索引域 ,在索引域会分词创建索引,然 ...
- vue-test4 -------组件之间的数据传递
<template> <h3>CompA</h3> <component-b :onfun="dateFun"></compo ...