mirror of
https://github.com/wassname/TTS.git
synced 2026-10-27 12:30:27 +08:00
Update notebooks
This commit is contained in:
1 parent
5e0d0539c5
commit
016803beee
5 files changed
+243
-69
No files matched your search
@@ -2,14 +2,16 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This is a notebook to generate mel-spectrograms from a TTS model to be used in a Vocoder training."
|
||||
],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"%load_ext autoreload\n",
|
||||
"%autoreload 2\n",
|
||||
@@ -20,7 +22,7 @@
|
||||
"import numpy as np\n",
|
||||
"from tqdm import tqdm as tqdm\n",
|
||||
"from torch.utils.data import DataLoader\n",
|
||||
"from TTS.tts.datasets.TTSDataset import TTSDataset\n",
|
||||
"from TTS.tts.datasets.dataset import TTSDataset\n",
|
||||
"from TTS.tts.layers.losses import L1LossMasked\n",
|
||||
"from TTS.utils.audio import AudioProcessor\n",
|
||||
"from TTS.config import load_config\n",
|
||||
@@ -33,13 +35,13 @@
|
||||
"\n",
|
||||
"import os\n",
|
||||
"os.environ['CUDA_VISIBLE_DEVICES']='2'"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def set_filename(wav_path, out_path):\n",
|
||||
" wav_file = os.path.basename(wav_path)\n",
|
||||
@@ -51,13 +53,13 @@
|
||||
" mel_path = os.path.join(out_path, \"mel\", file_name)\n",
|
||||
" wav_path = os.path.join(out_path, \"wav_gl\", file_name)\n",
|
||||
" return file_name, wavq_path, mel_path, wav_path"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"OUT_PATH = \"/home/ubuntu/TTS/recipes/ljspeech/LJSpeech-1.1/specs2/\"\n",
|
||||
"DATA_PATH = \"/home/ubuntu/TTS/recipes/ljspeech/LJSpeech-1.1/\"\n",
|
||||
@@ -77,13 +79,13 @@
|
||||
"C = load_config(CONFIG_PATH)\n",
|
||||
"C.audio['do_trim_silence'] = False # IMPORTANT!!!!!!!!!!!!!!! disable to align mel specs with the wav files\n",
|
||||
"ap = AudioProcessor(bits=QUANTIZE_BIT, **C.audio)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(C['r'])\n",
|
||||
"# if the vocabulary was passed, replace the default\n",
|
||||
@@ -95,13 +97,13 @@
|
||||
"# TODO: multiple speaker\n",
|
||||
"model = setup_model(C)\n",
|
||||
"model.load_checkpoint(C, MODEL_FILE, eval=True)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"preprocessor = importlib.import_module(\"TTS.tts.datasets.formatters\")\n",
|
||||
"preprocessor = getattr(preprocessor, DATASET.lower())\n",
|
||||
@@ -120,20 +122,20 @@
|
||||
"loader = DataLoader(\n",
|
||||
" dataset, batch_size=BATCH_SIZE, num_workers=4, collate_fn=dataset.collate_fn, shuffle=False, drop_last=False\n",
|
||||
")\n"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Generate model outputs "
|
||||
],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pickle\n",
|
||||
"\n",
|
||||
@@ -212,42 +214,42 @@
|
||||
"\n",
|
||||
" print(np.mean(losses))\n",
|
||||
" print(np.mean(postnet_losses))"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# for pwgan\n",
|
||||
"with open(os.path.join(OUT_PATH, \"metadata.txt\"), \"w\") as f:\n",
|
||||
" for data in metadata:\n",
|
||||
" f.write(f\"{data[0]}|{data[1]+'.npy'}\\n\")"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Sanity Check"
|
||||
],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"idx = 1\n",
|
||||
"ap.melspectrogram(ap.load_wav(item_idx[idx])).shape"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import soundfile as sf\n",
|
||||
"wav, sr = sf.read(item_idx[idx])\n",
|
||||
@@ -255,46 +257,46 @@
|
||||
"mel_decoder = mel_outputs[idx][:mel_lengths[idx], :].detach().cpu().numpy()\n",
|
||||
"mel_truth = ap.melspectrogram(wav)\n",
|
||||
"print(mel_truth.shape)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# plot posnet output\n",
|
||||
"print(mel_postnet[:mel_lengths[idx], :].shape)\n",
|
||||
"plot_spectrogram(mel_postnet, ap)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# plot decoder output\n",
|
||||
"print(mel_decoder.shape)\n",
|
||||
"plot_spectrogram(mel_decoder, ap)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# plot GT specgrogram\n",
|
||||
"print(mel_truth.shape)\n",
|
||||
"plot_spectrogram(mel_truth.T, ap)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# postnet, decoder diff\n",
|
||||
"from matplotlib import pylab as plt\n",
|
||||
@@ -303,13 +305,13 @@
|
||||
"plt.imshow(abs(mel_diff[:mel_lengths[idx],:]).T,aspect=\"auto\", origin=\"lower\");\n",
|
||||
"plt.colorbar()\n",
|
||||
"plt.tight_layout()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# PLOT GT SPECTROGRAM diff\n",
|
||||
"from matplotlib import pylab as plt\n",
|
||||
@@ -318,13 +320,13 @@
|
||||
"plt.imshow(abs(mel_diff2).T,aspect=\"auto\", origin=\"lower\");\n",
|
||||
"plt.colorbar()\n",
|
||||
"plt.tight_layout()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# PLOT GT SPECTROGRAM diff\n",
|
||||
"from matplotlib import pylab as plt\n",
|
||||
@@ -334,22 +336,23 @@
|
||||
"plt.imshow(abs(mel_diff2).T,aspect=\"auto\", origin=\"lower\");\n",
|
||||
"plt.colorbar()\n",
|
||||
"plt.tight_layout()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [],
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "822ce188d9bce5372c4adbb11364eeb49293228c2224eb55307f4664778e7f56"
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.9.7 64-bit ('base': conda)"
|
||||
"display_name": "Python 3.9.7 64-bit ('base': conda)",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
@@ -362,11 +365,8 @@
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.7"
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "822ce188d9bce5372c4adbb11364eeb49293228c2224eb55307f4664778e7f56"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
}
|
||||
@@ -19,19 +19,16 @@
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import glob\n",
|
||||
"import random\n",
|
||||
"import numpy as np\n",
|
||||
"import torch\n",
|
||||
"import umap\n",
|
||||
"\n",
|
||||
"from TTS.speaker_encoder.model import SpeakerEncoder\n",
|
||||
"from TTS.utils.audio import AudioProcessor\n",
|
||||
"from TTS.tts.utils.generic_utils import load_config\n",
|
||||
"from TTS.config import load_config\n",
|
||||
"\n",
|
||||
"from bokeh.io import output_notebook, show\n",
|
||||
"from bokeh.plotting import figure\n",
|
||||
"from bokeh.models import HoverTool, ColumnDataSource, BoxZoomTool, ResetTool, OpenURL, TapTool\n",
|
||||
"from bokeh.transform import factor_cmap, factor_mark\n",
|
||||
"from bokeh.transform import factor_cmap\n",
|
||||
"from bokeh.palettes import Category10"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
"import os\n",
|
||||
"import sys\n",
|
||||
"sys.path.append(TTS_PATH) # set this if TTS is not installed globally\n",
|
||||
"import glob\n",
|
||||
"import librosa\n",
|
||||
"import numpy as np\n",
|
||||
"import pandas as pd\n",
|
||||
|
||||
@@ -21,10 +21,9 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os, sys\n",
|
||||
"import os\n",
|
||||
"import glob\n",
|
||||
"import subprocess\n",
|
||||
"import tempfile\n",
|
||||
"import IPython\n",
|
||||
"import soundfile as sf\n",
|
||||
"import numpy as np\n",
|
||||
@@ -208,4 +207,4 @@
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"source": [
|
||||
"%load_ext autoreload\n",
|
||||
"%autoreload 2"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import glob\n",
|
||||
"from TTS.utils.audio import AudioProcessor\n",
|
||||
"from TTS.config.shared_configs import BaseAudioConfig\n",
|
||||
"from TTS.tts.utils.visual import plot_pitch"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"source": [
|
||||
"pitch_path = \"/home/ubuntu/TTS/recipes/ljspeech/fast_pitch/f0_cache\"\n",
|
||||
"wav_path = \"/home/ubuntu/TTS/recipes/ljspeech/LJSpeech-1.1/wavs\"\n",
|
||||
"wav_files = glob.glob(\"/home/ubuntu/TTS/recipes/ljspeech/LJSpeech-1.1/wavs/*.wav\")\n",
|
||||
"print(len(wav_files))"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"13100\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"source": [
|
||||
"ap = AudioProcessor(**BaseAudioConfig( sample_rate=22050,\n",
|
||||
" do_trim_silence=True,\n",
|
||||
" trim_db=60.0,\n",
|
||||
" signal_norm=False,\n",
|
||||
" mel_fmin=0.0,\n",
|
||||
" mel_fmax=8000,\n",
|
||||
" spec_gain=1.0,\n",
|
||||
" log_func=\"np.log\",\n",
|
||||
" ref_level_db=20,\n",
|
||||
" preemphasis=0.0,))"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
" > Setting up Audio Processor...\n",
|
||||
" | > sample_rate:22050\n",
|
||||
" | > resample:False\n",
|
||||
" | > num_mels:80\n",
|
||||
" | > log_func:np.log\n",
|
||||
" | > min_level_db:-100\n",
|
||||
" | > frame_shift_ms:None\n",
|
||||
" | > frame_length_ms:None\n",
|
||||
" | > ref_level_db:20\n",
|
||||
" | > fft_size:1024\n",
|
||||
" | > power:1.5\n",
|
||||
" | > preemphasis:0.0\n",
|
||||
" | > griffin_lim_iters:60\n",
|
||||
" | > signal_norm:False\n",
|
||||
" | > symmetric_norm:True\n",
|
||||
" | > mel_fmin:0\n",
|
||||
" | > mel_fmax:8000\n",
|
||||
" | > spec_gain:1.0\n",
|
||||
" | > stft_pad_mode:reflect\n",
|
||||
" | > max_norm:4.0\n",
|
||||
" | > clip_norm:True\n",
|
||||
" | > do_trim_silence:True\n",
|
||||
" | > trim_db:60.0\n",
|
||||
" | > do_sound_norm:False\n",
|
||||
" | > do_amp_to_db_linear:True\n",
|
||||
" | > do_amp_to_db_mel:True\n",
|
||||
" | > stats_path:None\n",
|
||||
" | > base:2.718281828459045\n",
|
||||
" | > hop_length:256\n",
|
||||
" | > win_length:1024\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"source": [
|
||||
"pitch_files = [wf.replace(\".wav\", \"_pitch.npy\").replace(wav_path, pitch_path) for wf in wav_files]"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 30,
|
||||
"source": [
|
||||
"idx = 100\n",
|
||||
"# wav_file = wav_files[idx]\n",
|
||||
"# pitch_file = pitch_files[idx]\n",
|
||||
"wav_file = \"/home/ubuntu/TTS/recipes/ljspeech/fast_pitch/../LJSpeech-1.1/wavs/LJ011-0097.wav\"\n",
|
||||
"pitch_file = \"/home/ubuntu/TTS/recipes/ljspeech/fast_pitch/f0_cache/LJ011-0097_pitch.npy\"\n",
|
||||
"pitch = np.load(pitch_file)\n",
|
||||
"wav = ap.load_wav(wav_file)\n",
|
||||
"spec = ap.melspectrogram(wav)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 31,
|
||||
"source": [
|
||||
"plot_pitch(pitch, spec.T)"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 2160x720 with 2 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 31
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.9.7",
|
||||
"mimetype": "text/x-python",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"pygments_lexer": "ipython3",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.9.1 64-bit ('miniconda3': virtualenv)"
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "822ce188d9bce5372c4adbb11364eeb49293228c2224eb55307f4664778e7f56"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
Reference in new issue
Block a user