Ejemplo n.º 1
0
def resnet(input_data, num_layer):
    if num_layer == 18:
        restnet = ResNet18() 
    if num_layer == 34:
        restnet = ResNet34() 
    if num_layer == 50:
        restnet = ResNet50()  
    if num_layer == 101:
        restnet = ResNet101()
    if num_layer == 152:
        restnet = ResNet152()

    output_resnet = restnet.call(input_data, training=True)
    
    route_1 = common.convolutional(output_resnet, (3, 3, 2048, 256), downsample=False)

    for _ in range(8):
        route_1 = common.residual_block(route_1, 256, 128, 256)

    route_2 = common.convolutional(output_resnet, (3, 3, 2048, 512), downsample=True)

    for _ in range(8):
        route_2 = common.residual_block(route_2, 512, 256, 512)

    route_3 = common.convolutional(route_2, (3, 3, 512, 1024), downsample=True)

    for _ in range(4):
        route_3 = common.residual_block(route_3, 1024, 512, 1024)

    return route_1, route_2, route_3
Ejemplo n.º 2
0
def YOLOv4_more_tiny(input_layer, NUM_CLASS):
    route_1, conv = backbone.cspdarknet53_tiny(input_layer)

    conv = common.convolutional(conv, (1, 1, 512, 256))

    conv = common.convolutional(conv, (3, 3, 256, 512))

    conv_mbbox = common.convolutional(conv, (1, 1, 512, 3 * (NUM_CLASS + 5)), activate=False, bn=False)  #256

    return [conv_mbbox]
Ejemplo n.º 3
0
def darknet19(input_data, trainable):

    with tf.variable_scope('darknet'):

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 3, 16), trainable=self.trainable,name='conv0')
        input_data = common.max_pooling_2d(input_data,ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], data_format=self.data_format,name='max1')
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 16, 32), trainable=self.trainable,name='conv2')
        input_data = common.max_pooling_2d(input_data, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],data_format=self.data_format,name='max3')
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 32, 64), trainable=self.trainable,name='conv4')
        input_data = common.max_pooling_2d(input_data, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],data_format=self.data_format,name='max5')
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 64, 128), trainable=self.trainable,name='conv6')
        input_data = common.max_pooling_2d(input_data, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],data_format=self.data_format,name='max7')

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 128, 256), trainable=self.trainable,name='conv8')
        route_8_layer = input_data
        input_data = common.max_pooling_2d(input_data, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],data_format=self.data_format,name='max9')

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 256, 512), trainable=self.trainable,name='conv10')
        input_data = common.max_pooling_2d(input_data, ksize=[1, 2, 2, 1], strides=[1, 1, 1, 1],data_format=self.data_format,name='max11')

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 512, 1024), trainable=self.trainable,name='conv12')
        input_data = common.convolutional(input_data, filters_shape=(1, 1, 1024, 256), trainable=self.trainable,name='conv13')
        route_13_layer = input_data

        return route_8_layer, route_13_layer, input_data
Ejemplo n.º 4
0
    def __build_nework(self, input_data):

        route_8_layer, route_13_layer, input_data = backbone.darknet19(
            input_data, self.trainable)

        with tf.variable_scope('yolo1'):
            conv_lobj_branch = common.convolutional(input_data,
                                                    (3, 3, 256, 512),
                                                    self.trainable,
                                                    name='conv_lobj_branch')
            conv_lbbox = common.convolutional(
                conv_lobj_branch, (1, 1, 512, 3 * (self.num_class + 5)),
                trainable=self.trainable,
                name='conv_lbbox',
                activate=False,
                bn=False)

        with tf.variable_scope('route_1'):
            input_data = route_13_layer

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 256, 128),
                                          trainable=self.trainable,
                                          name='conv18')
        input_data = common.upsample(input_data,
                                     method=self.upsample_method,
                                     name='upsample19')

        with tf.variable_scope('route_2'):
            input_data = tf.concat([input_data, route_8_layer],
                                   axis=-1,
                                   name='route20')

        with tf.variable_scope('yolo2'):
            conv_mobj_branch = common.convolutional(input_data,
                                                    filters_shape=(1, 1, 384,
                                                                   256),
                                                    trainable=self.trainable,
                                                    name='conv21')
            conv_mbbox = common.convolutional(
                conv_mobj_branch,
                filters_shape=(1, 1, 256, 3 * (self.num_class + 5)),
                trainable=self.trainable,
                name='conv22',
                activate=False,
                bn=False)

        return conv_lbbox, conv_mbbox
Ejemplo n.º 5
0
 def conv_wrapper(input_data):
     with tf.variable_scope(scope_name):
         input_data = common.convolutional(input_data, filters_shape,
                                           trainable, use_gn, name,
                                           precision, downsample, activate,
                                           norm, weight_centering)
         return {"input_data": input_data}
Ejemplo n.º 6
0
 def head_3_wrapper(conv_sobj_branch):
     conv_sbbox = common.convolutional(
         conv_sobj_branch, (1, 1, 256, 3 * (self.num_class + 5)),
         trainable=self.trainable,
         use_gn=self.upsample_gn,
         name="conv_sbbox",
         activate=False,
         norm=False,
         weight_centering=self.use_centering,
         precision=self.precision)
     return {"conv_sbbox": conv_sbbox}
Ejemplo n.º 7
0
def darknet53(input_data, trainable):

    with tf.variable_scope('darknet'):

        input_data = common.convolutional(input_data, filters_shape=(3, 3,  3,  12), trainable=trainable, name='conv0')
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 12,  24),
                                          trainable=trainable, name='conv1', downsample=True)
        #print(input_data.shape)
        input_data=common.PEP(input_data,24,24,7,name='PEP0',stride=1)
        input_data=common.EP(input_data,24,70,name='EP0',stride=2)
        input_data=common.PEP(input_data,70,70,25,name='PEP1',stride=1)
        input_data=common.PEP(input_data,70,70,24,name='PEP2',stride=1)
        input_data=common.EP(input_data,70,150,name='EP1',stride=2)
        input_data=common.PEP(input_data,150,150,56,name='PEP3',stride=1)
		
        input_data = common.convolutional(input_data, filters_shape=(1, 1,  150,  150), trainable=trainable, name='conv2')
        input_data=common.FCA(input_data,150,8)
        input_data=common.PEP(input_data,150,150,73,name='PEP4',stride=1)
        input_data=common.PEP(input_data,150,150,71,name='PEP5',stride=1)
        input_data=common.PEP(input_data,150,150,75,name='PEP6',stride=1)
        route_1=input_data
		
        input_data=common.EP(input_data,150,325,name='EP2',stride=2)
        input_data=common.PEP(input_data,325,325,132,name='PEP7',stride=1)
        input_data=common.PEP(input_data,325,325,124,name='PEP8',stride=1)
        input_data=common.PEP(input_data,325,325,141,name='PEP9',stride=1)
        input_data=common.PEP(input_data,325,325,140,name='PEP10',stride=1)
        input_data=common.PEP(input_data,325,325,137,name='PEP11',stride=1)
        input_data=common.PEP(input_data,325,325,135,name='PEP12',stride=1)
        input_data=common.PEP(input_data,325,325,133,name='PEP13',stride=1)
        input_data=common.PEP(input_data,325,325,140,name='PEP14',stride=1)
        route_2=input_data
		
        input_data=common.EP(input_data,325,545,name='EP3',stride=2)
        input_data=common.PEP(input_data,545,545,276,name='PEP15',stride=1)
        input_data = common.convolutional(input_data, filters_shape=(1, 1,  545,  230), trainable=trainable, name='conv3')
        input_data=common.EP(input_data,230,489,name='EP4',stride=1)
        input_data=common.PEP(input_data,489,469,213,name='PEP16',stride=1)
        input_data = common.convolutional(input_data, filters_shape=(1, 1,  469,  189), trainable=trainable, name='conv4')
		
        return route_1, route_2, input_data
