def __init__(
        self,
        n_fft,
        input_channels,
        internal_channels,
        n_blocks,
        n_internal_layers,
        mk_block_f,
        mk_ds_f,
        mk_us_f,
        first_conv_activation,
        last_activation,
        t_down_layers,
        f_down_layers,
        # Conditional Mechanism #
        control_vector_type,
        control_input_dim,
        embedding_dim,
        condition_to,
        control_type,
        control_n_layer,
        film_type,
        gamma_activation,
        beta_activation,
    ):

        super(DenseCUNet_FiLM, self).__init__(
            n_fft,
            input_channels,
            internal_channels,
            n_blocks,
            n_internal_layers,
            mk_block_f,
            mk_ds_f,
            mk_us_f,
            first_conv_activation,
            last_activation,
            t_down_layers,
            f_down_layers,
            # Conditional Mechanism #
            control_vector_type,
            control_input_dim,
            embedding_dim,
            condition_to)

        assert film_type in ['simple', 'complex']
        self.film = FiLM_simple if film_type == 'simple' else FiLM_complex

        gamma_activation = get_activation_by_name(gamma_activation)
        beta_activation = get_activation_by_name(beta_activation)

        if control_type == "dense":
            control_block = dense_control_block(embedding_dim, control_n_layer)
            self.condition_generator = film_control_model(
                control_block, n_blocks, internal_channels, film_type,
                gamma_activation, beta_activation, condition_to)
        else:
            raise NotImplementedError

        self.activation = self.last_conv[-1]
    def __init__(self,
                 n_fft,
                 input_channels, internal_channels,
                 n_blocks, n_internal_layers,
                 mk_block_f, mk_ds_f, mk_us_f,
                 first_conv_activation, last_activation,
                 t_down_layers, f_down_layers,

                 # Conditional Mechanism #
                 control_vector_type, control_input_dim, embedding_dim, condition_to
                 ):

        first_conv_activation = get_activation_by_name(first_conv_activation)
        last_activation = get_activation_by_name(last_activation)

        super(Dense_CUNet, self).__init__()

        '''num_block should be an odd integer'''
        assert n_blocks % 2 == 1

        dim_f, t_down_layers, f_down_layers = self.mk_overall_structure(n_fft, internal_channels, input_channels,
                                                                        n_blocks,
                                                                        n_internal_layers, last_activation,
                                                                        first_conv_activation,
                                                                        t_down_layers, f_down_layers)

        self.mk_blocks(dim_f, internal_channels, mk_block_f, mk_ds_f, mk_us_f, t_down_layers)

        #########################
        # Conditional Mechanism #
        #########################
        assert control_vector_type in ['one_hot_mode', 'embedding']
        if control_vector_type == 'one_hot_mode':
            if control_input_dim != embedding_dim:
                warn('in one_hot_mode, embedding_dim should be the same as num_targets. auto correction')
                embedding_dim = control_input_dim

                with torch.no_grad():
                    one_hot_weight = torch.zeros((control_input_dim, embedding_dim))
                    for i in range(control_input_dim):
                        one_hot_weight[i, i] = 1.

                    self.embedding = nn.Embedding(control_input_dim, embedding_dim, _weight=one_hot_weight)
                    self.embedding.weight.requires_grad = True
        elif control_vector_type == 'embedding':
            self.embedding = nn.Embedding(control_input_dim, embedding_dim)

        # Where to condition
        assert condition_to in ['encoder', 'decoder', 'full']
        self.is_encoder_conditioned = self.is_middle_conditioned = self.is_decoder_conditioned = False
        if condition_to == 'encoder':
            self.is_encoder_conditioned = True
        elif condition_to == 'decoder':
            self.is_decoder_conditioned = True
        elif condition_to == 'full':
            self.is_encoder_conditioned = self.is_middle_conditioned = self.is_decoder_conditioned = True
        else:
            raise NotImplementedError

        self.activation = self.last_conv[-1]
