Ejemplo n.º 1
0
def convolutional_block_attention_module(inputs, hidden_size=16, conv_size=7):
    # CBAM:通道注意力+像素注意力
    ca = channel_attention(inputs, hidden_size)
    x = layers.Multiply(name='channel_attention_x')([inputs, ca])
    sa = spatial_attention(x, conv_size)
    x = layers.Multiply(name='spatial_attention_x')([x, sa])
    return x
Ejemplo n.º 2
0
def fusionnetPos(y):
    y, inTensor1, inTensor2 = y
    #     # crop the input images to the same size as network output.
    #     inCrop1 = layers.Cropping2D(cropping=((8, 8), (8, 8)))(inTensor1)
    #     inCrop2 = layers.CroppinimgIdx = 9
    # fig=plt.figure(figsize=(12, 12))
    # columns = 6
    # rows = 1
    # fig.add_subplot(rows, columns, 1)
    # plt.imshow(x_test1[imgIdx, :, :, :])
    # fig.add_subplot(rows, columns, 2)
    # plt.imshow(x_test2[imgIdx, :, :, :])
    # fig.add_subplot(rows, columns, 3)
    # plt.imshow(mask_test[imgIdx, :, :, 0])
    # fig.add_subplot(rows, columns, 4)
    # plt.imshow((layer_output[imgIdx, :, :, 0]+1)/2)
    # fig.add_subplot(rows, columns, 5)
    # plt.imshow((prediction[imgIdx, :, :, :]+1)/2)
    # fig.add_subplot(rows, columns, 6)
    # plt.imshow(y_test[imgIdx, :, :, :])
    # plt.show()
    # # fig.savefig(dataPath+"results/struc_loss{:.2E}.png".format(lambda_tv))g2D(cropping=((8, 8), (8, 8)))(inTensor2)
    y = K.tile(y, [1, 1, 1, 3])
    y1 = layers.Multiply()([inTensor1, (1 + y) / 2])
    y2 = layers.Multiply()([inTensor2, 1 - (1 + y) / 2])
    y = layers.Add()([y1, y2])
    return y
Ejemplo n.º 3
0
    def dual_domain_block(x, nFilters, Pyramid_Cells, nPyramidFilters, qy, qc,
                          Restriction):
        _t = pyramid(x, nPyramidFilters, Pyramid_Cells)

        _ty = conv(_t, nFilters, 3)
        _tc = conv(_t, nFilters, 3, dilation_rate=2)
        if Restriction == 'RaRe':
            _ty = RaRe(r=0.75)(_ty)
            _tc = RaRe(r=0.75)(_tc)
        if Restriction == 'soft':
            _ty = SoftThreshing(th=0.5)(_ty)
            _tc = SoftThreshing(th=0.5)(_tc)
        if Restriction == 'hard':
            _ty = HardThreshing(th=0.5)(_ty)
            #_tc = HardThreshing(th=0.75)(_tc)
        _ty = layers.Multiply()([_ty, qy])
        _tc = layers.Multiply()([_tc, qc])
        _ty = IDCT(True)(_ty)
        _tc = IDCT(True)(_tc)
        _tp = conv(_t, nFilters, 3)
        _td = layers.Concatenate(axis=-1)([_ty, _tc])
        _td = conv(_td, nFilters, 3)

        y = layers.Add()([_td, _tp])

        #y = conv(_t, nFilters, 3)
        y = layers.Lambda(lambda x: x * 0.1)(y)
        y = layers.Add()([x, y])
        return y
Ejemplo n.º 4
0
    def compare_and_score(self, left, right, ent, feats):
        """ Final layer of the compiled model
        Concatenates several comparisons between the vectors of left and right
        contexts and the entity vector.

        Final dense layer takes all of these comparisons, and the final feature
        vector, and outputs a binary prediction.
        """
        comparisons = []

        left_dot = layers.Dot(axes=1, normalize=True)([left, ent])
        right_dot = layers.Dot(axes=1, normalize=True)([right, ent])
        comparisons += [left_dot, right_dot]

        left_diff = layers.Subtract()([left, ent])
        right_diff = layers.Subtract()([right, ent])
        comparisons += [left_diff, right_diff]

        left_diff_sq = layers.Multiply()([left_diff, left_diff])
        right_diff_sq = layers.Multiply()([right_diff, right_diff])
        comparisons += [left_diff_sq, right_diff_sq]

        left_mult = layers.Multiply()([left, ent])
        right_mult = layers.Multiply()([right, ent])
        comparisons += [left_mult, right_mult]

        if feats is not None:
            comparisons.append(feats)

        comparisons_concat = layers.Concatenate(axis=1)(comparisons)
        out = self.reduce_layer(comparisons_concat)
        return out
