Tacotron 2

模型描述
Tacotron 2 和 WaveGlow 模型共同構成了一個文字到語音系統,使使用者能夠從原始文字轉錄中合成聽起來自然的語音,無需任何額外的韻律資訊。Tacotron 2 模型使用編碼器-解碼器架構從輸入文字生成梅爾頻譜圖。WaveGlow(也可透過 torch.hub 獲取)是一個基於流的模型,它接收梅爾頻譜圖以生成語音。
此 Tacotron 2 模型實現與論文中描述的模型有所不同。我們的實現使用 Dropout 而非 Zoneout 來正則化 LSTM 層。
示例
在下面的示例中
- 從 torch.hub 載入預訓練的 Tacotron2 和 Waveglow 模型
- 給定輸入文字(“Hello world, I missed you so much”)的張量表示,Tacotron2 生成梅爾頻譜圖,如插圖所示
- Waveglow 根據梅爾頻譜圖生成聲音
- 輸出聲音儲存為“audio.wav”檔案
要執行此示例,您需要安裝一些額外的 Python 包。這些包用於文字和音訊的預處理,以及顯示和輸入/輸出。
pip install numpy scipy librosa unidecode inflect librosa
apt-get update
apt-get install -y libsndfile1
載入在 LJ Speech 資料集上預訓練的 Tacotron2 模型併為推理做準備
import torch
tacotron2 = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_tacotron2', model_math='fp16')
tacotron2 = tacotron2.to('cuda')
tacotron2.eval()
載入預訓練的 WaveGlow 模型
waveglow = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_waveglow', model_math='fp16')
waveglow = waveglow.remove_weightnorm(waveglow)
waveglow = waveglow.to('cuda')
waveglow.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)
或者,在 Jupyter Notebook 中使用 IPython 小部件立即播放
from IPython.display import Audio
Audio(audio_numpy, rate=rate)
詳情
有關模型輸入和輸出、訓練方法、推理和效能的詳細資訊,請訪問:github 和/或 NGC
參考文獻
