注意:这是开发版本。如果您需要稳定的版本,请查看V0.1.1。
存储库的目的是提供WaveNet Vocoder的实现,该实现可以生成以语言或声学特征为条件的高质量原始语音样本。
音频样本可在https://r9y9.github.io/wavenet_vocoder/上找到。
可以在https://colab.research.google.com上执行的笔记本。
注意:这本身不是文本对语音(TTS)模型。使用此处提供的预训练模型,您可以在MEL频谱图中合成波形,而不是原始文本。您将需要MEL-SPECTROGRAM预测模型(例如Tacotron2)来使用TTS的预训练模型。
注意:对于LJSpeech预验证的模型,该模型进行了多次微调,并总共训练了超过1000k的步骤。请参阅问题(#1,#75,#45),以了解如何训练模型。
| 模型URL | 数据 | 超级参数URL | git提交 | 步骤 |
|---|---|---|---|---|
| 关联 | ljspeech | 关联 | 2092A64 | 1000k〜步骤 |
| 关联 | CMU北极 | 关联 | B1A1076 | 740k步骤 |
要使用预训练的模型,请首先检查上述特定的GIT提交。 IE,
git checkout ${commit_hash}
然后遵循“从检查点合成”部分中的“合成”部分。请注意,Synthesis.py的旧版本可能不接受--preset=<json>参数,您可能必须根据预设文件(JSON)文件更改hparams.py 。
您可以尝试:
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
您可以在generated目录中找到生成的WAV文件。想知道它是如何工作的?然后查看代码:)
存储库由1)Pytorch库,2)命令行工具和3)ESPNET风格的食谱组成。第一个是一个提供Wavanet功能的Pytorch库。第二个是运行WaveNet训练/推理,数据处理等的一组工具。最后一个是将WaveNet库和实用程序工具组合的可重复配方。请根据您的目的来看看它们。如果您想在数据集上构建WaveNet(我想这是最有可能的情况),那么食谱就是您的方法。
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
如果您只需要库部分,则可以从PYPI安装它:
pip install wavenet_vocoder
该存储库提供了卡尔迪风格的食谱,以使实验可重现且易于管理。可用食谱如下:
mulaw256 :使用分类输出分布的Wavenet。输入为8位Mulaw量化波形。mol :物流(mol)波诺特的混合物。输入是16位原始音频。gaussian :单高斯象征(又名单簧管的老师Wavenet)。输入是16位原始音频。所有食谱都run.sh ,它指定了执行WaveNet训练/推理的所有步骤,包括数据预处理。有关详细信息,请参见EGS目录中的Run.sh。
注意:上述配方中不支持多扬声器Wavenet的全局条件(尽管不应该实施)。请检查V0.1.12的功能,或者如果您确实需要该功能,请提出问题。
食谱被设计为通用,以便可以将它们用于任何数据集。要将食谱应用于您自己的数据集中,您需要将所有WAV文件放入一个平面目录中。 IE,
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
就是这样!最后一步是在run.sh中修改db_root或将db_root作为命令行argment.sh.sh.
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
食谱通常由多个步骤组成。强烈建议您逐步运行食谱,以首次了解其工作原理。为此,请指定stage和stop_stage如下:
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
在典型的情况下,您需要在训练步骤中指定CUDA设备。
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
命令行工具是带有docopt的写作。请参阅每个docstring以获取基本用法。
将超参数转换为JSON文件。
用法:
python tojson.py --hparams="parameters you want to override" <output_json_path>
用法:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
注意:对于多GPU培训,您最好确保batch_size%num_gpu == 0
用法:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
给定一个包含局部条件特征的直接操作,为其合成波形。
用法:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
选项:
--num-utterances=<N> :要生成的话语数量。如果未指定,则会产生所有完全赞成。这对于调试很有用。 注意:这可能现在不起作用。请改用estuation.py。
合成波形提供了调节功能。
用法:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
重要选择:
--conditional=<path> :(有条件的波纳特所必需的)局部条件特征(.npy)的路径。如果指定了这一点,则生成的时间步骤的数量由条件特征的大小确定。注意:这可能现在不起作用。请检查V0.1.1是否有效版本。
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
您必须通过将gin_channels和cin_channels设置为负值来禁用全局和本地条件。
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
注意:这可能现在不起作用。请检查V0.1.1是否有效版本。
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
默认情况下,将日志倾倒在./log目录中。您可以通过张板监视日志:
tensorboard --logdir=log
非常感谢!!如果您找到新的,请提交公关。