Ejemplo n.º 5
0
    def grouped_convolution(y, nb_channels, _strides):
        # when `cardinality` == 1 this is just a standard convolution
        if cardinality == 1:
            return layers.Conv2D(nb_channels,
                                 kernel_size=(3, 3),
                                 strides=_strides,
                                 padding='same')(y)

        assert not nb_channels % cardinality
        _d = nb_channels // (cardinality)

        # in a grouped convolution layer, input and output channels are divided into `cardinality` groups,
        # and convolutions are separately performed within each group
        groups = []
        attn1 = []
        attn2 = []
        skip1 = []
        skip2 = []
        for j in range(cardinality):
            group = layers.Lambda(lambda z: z[:, :, :, j * _d:j * _d + _d])(y)
            if j == 0:
                attn1 = attention_block(group, _d, _strides)
            if j == 1:
                skip1 = skip_block(group, _d, _strides)
            if j == 2:
                attn2 = attention_block(group, _d, _strides)
            if j == 3:
                skip2 = skip_block(group, _d, _strides)

        skip1 = layers.Multiply()([skip1, attn1])
        y_1 = layers.Conv2D(_d * 2,
                            kernel_size=(1, 1),
                            strides=(1, 1),
                            padding='same')(skip1)
        y_1 = add_common_layers(y_1)

        skip2 = layers.Multiply()([skip2, attn2])
        y_2 = layers.Conv2D(_d * 2,
                            kernel_size=(1, 1),
                            strides=(1, 1),
                            padding='same')(skip2)
        y_2 = add_common_layers(y_2)

        groups.append(y_1)
        groups.append(y_2)

        # the grouped convolutional layer concatenates them as the outputs of the layer
        y = layers.concatenate(groups)

        return y
Ejemplo n.º 6
0
def fusionnetPos(y):
    y, inTensor1, inTensor2 = y
    # crop the input images to the same size as network output.
    inCrop1 = layers.Cropping2D(cropping=((8, 8), (8, 8)))(inTensor1)
    inCrop2 = layers.Cropping2D(cropping=((8, 8), (8, 8)))(inTensor2)
    # y1, y2 = tf.split(y, [1, 1], axis = 3)
    # extend y1&y2 dimension to 3, consistant to color channels
    y1 = y[:, :, :, :1]
    y2 = y[:, :, :, 1:]
    y1 = K.tile(y1, [1, 1, 1, 3])
    y2 = K.tile(y2, [1, 1, 1, 3])
    y1 = layers.Multiply()([inCrop1, y1])
    y2 = layers.Multiply()([inCrop2, y2])
    y = layers.Add()([y1, y2])
    return y
def mul_layer(back_layer, last):
    back = back_layer.output
    upsample = layers.UpSampling2D((2, 2))(last)
    to1024 = layers.Conv2D(
        int(back.shape[3]), (1, 1), activation='relu')(upsample)
    mul = layers.Multiply()([back, to1024])
    return mul, layers.Conv2D(1, (1, 1), activation='sigmoid')(mul)
Ejemplo n.º 8
0
def self_Att_channel(x,x_att,r = 16,name = '1'):
    '''
    advanced
    Hu, Jie, Li Shen, and Gang Sun."Squeeze-and-excitation networks." arXiv preprintarXiv:1709.01507 (2017).
    :param x:
    :param r:
    :return:
    '''
    x_self = x
    chanel = K.int_shape(x)[-1]
    L = K.int_shape(x)[-2]

    x_att = layers.GlobalAveragePooling1D(name='self_avg_pool' + name )(x_att)

    # x_att = layers.Conv2D(chanel,
    #                       (H,W),
    #                       padding='valid',
    #                       use_bias=None,
    #                       name='FCN' + name)(x_att)

    x_att = layers.Dense(int(chanel / r),activation='relu')(x_att)
    x_att = layers.Dense(chanel, activation='sigmoid')(x_att)
    x = layers.Multiply()([x_self,x_att])

    return x