Ejemplo n.º 8
0
def darknet53(input_data):
    '''
    input_data是3通道的
    output_data是1024通道的
    '''
    x = common.convolutional(input_data, (3, 3, 3, 32))
    x = common.convolutional(x, (3, 3, 32, 64), downsample='True')

    for i in range(1):
        x = common.residual_block(x, 64, 32, 64)

    x = common.convolutional(x, (3, 3, 64, 128), downsample='True')

    for i in range(2):
        x = common.residual_block(x, 128, 64, 128)

    x = common.convolutional(x, (3, 3, 128, 256), downsample='True')

    for i in range(8):
        x = common.residual_block(x, 256, 128, 256)

    route_1 = x
    x = common.convolutional(x, (3, 3, 256, 512), downsample='True')

    for i in range(8):
        x = common.residual_block(x, 512, 256, 512)

    route_2 = x
    output_data = common.convolutional(x, (3, 3, 512, 1024), downsample='True')

    return route_1, route_2, output_data
Ejemplo n.º 9
0
def darknet53(input_data):

    input_data = common.convolutional(input_data, (3, 3, 3, 32))
    input_data = common.convolutional(input_data, (3, 3, 32, 64),
                                      downsample=True)

    for i in range(1):
        input_data = common.residual_block(input_data, 64, 32, 64)

    input_data = common.convolutional(input_data, (3, 3, 64, 128),
                                      downsample=True)

    for i in range(2):
        input_data = common.residual_block(input_data, 128, 64, 128)

    input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                      downsample=True)

    for i in range(8):
        input_data = common.residual_block(input_data, 256, 128, 256)

    route_1 = input_data
    input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                      downsample=True)

    for i in range(8):
        input_data = common.residual_block(input_data, 512, 256, 512)

    route_2 = input_data
    input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                      downsample=True)
    for i in range(4):
        input_data = common.residual_block(input_data, 1024, 512, 1024)

    return route_1, route_2, input_data
Ejemplo n.º 10
0
 def residual_layer1_wrapper(input_data):
     with tf.variable_scope(scope_name):
         with tf.variable_scope(name):
             short_cut = input_data
             input_data = common.convolutional(input_data,
                                               filters_shape=(1, 1,
                                                              input_channel,
                                                              filter_num1),
                                               trainable=trainable,
                                               use_gn=use_gn,
                                               name='conv1',
                                               precision=precision)
             return {'short_cut': short_cut, 'input_data': input_data}
Ejemplo n.º 11
0
def PPNet(input_image, num_csp_blocks=1, num_dense_blocks=2, growth_rate=4,fc_activation='leaky', conv_activation='leaky', init_num_fms=32, final_num_fms=64, fc_dropout=0.5, conv_dropout=0.5, use_downsample=True):
    #Warm-up convolution: (H x W x 1 -> H x W x init_num_fms)
    conv = common.convolutional(input_image, (3,3,input_image.shape[-1],init_num_fms))

    #pass through multiple csp blocks:
    # H X W X init_num_fms -> H/(2^num_csp_blocks) x W/(2^num_csp_blocks) x (init_num_fm + num_csp_blocks*num_denseblocks*growth_rate)
    for i in range(num_csp_blocks):
        #Pass through a csp blocks: H x W x num_fm -> H x W x (num_fm + num_dense*growth_rate)
        num_fm = conv.shape[-1]
        conv = common.csp_block(conv, num_fm, growth_rate, num_dense_blocks, conv_activation, conv_dropout)
        #Downsampling: H x W -> H//2 x W//2
        num_fm = conv.shape[-1]
        conv = common.convolutional(conv, (3,3, num_fm, num_fm), use_downsample)

    #Final convolution to reduce number of feature maps > H x W x final_num_fms
    conv = common.convolutional(conv, (1,1,conv.shape[-1], final_num_fms))
    image_output = keras.layers.Flatten()(conv)
    #Fully connected for regression
    net_output = common.fully_connected(image_output, units=16, activate_type=fc_activation, dropout=fc_dropout)
    net_output = common.fully_connected(net_output, units=3, activate=False)

    return net_output
