Exemplo n.º 1
0
def Linear(data,
           num_filter=1,
           kernel=(1, 1),
           stride=(1, 1),
           pad=(0, 0),
           num_group=1,
           name=None,
           suffix=''):
    conv = sym.Convolution(data=data,
                           num_filter=num_filter,
                           kernel=kernel,
                           num_group=num_group,
                           stride=stride,
                           pad=pad,
                           no_bias=True,
                           name='%s%s_conv2d' % (name, suffix))
    bn = sym.BatchNorm(data=conv,
                       name='%s%s_batchnorm' % (name, suffix),
                       fix_gamma=False,
                       momentum=config.bn_mom)
    return bn
Exemplo n.º 2
0
def ConvFactory(data,
                num_filter,
                kernel,
                stride=(1, 1),
                pad=(0, 0),
                name=None,
                suffix='',
                attr={}):
    conv = mxy.Convolution(data=data,
                           num_filter=num_filter,
                           kernel=kernel,
                           stride=stride,
                           pad=pad,
                           name='conv_%s%s' % (name, suffix))
    bn = mxy.BatchNorm(data=conv,
                       fix_gamma=fix_gamma,
                       eps=eps,
                       momentum=bn_mom,
                       name='bn_%s%s' % (name, suffix))
    act = mxy.Activation(data=bn,
                         act_type='relu',
                         name='relu_%s%s' % (name, suffix),
                         attr=attr)
    return act
Exemplo n.º 3
0
 def conv_bn_relu_pool_siamese(input_a,
                               input_b,
                               kernel,
                               num_filter,
                               pad,
                               stride,
                               name_postfix,
                               use_pooling=False,
                               p_kernel=None,
                               p_stride=None,
                               use_batch_norm=True):
     conv_weight = mxs.Variable(name='conv' + name_postfix + '_weight')
     conv_bias = mxs.Variable(name='conv' + name_postfix + '_bias')
     conv_a = mxs.Convolution(data=input_a,
                              kernel=kernel,
                              num_filter=num_filter,
                              pad=pad,
                              stride=stride,
                              name='conv' + name_postfix + "_a",
                              weight=conv_weight,
                              bias=conv_bias)
     conv_b = mxs.Convolution(data=input_b,
                              kernel=kernel,
                              num_filter=num_filter,
                              pad=pad,
                              stride=stride,
                              name='conv' + name_postfix + "_b",
                              weight=conv_weight,
                              bias=conv_bias)
     if use_batch_norm:
         bn_gamma = mxs.Variable(name='bn' + name_postfix + '_gamma')
         bn_beta = mxs.Variable(name='bn' + name_postfix + '_beta')
         bn_moving_mean = mxs.Variable(name='bn' + name_postfix +
                                       '_moving_mean')
         bn_moving_var = mxs.Variable(name='bn' + name_postfix +
                                      '_moving_var')
         batch_norm_a = mxs.BatchNorm(data=conv_a,
                                      name='bn' + name_postfix + '_a',
                                      gamma=bn_gamma,
                                      beta=bn_beta,
                                      moving_mean=bn_moving_mean,
                                      moving_var=bn_moving_var)
         batch_norm_b = mxs.BatchNorm(data=conv_b,
                                      name='bn' + name_postfix + '_b',
                                      gamma=bn_gamma,
                                      beta=bn_beta,
                                      moving_mean=bn_moving_mean,
                                      moving_var=bn_moving_var)
     else:
         batch_norm_a = conv_a
         batch_norm_b = conv_b
     relu_a = mxs.relu(data=batch_norm_a, name='relu' + name_postfix + '_a')
     relu_b = mxs.relu(data=batch_norm_b, name='relu' + name_postfix + '_b')
     if use_pooling:
         out_a = mxs.Pooling(data=relu_a,
                             kernel=p_kernel,
                             pool_type='max',
                             stride=p_stride,
                             name='pool' + name_postfix + '_a')
         out_b = mxs.Pooling(data=relu_b,
                             kernel=p_kernel,
                             pool_type='max',
                             stride=p_stride,
                             name='pool' + name_postfix + '_b')
     else:
         out_a = relu_a
         out_b = relu_b
     return out_a, out_b