Ejemplo n.º 9
0
def atari_model():
    # With the functional API we need to define the inputs.
    frames_input = layers.Input(ATARI_SHAPE, name='frames')
    actions_input = layers.Input((ACTION_SIZE, ), name='action_mask')

    # Assuming that the input frames are still encoded from 0 to 255. Transforming to [0, 1].
    normalized = layers.Lambda(lambda x: x / 255.0,
                               name='normalization')(frames_input)

    # "The first hidden layer convolves 16 8×8 filters with stride 4 with the input image and applies a rectifier nonlinearity."
    conv_1 = layers.convolutional.Conv2D(16, (8, 8),
                                         strides=(4, 4),
                                         activation='relu')(normalized)
    # "The second hidden layer convolves 32 4×4 filters with stride 2, again followed by a rectifier nonlinearity."
    conv_2 = layers.convolutional.Conv2D(32, (4, 4),
                                         strides=(2, 2),
                                         activation='relu')(conv_1)
    # Flattening the second convolutional layer.
    conv_flattened = layers.core.Flatten()(conv_2)
    # "The final hidden layer is fully-connected and consists of 256 rectifier units."
    hidden = layers.Dense(256, activation='relu')(conv_flattened)
    # "The output layer is a fully-connected linear layer with a single output for each valid action."
    output = layers.Dense(ACTION_SIZE)(hidden)
    # Finally, we multiply the output by the mask!
    filtered_output = layers.Multiply(name='QValue')([output, actions_input])

    model = Model(inputs=[frames_input, actions_input],
                  outputs=filtered_output)
    model.summary()
    optimizer = RMSprop(lr=FLAGS.learning_rate, rho=0.95, epsilon=0.01)
    # model.compile(optimizer, loss='mse')
    # to changed model weights more slowly, uses MSE for low values and MAE(Mean Absolute Error) for large values
    model.compile(optimizer, loss=huber_loss)
    return model
Ejemplo n.º 10
0
 def add_action_mask_layer(final, frames_input, num_actions):
     actions_input = layers.Input((num_actions, ), name='action_mask')
     filtered_output = layers.Multiply(name='QValue')(
         [final, actions_input])
     model = Model(inputs=[frames_input, actions_input],
                   outputs=filtered_output)
     return model
Ejemplo n.º 11
0
def build(txt_shape,
          img_shape,
          max_len=400,
          filters=250,
          act_1=None,
          act_2=None,
          loss_function=mAP.my_loss):
    K.clear_session()
    word_index, embedding_matrix = loading()
    input_text = layers.Input(shape=(None, ), dtype='int32')
    input_image = layers.Input(shape=(img_shape, ))
    embeddings = layers.Embedding(len(word_index) + 1,
                                  128,
                                  weights=[embedding_matrix],
                                  input_length=max_len,
                                  trainable=True)(input_text)
    filter_sizes, convs = [2, 3, 4, 5], []
    for fsz in filter_sizes:
        conv1 = layers.Conv1D(filters, kernel_size=fsz,
                              activation='tanh')(embeddings)
        pool1 = layers.MaxPooling1D(max_len - fsz + 1)(conv1)
        pool1 = layers.Flatten()(pool1)
        convs.append(pool1)
    merge = layers.Concatenate(1)(convs)
    text_embedding = layers.Dropout(0.5)(merge)
    text_dense = layers.Dense(512, activation=act_1)(text_embedding)
    image_dense = layers.Dense(512, activation=act_1)(input_image)
    mul = layers.Multiply()([text_dense, image_dense])
    pred = layers.Dense(1, activation=act_2)(mul)
    model = Model(inputs=[input_text, input_image], outputs=pred)
    model.compile(loss=loss_function, optimizer='adam', metrics=[mAP.auc])
    model.summary()
    return model
Ejemplo n.º 12
0
 def call(self, input_xs):  # Defines the computation from inputs to outputs
     channel_refined_feature = self.channel_attention(input_xs)
     spatial_attention_feature = self.spatial_attention(
         channel_refined_feature)
     refined_feature = KL.Multiply()(
         [channel_refined_feature, spatial_attention_feature])
     return KL.Add()([refined_feature, input_xs])
