mirror of
https://github.com/wassname/TTS.git
synced 2026-10-27 12:30:27 +08:00
A big revision: visualization, data loader, tests
This commit is contained in:
1 parent
86f3a56f59
commit
9f5e102473
14 files changed
+199
-64
No files matched your search
Binary file not shown.
@@ -56,7 +56,7 @@ class LJSpeechDataset(Dataset):
|
||||
keys = list()
|
||||
|
||||
text = [d['text'] for d in batch]
|
||||
text_lenghts = [len(x) for x in text]
|
||||
text_lenghts = np.array([len(x) for x in text])
|
||||
max_text_len = np.max(text_lenghts)
|
||||
wav = [d['wav'] for d in batch]
|
||||
|
||||
@@ -77,6 +77,10 @@ class LJSpeechDataset(Dataset):
|
||||
magnitude = magnitude.transpose(0, 2, 1)
|
||||
mel = mel.transpose(0, 2, 1)
|
||||
|
||||
text_lenghts = torch.LongTensor(text_lenghts)
|
||||
text = torch.LongTensor(text)
|
||||
magnitude = torch.FloatTensor(magnitude)
|
||||
mel = torch.FloatTensor(mel)
|
||||
return text, text_lenghts, magnitude, mel
|
||||
|
||||
raise TypeError(("batch must contain tensors, numbers, dicts or lists;\
|
||||
|
||||
Whitespace-only changes.
+2
-2
@@ -15,14 +15,14 @@
|
||||
"lr": 0.01,
|
||||
"lr_patience": 2,
|
||||
"lr_decay": 0.5,
|
||||
"batch_size": 16,
|
||||
"batch_size": 32,
|
||||
"griffinf_lim_iters": 60,
|
||||
"power": 1.5,
|
||||
"r": 5,
|
||||
|
||||
"num_loader_workers": 16,
|
||||
|
||||
"save_step": 1,
|
||||
"save_step":1 ,
|
||||
"data_path": "/data/shared/KeithIto/LJSpeech-1.0",
|
||||
"output_path": "result",
|
||||
"log_dir": "/home/erogol/projects/TTS/logs/"
|
||||
|
||||
+11
-9
@@ -89,7 +89,7 @@ class CBHG(nn.Module):
|
||||
self.gru = nn.GRU(
|
||||
in_dim, in_dim, 1, batch_first=True, bidirectional=True)
|
||||
|
||||
def forward(self, inputs, input_lengths=None):
|
||||
def forward(self, inputs):
|
||||
# (B, T_in, in_dim)
|
||||
x = inputs
|
||||
|
||||
@@ -121,17 +121,19 @@ class CBHG(nn.Module):
|
||||
for highway in self.highways:
|
||||
x = highway(x)
|
||||
|
||||
if input_lengths is not None:
|
||||
x = nn.utils.rnn.pack_padded_sequence(
|
||||
x, input_lengths, batch_first=True)
|
||||
# if input_lengths is not None:
|
||||
# print(x.size())
|
||||
# print(len(input_lengths))
|
||||
# x = nn.utils.rnn.pack_padded_sequence(
|
||||
# x, input_lengths.data.cpu().numpy(), batch_first=True)
|
||||
|
||||
# (B, T_in, in_dim*2)
|
||||
self.gru.flatten_parameters()
|
||||
outputs, _ = self.gru(x)
|
||||
|
||||
if input_lengths is not None:
|
||||
outputs, _ = nn.utils.rnn.pad_packed_sequence(
|
||||
outputs, batch_first=True)
|
||||
#if input_lengths is not None:
|
||||
# outputs, _ = nn.utils.rnn.pad_packed_sequence(
|
||||
# outputs, batch_first=True)
|
||||
|
||||
return outputs
|
||||
|
||||
@@ -142,9 +144,9 @@ class Encoder(nn.Module):
|
||||
self.prenet = Prenet(in_dim, sizes=[256, 128])
|
||||
self.cbhg = CBHG(128, K=16, projections=[128, 128])
|
||||
|
||||
def forward(self, inputs, input_lengths=None):
|
||||
def forward(self, inputs):
|
||||
inputs = self.prenet(inputs)
|
||||
return self.cbhg(inputs, input_lengths)
|
||||
return self.cbhg(inputs)
|
||||
|
||||
|
||||
class Decoder(nn.Module):
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ class Tacotron(nn.Module):
|
||||
|
||||
inputs = self.embedding(characters)
|
||||
# (B, T', in_dim)
|
||||
encoder_outputs = self.encoder(inputs, input_lengths)
|
||||
encoder_outputs = self.encoder(inputs)
|
||||
|
||||
if self.use_memory_mask:
|
||||
memory_lengths = input_lengths
|
||||
|
||||
+14
-16
@@ -60,14 +60,12 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ROOT_PATH = '../result/February-01-2018_08:55AM/'\n",
|
||||
"MODEL_PATH = ROOT_PATH + '/checkpoint_6200.pth.tar'\n",
|
||||
"ROOT_PATH = '../result/February-03-2018_08:32PM/'\n",
|
||||
"MODEL_PATH = ROOT_PATH + '/checkpoint_3800.pth.tar'\n",
|
||||
"CONFIG_PATH = ROOT_PATH + '/config.json'\n",
|
||||
"OUT_FOLDER = ROOT_PATH + '/test/'\n",
|
||||
"CONFIG = load_config(CONFIG_PATH)\n",
|
||||
@@ -76,7 +74,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -110,7 +108,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -125,7 +123,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -134,7 +132,7 @@
|
||||
"True"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -145,7 +143,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 16,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -171,7 +169,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -190,7 +188,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 18,
|
||||
"metadata": {
|
||||
"scrolled": false
|
||||
},
|
||||
@@ -207,7 +205,7 @@
|
||||
"text/html": [
|
||||
"\n",
|
||||
" <audio controls=\"controls\" >\n",
|
||||
" <source src=\"data:audio/wav;base64,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 truncated
|
||||
" <source src=\"data:audio/wav;base64,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 truncated
|
||||
" Your browser does not support the audio element.\n",
|
||||
" </audio>\n",
|
||||
" "
|
||||
@@ -228,9 +226,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7f474bb01630>"
|
||||
"<matplotlib.figure.Figure at 0x7f432103c128>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -48,8 +48,8 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Constants\n",
|
||||
"ROOT_PATH = '../result/January-31-2018_08:39AM//'\n",
|
||||
"MODEL_PATH = ROOT_PATH + '/checkpoint_27600.pth.tar'\n",
|
||||
"ROOT_PATH = '../result/February-03-2018_08:32PM/'\n",
|
||||
"MODEL_PATH = ROOT_PATH + '/checkpoint_3800.pth.tar'\n",
|
||||
"CONFIG_PATH = ROOT_PATH + '/config.json'\n",
|
||||
"OUT_FOLDER = ROOT_PATH + '/test/'\n",
|
||||
"CONFIG = load_config(CONFIG_PATH)\n",
|
||||
@@ -127,7 +127,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7fed4021ab00>"
|
||||
"<matplotlib.figure.Figure at 0x7f2a5f0f9f28>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -169,14 +169,14 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABAUAAAI4CAYAAAASzVA9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsvVmMbel13/f7hj2csU4Nt+7Y3fc2\ne+DUFEW2KFnRaMahpQBJhAxG7ACGA0RCghh5C4y8+CEIECBPUZxBAhJLShAjfggSxJATMBrMSKYo\nkRTJJptkd7OHO9et6Yz77OEb8rD2PlVNk9RgiZLF8wcKVbXPOXt/4/rW+q/hqBgjW2yxxRZbbLHF\nFltsscUWW2yxxfce9J91A7bYYosttthiiy222GKLLbbYYos/G2xJgS222GKLLbbYYosttthiiy22\n+B7FlhTYYosttthiiy222GKLLbbYYovvUWxJgS222GKLLbbYYosttthiiy22+B7FlhTYYosttthi\niy222GKLLbbYYovvUWxJgS222GKLLbbYYosttthiiy22+B7Fd5UUUEr9T0qpJ0qpL1+6tqeU+qRS\n6vX29257XSmlfl4p9YZS6ktKqY9c+szfbN//ulLqb166/lGl1CvtZ35eKaW+m/3bYosttthiiy22\n2GKLLbbYYos/LXwrm/qbXv+2dvS3w3c7UuCXgL/6Tdf+DvBrMcbngV9r/wf4KeD59udngf8ehEQA\n/i7wg8DHgL/bEQnte3720ue++VlbbLHFFltsscUWW2yxxRZbbPEvKn6J72znfks7+jvhu0oKxBg/\nBZx90+V/Hfjl9u9fBv6NS9d/JQp+B5gopa4DnwA+GWM8izGeA58E/mr72jjG+OkYYwR+5dK9tthi\niy222GKLLbbYYostttjiX2h8G5v6Mr6dHf1tYf8kG/jHxNUY4yOAGOMjpdRhe/0mcO/S++63177T\n9fvf4vq3hFLqZxHmBOCjAJmZoLFAxNHQ+DmZmWCw6JY/8XhAYTAoFBCJgG7/M0qRaIVVoBWECL79\nCUQ0CqtpPynXXYgYpdAKlLp4LbavuRhRKHKjMO1nQ5Sf1ERpV1DUAXITse19vhlNUKxcpG8VRkm7\nmyBvjFE+o5HfMUobOkQu/o8RZr7kSpKjiASU9C92/Y1kphsDaY+Mk5L3AJWXv03XTnXBUHXjUvuI\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7feccd7230f0>"
|
||||
"<matplotlib.figure.Figure at 0x7f2a5e368f60>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
import unittest
|
||||
@@ -0,0 +1,55 @@
|
||||
import os
|
||||
import unittest
|
||||
import numpy as np
|
||||
|
||||
from torch.utils.data import DataLoader
|
||||
from TTS.utils.generic_utils import load_config
|
||||
from TTS.datasets.LJSpeech import LJSpeechDataset
|
||||
|
||||
|
||||
file_path = os.path.dirname(os.path.realpath(__file__))
|
||||
c = load_config(os.path.join(file_path, 'test_config.json'))
|
||||
|
||||
class TestDataset(unittest.TestCase):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TestDataset, self).__init__(*args, **kwargs)
|
||||
self.max_loader_iter = 4
|
||||
|
||||
def test_loader(self):
|
||||
dataset = LJSpeechDataset(os.path.join(c.data_path, 'metadata.csv'),
|
||||
os.path.join(c.data_path, 'wavs'),
|
||||
c.r,
|
||||
c.sample_rate,
|
||||
c.text_cleaner,
|
||||
c.num_mels,
|
||||
c.min_level_db,
|
||||
c.frame_shift_ms,
|
||||
c.frame_length_ms,
|
||||
c.preemphasis,
|
||||
c.ref_level_db,
|
||||
c.num_freq,
|
||||
c.power
|
||||
)
|
||||
|
||||
dataloader = DataLoader(dataset, batch_size=c.batch_size,
|
||||
shuffle=True, collate_fn=dataset.collate_fn,
|
||||
drop_last=True, num_workers=c.num_loader_workers)
|
||||
|
||||
for i, data in enumerate(dataloader):
|
||||
if i == self.max_loader_iter:
|
||||
break
|
||||
text_input = data[0]
|
||||
text_lengths = data[1]
|
||||
print(text_lengths)
|
||||
magnitude_input = data[2]
|
||||
mel_input = data[3]
|
||||
|
||||
neg_values = text_input[text_input < 0]
|
||||
check_count = len(neg_values)
|
||||
assert check_count == 0, \
|
||||
" !! Negative values in text_input: {}".format(check_count)
|
||||
|
||||
|
||||
|
||||
|
||||
Whitespace-only changes.
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"num_mels": 80,
|
||||
"num_freq": 1025,
|
||||
"sample_rate": 20000,
|
||||
"frame_length_ms": 50,
|
||||
"frame_shift_ms": 12.5,
|
||||
"preemphasis": 0.97,
|
||||
"min_level_db": -100,
|
||||
"ref_level_db": 20,
|
||||
"hidden_size": 128,
|
||||
"embedding_size": 256,
|
||||
"text_cleaner": "english_cleaners",
|
||||
|
||||
"epochs": 2000,
|
||||
"lr": 0.003,
|
||||
"lr_patience": 5,
|
||||
"lr_decay": 0.5,
|
||||
"batch_size": 8,
|
||||
"r": 5,
|
||||
|
||||
"griffin_lim_iters": 60,
|
||||
"power": 1.5,
|
||||
|
||||
"num_loader_workers": 4,
|
||||
|
||||
"save_step": 200,
|
||||
"data_path": "/data/shared/KeithIto/LJSpeech-1.0",
|
||||
"output_path": "result",
|
||||
"log_dir": "/home/erogol/projects/TTS/logs/"
|
||||
}
|
||||
@@ -22,6 +22,7 @@ from utils.generic_utils import (Progbar, remove_experiment_folder,
|
||||
create_experiment_folder, save_checkpoint,
|
||||
load_config, lr_decay)
|
||||
from utils.model import get_param_size
|
||||
from utils.visual import plot_alignment, plot_spectrogram
|
||||
from datasets.LJSpeech import LJSpeechDataset
|
||||
from models.tacotron import Tacotron
|
||||
|
||||
@@ -117,7 +118,6 @@ def main(args):
|
||||
|
||||
#lr_scheduler = ReduceLROnPlateau(optimizer, factor=c.lr_decay,
|
||||
# patience=c.lr_patience, verbose=True)
|
||||
|
||||
epoch_time = 0
|
||||
for epoch in range(c.epochs):
|
||||
|
||||
@@ -133,6 +133,7 @@ def main(args):
|
||||
mel_input = data[3]
|
||||
|
||||
current_step = i + args.restore_step + epoch * len(dataloader) + 1
|
||||
print(current_step)
|
||||
|
||||
# setup lr
|
||||
current_lr = lr_decay(c.lr, current_step)
|
||||
@@ -148,32 +149,28 @@ def main(args):
|
||||
#except:
|
||||
# raise TypeError("not same dimension")
|
||||
|
||||
if use_cuda:
|
||||
text_input_var = Variable(torch.from_numpy(text_input).type(
|
||||
torch.cuda.LongTensor)).cuda()
|
||||
text_lengths_var = Variable(torch.from_numpy(test_lengths).type(
|
||||
torch.cuda.LongTensor)).cuda()
|
||||
mel_input_var = Variable(torch.from_numpy(mel_input).type(
|
||||
torch.cuda.FloatTensor)).cuda()
|
||||
mel_spec_var = Variable(torch.from_numpy(mel_input).type(
|
||||
torch.cuda.FloatTensor)).cuda()
|
||||
linear_spec_var = Variable(torch.from_numpy(magnitude_input)
|
||||
.type(torch.cuda.FloatTensor)).cuda()
|
||||
# convert inputs to variables
|
||||
text_input_var = Variable(text_input)
|
||||
mel_spec_var = Variable(mel_input)
|
||||
linear_spec_var = Variable(magnitude_input, volatile=True)
|
||||
|
||||
else:
|
||||
text_input_var = Variable(torch.from_numpy(text_input).type(
|
||||
torch.LongTensor),)
|
||||
text_lengths_var = Variable(torch.from_numpy(test_lengths).type(
|
||||
torch.LongTensor))
|
||||
mel_input_var = Variable(torch.from_numpy(mel_input).type(
|
||||
torch.FloatTensor))
|
||||
mel_spec_var = Variable(torch.from_numpy(
|
||||
mel_input).type(torch.FloatTensor))
|
||||
linear_spec_var = Variable(torch.from_numpy(
|
||||
magnitude_input).type(torch.FloatTensor))
|
||||
# sort sequence by length. Pytorch needs this.
|
||||
sorted_lengths, indices = torch.sort(
|
||||
text_lengths.view(-1), dim=0, descending=True)
|
||||
sorted_lengths = sorted_lengths.long().numpy()
|
||||
|
||||
text_input_var = text_input_var[indices]
|
||||
mel_spec_var = mel_spec_var[indices]
|
||||
linear_spec_var = linear_spec_var[indices]
|
||||
|
||||
if use_cuda:
|
||||
text_input_var = text_input_var.cuda()
|
||||
mel_spec_var = mel_spec_var.cuda()
|
||||
linear_spec_var = linear_spec_var.cuda()
|
||||
|
||||
mel_output, linear_output, alignments =\
|
||||
model.forward(text_input_var, mel_input_var, input_lengths=input_lengths_var)
|
||||
model.forward(text_input_var, mel_spec_var,
|
||||
input_lengths= torch.autograd.Variable(torch.cuda.LongTensor(sorted_lengths)))
|
||||
|
||||
mel_loss = criterion(mel_output, mel_spec_var)
|
||||
#linear_loss = torch.abs(linear_output - linear_spec_var)
|
||||
@@ -198,7 +195,6 @@ def main(args):
|
||||
('mel_loss', mel_loss.data[0]),
|
||||
('grad_norm', grad_norm)])
|
||||
|
||||
|
||||
# Plot Learning Stats
|
||||
tb.add_scalar('Loss/TotalLoss', loss.data[0], current_step)
|
||||
tb.add_scalar('Loss/LinearLoss', linear_loss.data[0],
|
||||
@@ -209,6 +205,9 @@ def main(args):
|
||||
tb.add_scalar('Params/GradNorm', grad_norm, current_step)
|
||||
tb.add_scalar('Time/StepTime', step_time, current_step)
|
||||
|
||||
align_img = alignments[0].data.cpu().numpy()
|
||||
align_img = plot_alignment(align_img)
|
||||
tb.add_image('Attn/Alignment', align_img, current_step)
|
||||
|
||||
if current_step % c.save_step == 0:
|
||||
checkpoint_path = 'checkpoint_{}.pth.tar'.format(current_step)
|
||||
@@ -224,13 +223,24 @@ def main(args):
|
||||
print("\n | > Checkpoint is saved : {}".format(checkpoint_path))
|
||||
|
||||
# Diagnostic visualizations
|
||||
const_spec = linear_output[0].data.cpu()[None, :]
|
||||
gt_spec = linear_spec_var[0].data.cpu()[None, :]
|
||||
align_img = alignments[0].data.cpu().t()[None, :]
|
||||
const_spec = linear_output[0].data.cpu().numpy()
|
||||
gt_spec = linear_spec_var[0].data.cpu().numpy()
|
||||
|
||||
const_spec = plot_spectrogram(const_spec, dataset.ap)
|
||||
gt_spec = plot_spectrogram(gt_spec, dataset.ap)
|
||||
tb.add_image('Spec/Reconstruction', const_spec, current_step)
|
||||
tb.add_image('Spec/GroundTruth', gt_spec, current_step)
|
||||
|
||||
align_img = alignments[0].data.cpu().numpy()
|
||||
align_img = plot_alignment(align_img)
|
||||
tb.add_image('Attn/Alignment', align_img, current_step)
|
||||
|
||||
# Sample audio
|
||||
audio_signal = linear_output[0].data.cpu().numpy()
|
||||
dataset.ap.griffin_lim_iters = 60
|
||||
audio_signal = dataset.ap.inv_spectrogram(audio_signal.T)
|
||||
tb.add_audio('SampleAudio', audio_signal, current_step,
|
||||
sample_rate=c.sample_rate)
|
||||
|
||||
#lr_scheduler.step(loss.data[0])
|
||||
tb.add_scalar('Time/EpochTime', epoch_time, epoch)
|
||||
@@ -240,7 +250,7 @@ def main(args):
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--restore_step', type=int,
|
||||
help='Global step to restore checkpoint', default=128)
|
||||
help='Global step to restore checkpoint', default=0)
|
||||
parser.add_argument('--config_path', type=str,
|
||||
help='path to config file for training',)
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import numpy as np
|
||||
import matplotlib
|
||||
matplotlib.use('Agg')
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def plot_alignment(alignment, info=None):
|
||||
fig, ax = plt.subplots()
|
||||
im = ax.imshow(alignment.T, aspect='auto', origin='lower',
|
||||
interpolation='none')
|
||||
fig.colorbar(im, ax=ax)
|
||||
xlabel = 'Decoder timestep'
|
||||
if info is not None:
|
||||
xlabel += '\n\n' + info
|
||||
plt.xlabel(xlabel)
|
||||
plt.ylabel('Encoder timestep')
|
||||
plt.tight_layout()
|
||||
fig.canvas.draw()
|
||||
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
|
||||
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
|
||||
plt.close()
|
||||
return data
|
||||
|
||||
|
||||
def plot_spectrogram(linear_output, audio):
|
||||
spectrogram = audio._denormalize(linear_output)
|
||||
fig = plt.figure(figsize=(16, 10))
|
||||
plt.imshow(spectrogram.T, aspect="auto", origin="lower")
|
||||
plt.colorbar()
|
||||
plt.tight_layout()
|
||||
fig.canvas.draw()
|
||||
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
|
||||
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
|
||||
plt.close()
|
||||
return data
|
||||
Reference in new issue
Block a user