Ejemplo n.º 12
0
def MobilenetV2(input_data, trainable):
    with tf.variable_scope('MobilenetV2'):
        conv = common.convolutional(name='Conv', input_data=input_data, filters_shape=(3, 3, 3, 32),
                             trainable=trainable, downsample=True, activate=True, bn=True)
        conv = common.inverted_residual(name='expanded_conv', input_data=conv, input_c=32, output_c=16,
                                 trainable=trainable, t=1)

        conv = common.inverted_residual(name='expanded_conv_1', input_data=conv, input_c=16, output_c=24, downsample=True,
                                 trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_2', input_data=conv, input_c=24, output_c=24, trainable=trainable)

        conv = common.inverted_residual(name='expanded_conv_3', input_data=conv, input_c=24, output_c=32, downsample=True,
                                 trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_4', input_data=conv, input_c=32, output_c=32, trainable=trainable)
        feature_map_s = common.inverted_residual(name='expanded_conv_5', input_data=conv, input_c=32, output_c=32,
                                          trainable=trainable)

        conv = common.inverted_residual(name='expanded_conv_6', input_data=feature_map_s, input_c=32, output_c=64,
                                 downsample=True, trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_7', input_data=conv, input_c=64, output_c=64, trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_8', input_data=conv, input_c=64, output_c=64, trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_9', input_data=conv, input_c=64, output_c=64, trainable=trainable)

        conv = common.inverted_residual(name='expanded_conv_10', input_data=conv, input_c=64, output_c=96, trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_11', input_data=conv, input_c=96, output_c=96, trainable=trainable)
        feature_map_m = common.inverted_residual(name='expanded_conv_12', input_data=conv, input_c=96, output_c=96,
                                          trainable=trainable)

        conv = common.inverted_residual(name='expanded_conv_13', input_data=feature_map_m, input_c=96, output_c=160,
                                 downsample=True, trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_14', input_data=conv, input_c=160, output_c=160, trainable=trainable)
        conv = common.inverted_residual(name='expanded_conv_15', input_data=conv, input_c=160, output_c=160, trainable=trainable)

        conv = common.inverted_residual(name='expanded_conv_16', input_data=conv, input_c=160, output_c=320, trainable=trainable)

        feature_map_l = common.convolutional(name='Conv_1', input_data=conv, filters_shape=(1, 1, 320, 1280),
                                      trainable=trainable, downsample=False, activate=True, bn=True)
    return feature_map_s, feature_map_m, feature_map_l
Ejemplo n.º 13
0
 def residual_layer2_wrapper(short_cut, input_data):
     with tf.variable_scope(scope_name):
         with tf.variable_scope(name):
             input_data = common.convolutional(input_data,
                                               filters_shape=(3, 3,
                                                              filter_num1,
                                                              filter_num2),
                                               trainable=trainable,
                                               use_gn=use_gn,
                                               name='conv2',
                                               precision=precision)
             input_data = input_data + short_cut
             # "short_cut" won't be used in the following functions
             # set short_cut to None means this value will be removed from stage function's output
             return {'short_cut': None, 'input_data': input_data}
Ejemplo n.º 14
0
def darknet53(input_data, trainable):

    with tf.variable_scope('darknet'):
        #filters_shape=(3, 3,  3,  32),前2个3代表卷积核大小,第三个3代表输入图像的通道数数,此处为RGB,32是输出的通道数
        input_data = common.convolutional(input_data, filters_shape=(3, 3,  3,  32), trainable=trainable, name='conv0')
        #conv0 416*416*3 ---- 416*416*32
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 32,  64),
                                          trainable=trainable, name='conv1', downsample=True)
        # conv1 416*416*32 ---- 208*208*64
        for i in range(1):
            input_data = common.residual_block(input_data,  64,  32, 64, trainable=trainable, name='residual%d' %(i+0))
        #residual 0 208*208*64---208*208*64
        input_data = common.convolutional(input_data, filters_shape=(3, 3,  64, 128),
                                          trainable=trainable, name='conv4', downsample=True)
        # conv4 208*208*64---104*104*128
        for i in range(2):
            input_data = common.residual_block(input_data, 128,  64, 128, trainable=trainable, name='residual%d' %(i+1))
        # residual 1 104*104*128---104*104*128
        # residual 2 104*104*128---104*104*128
        route_1 = input_data #4倍下采样的输出,104*104*128
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 128, 256),
                                          trainable=trainable, name='conv9', downsample=True)
        # conv9 104*104*128---52*52*256
        for i in range(8):
            input_data = common.residual_block(input_data, 256, 128, 256, trainable=trainable, name='residual%d' %(i+3))
        # residual 3 52*52*256---52*52*128
        # residual 4 52*52*128---52*52*256
        # residual 5 52*52*256---52*52*128
        # residual 6 52*52*128---52*52*256
        # residual 7 52*52*256---52*52*128
        # residual 8 52*52*128---52*52*256
        # residual 9 52*52*256---52*52*128
        # residual 10 52*52*128---52*52*256
        route_2 = input_data #用作后面的concat操作,是8倍下采样的输出52*52*256
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 256, 512),
                                          trainable=trainable, name='conv26', downsample=True)
        # conv26 52*52*256---26*26*512
        for i in range(8):
            input_data = common.residual_block(input_data, 512, 256, 512, trainable=trainable, name='residual%d' %(i+11))
        # residual 11 26*26*512---26*26*256
        # residual 12 26*26*256---26*26*512
        # residual 13 26*26*512---26*26*256
        # residual 14 26*26*256---26*26*512
        # residual 15 26*26*512---26*26*256
        # residual 16 26*26*256---26*26*512
        # residual 17 26*26*512---26*26*256
        # residual 18 26*26*256---26*26*512
        route_3 = input_data #16倍下采样的输出26*26*512
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 512, 1024),
                                          trainable=trainable, name='conv43', downsample=True)
        # conv43 26*26*512---13*13*1024
        for i in range(4):
            input_data = common.residual_block(input_data, 1024, 512, 1024, trainable=trainable, name='residual%d' %(i+19))
        # residual 19 13*13*1024---13*13*512
        # residual 20 13*13*512---13*13*1024
        return route_1, route_2, route_3, input_data
Ejemplo n.º 15
0
def darknet53(input_data, trainable):
    
    with tf.variable_scope('darknet'):
        
        output_data = common.convolutional(input_data, filter_shape=(3,3,32,32), 
                                           trainable=trainable, name='conv1')
        
        output_data = common.convolutional(output_data, filter_shape=(3,3,32,64),
                                           trainable=trainable, downsample=True, name='conv2')
        
        for i in range(1):
            output_data = common.residual_block(output_data, 64, 32, 64,
                                                trainable=trainable, name='residual%d'%(i+1))
            
        output_data = common.convolutional(output_data, filter_shape=(3,3,64,128),
                                           trainable=trainable, downsample=True, name='conv5')
        
        for i in range(2):
            
            output_data = common.residual_block(output_data, 128, 64, 128,
                                                trainable=trainable, name='residual%d'%(i+2))
            
        output_data = common.convolutional(output_data, filter_shape=(3,3,128,256),
                                           trainable=trainable, downsample=True, name='conv10')
        
        for i in range(8):
            
            output_data = common.residual_block(output_data, 256, 128, 256,
                                                trainable=trainable, name='residual%d'%(i+4))
            
        route_1 = output_data
        
        output_data = common.convolutional(output_data, filter_shape=(3,3,256,512),
                                           trainable=trainable, downsample=True, name='conv27')
        
        for i in range(8):
            
            output_data = common.residual_block(output_data, 512, 256, 512,
                                                trainable=trainable, name='residual%d'%(i+12))
            
        route_2=output_data
        
        output_data = common.convolutional(output_data, filter_shape=(3,3,512,1024),
                                           trainable=trainable, downsample=True, name='conv44')
        
        for i in range(4):
            output_data = common.residual_block(output_data, 1024, 512, 1024,
                                                trainable=trainable, name='residual%d'%(i+20))
            
    return route_1, route_2, output_data
        
            
Ejemplo n.º 16
0
def darknet53_tiny(input_data):
    input_data = common.convolutional(input_data, (3, 3, 3, 16))
    input_data = tf.keras.layers.MaxPool2D(2, 2, 'same')(input_data)
    input_data = common.convolutional(input_data, (3, 3, 16, 32))
    input_data = tf.keras.layers.MaxPool2D(2, 2, 'same')(input_data)
    input_data = common.convolutional(input_data, (3, 3, 32, 64))
    input_data = tf.keras.layers.MaxPool2D(2, 2, 'same')(input_data)
    input_data = common.convolutional(input_data, (3, 3, 64, 128))
    input_data = tf.keras.layers.MaxPool2D(2, 2, 'same')(input_data)
    input_data = common.convolutional(input_data, (3, 3, 128, 256))
    route_1 = input_data
    input_data = tf.keras.layers.MaxPool2D(2, 2, 'same')(input_data)
    input_data = common.convolutional(input_data, (3, 3, 256, 512))
    input_data = tf.keras.layers.MaxPool2D(2, 1, 'same')(input_data)
    input_data = common.convolutional(input_data, (3, 3, 512, 1024))

    return route_1, input_data
