模型描述
Tacotron 2 和 WaveGlow 模型构成了一个文本转语音系统,使用户能够从原始文本生成自然流畅的语音,无需额外韵律信息。Tacotron 2 模型(也可通过 torch.hub 获取)使用编码器-解码器架构从输入文本生成 mel 谱图。WaveGlow 是一种基于流的模型,它消耗 mel 谱图来生成语音。
示例
在下面的示例中
- 从 torch.hub 加载预训练的 Tacotron2 和 Waveglow 模型
- 给定输入文本(“Hello world, I missed you so much”)的张量表示,Tacotron2 生成一个 Mel 谱图,如插图所示
- Waveglow 根据 mel 谱图生成声音
- 输出声音保存在 'audio.wav' 文件中
要运行此示例,您需要安装一些额外的 Python 包。这些包用于文本和音频的预处理,以及显示和输入/输出。
pip install numpy scipy librosa unidecode inflect librosa
apt-get update
apt-get install -y libsndfile1
加载在 LJ Speech 数据集上预训练的 WaveGlow 模型
import torch
waveglow = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_waveglow', model_math='fp32')
准备 WaveGlow 模型进行推理
waveglow = waveglow.remove_weightnorm(waveglow)
waveglow = waveglow.to('cuda')
waveglow.eval()
加载预训练的 Tacotron2 模型
tacotron2 = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_tacotron2', model_math='fp32')
tacotron2 = tacotron2.to('cuda')
tacotron2.eval()
现在,让模型说出
text = "hello world, I missed you so much"
使用实用方法格式化输入
utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_tts_utils')
sequences, lengths = utils.prepare_input_sequence([text])
运行链式模型
with torch.no_grad():
mel, _, _ = tacotron2.infer(sequences, lengths)
audio = waveglow.infer(mel)
audio_numpy = audio[0].data.cpu().numpy()
rate = 22050
您可以将其写入文件并收听
from scipy.io.wavfile import write
write("audio.wav", rate, audio_numpy)
或者,直接在带有 IPython 部件的 notebook 中播放
from IPython.display import Audio
Audio(audio_numpy, rate=rate)
详情
有关模型输入和输出、训练方法、推理和性能的详细信息,请访问:github 和/或 NGC
参考文献
- 基于 Mel 谱图预测条件化的自然 TTS 合成 (Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions)
- WaveGlow:一种用于语音合成的基于流的生成网络 (WaveGlow: A Flow-based Generative Network for Speech Synthesis)
- NGC 上的 Tacotron2 和 WaveGlow
- github 上的 Tacotron2 和 Waveglow