mirror of https://github.com/coqui-ai/TTS.git
linter fixes
This commit is contained in:
parent
6b2ff08239
commit
ce076330bf
|
@ -20,7 +20,7 @@ def test_melgan_multi_scale_discriminator():
|
|||
scores, feats = model(dummy_input)
|
||||
assert len(scores) == 3
|
||||
assert len(scores) == len(feats)
|
||||
assert np.all(scores[0].shape == (4, 1, 16))
|
||||
assert np.all(scores[0].shape == (4, 1, 64))
|
||||
assert np.all(feats[0][0].shape == (4, 16, 4096))
|
||||
assert np.all(feats[0][1].shape == (4, 64, 1024))
|
||||
assert np.all(feats[0][2].shape == (4, 256, 256))
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import argparse
|
||||
import os
|
||||
import sys
|
||||
from pprint import pprint
|
||||
|
||||
import numpy as np
|
||||
import tensorflow as tf
|
||||
|
@ -9,8 +7,6 @@ import torch
|
|||
from fuzzywuzzy import fuzz
|
||||
|
||||
from TTS.utils.io import load_config
|
||||
from TTS.vocoder.tf.models.multiband_melgan_generator import \
|
||||
MultibandMelganGenerator
|
||||
from TTS.vocoder.tf.utils.convert_torch_to_tf_utils import (
|
||||
compare_torch_tf, convert_tf_name, transfer_weights_torch_to_tf)
|
||||
from TTS.vocoder.tf.utils.generic_utils import \
|
||||
|
@ -55,7 +51,7 @@ model_tf = setup_tf_generator(c)
|
|||
common_sufix = '/.ATTRIBUTES/VARIABLE_VALUE'
|
||||
# get tf_model graph by passing an input
|
||||
# B x D x T
|
||||
dummy_input = tf.random.uniform((7, 80, 64))
|
||||
dummy_input = tf.random.uniform((7, 80, 64), dtype=tf.float32)
|
||||
mel_pred = model_tf(dummy_input, training=False)
|
||||
|
||||
# get tf variables
|
||||
|
@ -64,6 +60,7 @@ tf_vars = model_tf.weights
|
|||
# match variable names with fuzzy logic
|
||||
torch_var_names = list(state_dict.keys())
|
||||
tf_var_names = [we.name for we in model_tf.weights]
|
||||
var_map = []
|
||||
for tf_name in tf_var_names:
|
||||
# skip re-mapped layer names
|
||||
if tf_name in [name[0] for name in var_map]:
|
||||
|
|
|
@ -28,18 +28,24 @@ class ResidualStack(tf.keras.layers.Layer):
|
|||
tf.keras.layers.LeakyReLU(0.2),
|
||||
ReflectionPad1d(layer_padding),
|
||||
tf.keras.layers.Conv2D(filters=channels,
|
||||
kernel_size=(kernel_size, 1),
|
||||
dilation_rate=(layer_dilation, 1),
|
||||
use_bias=True,
|
||||
padding='valid',
|
||||
name=f'blocks.{idx}.{num_layers}'),
|
||||
kernel_size=(kernel_size, 1),
|
||||
dilation_rate=(layer_dilation, 1),
|
||||
use_bias=True,
|
||||
padding='valid',
|
||||
name=f'blocks.{idx}.{num_layers}'),
|
||||
tf.keras.layers.LeakyReLU(0.2),
|
||||
tf.keras.layers.Conv2D(filters=channels, kernel_size=(1, 1), use_bias=True, name=f'blocks.{idx}.{num_layers + 2}')
|
||||
tf.keras.layers.Conv2D(filters=channels,
|
||||
kernel_size=(1, 1),
|
||||
use_bias=True,
|
||||
name=f'blocks.{idx}.{num_layers + 2}')
|
||||
]
|
||||
self.blocks.append(block)
|
||||
self.shortcuts = [
|
||||
tf.keras.layers.Conv2D(channels, kernel_size=1, use_bias=True, name=f'shortcuts.{i}')
|
||||
for i in range(num_res_blocks)
|
||||
tf.keras.layers.Conv2D(channels,
|
||||
kernel_size=1,
|
||||
use_bias=True,
|
||||
name=f'shortcuts.{i}')
|
||||
for i in range(num_res_blocks)
|
||||
]
|
||||
|
||||
def call(self, x):
|
||||
|
@ -47,6 +53,6 @@ class ResidualStack(tf.keras.layers.Layer):
|
|||
for block, shortcut in zip(self.blocks, self.shortcuts):
|
||||
res = shortcut(x)
|
||||
for layer in block:
|
||||
x = layer(x)
|
||||
x = layer(x)
|
||||
x += res
|
||||
return x
|
|
@ -40,7 +40,7 @@ class PQMF(tf.keras.layers.Layer):
|
|||
x : B x 1 x T
|
||||
"""
|
||||
x = tf.transpose(x, perm=[0, 2, 1])
|
||||
x = tf.pad(x, [[0, 0], [self.taps // 2, self.taps // 2], [0, 0]])
|
||||
x = tf.pad(x, [[0, 0], [self.taps // 2, self.taps // 2], [0, 0]], constant_values=0.0)
|
||||
x = tf.nn.conv1d(x, self.H, stride=1, padding='VALID')
|
||||
x = tf.nn.conv1d(x,
|
||||
self.updown_filter,
|
||||
|
@ -60,7 +60,7 @@ class PQMF(tf.keras.layers.Layer):
|
|||
strides=self.N,
|
||||
output_shape=(tf.shape(x)[0], tf.shape(x)[1] * self.N,
|
||||
self.N))
|
||||
x = tf.pad(x, [[0, 0], [self.taps // 2, self.taps // 2], [0, 0]])
|
||||
x = tf.pad(x, [[0, 0], [self.taps // 2, self.taps // 2], [0, 0]], constant_values=0.0)
|
||||
x = tf.nn.conv1d(x, self.G, stride=1, padding="VALID")
|
||||
x = tf.transpose(x, perm=[0, 2, 1])
|
||||
return x
|
||||
return x
|
||||
|
|
|
@ -8,7 +8,7 @@ import tensorflow as tf
|
|||
from TTS.vocoder.tf.layers.melgan import ResidualStack, ReflectionPad1d
|
||||
|
||||
|
||||
class MelganGenerator(tf.keras.models.Model):
|
||||
class MelganGenerator(tf.keras.models.Model): # pylint: disable=too-many-ancestors
|
||||
""" Melgan Generator TF implementation dedicated for inference with no
|
||||
weight norm """
|
||||
def __init__(self,
|
||||
|
@ -21,6 +21,8 @@ class MelganGenerator(tf.keras.models.Model):
|
|||
num_res_blocks=3):
|
||||
super(MelganGenerator, self).__init__()
|
||||
|
||||
self.in_channels = in_channels
|
||||
|
||||
# assert model parameters
|
||||
assert (proj_kernel -
|
||||
1) % 2 == 0, " [!] proj_kernel should be an odd number."
|
||||
|
@ -34,11 +36,11 @@ class MelganGenerator(tf.keras.models.Model):
|
|||
self.initial_layer = [
|
||||
ReflectionPad1d(base_padding),
|
||||
tf.keras.layers.Conv2D(filters=base_channels,
|
||||
kernel_size=(proj_kernel, 1),
|
||||
strides=1,
|
||||
padding='valid',
|
||||
use_bias=True,
|
||||
name="1")
|
||||
kernel_size=(proj_kernel, 1),
|
||||
strides=1,
|
||||
padding='valid',
|
||||
use_bias=True,
|
||||
name="1")
|
||||
]
|
||||
num_layers = 3 # count number of layers for layer naming
|
||||
|
||||
|
@ -48,23 +50,21 @@ class MelganGenerator(tf.keras.models.Model):
|
|||
layer_out_channels = base_channels // (2**(idx + 1))
|
||||
layer_filter_size = upsample_factor * 2
|
||||
layer_stride = upsample_factor
|
||||
layer_output_padding = upsample_factor % 2
|
||||
# layer_output_padding = upsample_factor % 2
|
||||
self.upsample_layers += [
|
||||
tf.keras.layers.LeakyReLU(act_slope),
|
||||
tf.keras.layers.Conv2DTranspose(
|
||||
filters=layer_out_channels,
|
||||
kernel_size=(layer_filter_size, 1),
|
||||
strides=(layer_stride, 1),
|
||||
padding='same',
|
||||
# output_padding=layer_output_padding,
|
||||
use_bias=True,
|
||||
name=f'{num_layers}'),
|
||||
ResidualStack(
|
||||
channels=layer_out_channels,
|
||||
num_res_blocks=num_res_blocks,
|
||||
kernel_size=res_kernel,
|
||||
name=f'layers.{num_layers + 1}'
|
||||
)
|
||||
filters=layer_out_channels,
|
||||
kernel_size=(layer_filter_size, 1),
|
||||
strides=(layer_stride, 1),
|
||||
padding='same',
|
||||
# output_padding=layer_output_padding,
|
||||
use_bias=True,
|
||||
name=f'{num_layers}'),
|
||||
ResidualStack(channels=layer_out_channels,
|
||||
num_res_blocks=num_res_blocks,
|
||||
kernel_size=res_kernel,
|
||||
name=f'layers.{num_layers + 1}')
|
||||
]
|
||||
num_layers += num_res_blocks - 1
|
||||
|
||||
|
@ -74,15 +74,12 @@ class MelganGenerator(tf.keras.models.Model):
|
|||
self.final_layers = [
|
||||
ReflectionPad1d(base_padding),
|
||||
tf.keras.layers.Conv2D(filters=out_channels,
|
||||
kernel_size=(proj_kernel, 1),
|
||||
use_bias=True,
|
||||
name=f'layers.{num_layers + 1}'),
|
||||
kernel_size=(proj_kernel, 1),
|
||||
use_bias=True,
|
||||
name=f'layers.{num_layers + 1}'),
|
||||
tf.keras.layers.Activation("tanh")
|
||||
]
|
||||
|
||||
# self.initial_layer = tf.keras.models.Sequential(self.initial_layer)
|
||||
# self.upsample_layers = tf.keras.models.Sequential(self.upsample_layers)
|
||||
# self.final_layers = tf.keras.models.Sequential(self.final_layers)
|
||||
# self.model_layers = tf.keras.models.Sequential(self.initial_layer + self.upsample_layers + self.final_layers, name="layers")
|
||||
self.model_layers = self.initial_layer + self.upsample_layers + self.final_layers
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ from TTS.vocoder.tf.models.melgan_generator import MelganGenerator
|
|||
from TTS.vocoder.tf.layers.pqmf import PQMF
|
||||
|
||||
|
||||
class MultibandMelganGenerator(MelganGenerator):
|
||||
class MultibandMelganGenerator(MelganGenerator): # pylint: disable=too-many-ancestors
|
||||
def __init__(self,
|
||||
in_channels=80,
|
||||
out_channels=4,
|
||||
|
|
|
@ -30,10 +30,7 @@ def transfer_weights_torch_to_tf(tf_vars, var_map_dict, state_dict):
|
|||
# if tuple, it is a bias variable
|
||||
if 'kernel' in tf_var.name:
|
||||
torch_weight = state_dict[torch_var_name]
|
||||
try:
|
||||
numpy_weight = torch_weight.permute([2, 1, 0]).numpy()[:, None, :, :]
|
||||
except:
|
||||
breakpoint()
|
||||
numpy_weight = torch_weight.permute([2, 1, 0]).numpy()[:, None, :, :]
|
||||
if 'bias' in tf_var.name:
|
||||
torch_weight = state_dict[torch_var_name]
|
||||
numpy_weight = torch_weight
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import re
|
||||
import importlib
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
|
||||
def to_camel(text):
|
||||
|
|
Loading…
Reference in New Issue