Ejemplo n.º 17
0
def YOLOv3_tiny(input_layer, NUM_CLASS):
    route_1, conv = backbone.darknet53_tiny(input_layer)

    conv = common.convolutional(conv, (1, 1, 1024, 256))

    conv_lobj_branch = common.convolutional(conv, (3, 3, 256, 512))
    conv_lbbox = common.convolutional(conv_lobj_branch, (1, 1, 512, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    conv = common.convolutional(conv, (1, 1, 256, 128))
    conv = common.upsample(conv)
    conv = tf.concat([conv, route_1], axis=-1)

    conv_mobj_branch = common.convolutional(conv, (3, 3, 128, 256))
    conv_mbbox = common.convolutional(conv_mobj_branch, (1, 1, 256, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    return [conv_mbbox, conv_lbbox]
Ejemplo n.º 18
0
def YOLOv4_custom(input_layer, NUM_CLASS):
    x = tf.keras.layers.Conv2D(32, 3, strides=2, padding='SAME')(input_layer)
    x = tf.keras.layers.BatchNormalization()(x)
    x = tf.keras.layers.LeakyReLU(alpha=0.1)(x)

    conv = common.convolutional(x, (3, 3, 32, 64), downsample=True)
    conv = common.convolutional(conv, (3, 3, 64, 64))

    route_1 = common.route_group(conv, 2, 1)

    conv = common.convolutional(conv, (3,3,32,32))
    conv = common.convolutional(conv, (3,3,32,32))

    route_1 = tf.concat([conv, route_1], axis=-1)

    conv = common.convolutional(conv, (3,3, 64,64))

    conv = tf.concat([conv, route_1], axis=-1)

    conv = common.convolutional(conv, (3,3,64,64))
Ejemplo n.º 19
0
def darknet53(input_data, trainable):
    with tf.variable_scope('darknet'):

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 3, 32), trainable=trainable, name='conv0')
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 32, 64),
                                          trainable=trainable, name='conv1', downsample=True)

        for i in range(1):
            input_data = common.residual_block(input_data, 64, 32, 64, trainable=trainable, name='residual%d' % (i + 0))

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 64, 128),
                                          trainable=trainable, name='conv4', downsample=True)

        for i in range(2):
            input_data = common.residual_block(input_data, 128, 64, 128, trainable=trainable,
                                               name='residual%d' % (i + 1))

        input_data = common.convolutional(input_data, filters_shape=(3, 3, 128, 256),
                                          trainable=trainable, name='conv9', downsample=True)

        for i in range(8):
            input_data = common.residual_block(input_data, 256, 128, 256, trainable=trainable,
                                               name='residual%d' % (i + 3))

        route_1 = input_data
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 256, 512),
                                          trainable=trainable, name='conv26', downsample=True)

        for i in range(8):
            input_data = common.residual_block(input_data, 512, 256, 512, trainable=trainable,
                                               name='residual%d' % (i + 11))

        route_2 = input_data
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 512, 1024),
                                          trainable=trainable, name='conv43', downsample=True)

        for i in range(4):
            input_data = common.residual_block(input_data, 1024, 512, 1024, trainable=trainable,
                                               name='residual%d' % (i + 19))

        return route_1, route_2, input_data
Ejemplo n.º 20
0
def plugmodel():
    sbbox = tf.keras.layers.Input(shape=(52, 52, 768))
    mbbox = tf.keras.layers.Input(shape=(26, 26, 1536))
    lbbox = tf.keras.layers.Input(shape=(13, 13, 3072))
    conv_spose = common.convolutional(sbbox, (1, 1, 256, 256))
    conv_spose = common.convolutional(conv_spose, (1, 1, 256, 3 * (NUM_POSES)),
                                      activate=False,
                                      bn=False)

    conv_mpose = common.convolutional(mbbox, (1, 1, 512, 512))
    conv_mpose = common.convolutional(conv_mpose, (1, 1, 512, 3 * (NUM_POSES)),
                                      activate=False,
                                      bn=False)

    conv_lpose = common.convolutional(lbbox, (1, 1, 255, 1024))
    conv_lpose = common.convolutional(conv_lpose, (1, 1, 1024, 3 * NUM_POSES),
                                      activate=False,
                                      bn=False)

    return Model(inputs=[sbbox, mbbox, lbbox],
                 outputs=[conv_spose, conv_mpose, conv_lpose])
Ejemplo n.º 21
0
def darknet53(input_data):
    '''
    If downsample=True, the feature map size will be decreased by a factor of 2.
    '''

    input_data = common.convolutional(input_data, (3, 3, 3, 32))
    input_data = common.convolutional(input_data, (3, 3, 32, 64),
                                      downsample=True)

    for i in range(1):
        input_data = common.residual_block(input_data, 64, 32, 64)

    input_data = common.convolutional(input_data, (3, 3, 64, 128),
                                      downsample=True)

    for i in range(2):
        input_data = common.residual_block(input_data, 128, 64, 128)

    input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                      downsample=True)

    for i in range(8):
        input_data = common.residual_block(input_data, 256, 128, 256)

    route_1 = input_data
    input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                      downsample=True)

    for i in range(8):
        input_data = common.residual_block(input_data, 512, 256, 512)

    route_2 = input_data
    input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                      downsample=True)

    for i in range(4):
        input_data = common.residual_block(input_data, 1024, 512, 1024)

    return route_1, route_2, input_data
Ejemplo n.º 22
0
def darknet53(input_data):
    """
    build backbone according to the paper
    """
    input_data = common.convolutional(input_data, filters_shape=(3, 3, 3, 32))
    input_data = common.convolutional(input_data,
                                      filters_shape=(3, 3, 32, 64),
                                      downsample=True)

    for _ in range(1):
        input_data = common.residual_block(input_data, 32, 64)
    input_data = common.convolutional(input_data,
                                      filters_shape=(3, 3, 64, 128),
                                      downsample=True)

    for _ in range(2):
        input_data = common.residual_block(input_data, 64, 128)
    input_data = common.convolutional(input_data,
                                      filters_shape=(3, 3, 128, 256),
                                      downsample=True)

    for _ in range(8):
        input_data = common.residual_block(input_data, 128, 256)
    route1 = input_data
    input_data = common.convolutional(input_data,
                                      filters_shape=(3, 3, 256, 512),
                                      downsample=True)

    for _ in range(8):
        input_data = common.residual_block(input_data, 256, 512)
    route2 = input_data
    input_data = common.convolutional(input_data,
                                      filters_shape=(3, 3, 512, 1024),
                                      downsample=True)

    for _ in range(4):
        input_data = common.residual_block(input_data, 512, 1024)

    return route1, route2, input_data