Ejemplo n.º 13
0
    def build_model(self):
        if self.mod_name == 'ddqn':
            #dueling DQN implementation
            frames_input, actions_input = layers.Input(self.frame_size, name='frames'), layers.Input((self.action_size,), name='action')
            #normalization layer
            normalized = layers.Lambda(lambda x: x / 255.0, name='normalization')(frames_input)
            #same conv as dqn
            conv_1 = layers.convolutional.Conv2D(16, (8, 8), strides=(4, 4), activation='relu')(normalized)
            conv_2 = layers.convolutional.Conv2D(32, (4, 4), strides=(2, 2), activation='relu')(conv_1)
            flattened = layers.core.Flatten()(conv_2)
            #advantage and value layers
            fullycon1 = layers.Dense(256)(flattened)
            advantage = layers.Dense(self.action_size)(fullycon1)
            fullycon2 = layers.Dense(256)(flattened)
            value = layers.Dense(1)(fullycon2)
            # print(value)
            output = layers.merge([advantage, value], mode = lambda x: x[0]-K.mean(x[0])+x[1], output_shape = (self.action_size,))
            #filter outputs for q values
            model = Model(inputs=[frames_input, actions_input], outputs=layers.Multiply(name='Q')([output, actions_input]))
            model.summary()

            #allow the selection of adam as optimizer
            if self.optimizer == 'adam':
                optimizer = Adam(lr=self.lr, beta_1=0.9, beta_2=0.999)
            elif self.optimizer == 'rmsprop':
                optimizer = RMSprop(lr=self.lr, rho=0.95, epsilon=0.01)

            #compiling model with customized huber loss
            model.compile(optimizer, loss=clipping)
            return model
Ejemplo n.º 14
0
def my_global_attention_upsample(x_high, x_low):
    low_shape = K.int_shape(x_low)

    x_low_mask = layers.Conv2D(low_shape[-1],
                               kernel_size=3,
                               padding='same',
                               use_bias=False)(x_low)
    x_low_mask = layers.BatchNormalization()(x_low_mask)

    x_high_gp = SpatialReduceLayer(mode='avg')(x_high)
    x_high_gp = layers.Conv2D(low_shape[-1], kernel_size=1,
                              use_bias=False)(x_high_gp)
    x_high_gp = layers.BatchNormalization()(x_high_gp)
    x_high_gp = layers.Activation('relu')(x_high_gp)
    x_high_gp = ResizeImageLayer(target_size=(low_shape[1],
                                              low_shape[2]))(x_high_gp)

    x_att = layers.Multiply()([x_high_gp, x_low_mask])

    x_h = layers.Conv2D(low_shape[-1], kernel_size=1, use_bias=False)(x_high)
    x_h = layers.BatchNormalization()(x_h)
    x = layers.Add()([x_h, x_att])
    x = layers.Activation('relu')(x)

    return x
Ejemplo n.º 15
0
 def layer(input_tensor):
     x = kl.Conv2D(1, (1, 1),
                   kernel_initializer="he_normal",
                   activation='sigmoid',
                   use_bias=False)(input_tensor)
     x = kl.Multiply()([input_tensor, x])
     return x
