ParakeetRebeccaRosario/examples/tacotron2/synthesize.ipynb

343 lines
269 KiB
Plaintext
Raw Normal View History

add ge2e and tacotron2_aishell3 example (#107) * hacky thing, add tone support for acoustic model * fix experiments for waveflow and wavenet, only write visual log in rank-0 * use emb add in tacotron2 * 1. remove space from numericalized representation; 2. fix decoder paddign mask's unsqueeze dim. * remove bn in postnet * refactoring code * add an option to normalize volume when loading audio. * add an embedding layer. * 1. change the default min value of LogMagnitude to 1e-5; 2. remove stop logit prediction from tacotron2 model. * WIP: baker * add ge2e * fix lstm speaker encoder * fix lstm speaker encoder * fix speaker encoder and add support for 2 more datasets * simplify visualization code * add a simple strategy to support multispeaker for tacotron. * add vctk example for refactored tacotron * fix indentation * fix class name * fix visualizer * fix root path * fix root path * fix root path * fix typos * fix bugs * fix text log extention name * add example for baker and aishell3 * update experiment and display * format code for tacotron_vctk, add plot_waveform to display * add new trainer * minor fix * add global condition support for tacotron2 * add gst layer * add 2 frontend * fix fmax for example/waveflow * update collate function, data loader not does not convert nested list into numpy array. * WIP: add hifigan * WIP:update hifigan * change stft to use conv1d * add audio datasets * change batch_text_id, batch_spec, batch_wav to include valid lengths in the returned value * change wavenet to use on-the-fly prepeocessing * fix typos * resolve conflict * remove imports that are removed * remove files not included in this release * remove imports to deleted modules * move tacotron2_msp * clean code * fix argument order * fix argument name * clean code for data processing * WIP: add README * add more details to thr README, fix some preprocess scripts * add voice cloning notebook * add an optional to alter the loss and model structure of tacotron2, add an alternative config * add plot_multiple_attentions and update visualization code in transformer_tts * format code * remove tacotron2_msp * update tacotron2 from_pretrained, update setup.py * update tacotron2 * update tacotron_aishell3's README * add images for exampels/tacotron2_aishell3's README * update README for examples/ge2e * add STFT back * add extra_config keys into the default config of tacotron * fix typos and docs * update README and doc * update docstrings for tacotron * update doc * update README * add links to downlaod pretrained models * refine READMEs and clean code * add praatio into requirements for running the experiments * format code with pre-commit * simplify text processing code and update notebook
2021-05-13 17:49:50 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## TTS with Tacotron2 + Waveflow"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import paddle\n",
"from matplotlib import pyplot as plt\n",
"from IPython import display as ipd\n",
"%matplotlib inline\n",
"\n",
"from parakeet.utils import display\n",
"from parakeet.utils import layer_tools\n",
"paddle.set_device(\"gpu:0\")\n",
"\n",
"import sys\n",
"sys.path.append(\"../..\")\n",
"import examples"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tacotron2: synthesizer model\n",
"\n",
"Tacotron2 is used here as a phonemes to spectrogram model. Here we will use an alternative config. In this config, the tacotron2 model does not have a binary classifier to predict whether the generation should stop.\n",
"\n",
"Instead, the peak position is used as the criterion. When the peak position of the attention reaches the end of the encoder outputs, it implies that the content is exhausted. So we stop the generated after 10 frames."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from parakeet.models.tacotron2 import Tacotron2\n",
"from parakeet.frontend import EnglishCharacter"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"data:\n",
" batch_size: 32\n",
" fmax: 8000\n",
" fmin: 0\n",
" hop_length: 256\n",
" n_fft: 1024\n",
" n_mels: 80\n",
" padding_idx: 0\n",
" sample_rate: 22050\n",
" valid_size: 64\n",
" win_length: 1024\n",
"model:\n",
" attention_filters: 32\n",
" attention_kernel_size: 31\n",
" d_attention: 128\n",
" d_attention_rnn: 1024\n",
" d_decoder_rnn: 1024\n",
" d_encoder: 512\n",
" d_global_condition: None\n",
" d_postnet: 512\n",
" d_prenet: 256\n",
" encoder_conv_layers: 3\n",
" encoder_kernel_size: 5\n",
" guided_attention_loss_sigma: 0.2\n",
" n_tones: None\n",
" p_attention_dropout: 0.1\n",
" p_decoder_dropout: 0.1\n",
" p_encoder_dropout: 0.5\n",
" p_postnet_dropout: 0.5\n",
" p_prenet_dropout: 0.5\n",
" postnet_conv_layers: 5\n",
" postnet_kernel_size: 5\n",
" reduction_factor: 1\n",
" use_guided_attention_loss: True\n",
" use_stop_token: False\n",
" vocab_size: 37\n",
"training:\n",
" grad_clip_thresh: 1.0\n",
" lr: 0.001\n",
" max_iteration: 500000\n",
" plot_interval: 1000\n",
" save_interval: 1000\n",
" valid_interval: 1000\n",
" weight_decay: 1e-06\n"
]
}
],
"source": [
"from examples.tacotron2 import config as tacotron2_config\n",
"synthesizer_config = tacotron2_config.get_cfg_defaults()\n",
"synthesizer_config.merge_from_file(\"configs/alternative.yaml\")\n",
"print(synthesizer_config)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[checkpoint] Rank 0: loaded model from ../../pretrained/tacotron2/tacotron2_ljspeech_ckpt_0.3_alternative/step-50000.pdparams\n"
]
}
],
"source": [
"frontend = EnglishCharacter()\n",
"model = Tacotron2.from_pretrained(\n",
" synthesizer_config, \"../../pretrained/tacotron2/tacotron2_ljspeech_ckpt_0.3_alternative/step-50000\")\n",
"model.eval()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 36%|███▋ | 365/1000 [00:01<00:02, 256.89it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"content exhausted!\n"
]
}
],
"source": [
"sentence = \"Life was like a box of chocolates, you never know what you're gonna get.\" \n",
"sentence = paddle.to_tensor(frontend(sentence)).unsqueeze(0)\n",
"\n",
"with paddle.no_grad():\n",
" outputs = model.infer(sentence)\n",
"mel_output = outputs[\"mel_outputs_postnet\"][0].numpy().T\n",
"alignment = outputs[\"alignments\"][0].numpy().T"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = display.plot_alignment(alignment)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## WaveFlow: vocoder model\n",
"Generated spectrogram is converted to raw audio using a pretrained waveflow model."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"from parakeet.models.waveflow import ConditionalWaveFlow"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"data:\n",
" batch_size: 8\n",
" clip_frames: 65\n",
" fmax: 8000\n",
" fmin: 0\n",
" hop_length: 256\n",
" n_fft: 1024\n",
" n_mels: 80\n",
" sample_rate: 22050\n",
" valid_size: 16\n",
" win_length: 1024\n",
"model:\n",
" channels: 128\n",
" kernel_size: [3, 3]\n",
" n_flows: 8\n",
" n_group: 16\n",
" n_layers: 8\n",
" sigma: 1.0\n",
" upsample_factors: [16, 16]\n",
"training:\n",
" lr: 0.0002\n",
" max_iteration: 3000000\n",
" save_interval: 10000\n",
" valid_interval: 1000\n"
]
}
],
"source": [
"from examples.waveflow import config as waveflow_config\n",
"vocoder_config = waveflow_config.get_cfg_defaults()\n",
"print(vocoder_config)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[checkpoint] Rank 0: loaded model from ../../pretrained/waveflow/waveflow_ljspeech_ckpt_0.3/step-2000000.pdparams\n"
]
}
],
"source": [
"vocoder = ConditionalWaveFlow.from_pretrained(\n",
" vocoder_config, \n",
" \"../../pretrained/waveflow/waveflow_ljspeech_ckpt_0.3/step-2000000\")\n",
"layer_tools.recursively_remove_weight_norm(vocoder)\n",
"vocoder.eval()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"time: 9.412613868713379s\n"
]
}
],
"source": [
"audio = vocoder.infer(paddle.transpose(outputs[\"mel_outputs_postnet\"], [0, 2, 1]))\n",
"wav = audio[0].numpy()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <audio controls=\"controls\" >\n",
" <source src=\"data:audio/wav;base64,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
" Your browser does not support the audio element.\n",
" </audio>\n",
" "
],
"text/plain": [
"<IPython.lib.display.Audio object>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ipd.Audio(wav, rate=22050)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}