Exemplo n.º 4
0
def siamese_simp_net():
    def conv_bn_relu_pool_siamese(input_a,
                                  input_b,
                                  kernel,
                                  num_filter,
                                  pad,
                                  stride,
                                  name_postfix,
                                  use_pooling=False,
                                  p_kernel=None,
                                  p_stride=None,
                                  use_batch_norm=True):
        conv_weight = mxs.Variable(name='conv' + name_postfix + '_weight')
        conv_bias = mxs.Variable(name='conv' + name_postfix + '_bias')
        conv_a = mxs.Convolution(data=input_a,
                                 kernel=kernel,
                                 num_filter=num_filter,
                                 pad=pad,
                                 stride=stride,
                                 name='conv' + name_postfix + "_a",
                                 weight=conv_weight,
                                 bias=conv_bias)
        conv_b = mxs.Convolution(data=input_b,
                                 kernel=kernel,
                                 num_filter=num_filter,
                                 pad=pad,
                                 stride=stride,
                                 name='conv' + name_postfix + "_b",
                                 weight=conv_weight,
                                 bias=conv_bias)
        if use_batch_norm:
            bn_gamma = mxs.Variable(name='bn' + name_postfix + '_gamma')
            bn_beta = mxs.Variable(name='bn' + name_postfix + '_beta')
            bn_moving_mean = mxs.Variable(name='bn' + name_postfix +
                                          '_moving_mean')
            bn_moving_var = mxs.Variable(name='bn' + name_postfix +
                                         '_moving_var')
            batch_norm_a = mxs.BatchNorm(data=conv_a,
                                         name='bn' + name_postfix + '_a',
                                         gamma=bn_gamma,
                                         beta=bn_beta,
                                         moving_mean=bn_moving_mean,
                                         moving_var=bn_moving_var)
            batch_norm_b = mxs.BatchNorm(data=conv_b,
                                         name='bn' + name_postfix + '_b',
                                         gamma=bn_gamma,
                                         beta=bn_beta,
                                         moving_mean=bn_moving_mean,
                                         moving_var=bn_moving_var)
        else:
            batch_norm_a = conv_a
            batch_norm_b = conv_b
        relu_a = mxs.relu(data=batch_norm_a, name='relu' + name_postfix + '_a')
        relu_b = mxs.relu(data=batch_norm_b, name='relu' + name_postfix + '_b')
        if use_pooling:
            out_a = mxs.Pooling(data=relu_a,
                                kernel=p_kernel,
                                pool_type='max',
                                stride=p_stride,
                                name='pool' + name_postfix + '_a')
            out_b = mxs.Pooling(data=relu_b,
                                kernel=p_kernel,
                                pool_type='max',
                                stride=p_stride,
                                name='pool' + name_postfix + '_b')
        else:
            out_a = relu_a
            out_b = relu_b
        return out_a, out_b

    data_a = mxs.Variable('data_a')
    data_b = mxs.Variable('data_b')
    c1_a, c1_b = conv_bn_relu_pool_siamese(data_a,
                                           data_b,
                                           kernel=(3, 3),
                                           num_filter=64,
                                           pad=(1, 1),
                                           stride=(1, 1),
                                           name_postfix='1',
                                           use_pooling=False)
    c1_0_a, c1_0_b = conv_bn_relu_pool_siamese(c1_a,
                                               c1_b,
                                               kernel=(3, 3),
                                               num_filter=32,
                                               pad=(1, 1),
                                               stride=(1, 1),
                                               name_postfix='1_0',
                                               use_pooling=False)
    c2_a, c2_b = conv_bn_relu_pool_siamese(c1_0_a,
                                           c1_0_b,
                                           kernel=(3, 3),
                                           num_filter=32,
                                           pad=(1, 1),
                                           stride=(1, 1),
                                           name_postfix='2',
                                           use_pooling=False)
    c2_1_a, c2_1_b = conv_bn_relu_pool_siamese(c2_a,
                                               c2_b,
                                               kernel=(3, 3),
                                               num_filter=32,
                                               pad=(1, 1),
                                               stride=(1, 1),
                                               name_postfix='2_1',
                                               use_pooling=True,
                                               p_kernel=(2, 2),
                                               p_stride=(2, 2))
    c2_2_a, c2_2_b = conv_bn_relu_pool_siamese(c2_1_a,
                                               c2_1_b,
                                               kernel=(3, 3),
                                               num_filter=32,
                                               pad=(1, 1),
                                               stride=(1, 1),
                                               name_postfix='2_2',
                                               use_pooling=False)
    c3_a, c3_b = conv_bn_relu_pool_siamese(c2_2_a,
                                           c2_2_b,
                                           kernel=(3, 3),
                                           num_filter=32,
                                           pad=(1, 1),
                                           stride=(1, 1),
                                           name_postfix='3',
                                           use_pooling=False)
    # conv4
    conv4_weight = mxs.Variable(name='conv4_weight')
    conv4_bias = mxs.Variable(name='conv4_bias')
    conv4_a = mxs.Convolution(data=c3_a,
                              kernel=(3, 3),
                              num_filter=64,
                              pad=(1, 1),
                              stride=(1, 1),
                              name='conv4_a',
                              weight=conv4_weight,
                              bias=conv4_bias)  # xavier
    conv4_b = mxs.Convolution(data=c3_b,
                              kernel=(3, 3),
                              num_filter=64,
                              pad=(1, 1),
                              stride=(1, 1),
                              name='conv4_b',
                              weight=conv4_weight,
                              bias=conv4_bias)  # xavier
    maxp4_a = mxs.Pooling(data=conv4_a,
                          kernel=(2, 2),
                          pool_type='max',
                          stride=(2, 2),
                          name='pool4_a')
    maxp4_b = mxs.Pooling(data=conv4_b,
                          kernel=(2, 2),
                          pool_type='max',
                          stride=(2, 2),
                          name='pool4_b')
    bn4_gamma = mxs.Variable(name='bn4_gamma')
    bn4_beta = mxs.Variable(name='bn4_beta')
    bn4_moving_mean = mxs.Variable(name='bn4_moving_mean')
    bn4_moving_var = mxs.Variable(name='bn4_moving_var')
    batch_norm_4_a = mxs.BatchNorm(data=maxp4_a,
                                   name='bn4_a',
                                   gamma=bn4_gamma,
                                   beta=bn4_beta,
                                   moving_mean=bn4_moving_mean,
                                   moving_var=bn4_moving_var)
    batch_norm_4_b = mxs.BatchNorm(data=maxp4_b,
                                   name='bn4_b',
                                   gamma=bn4_gamma,
                                   beta=bn4_beta,
                                   moving_mean=bn4_moving_mean,
                                   moving_var=bn4_moving_var)
    relu4_a = mxs.relu(data=batch_norm_4_a, name='relu4')
    relu4_b = mxs.relu(data=batch_norm_4_b, name='relu4')
    c4_1_a, c4_1_b = conv_bn_relu_pool_siamese(relu4_a,
                                               relu4_b,
                                               kernel=(3, 3),
                                               num_filter=64,
                                               pad=(1, 1),
                                               stride=(1, 1),
                                               name_postfix='4_1',
                                               use_pooling=False)
    c4_2_a, c4_2_b = conv_bn_relu_pool_siamese(c4_1_a,
                                               c4_1_b,
                                               kernel=(3, 3),
                                               num_filter=64,
                                               pad=(1, 1),
                                               stride=(1, 1),
                                               name_postfix='4_2',
                                               use_pooling=True,
                                               p_kernel=(2, 2),
                                               p_stride=(2, 2))
    c4_0_a, c4_0_b = conv_bn_relu_pool_siamese(c4_2_a,
                                               c4_2_b,
                                               kernel=(3, 3),
                                               num_filter=128,
                                               pad=(1, 1),
                                               stride=(1, 1),
                                               name_postfix='4_0',
                                               use_pooling=False)
    cccp4_a, cccp4_b = conv_bn_relu_pool_siamese(c4_0_a,
                                                 c4_0_b,
                                                 kernel=(1, 1),
                                                 num_filter=256,
                                                 pad=[],
                                                 stride=(1, 1),
                                                 name_postfix='_cccp4',
                                                 use_pooling=False,
                                                 use_batch_norm=False)
    cccp5_a, cccp5_b = conv_bn_relu_pool_siamese(cccp4_a,
                                                 cccp4_b,
                                                 kernel=(1, 1),
                                                 num_filter=64,
                                                 pad=[],
                                                 stride=(1, 1),
                                                 name_postfix='_cccp5',
                                                 use_pooling=True,
                                                 p_kernel=(2, 2),
                                                 p_stride=(2, 2),
                                                 use_batch_norm=False)
    cccp6_a, cccp6_b = conv_bn_relu_pool_siamese(cccp5_a,
                                                 cccp5_b,
                                                 kernel=(3, 3),
                                                 num_filter=64,
                                                 pad=(2, 2),
                                                 stride=(1, 1),
                                                 name_postfix='_cccp6',
                                                 use_pooling=False,
                                                 use_batch_norm=False)
    flat_a = mxs.flatten(cccp6_a)
    flat_b = mxs.flatten(cccp6_b)
    return flat_a, flat_b