Beispiel #3
0
    def __init__(self,
                 n_fft,
                 n_blocks, input_channels, internal_channels, n_internal_layers,
                 first_conv_activation, last_activation,
                 t_down_layers, f_down_layers,
                 kernel_size_t, kernel_size_f,
                 bn_factor, min_bn_units,
                 tfc_tdf_bias,
                 tfc_tdf_activation,
                 num_tdfs, dk,
                 control_vector_type, control_input_dim, embedding_dim, condition_to,
                 control_type, control_n_layer, pocm_type, pocm_norm
                 ):

        tfc_tdf_activation = functions.get_activation_by_name(tfc_tdf_activation)

        def mk_tfc_lasaft(in_channels, internal_channels, f):
            return TFC_LightSAFT(in_channels, n_internal_layers, internal_channels,
                              kernel_size_t, kernel_size_f, f,
                              bn_factor, min_bn_units,
                              tfc_tdf_bias,
                              tfc_tdf_activation,
                              embedding_dim, num_tdfs, dk)

        def mk_ds(internal_channels, i, f, t_down_layers):
            if t_down_layers is None:
                scale = (2, 2)
            else:
                scale = (2, 2) if i in t_down_layers else (1, 2)
            ds = nn.Sequential(
                nn.Conv2d(in_channels=internal_channels, out_channels=internal_channels,
                          kernel_size=scale, stride=scale),
                nn.BatchNorm2d(internal_channels)
            )
            return ds, f // scale[-1]

        def mk_us(internal_channels, i, f, n, t_down_layers):
            if t_down_layers is None:
                scale = (2, 2)
            else:
                scale = (2, 2) if i in [n - 1 - s for s in t_down_layers] else (1, 2)

            us = nn.Sequential(
                nn.ConvTranspose2d(in_channels=internal_channels, out_channels=internal_channels,
                                   kernel_size=scale, stride=scale),
                nn.BatchNorm2d(internal_channels)
            )
            return us, f * scale[-1]

        super(DCUN_TFC_GPoCM_LightSAFT, self).__init__(
            n_fft,
            input_channels, internal_channels,
            n_blocks, n_internal_layers,
            mk_tfc_lasaft, mk_ds, mk_us,
            first_conv_activation, last_activation,
            t_down_layers, f_down_layers,
            # Conditional Mechanism #
            control_vector_type, control_input_dim, embedding_dim, condition_to,
            control_type, control_n_layer, pocm_type, pocm_norm
        )
Beispiel #4
0
    def __init__(
            self,
            n_fft,
            input_channels,
            internal_channels,
            n_blocks,
            n_internal_layers,
            first_conv_activation,
            last_activation,
            t_down_layers,
            f_down_layers,
            kernel_size_t,
            kernel_size_f,
            tfc_activation,

            # Conditional Mechanism #
            control_vector_type,
            control_input_dim,
            embedding_dim,

            # Conditional Model #
            control_type,
            control_n_layer,
            condition_to,
            film_type,
            gamma_activation,
            beta_activation):

        tfc_activation = functions.get_activation_by_name(tfc_activation)

        def mk_tfc_tdf(in_channels, internal_channels, f):
            return TFC(in_channels, n_internal_layers, internal_channels,
                       kernel_size_t, kernel_size_f, tfc_activation)

        def mk_tfc_tdf_ds(internal_channels, i, f, t_down_layers):
            if t_down_layers is None:
                scale = (2, 2)
            else:
                scale = (2, 2) if i in t_down_layers else (1, 2)
            ds = nn.Sequential(
                nn.Conv2d(in_channels=internal_channels,
                          out_channels=internal_channels,
                          kernel_size=scale,
                          stride=scale), nn.BatchNorm2d(internal_channels))
            return ds, f // scale[-1]

        def mk_tfc_tdf_us(internal_channels, i, f, n, t_down_layers):
            if t_down_layers is None:
                scale = (2, 2)
            else:
                scale = (2, 2) if i in [n - 1 - s
                                        for s in t_down_layers] else (1, 2)

            us = nn.Sequential(
                nn.ConvTranspose2d(in_channels=internal_channels,
                                   out_channels=internal_channels,
                                   kernel_size=scale,
                                   stride=scale),
                nn.BatchNorm2d(internal_channels))
            return us, f * scale[-1]

        super(DCUN_TFC_FiLM, self).__init__(
            n_fft,
            input_channels,
            internal_channels,
            n_blocks,
            n_internal_layers,
            mk_tfc_tdf,
            mk_tfc_tdf_ds,
            mk_tfc_tdf_us,
            first_conv_activation,
            last_activation,
            t_down_layers,
            f_down_layers,
            # Conditional Mechanism #
            control_vector_type,
            control_input_dim,
            embedding_dim,
            condition_to,
            control_type,
            control_n_layer,
            film_type,
            gamma_activation,
            beta_activation)