Ejemplo n.º 23
0
def darknet53(input_data):

    #conv2d Filters=32 Size=3x3 Strike=1
    input_data = common.convolutional(input_data, (3, 3,  3,  32)) # 256
    #conv2d Filters=64 Size=3x3 Strike=2
    input_data = common.convolutional(input_data, (3, 3, 32,  64), downsample=True) # 128

    # The first block residual
    for _ in range(1):
        input_data = common.residual_block(input_data,  64,  32, 64)

    input_data = common.convolutional(input_data, (3, 3,  64, 128), downsample=True) # 64

    for _ in range(2):
        input_data = common.residual_block(input_data, 128,  64, 128)

    input_data = common.convolutional(input_data, (3, 3, 128, 256), downsample=True) # 32

    for _ in range(8):
        input_data = common.residual_block(input_data, 256, 128, 256)

    route_1 = input_data # 256
    input_data = common.convolutional(input_data, (3, 3, 256, 512), downsample=True) # 16

    for _ in range(8):
        input_data = common.residual_block(input_data, 512, 256, 512)

    route_2 = input_data #512
    input_data = common.convolutional(input_data, (3, 3, 512, 1024), downsample=True) # 8

    for _ in range(4):
        input_data = common.residual_block(input_data, 1024, 512, 1024)

    print('route_1: ', route_1.shape)
    print('route_2: ', route_2.shape)
    print('input_data: ', input_data.shape)

    return route_1, route_2, input_data # 52 | 26 | 13
