项目地址:https://github.com/ibab/tensorflow-wavenet
这是用于音频生成的 WaveNet 生成式神经网络架构的一种 TensorFlow 实现。
WaveNet 神经网络架构可以直接生成原始音频波形,能够在文本转语音和常规的音频生成上得到出色的结果。(具体介绍请参阅前言中链接的介绍文章)。
该网络可在给定所有之前的样本和可能的额外参数的条件下,通过建模条件概率(conditional probability)来生成音频波形的下一个样本。
在一个音频处理步骤之后,其输入波形会被量化到一个固定的整数范围内。然后这个整数振幅(integer amplitudes)会被独热(one-hot)编码以生成一个形状的张量(num_samples, num_channels)。
一个卷积层只能获得当前和之前的输入,然后减少信道维度(channel dimension)。
该网络的内核被构建为一个因果扩张层(causal dilated layers)的堆叠,其中每一层都是一个扩张的卷积(dilated convolution,即带有 hole 的卷积),它只能获取当前和过去的音频样本。
所有层的输出通过一系列密集的后处理层(postprocessing layers)被结合起来并扩展回原来的信道数量,后面再跟上一个 softmax 函数将这些输出转换成一个分类分布(categorical distribution)。
其损失函数是每个时间步骤的输出和其下一个时间步骤的输入之间的交叉熵(cross-entropy)。
在这个 repository 中,该网络的实现可以在 wavenet.py 文件中找到。
要求
在运行本训练脚本之前需要先安装 TensorFlow。支持 TensorFlow 0.10 和当前的 master 版本。
此外,为了读取和写入音频还必须安装 librosa。(地址:https://github.com/librosa/librosa)
安装所需的 Python 包(TensorFlow 之外的),运行
pip install -r requirements.txt
训练网络
你可以使用任何包含 .wav 文件的语料库。我们目前主要使用的 VCTK 语料库。
VCTK 语料库地址:http://homepages.inf.ed.ac.uk/jyamagis/page3/page58/page58.html
备用地址:http://www.udialogue.org/download/cstr-vctk-corpus.html
为了训练该网络,执行
python train.py—data_dir=corpus
其中 corpus 是包含 .wav 文件的目录。本脚本会递归式地收集该目录下的所有 .wav 文件。
你可以通过运行
python train.py—help
查看每个训练配置上的文档。
模型的参数的配置可以在 wavenet_params.json 中找到,这些配置需要在训练过程和生成过程中保持一致。
生成音频
由 @jyegerlehner 基于来自 VCTK 语料库的 speaker 280 所生成的样本输出:https://soundcloud.com/user-731806733/speaker-p280-from-vctk-corpus-1
你可以使用之前训练好的模型通过执行 generate.py 脚本来生成音频,运行:
python generate.py—samples 16000 model.ckpt-1000
其中 model.ckpt-1000 需要是之前保存的模型。你可以在 logdir 中找到这些。使用—samples 参数设定你需要生成的样本的数量(默认是 1 秒生成 16000 个)。
生成的波形可以使用 TensorBoard 回放,或使用—wav_out_path 参数存储成 .wav 文件:
python generate.py—wav_out_path=generated.wav --samples 16000 model.ckpt-1000
除了—wav_out_path,通过 --save_every 也可以每 n 个样本保存一次进行中的 .wav 文件:
python generate.py—wav_out_path=generated.wav --save_every 2000 --samples 16000 model.ckpt-1000
快速生成是默认开启的。它使用了来自 Fast Wavenet repository 的实现。你可以通过这个链接了解其工作方式。这可以将生成样本所需的时间减少到几分钟。
关闭快速生成:
python generate.py—samples 16000 model.ckpt-1000 --fast_generation=false
运行测试
安装测试要求:
pip install -r requirements_test.txt
运行测试套件:
./ci/test.sh
缺少的功能
目前还没有调节说话者 ID 等额外信息的功能。