Пример #1
0
def test_convtranpose1d(filters, kernel_size, strides, padding,
                        is_weight_norm):
    fake_input_1d = tf.random.normal(shape=[4, 8000, 256], dtype=tf.float32)
    conv1d_transpose = TFConvTranspose1d(filters=filters,
                                         kernel_size=kernel_size,
                                         strides=strides,
                                         padding=padding,
                                         is_weight_norm=is_weight_norm,
                                         initializer_seed=42)
    out = conv1d_transpose(fake_input_1d)
    assert np.array_equal(tf.keras.backend.int_shape(out),
                          [4, 8000 * strides, filters])
Пример #2
0
    def __init__(self, config, **kwargs):
        super().__init__(**kwargs)
        # check hyper parameter is valid or not
        assert (
            config.stacks
            == len(config.stack_kernel_size)
            == len(config.stack_dilation_rate)
        )

        # add initial layer
        layers = []
        layers += [
            TFReflectionPad1d(
                (config.kernel_size - 1) // 2,
                padding_type=config.padding_type,
                name="first_reflect_padding",
            ),
            tf.keras.layers.Conv1D(
                filters=config.filters,
                kernel_size=config.kernel_size,
                use_bias=config.use_bias,
            ),
        ]

        for i, upsample_scale in enumerate(config.upsample_scales):
            # add upsampling layer
            layers += [
                getattr(tf.keras.layers, config.nonlinear_activation)(
                    **config.nonlinear_activation_params
                ),
                TFConvTranspose1d(
                    filters=config.filters // (2 ** (i + 1)),
                    kernel_size=upsample_scale * 2,
                    strides=upsample_scale,
                    padding="same",
                    is_weight_norm=config.is_weight_norm,
                    initializer_seed=config.initializer_seed,
                    name="conv_transpose_._{}".format(i),
                ),
            ]

            # add residual stack layer
            layers += [
                TFMultiHifiResBlock(
                    list_resblock=[
                        TFHifiResBlock(
                            kernel_size=config.stack_kernel_size[j],
                            filters=config.filters // (2 ** (i + 1)),
                            dilation_rate=config.stack_dilation_rate[j],
                            use_bias=config.use_bias,
                            nonlinear_activation=config.nonlinear_activation,
                            nonlinear_activation_params=config.nonlinear_activation_params,
                            is_weight_norm=config.is_weight_norm,
                            initializer_seed=config.initializer_seed,
                            name="hifigan_resblock_._{}".format(j),
                        )
                        for j in range(config.stacks)
                    ],
                    name="multi_hifigan_resblock_._{}".format(i),
                )
            ]
        # add final layer
        layers += [
            getattr(tf.keras.layers, config.nonlinear_activation)(
                **config.nonlinear_activation_params
            ),
            TFReflectionPad1d(
                (config.kernel_size - 1) // 2,
                padding_type=config.padding_type,
                name="last_reflect_padding",
            ),
            tf.keras.layers.Conv1D(
                filters=config.out_channels,
                kernel_size=config.kernel_size,
                use_bias=config.use_bias,
                dtype=tf.float32,
            ),
        ]
        if config.use_final_nolinear_activation:
            layers += [tf.keras.layers.Activation("tanh", dtype=tf.float32)]

        if config.is_weight_norm is True:
            self._apply_weightnorm(layers)

        self.hifigan = tf.keras.models.Sequential(layers)
  def __init__(self, config, encoder, **kwargs):
    super().__init__(**kwargs)
    # check hyper parameter is valid or not
    assert config.filters >= np.prod(config.upsample_scales)
    assert config.filters % (2 ** len(config.upsample_scales)) == 0

    # add initial layer
    self.encoder = encoder
    gc_linear = []
    layers = []
    layers += [
        TFReflectionPad1d(
            (config.kernel_size - 1) // 2,
            padding_type=config.padding_type,
            name="first_reflect_padding",
        ),
        tf.keras.layers.Conv1D(
            filters=config.filters,
            kernel_size=config.kernel_size,
            use_bias=config.use_bias,
            kernel_initializer=get_initializer(config.initializer_seed),
        ),
    ]
    gc_linear += [
        tf.keras.layers.Dense(
            units=config.filters,
            kernel_initializer=get_initializer(config.initializer_seed),
            name='gc_start'
        )    
    ]

    for i, upsample_scale in enumerate(config.upsample_scales):
      # add upsampling layer
      layers += [
          getattr(tf.keras.layers, config.nonlinear_activation)(
              **config.nonlinear_activation_params
          ),
          TFConvTranspose1d(
              filters=config.filters // (2 ** (i + 1)),
              kernel_size=upsample_scale * 2,
              strides=upsample_scale,
              padding="same",
              is_weight_norm=config.is_weight_norm,
              initializer_seed=config.initializer_seed,
              name="conv_transpose_._{}".format(i),
          ),
      ]
      gc_linear += [
          tf.keras.layers.Dense(
              units=config.filters // (2 ** (i + 1)),
              activation=tf.nn.tanh,
              kernel_initializer=get_initializer(config.initializer_seed),
              name='gc_%d_0'%(i)
          )    
      ]

      # add residual stack layer
      for j in range(config.stacks):
        layers += [
            TFResidualStack(
                kernel_size=config.stack_kernel_size,
                filters=config.filters // (2 ** (i + 1)),
                dilation_rate=config.stack_kernel_size ** j,
                use_bias=config.use_bias,
                nonlinear_activation=config.nonlinear_activation,
                nonlinear_activation_params=config.nonlinear_activation_params,
                is_weight_norm=config.is_weight_norm,
                initializer_seed=config.initializer_seed,
                name="residual_stack_._{}._._{}".format(i, j),
            )
        ]
        gc_linear += [
            tf.keras.layers.Dense(
                units=config.filters // (2 ** (i + 1)),
                activation=tf.nn.tanh,
                kernel_initializer=get_initializer(config.initializer_seed),
                name='gc_%d_%d'%(i, j+1)
            )    
        ]
    # add final layer
    gc_linear += [
        tf.keras.layers.Dense(
            units=config.out_channels,
            kernel_initializer=get_initializer(config.initializer_seed),
            name='gc_end'
        )    
    ]
    layers += [
        getattr(tf.keras.layers, config.nonlinear_activation)(
            **config.nonlinear_activation_params
        ),
        TFReflectionPad1d(
            (config.kernel_size - 1) // 2,
            padding_type=config.padding_type,
            name="last_reflect_padding",
        ),
        tf.keras.layers.Conv1D(
            filters=config.out_channels,
            kernel_size=config.kernel_size,
            use_bias=config.use_bias,
            kernel_initializer=get_initializer(config.initializer_seed),
            dtype=tf.float32,
        )
    ]
    if config.use_final_nolinear_activation:
      layers += [tf.keras.layers.Activation("tanh", dtype=tf.float32)]

    if config.is_weight_norm is True:
      self._apply_weightnorm(layers)

    self.gc_linear = gc_linear
    self.upsample = layers