Ejemplo n.º 24
0
def YOLOv4(input_layer, NUM_CLASS):
    route_1, route_2, conv = backbone.cspdarknet53(input_layer)

    route = conv
    conv = common.convolutional(conv, (1, 1, 512, 256))
    conv = common.upsample(conv)
    route_2 = common.convolutional(route_2, (1, 1, 512, 256))
    conv = tf.concat([route_2, conv], axis=-1)

    conv = common.convolutional(conv, (1, 1, 512, 256))
    conv = common.convolutional(conv, (3, 3, 256, 512))
    conv = common.convolutional(conv, (1, 1, 512, 256))
    conv = common.convolutional(conv, (3, 3, 256, 512))
    conv = common.convolutional(conv, (1, 1, 512, 256))

    route_2 = conv
    conv = common.convolutional(conv, (1, 1, 256, 128))
    conv = common.upsample(conv)
    route_1 = common.convolutional(route_1, (1, 1, 256, 128))
    conv = tf.concat([route_1, conv], axis=-1)

    conv = common.convolutional(conv, (1, 1, 256, 128))
    conv = common.convolutional(conv, (3, 3, 128, 256))
    conv = common.convolutional(conv, (1, 1, 256, 128))
    conv = common.convolutional(conv, (3, 3, 128, 256))
    conv = common.convolutional(conv, (1, 1, 256, 128))

    route_1 = conv
    conv = common.convolutional(conv, (3, 3, 128, 256))
    conv_sbbox = common.convolutional(conv, (1, 1, 256, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    conv = common.convolutional(route_1, (3, 3, 128, 256), downsample=True)
    conv = tf.concat([conv, route_2], axis=-1)

    conv = common.convolutional(conv, (1, 1, 512, 256))
    conv = common.convolutional(conv, (3, 3, 256, 512))
    conv = common.convolutional(conv, (1, 1, 512, 256))
    conv = common.convolutional(conv, (3, 3, 256, 512))
    conv = common.convolutional(conv, (1, 1, 512, 256))

    route_2 = conv
    conv = common.convolutional(conv, (3, 3, 256, 512))
    conv_mbbox = common.convolutional(conv, (1, 1, 512, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    conv = common.convolutional(route_2, (3, 3, 256, 512), downsample=True)
    conv = tf.concat([conv, route], axis=-1)

    conv = common.convolutional(conv, (1, 1, 1024, 512))
    conv = common.convolutional(conv, (3, 3, 512, 1024))
    conv = common.convolutional(conv, (1, 1, 1024, 512))
    conv = common.convolutional(conv, (3, 3, 512, 1024))
    conv = common.convolutional(conv, (1, 1, 1024, 512))

    conv = common.convolutional(conv, (3, 3, 512, 1024))
    conv_lbbox = common.convolutional(conv, (1, 1, 1024, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    return [conv_sbbox, conv_mbbox, conv_lbbox]
Ejemplo n.º 25
0
def YOLOv3(for_annother_use=False):
    input_layer = tf.keras.layers.Input(shape=[416,416,3])
    route_1, route_2, conv = backbone.darknet53(input_layer)

    conv = common.convolutional(conv, (1, 1, 1024, 512))
    sconv1 = conv = common.convolutional(conv, (3, 3, 512, 1024))
    conv = common.convolutional(conv, (1, 1, 1024, 512))
    sconv2 = conv = common.convolutional(conv, (3, 3, 512, 1024))
    conv = common.convolutional(conv, (1, 1, 1024, 512))

    sconv3 = conv_lobj_branch = common.convolutional(conv, (3, 3, 512, 1024))
    conv_lbbox = common.convolutional(conv_lobj_branch, (1, 1, 1024, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    conv = common.convolutional(conv, (1, 1, 512, 256))
    conv = common.upsample(conv)

    conv = tf.concat([conv, route_2], axis=-1)

    conv = common.convolutional(conv, (1, 1, 768, 256))
    mconv1 = conv = common.convolutional(conv, (3, 3, 256, 512))
    conv = common.convolutional(conv, (1, 1, 512, 256))
    mconv2 = conv = common.convolutional(conv, (3, 3, 256, 512))
    conv = common.convolutional(conv, (1, 1, 512, 256))

    mconv3 = conv_mobj_branch = common.convolutional(conv, (3, 3, 256, 512))
    conv_mbbox = common.convolutional(conv_mobj_branch, (1, 1, 512, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    conv = common.convolutional(conv, (1, 1, 256, 128))
    conv = common.upsample(conv)

    conv = tf.concat([conv, route_1], axis=-1)

    conv = common.convolutional(conv, (1, 1, 384, 128))
    lconv1 = conv = common.convolutional(conv, (3, 3, 128, 256))
    conv = common.convolutional(conv, (1, 1, 256, 128))
    lconv2 = conv = common.convolutional(conv, (3, 3, 128, 256))
    conv = common.convolutional(conv, (1, 1, 256, 128))

    lconv3 = conv_sobj_branch = common.convolutional(conv, (3, 3, 128, 256))
    conv_sbbox = common.convolutional(conv_sobj_branch, (1, 1, 256, 3 * (NUM_CLASS + 5)), activate=False, bn=False)

    if for_annother_use:
        convs_sbbox = tf.concat([lconv1, lconv2, lconv3], axis=-1, name="lfeature")
        convs_mbbox = tf.concat([mconv1, mconv2, mconv3], axis=-1, name="mfeature")
        convs_lbbox = tf.concat([sconv1, sconv2, sconv3], axis=-1, name="sfeature")
        yolo = Model(input_layer,[conv_sbbox, conv_mbbox, conv_lbbox, convs_sbbox,convs_mbbox,convs_lbbox])
    #                              52,26,13                         52,26,13
        yolo.load_weights(filepath=tf.keras.utils.get_file('yolo3.h5',''))
        yolo.trainable = False
    else:
        # classic YOLOV3 model trained for coco datasets
        yolo = Model(input_layer, [conv_sbbox, conv_mbbox, conv_lbbox])
        yolo.load_weights(filepath=tf.keras.utils.get_file('yolo3.h5',''))
        yolo.trainable =False
    return yolo
Ejemplo n.º 26
0
    def __build_nework(self, input_data):

        # mobilenet v1 backbone

        # input_data = tf.layers.conv2d(input_data,
        #                               filters=32,
        #                               kernel_size=(3, 3),
        #                               strides=(2,2),
        #                               padding = 'same',
        #                               activation = tf.nn.relu,
        #                               name = 'conv1'
        #                               )
        # input_data = tf.layers.batch_normalization(input_data, beta_initializer=tf.zeros_initializer(),
        #                                         gamma_initializer=tf.ones_initializer(),
        #                                         moving_mean_initializer=tf.zeros_initializer(),
        #                                         moving_variance_initializer=tf.ones_initializer(), training=self.trainable,
        #                                         name='bn')
        '''
        input_data = common.convolutional(input_data, (3, 3, 3, 32), self.trainable, 'conv0')

        input_data = self.separable_conv_block(input=input_data, dw_filter=(3,3,32,1),output_channel=64,
                                                     strides=(1,1,1,1), name="spearable_1")

        input_data = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 64, 1), output_channel=128,
                                            strides=(1, 2, 2, 1), name="spearable_2")

        input_data = self.separable_conv_block(input=input_data, dw_filter=(3,3,128,1),output_channel=128,
                                                    strides=(1,1,1,1), name="spearable_3")

        input_data = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 128, 1), output_channel=256,
                                                    strides=(1, 2, 2, 1), name="spearable_4")

        input_data = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 256, 1), output_channel=256,
                                                strides=(1, 1, 1, 1), name="spearable_5")

        with tf.variable_scope("spearable_6"):
            dw_weight = tf.get_variable(name='dw_filter', dtype=tf.float32, trainable=True,
                                        shape=(3, 3, 256, 1), initializer=tf.random_normal_initializer(stddev=0.01))

            input_data = tf.nn.depthwise_conv2d(input=input_data, filter=dw_weight, strides=(1, 2, 2, 1), padding="SAME", name='Conv/dw')

            input_data = tf.layers.batch_normalization(input_data, beta_initializer=tf.zeros_initializer(),
                                                gamma_initializer=tf.ones_initializer(),
                                                moving_mean_initializer=tf.zeros_initializer(),
                                                moving_variance_initializer=tf.ones_initializer(), training=self.trainable,
                                                name='dw/bn')
            route = tf.nn.leaky_relu(input_data,0.1)

            weight = tf.get_variable(name='weight', dtype=tf.float32, trainable=True,
                                     shape=(1, 1, 256, 512), initializer=tf.random_normal_initializer(stddev=0.01))

            input_data = tf.nn.conv2d(input=route, filter=weight, strides=[1, 1, 1, 1], padding="SAME",name="conv/s1")
            input_data = tf.layers.batch_normalization(input_data, beta_initializer=tf.zeros_initializer(),
                                               gamma_initializer=tf.ones_initializer(),
                                               moving_mean_initializer=tf.zeros_initializer(),
                                               moving_variance_initializer=tf.ones_initializer(),
                                               training=self.trainable,
                                               name='pt/bn')
            input_data = tf.nn.leaky_relu(input_data,0.1)

        for i in range(5):
            input_data = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 512, 1), output_channel=512,
                                                    strides=(1, 1, 1, 1), name="spearable_%d" % (i+ 7))
        
        input_data = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 512, 1), output_channel=1024,
                                        strides=(1, 2, 2, 1), name="spearable_12")

        input_data = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 1024, 1), output_channel=1024,
                                        strides=(1, 1, 1, 1), name="spearable_13")
        '''
        # mobilenet backbone end

        # yolo tiny backbone

        input_data = common.convolutional(input_data, (3, 3, 3, 16),
                                          self.trainable, 'conv0')
        input_data = tf.nn.max_pool(input_data,
                                    ksize=[1, 2, 2, 1],
                                    strides=[1, 2, 2, 1],
                                    padding='SAME')

        input_data = common.convolutional(input_data, (3, 3, 16, 32),
                                          self.trainable, 'conv1')
        input_data = tf.nn.max_pool(input_data,
                                    ksize=[1, 2, 2, 1],
                                    strides=[1, 2, 2, 1],
                                    padding='SAME')

        input_data = common.convolutional(input_data, (3, 3, 32, 64),
                                          self.trainable, 'conv2')
        input_data = tf.nn.max_pool(input_data,
                                    ksize=[1, 2, 2, 1],
                                    strides=[1, 2, 2, 1],
                                    padding='SAME')

        input_data = common.convolutional(input_data, (3, 3, 64, 128),
                                          self.trainable, 'conv3')
        input_data = tf.nn.max_pool(input_data,
                                    ksize=[1, 2, 2, 1],
                                    strides=[1, 2, 2, 1],
                                    padding='SAME')

        input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                          self.trainable, 'conv4')
        route = input_data
        input_data = tf.nn.max_pool(input_data,
                                    ksize=[1, 2, 2, 1],
                                    strides=[1, 2, 2, 1],
                                    padding='SAME')

        input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                          self.trainable, 'conv5')
        input_data = tf.nn.max_pool(input_data,
                                    ksize=[1, 2, 2, 1],
                                    strides=[1, 1, 1, 1],
                                    padding='SAME')

        input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                          self.trainable, 'conv6')

        # end

        # yolo detect layer

        input_data = common.convolutional(input_data, (1, 1, 1024, 256),
                                          self.trainable, 'conv7')

        conv_lobj_branch = common.convolutional(input_data, (3, 3, 256, 512),
                                                self.trainable,
                                                'conv_lobj_branch')
        conv_lbbox = common.convolutional(
            conv_lobj_branch, (1, 1, 512, 3 * (self.num_class + 5)),
            self.trainable,
            'conv_lbbox',
            activate=False,
            bn=False)

        input_data = common.convolutional(input_data, (1, 1, 256, 128),
                                          self.trainable, 'conv8')
        input_data = common.upsample(input_data,
                                     name='upsample0',
                                     method=self.upsample_method)

        with tf.variable_scope('route_1'):
            input_data = tf.concat([input_data, route], axis=-1)

        conv_mobj_branch = common.convolutional(input_data, (3, 3, 384, 256),
                                                self.trainable,
                                                'conv_mobj_branch')
        conv_mbbox = common.convolutional(
            conv_mobj_branch, (1, 1, 256, 3 * (self.num_class + 5)),
            self.trainable,
            'conv_mbbox',
            activate=False,
            bn=False)

        # yolo detect layer end

        # yolo detect layer DSC
        '''
        input_data = self.separable_conv_block(input=input_data, dw_filter=(1, 1, 1024, 1),output_channel=256,
                                                     strides=(1,1,1,1), name="conv7")

        conv_lobj_branch = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 256, 1),output_channel=512,
                                                     strides=(1,1,1,1), name="conv_lobj_branch")
                                                     
        conv_lbbox = self.separable_conv_block(input=conv_lobj_branch, dw_filter=(1, 1, 512, 1),output_channel=3 * (self.num_class + 5),
                                                     strides=(1,1,1,1), name="conv_lbbox")

        input_data = self.separable_conv_block(input=input_data, dw_filter=(1, 1, 256, 1),output_channel=128,
                                                     strides=(1,1,1,1), name="conv8")
        input_data = common.upsample(input_data, name='upsample0', method=self.upsample_method)

        with tf.variable_scope('route_1'):
            input_data = tf.concat([input_data, route], axis=-1)

        conv_mobj_branch = self.separable_conv_block(input=input_data, dw_filter=(3, 3, 384, 1),output_channel=256,
                                                     strides=(1,1,1,1), name="conv_mobj_branch")
        conv_mbbox = self.separable_conv_block(input=conv_mobj_branch, dw_filter=(1, 1, 256, 1),output_channel=3 * (self.num_class + 5),
                                                     strides=(1,1,1,1), name="conv_mbbox")
        '''

        return conv_lbbox, conv_mbbox
Ejemplo n.º 27
0
def cspdarknet53(input_data):

    print(
        '[INFO][core.backbone.cspdarknet53] Initializing cspdarknet53 backbone-architecture '
    )

    input_data = common.convolutional(input_data, (3, 3, 3, 32),
                                      activate_type="mish")
    input_data = common.convolutional(input_data, (3, 3, 32, 64),
                                      downsample=True,
                                      activate_type="mish")

    route = input_data
    route = common.convolutional(route, (1, 1, 64, 64), activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 64, 64),
                                      activate_type="mish")
    for i in range(1):
        input_data = common.residual_block(input_data,
                                           64,
                                           32,
                                           64,
                                           activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 64, 64),
                                      activate_type="mish")

    input_data = tf.concat([input_data, route], axis=-1)
    input_data = common.convolutional(input_data, (1, 1, 128, 64),
                                      activate_type="mish")
    input_data = common.convolutional(input_data, (3, 3, 64, 128),
                                      downsample=True,
                                      activate_type="mish")
    route = input_data
    route = common.convolutional(route, (1, 1, 128, 64), activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 128, 64),
                                      activate_type="mish")
    for i in range(2):
        input_data = common.residual_block(input_data,
                                           64,
                                           64,
                                           64,
                                           activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 64, 64),
                                      activate_type="mish")
    input_data = tf.concat([input_data, route], axis=-1)

    input_data = common.convolutional(input_data, (1, 1, 128, 128),
                                      activate_type="mish")
    input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                      downsample=True,
                                      activate_type="mish")
    route = input_data
    route = common.convolutional(route, (1, 1, 256, 128), activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 256, 128),
                                      activate_type="mish")
    for i in range(8):
        input_data = common.residual_block(input_data,
                                           128,
                                           128,
                                           128,
                                           activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 128, 128),
                                      activate_type="mish")
    input_data = tf.concat([input_data, route], axis=-1)

    input_data = common.convolutional(input_data, (1, 1, 256, 256),
                                      activate_type="mish")
    route_1 = input_data
    input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                      downsample=True,
                                      activate_type="mish")
    route = input_data
    route = common.convolutional(route, (1, 1, 512, 256), activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 512, 256),
                                      activate_type="mish")
    for i in range(8):
        input_data = common.residual_block(input_data,
                                           256,
                                           256,
                                           256,
                                           activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 256, 256),
                                      activate_type="mish")
    input_data = tf.concat([input_data, route], axis=-1)

    input_data = common.convolutional(input_data, (1, 1, 512, 512),
                                      activate_type="mish")
    route_2 = input_data
    input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                      downsample=True,
                                      activate_type="mish")
    route = input_data
    route = common.convolutional(route, (1, 1, 1024, 512),
                                 activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 1024, 512),
                                      activate_type="mish")
    for i in range(4):
        input_data = common.residual_block(input_data,
                                           512,
                                           512,
                                           512,
                                           activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 512, 512),
                                      activate_type="mish")
    input_data = tf.concat([input_data, route], axis=-1)

    input_data = common.convolutional(input_data, (1, 1, 1024, 1024),
                                      activate_type="mish")
    input_data = common.convolutional(input_data, (1, 1, 1024, 512))
    input_data = common.convolutional(input_data, (3, 3, 512, 1024))
    input_data = common.convolutional(input_data, (1, 1, 1024, 512))

    input_data = tf.concat([
        tf.nn.max_pool(input_data, ksize=13, padding='SAME', strides=1),
        tf.nn.max_pool(input_data, ksize=9, padding='SAME', strides=1),
        tf.nn.max_pool(input_data, ksize=5, padding='SAME', strides=1),
        input_data
    ],
                           axis=-1)
    input_data = common.convolutional(input_data, (1, 1, 2048, 512))
    input_data = common.convolutional(input_data, (3, 3, 512, 1024))
    input_data = common.convolutional(input_data, (1, 1, 1024, 512))

    print(
        '[INFO][core.backbone.cspdarknet53] cspdarknet53 backbone-architecture initialized'
    )

    return route_1, route_2, input_data