Ejemplo n.º 16
0
def identity_block(X, f, filters, stage, block):
    block_name = str(stage) + "_" + str(block)
    conv_name_base = 'res' + str(stage) + block + '_branch'
    bn_name_base = 'bn' + str(stage) + block + '_branch'

    F1, F2, F3 = filters

    X_shortcut = X
    
    X = layers.Conv2D(filters=F1, kernel_size=(1,1), strides=(1,1), padding='valid', 
        name=conv_name_base + '2a', kernel_initializer=glorot_uniform(seed=0))(X)
    X = layers.BatchNormalization(axis=3, name=bn_name_base + '2a')(X)
    X = layers.Activation('relu')(X)

    X = layers.Conv2D(filters=F2, kernel_size=(f,f), strides=(1,1), padding='same', 
        name=conv_name_base + '2b', kernel_initializer=glorot_uniform(seed=0))(X)
    X = layers.BatchNormalization(axis=3, name=bn_name_base + '2b')(X)
    X = layers.Activation('relu')(X)

    X = layers.Conv2D(filters=F3, kernel_size=(1,1), strides=(1,1), padding='valid', 
        name=conv_name_base + '2c', kernel_initializer=glorot_uniform(seed=0))(X)
    X = layers.BatchNormalization(axis=3, name=bn_name_base + '2c')(X)

    se = layers.GlobalAveragePooling2D(name='pool' + block_name + '_gap')(X)
    se = layers.Dense(F3 // 16, activation='relu', name = 'fc' + block_name + '_sqz')(se)
    se = layers.Dense(F3, activation='sigmoid', name = 'fc' + block_name + '_exc')(se)
    se = layers.Reshape([1, 1, F3])(se)
    X = layers.Multiply(name='scale' + block_name)([X, se])

    X = layers.Add()([X, X_shortcut])
    X = layers.Activation('relu')(X)

    return X
Ejemplo n.º 17
0
    def call(self, inputs):
        if len(inputs) == 2:
            dec, enc = inputs
            masks = None
        elif len(inputs) == 3:
            dec, enc, masks = inputs
        q = kl.Dense(self.filters_q, use_bias=True)(dec)
        q = kl.Activation(activation)(q)
        #         q = kl.tanh(alpha=1.0)(q)
        k = kl.Dense(self.filters_k, use_bias=True)(enc)
        k = kl.Activation(activation)(k)
        #         k = kl.tanh(alpha=1.0)(k)
        v = kl.Dense(self.filters_v, use_bias=True)(enc)
        v = kl.Activation(activation)(v)
        #         v = kl.tanh(alpha=1.0)(v)
        #         print('q.shape,k.shape,v.shape,',q.shape,k.shape,v.shape)
        beta = K.batch_dot(q, K.permute_dimensions(k,
                                                   (0, 2, 1)))  # # [bs, N, M]

        if masks is not None:
            #             print('apply padding')
            beta = kl.Multiply()([beta, masks])

        scores = K.softmax(beta, axis=-1)  # attention map

        o = K.batch_dot(scores, v)  # [bs, N, C]

        self.q_sh = tuple(q.shape.as_list())
        self.k_sh = tuple(k.shape.as_list())
        self.v_sh = tuple(v.shape.as_list())
        self.beta_sh = tuple(beta.shape.as_list())
        self.scores_sh = tuple(scores.shape.as_list())
        self.o_sh = tuple(o.shape.as_list())
        return [q, k, v, beta, scores, o]
Ejemplo n.º 18
0
def atari_model_mask():
    # With the functional API we need to define the inputs.
    frames_input = layers.Input(ATARI_SHAPE, name='frames')
    actions_input = layers.Input((ACTION_SIZE,), name='action_mask')  # Masking!

    # TODO: Do normalisation outside of tensorflow (since we're not computing gradients etc) - only use the ML framework
    #  when you actually need to.
    # Assuming that the input frames are still encoded from 0 to 255. Transforming to [0, 1].
    normalized = layers.Lambda(lambda x: x / 255.0, name='normalization')(frames_input)

    # "The first hidden layer convolves 16 8×8 filters (stride 4) with the input & applies a rectifier nonlinearity."
    conv_1 = layers.convolutional.Conv2D(
        16, (8, 8), strides=(4, 4), activation='relu')(normalized)
    # "The second hidden layer convolves 32 4×4 filters with stride 2, again followed by a rectifier nonlinearity."
    conv_2 = layers.convolutional.Conv2D(
        32, (4, 4), strides=(2, 2), activation='relu')(conv_1)
    # Flattening the second convolutional layer.
    conv_flattened = layers.core.Flatten()(conv_2)
    # "The final hidden layer is fully-connected and consists of 256 rectifier units."
    hidden = layers.Dense(256, activation='relu')(conv_flattened)
    # "The output layer is a fully-connected linear layer with a single output for each valid action."
    output = layers.Dense(ACTION_SIZE)(hidden)

    # Finally, we multiply the output by the mask!
    filtered_output = layers.Multiply(name='QValue')([output, actions_input])

    model = Model(inputs=[frames_input, actions_input], outputs=filtered_output)

    # Using logcosh loss function because it's similar to Huber, but easier to implement than a custom loss function
    model.compile(loss='logcosh', optimizer=keras.optimizers.RMSprop(lr=0.00025, rho=0.95, epsilon=0.01))

    return model
Ejemplo n.º 19
0
def mul_layer(back_layer, last):
    back = back_layer.output
    upsample = layers.Conv2DTranspose(int(last.shape[3]), (2, 2),
                                      strides=(2, 2))(last)
    to1024 = Conv2D(int(back.shape[3]), (1, 1), activation='elu')(upsample)
    mul = layers.Multiply()([back, to1024])
    return mul
Ejemplo n.º 20
0
def build(txt_shape,
          img_shape,
          act_1=None,
          act_2=None,
          loss_function=mAP.my_loss):
    K.clear_session()
    word_index, embedding_matrix = loading()
    input_text = layers.Input(shape=(None, ), dtype='int32')
    input_image = layers.Input(shape=(img_shape, ))
    embeddings = layers.Embedding(len(word_index) + 1,
                                  128,
                                  weights=[embedding_matrix],
                                  input_length=400,
                                  trainable=True)(input_text)
    embeddings = Position_Embedding()(embeddings)
    O_seq = Attention(8, 16)([embeddings, embeddings, embeddings])
    O_seq = layers.GlobalAveragePooling1D()(O_seq)
    text_embedding = layers.Dropout(0.5)(O_seq)
    text_dense = layers.Dense(512, activation=act_1)(text_embedding)
    image_dense = layers.Dense(512, activation=act_1)(input_image)
    mul = layers.Multiply()([text_dense, image_dense])
    pred = layers.Dense(1, activation=act_2)(mul)
    model = Model(inputs=[input_text, input_image], outputs=pred)
    model.compile(loss=loss_function, optimizer='adam', metrics=[mAP.auc])
    model.summary()
    return model
Ejemplo n.º 21
0
def build_generator(latent_dim):
    latent_input = layers.Input(shape=(latent_dim, ))
    class_input = layers.Input(shape=(1, ), dtype='int32')

    emb = layers.Embedding(10,
                           latent_dim,
                           embeddings_initializer='glorot_normal')(class_input)
    emb = layers.Flatten()(emb)

    generator_input = layers.Multiply()([latent_input, emb])

    x = layers.Dense(1024)(generator_input)
    x = layers.ReLU()(x)
    x = layers.Dense(128 * 7 * 7)(x)
    x = layers.ReLU()(x)
    x = layers.Reshape((128, 7, 7))(x)

    x = layers.UpSampling2D((2, 2))(x)
    x = layers.Conv2D(256, 5, padding='same',
                      bias_initializer='glorot_normal')(x)
    x = layers.ReLU()(x)

    x = layers.UpSampling2D((2, 2))(x)
    x = layers.Conv2D(128, 5, padding='same',
                      bias_initializer='glorot_normal')(x)
    x = layers.ReLU()(x)

    x = layers.Conv2D(1, 2, padding='same',
                      bias_initializer='glorot_normal')(x)
    fake_image = layers.Activation('tanh')(x)

    generator = keras.models.Model(input=[latent_input, class_input],
                                   output=fake_image)

    return generator
Ejemplo n.º 22
0
def atari_model():
    """
    模型初始化
    """
    # actions_input = layers.Input((ACTION_SIZE,), name='action_mask')
    # frames_input = layers.Input(ATARI_SHAPE, name='inputs')
    actions_input = layers.Input((ACTION_SIZE, ), name='mask')
    frames_input = layers.Input(ATARI_SHAPE, name='img')

    normalized = layers.Lambda(lambda x: x / 255.0, name='norm')(frames_input)
    conv_1 = layers.convolutional.Conv2D(16, (8, 8),
                                         strides=(4, 4),
                                         activation='relu')(normalized)
    conv_2 = layers.convolutional.Conv2D(32, (4, 4),
                                         strides=(2, 2),
                                         activation='relu')(conv_1)
    conv_flattened = layers.core.Flatten()(conv_2)
    hidden = layers.Dense(256, activation='relu')(conv_flattened)

    output = layers.Dense(ACTION_SIZE)(hidden)
    filtered_output = layers.Multiply(name='QValue')([output, actions_input])

    model = Model(inputs=[frames_input, actions_input],
                  outputs=filtered_output)
    model.summary()

    optimizer = RMSprop(lr=0.00025, rho=0.95, epsilon=0.01)
    model.compile(optimizer, loss=huber_loss)
    return model
Ejemplo n.º 23
0
def matting_weighted_l1_loss(matting_gt, blending_result, trimask):
    trimask = tf.where(trimask > 0.5, tf.ones_like(trimask), 0.1 * tf.ones_like(trimask))
    square = K.square(matting_gt - blending_result)
    l1 = K.sqrt(square + K.epsilon())
    weighted_l1 = KL.Multiply(name='fusion_trimask_l1_loss_mul')([trimask, l1])
    # return K.mean(weighted_l1)
    return K.sum(weighted_l1) / K.sum(trimask)
Ejemplo n.º 24
0
    def create_CNN_model(self):

        input_shape = (self.stack_depth, self.image_height, self.image_width)
        actions_input = layers.Input((self.num_actions, ), name='action_mask')

        frames_input = layers.Input(input_shape, name='input_layer')
        conv_1 = layers.Conv2D(32, (8,8), strides=4, padding ='same'\
        ,activation = 'relu', name='conv_1',kernel_initializer='glorot_uniform',bias_initializer='zeros')(frames_input)

        conv_2 = layers.Conv2D(64, (4,4), strides=2, padding='same', activation='relu',name='conv_2'\
           ,kernel_initializer='glorot_uniform',bias_initializer='zeros')(conv_1)

        conv_3 = layers.Conv2D(64, (3,3), strides=1, padding='same',name='conv_3', activation='relu'\
           ,kernel_initializer='glorot_uniform',bias_initializer='zeros')(conv_2)

        flatten_1 = layers.Flatten()(conv_3)

        dense_1 = layers.Dense(512,
                               activation='relu',
                               name='dense_1',
                               kernel_initializer='glorot_uniform',
                               bias_initializer='zeros')(flatten_1)
        output = layers.Dense(self.num_actions,
                              activation='linear',
                              name='output',
                              kernel_initializer='glorot_uniform',
                              bias_initializer='zeros')(dense_1)
        masked_output = layers.Multiply(name='masked_output')(
            [output, actions_input])

        model = Model(input=[frames_input, actions_input],
                      output=[masked_output])
        optimizer = optimizers.Adam(lr=self.learning_rate)
        model.compile(optimizer, loss=tf.losses.huber_loss)
        return model
Ejemplo n.º 25
0
def agent_model():
    frame_input  = layers.Input(shape=OBSERV_SPACE , name="frame")
    action_input = layers.Input(shape=(ACTION_SPACE , ) , name="action")

    if env_type == "3D":
        normalized = layers.Lambda(lambda x: x , name='normalization')(frame_input)
        conv_1 = layers.Conv2D(16 , (8 , 8) , strides=(4 , 4) , activation="relu" , kernel_initializer='random_uniform' ,bias_initializer='random_uniform'  )(normalized)
        conv_2 = layers.Conv2D(32 , (4 , 4) , strides=(2 , 2) , activation="relu" , kernel_initializer='random_uniform' ,bias_initializer='random_uniform'  )(conv_1)
        flatten = layers.Flatten()(conv_2)
        dense_1 = layers.Dense(256, activation="relu" ,kernel_initializer='random_uniform' ,bias_initializer='random_uniform'  )(flatten)
    elif env_type == "2D":
        flatten = layers.Flatten()(frame_input)
        normalized = layers.Lambda(lambda x: x / 255.0, name='normalization')(flatten)
        dense_1_c = layers.Dense(256, activation="relu" , kernel_initializer='random_uniform' ,bias_initializer='random_uniform' )(normalized)
        dense_1 = layers.Dense(256, activation="relu" , kernel_initializer='random_uniform' ,bias_initializer='random_uniform' )(dense_1_c)
    else:
        print("Exception please set enviournment type like '3D' , '2D' ")
        exit()
    
    out_1 = layers.Dense(ACTION_SPACE)(dense_1)

    mult_output = layers.Multiply(name = "Q_val")([out_1 , action_input])

    model = Model(inputs=[frame_input , action_input] , outputs= mult_output)

    optimizer = RMSprop(lr=learning_rate, rho=0.95, epsilon=0.01)
    # optimizer = Adam(learning_rate=learning_rate)
    # optimizer = SGD(learning_rate=learning_rate)

    model.compile(optimizer , loss="mse")

    return model
Ejemplo n.º 26
0
    def block(inputs):
        x = inputs
        x = layers.Lambda(
            lambda a: K.mean(a, axis=spatial_dims, keepdims=True))(x)
        x = layers.Conv2D(num_reduced_filters,
                          kernel_size=[1, 1],
                          strides=[1, 1],
                          kernel_initializer=conv_kernel_initializer,
                          padding='same',
                          name=block_name + 'se_reduce_conv2d',
                          use_bias=True)(x)

        x = Swish(name=block_name + 'se_swish')(x)

        x = layers.Conv2D(filters,
                          kernel_size=[1, 1],
                          strides=[1, 1],
                          kernel_initializer=conv_kernel_initializer,
                          padding='same',
                          name=block_name + 'se_expand_conv2d',
                          use_bias=True)(x)

        x = layers.Activation('sigmoid')(x)
        out = layers.Multiply()([x, inputs])
        return out
Ejemplo n.º 27
0
def channel_squeeze_excite_block(input, ratio=0.25):
    init = input
    channel_axis = 1 if K.image_data_format() == "channels_first" else -1
    filters = init._keras_shape[channel_axis]
    cse_shape = (1, 1, filters)

    cse = layers.GlobalAveragePooling2D()(init)
    cse = layers.Reshape(cse_shape)(cse)
    ratio_filters = int(np.round(filters * ratio))
    if ratio_filters < 1:
        ratio_filters += 1
    cse = layers.Conv2D(ratio_filters, (1, 1),
                        padding='same',
                        activation='relu',
                        kernel_initializer='he_normal',
                        use_bias=False)(cse)
    cse = layers.BatchNormalization()(cse)
    cse = layers.Conv2D(filters, (1, 1),
                        activation='sigmoid',
                        kernel_initializer='he_normal',
                        use_bias=False)(cse)

    if K.image_data_format() == 'channels_first':
        cse = layers.Permute((3, 1, 2))(cse)

    cse = layers.Multiply()([init, cse])
    return cse
Ejemplo n.º 28
0
def atari_model():
    # С помощью функционального API нам нужно определить входные данные.
    frames_input = layers.Input(ATARI_SHAPE, name='frames')
    actions_input = layers.Input((ACTION_SIZE, ), name='action_mask')

    #  входные кадры все еще закодированы от 0 до 255. Преобразование в [0, 1].
    normalized = layers.Lambda(lambda x: x / 255.0,
                               name='normalization')(frames_input)

    conv_1 = layers.convolutional.Conv2D(16, (8, 8),
                                         strides=(4, 4),
                                         activation='relu')(normalized)

    conv_2 = layers.convolutional.Conv2D(32, (4, 4),
                                         strides=(2, 2),
                                         activation='relu')(conv_1)
    conv_flattened = layers.core.Flatten()(conv_2)
    hidden = layers.Dense(256, activation='relu')(conv_flattened)
    output = layers.Dense(ACTION_SIZE)(hidden)
    filtered_output = layers.Multiply(name='QValue')([output, actions_input])

    model = Model(inputs=[frames_input, actions_input],
                  outputs=filtered_output)
    model.summary()
    optimizer = RMSprop(lr=FLAGS.learning_rate, rho=0.95, epsilon=0.01)
    model.compile(optimizer, loss=huber_loss)
    return model
def SqueezeExcitation(in_block, ch, ratio=10):

    x = layers.GlobalAveragePooling3D()(in_block)
    x = layers.Dense(ch//ratio, activation='relu')(x)
    x = layers.Dense(ch, activation='sigmoid')(x)

    return layers.Multiply()([in_block, x])
Ejemplo n.º 30
0
def get_model():
    char_action = layers.Input(shape=[2])
    char_action_r = layers.RepeatVector(30)(char_action)

    position = layers.Input(shape=[6])
    position_r = layers.RepeatVector(30)(position)

    # enemy_key = layers.Input(shape=[30, 45])
    # enemy_key_a = attention_3d_block(enemy_key)

    # my_key = layers.Input(shape=[30, 45])
    # my_key_a = attention_3d_block(my_key)
    concat = layers.Concatenate()([char_action_r, position_r])
    gate = layers.Dense(8, activation="sigmoid")(concat)
    concat = layers.Multiply()([gate, concat])
    '''flatten = layers.Flatten()(concat)
    dense = layers.Dense(128, activation="tanh")(flatten)
    c = layers.Dense(128, activation="tanh")(dense)
    c = layers.Dense(128, activation="tanh")(c)'''
    first = conv1d_block(32, 5, padding='causal', activation='tanh')(concat)
    A, B = wavenet_block(32, 2, 1)(first)
    skip_connections = [B]
    for i in range(1, 12):
        A, B = wavenet_block(32, 3, 2**(i % 3))(A)
        skip_connections.append(B)
    net = layers.Add()(skip_connections)
    net = layers.LeakyReLU()(net)
    net = conv1d_block(16, 1)(net)
    net = layers.LeakyReLU()(net)
    c = layers.Flatten()(net)
    dense_category = layers.Dense(45, activation='softmax')(c)
    return keras.models.Model(inputs=[char_action, position],
                              outputs=[dense_category],
                              name="TH123AI")