From ce076330bf817d44bb464e66af9b020a083591f7 Mon Sep 17 00:00:00 2001 From: erogol Date: Fri, 19 Jun 2020 14:46:13 +0200 Subject: [PATCH] linter fixes --- vocoder/tests/test_melgan_discriminator.py | 2 +- vocoder/tf/convert_melgan_torch_to_tf.py | 7 +-- vocoder/tf/layers/melgan.py | 24 +++++---- vocoder/tf/layers/pqmf.py | 6 +-- vocoder/tf/models/melgan_generator.py | 49 +++++++++---------- .../tf/models/multiband_melgan_generator.py | 2 +- vocoder/tf/utils/convert_torch_to_tf_utils.py | 5 +- vocoder/tf/utils/generic_utils.py | 2 - 8 files changed, 46 insertions(+), 51 deletions(-) diff --git a/vocoder/tests/test_melgan_discriminator.py b/vocoder/tests/test_melgan_discriminator.py index 83acec8f..a4564b56 100644 --- a/vocoder/tests/test_melgan_discriminator.py +++ b/vocoder/tests/test_melgan_discriminator.py @@ -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)) diff --git a/vocoder/tf/convert_melgan_torch_to_tf.py b/vocoder/tf/convert_melgan_torch_to_tf.py index b767f268..1b3d687d 100644 --- a/vocoder/tf/convert_melgan_torch_to_tf.py +++ b/vocoder/tf/convert_melgan_torch_to_tf.py @@ -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]: diff --git a/vocoder/tf/layers/melgan.py b/vocoder/tf/layers/melgan.py index 8625bbab..4f195d3f 100644 --- a/vocoder/tf/layers/melgan.py +++ b/vocoder/tf/layers/melgan.py @@ -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 \ No newline at end of file diff --git a/vocoder/tf/layers/pqmf.py b/vocoder/tf/layers/pqmf.py index 474b6e7f..6c47dfc4 100644 --- a/vocoder/tf/layers/pqmf.py +++ b/vocoder/tf/layers/pqmf.py @@ -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 \ No newline at end of file + return x diff --git a/vocoder/tf/models/melgan_generator.py b/vocoder/tf/models/melgan_generator.py index db0a9675..8a2a49be 100644 --- a/vocoder/tf/models/melgan_generator.py +++ b/vocoder/tf/models/melgan_generator.py @@ -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 diff --git a/vocoder/tf/models/multiband_melgan_generator.py b/vocoder/tf/models/multiband_melgan_generator.py index e8599760..d3e1c754 100644 --- a/vocoder/tf/models/multiband_melgan_generator.py +++ b/vocoder/tf/models/multiband_melgan_generator.py @@ -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, diff --git a/vocoder/tf/utils/convert_torch_to_tf_utils.py b/vocoder/tf/utils/convert_torch_to_tf_utils.py index 799235e3..25139cc3 100644 --- a/vocoder/tf/utils/convert_torch_to_tf_utils.py +++ b/vocoder/tf/utils/convert_torch_to_tf_utils.py @@ -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 diff --git a/vocoder/tf/utils/generic_utils.py b/vocoder/tf/utils/generic_utils.py index b17db596..580a3738 100644 --- a/vocoder/tf/utils/generic_utils.py +++ b/vocoder/tf/utils/generic_utils.py @@ -1,7 +1,5 @@ import re import importlib -import numpy as np -from matplotlib import pyplot as plt def to_camel(text):