Ejemplo n.º 28
0
    def __build_nework(self, input_data):

        route_1, route_2, input_data = backbone.darknet53(
            input_data, self.trainable)

        conv_lobj_branch = common.EP(input_data,
                                     189,
                                     462,
                                     name='EP5',
                                     stride=1)
        conv_lbbox = common.convolutional(
            conv_lobj_branch, (1, 1, 462, 3 * (self.num_class + 5)),
            trainable=self.trainable,
            name='conv_lbbox',
            activate=False,
            bn=False)

        input_data = common.convolutional(input_data, (1, 1, 189, 105),
                                          self.trainable, 'conv5')
        input_data = common.upsample(input_data,
                                     name='upsample0',
                                     method=self.upsample_method)
        input_data = tf.concat([input_data, route_2], axis=-1)
        input_data = common.PEP(input_data,
                                430,
                                325,
                                113,
                                name='PEP17',
                                stride=1)
        input_data = common.PEP(input_data,
                                325,
                                207,
                                99,
                                name='PEP18',
                                stride=1)
        input_data = common.convolutional(input_data, (1, 1, 207, 98),
                                          self.trainable, 'conv6')

        conv_mobj_branch = common.EP(input_data, 98, 183, name='EP6', stride=1)
        conv_mbbox = common.convolutional(
            conv_mobj_branch, (1, 1, 183, 3 * (self.num_class + 5)),
            trainable=self.trainable,
            name='conv_mbbox',
            activate=False,
            bn=False)

        input_data = common.convolutional(input_data, (1, 1, 98, 47),
                                          self.trainable, 'conv7')
        input_data = common.upsample(input_data,
                                     name='upsample1',
                                     method=self.upsample_method)
        input_data = tf.concat([input_data, route_1], axis=-1)
        input_data = common.PEP(input_data,
                                197,
                                122,
                                58,
                                name='PEP19',
                                stride=1)
        input_data = common.PEP(input_data,
                                122,
                                87,
                                52,
                                name='PEP20',
                                stride=1)
        conv_sobj_branch = common.PEP(input_data,
                                      87,
                                      93,
                                      47,
                                      name='PEP21',
                                      stride=1)
        conv_sbbox = common.convolutional(conv_sobj_branch,
                                          (1, 1, 93, 3 * (self.num_class + 5)),
                                          trainable=self.trainable,
                                          name='conv_sbbox',
                                          activate=False,
                                          bn=False)
        return conv_lbbox, conv_mbbox, conv_sbbox
Ejemplo n.º 29
0
def darknet53(input_data):
    """
    build the darknet 53
    :param input_data: [416,416,3]
    :return: 3 feature maps [52,52,256], [26,26,512], [13,13,1024]
    """
    input_data = common.convolutional(
        input_data, (3, 3, 3, 32),
        conv_trainable=False)  # 32 filters [3,3,3], output [416,416,32]
    input_data = common.convolutional(
        input_data, (3, 3, 32, 64), downsample=True,
        conv_trainable=False)  # 64 filters [3,3,3], output [208, 208, 64]

    for i in range(1):
        input_data = common.residual_block(input_data,
                                           64,
                                           32,
                                           64,
                                           conv_trainable=False)
    input_data = common.convolutional(input_data, (3, 3, 64, 128),
                                      downsample=True,
                                      conv_trainable=False)

    for i in range(2):
        input_data = common.residual_block(input_data,
                                           128,
                                           64,
                                           128,
                                           conv_trainable=False)
    input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                      downsample=True,
                                      conv_trainable=False)

    for i in range(8):
        input_data = common.residual_block(input_data,
                                           256,
                                           128,
                                           256,
                                           conv_trainable=False)
    route_1 = input_data
    input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                      downsample=True,
                                      conv_trainable=False)

    for i in range(8):
        input_data = common.residual_block(input_data,
                                           512,
                                           256,
                                           512,
                                           conv_trainable=False)
    route_2 = input_data
    input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                      downsample=True,
                                      conv_trainable=False)

    for i in range(4):
        input_data = common.residual_block(input_data,
                                           1024,
                                           512,
                                           1024,
                                           conv_trainable=False)

    return route_1, route_2, input_data  # [52,52,256], [26,26,512], [13,13,1024]
Ejemplo n.º 30
0
    def __build_nework(self, input_data):

        route_1, route_2, input_data = backbone.darknet53(
            input_data, self.trainable)

        input_data = common.convolutional(input_data, (1, 1, 1024, 512),
                                          self.trainable, 'conv52')
        input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                          self.trainable, 'conv53')
        input_data = common.convolutional(input_data, (1, 1, 1024, 512),
                                          self.trainable, 'conv54')
        input_data = common.convolutional(input_data, (3, 3, 512, 1024),
                                          self.trainable, 'conv55')
        input_data = common.convolutional(input_data, (1, 1, 1024, 512),
                                          self.trainable, 'conv56')

        conv_lobj_branch = common.convolutional(input_data, (3, 3, 512, 1024),
                                                self.trainable,
                                                name='conv_lobj_branch')
        conv_lbbox = common.convolutional(
            conv_lobj_branch, (1, 1, 1024, 3 * (self.num_class + 5)),
            trainable=self.trainable,
            name='conv_lbbox',
            activate=False,
            bn=False)

        input_data = common.convolutional(input_data, (1, 1, 512, 256),
                                          self.trainable, 'conv57')
        input_data = common.upsample(input_data,
                                     name='upsample0',
                                     method=self.upsample_method)

        with tf.variable_scope('route_1'):
            input_data = tf.concat([input_data, route_2], axis=-1)

        input_data = common.convolutional(input_data, (1, 1, 768, 256),
                                          self.trainable, 'conv58')
        input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                          self.trainable, 'conv59')
        input_data = common.convolutional(input_data, (1, 1, 512, 256),
                                          self.trainable, 'conv60')
        input_data = common.convolutional(input_data, (3, 3, 256, 512),
                                          self.trainable, 'conv61')
        input_data = common.convolutional(input_data, (1, 1, 512, 256),
                                          self.trainable, 'conv62')

        conv_mobj_branch = common.convolutional(input_data, (3, 3, 256, 512),
                                                self.trainable,
                                                name='conv_mobj_branch')
        conv_mbbox = common.convolutional(
            conv_mobj_branch, (1, 1, 512, 3 * (self.num_class + 5)),
            trainable=self.trainable,
            name='conv_mbbox',
            activate=False,
            bn=False)

        input_data = common.convolutional(input_data, (1, 1, 256, 128),
                                          self.trainable, 'conv63')
        input_data = common.upsample(input_data,
                                     name='upsample1',
                                     method=self.upsample_method)

        with tf.variable_scope('route_2'):
            input_data = tf.concat([input_data, route_1], axis=-1)

        input_data = common.convolutional(input_data, (1, 1, 384, 128),
                                          self.trainable, 'conv64')
        input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                          self.trainable, 'conv65')
        input_data = common.convolutional(input_data, (1, 1, 256, 128),
                                          self.trainable, 'conv66')
        input_data = common.convolutional(input_data, (3, 3, 128, 256),
                                          self.trainable, 'conv67')
        input_data = common.convolutional(input_data, (1, 1, 256, 128),
                                          self.trainable, 'conv68')

        conv_sobj_branch = common.convolutional(input_data, (3, 3, 128, 256),
                                                self.trainable,
                                                name='conv_sobj_branch')
        conv_sbbox = common.convolutional(
            conv_sobj_branch, (1, 1, 256, 3 * (self.num_class + 5)),
            trainable=self.trainable,
            name='conv_sbbox',
            activate=False,
            bn=False)

        return conv_lbbox, conv_mbbox, conv_sbbox