Ejemplo n.º 1
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.º 2
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.º 3
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.º 4
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.º 5
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.º 6
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.º 7
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.º 8
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.º 9
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.º 10
0
def darknet53(input_rgb,input_lwir, trainable):

    with tf.variable_scope('darknet'):
##############################RGB###############################################
        input_rgb = common.convolutional(input_rgb, filters_shape=(3, 3,  3,  32), trainable=trainable, name='conv0')
        input_rgb = common.convolutional(input_rgb, filters_shape=(3, 3, 32,  64),
                                          trainable=trainable, name='conv1', downsample=True)

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

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

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

        input_rgb = common.convolutional(input_rgb, filters_shape=(3, 3, 128, 256),
                                          trainable=trainable, name='conv9', downsample=True)
##############################RGB###############################################
        
##############################LWIR###############################################
        input_lwir = common.convolutional(input_lwir, filters_shape=(3, 3,  3,  32), trainable=trainable, name='conv0_lwir')
        input_lwir = common.convolutional(input_lwir, filters_shape=(3, 3, 32,  64),
                                          trainable=trainable, name='conv1_lwir', downsample=True)

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

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

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

        input_lwir = common.convolutional(input_lwir, filters_shape=(3, 3, 128, 256),
                                          trainable=trainable, name='conv9_lwir', downsample=True)
##############################LWIR###############################################


##############################cont###############################################

        input_data = tf.concat(axis=3, values=[input_rgb, input_lwir])
        input_data = common.convolutional(input_data, filters_shape=(3, 3, 512, 256),trainable=trainable, name='conv_b09')        
        
##############################cont###############################################        

        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.º 11
0
def mobilenetv2(input_data, trainable):
    with tf.variable_scope('mobilenetv2'):
        #input_data = tf.reshape(input_data, [-1, 608, 608, 3]) # print layer's shape

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

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

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

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

        route_1 = input_data

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

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

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 64, 96),
                                          trainable=trainable,
                                          name='conv11')

        for i in range(2):
            input_data = common.residual_block(input_data,
                                               96,
                                               576,
                                               96,
                                               trainable=trainable,
                                               name='residual%d' % (i + 6))

        route_2 = input_data

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 96, 160),
                                          trainable=trainable,
                                          name='conv14',
                                          downsample=True)

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

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 160, 320),
                                          trainable=trainable,
                                          name='conv17')

        return route_1, route_2, input_data
Ejemplo n.º 12
0
def darknet53(input_data):  # 用了五次下采样,所以图片的大小应该维持32的倍数
    with tf.variable_scope('darknet53'):
        # 0
        input_data = common.convolutional_Layer(input_data,
                                                filters_shape=(3, 3, 3, 32),
                                                name='conv0')

        # -------------
        # 1
        input_data = common.convolutional_Layer(input_data,
                                                filters_shape=(3, 3, 32, 64),
                                                name='conv1',
                                                downsample=True)
        # 2-3(1*2)
        for i in range(1):
            input_data = common.residual_block(input_data,
                                               64,
                                               32,
                                               64,
                                               name='residual%d' % (i + 0))

        # -------------
        # 4
        input_data = common.convolutional_Layer(input_data,
                                                filters_shape=(3, 3, 64, 128),
                                                downsample=True,
                                                name='conv4')
        # 5-8(2*2)
        for i in range(2):
            input_data = common.residual_block(input_data,
                                               128,
                                               64,
                                               128,
                                               name='residual%d' % (i + 1))

        # -------------
        # 9
        input_data = common.convolutional_Layer(input_data,
                                                filters_shape=(3, 3, 128, 256),
                                                downsample=True,
                                                name='conv9')
        # 10-25(8*2)
        for i in range(8):
            input_data = common.residual_block(input_data,
                                               256,
                                               128,
                                               256,
                                               name='residual%d' % (i + 3))

        middle_data_1 = input_data

        # -------------
        # 26
        input_data = common.convolutional_Layer(input_data,
                                                filters_shape=(3, 3, 256, 512),
                                                downsample=True,
                                                name='conv26')
        # 27-42(8*2)
        for i in range(8):
            input_data = common.residual_block(input_data,
                                               512,
                                               256,
                                               512,
                                               name='residual%d' % (i + 11))

        middle_data_2 = input_data

        # -------------
        # 43
        input_data = common.convolutional_Layer(input_data,
                                                filters_shape=(3, 3, 512,
                                                               1024),
                                                downsample=True,
                                                name='conv43')
        # 44-51(4*2)
        for i in range(4):
            input_data = common.residual_block(input_data,
                                               1024,
                                               512,
                                               1024,
                                               name='residual%d' % (i + 19))
        # 备注 darknet中还有三层(Avgpool、Connected 和 softmax layer)
        # 用于在 Imagenet 数据集上作分类训练用的,yolo是另一种思路,是不会用到这三层的,只是用前面来特征提取,谁让darknet53这么给力捏。

    return middle_data_1, middle_data_2, input_data
Ejemplo n.º 13
0
def darknet53(input_data, trainable):
    """
    基于输入数据构建Darknet53的网络
    :param input_data:
    :param trainable:
    :return:
    """
    with tf.variable_scope('darknet'):
        # 1. 第一层卷积[3,3,3,32]/1
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 3, 32),
                                          trainable=trainable,
                                          name='conv0')
        # 2. 第二层卷积[3,3,32,64]/2
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 32, 64),
                                          trainable=trainable,
                                          name='conv1',
                                          downsample=True)
        # 3. 进入残差+卷积的结构
        # a. 第一个残差结构
        for i in range(1):
            # 残差结构,通道数变化情况: 64 -> 32 -> 64
            input_data = common.residual_block(input_data,
                                               64,
                                               32,
                                               64,
                                               trainable=trainable,
                                               name='residual%d' % (i + 0))
        # b. 进入残差后的卷积结构(下采样), [3,3,64,128]/2
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 64, 128),
                                          trainable=trainable,
                                          name='conv4',
                                          downsample=True)

        # c. 进入第二组残差结构
        for i in range(2):
            # 残差结构, 通道数变化情况: 128->64->128
            input_data = common.residual_block(input_data,
                                               128,
                                               64,
                                               128,
                                               trainable=trainable,
                                               name='residual%d' % (i + 1))

        # d. 进入残差后的卷积结构(下采样), [3,3,128,256]/2
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 128, 256),
                                          trainable=trainable,
                                          name='conv9',
                                          downsample=True)

        # e. 进入第三组残差结构
        for i in range(8):
            # 残差结构, 通道数变化情况: 256->128->256
            input_data = common.residual_block(input_data,
                                               256,
                                               128,
                                               256,
                                               trainable=trainable,
                                               name='residual%d' % (i + 3))

        # f. 定义第一个输出分支
        route_1 = input_data

        # g. 进入残差后的卷积结构(下采样), [3,3,256,512]/2
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 256, 512),
                                          trainable=trainable,
                                          name='conv26',
                                          downsample=True)

        # h. 进入第四组残差结构
        for i in range(8):
            # 残差结构, 通道数变化情况: 512->256->512
            input_data = common.residual_block(input_data,
                                               512,
                                               256,
                                               512,
                                               trainable=trainable,
                                               name='residual%d' % (i + 11))

        # i. 定义第二个分支输出
        route_2 = input_data

        # j. 进入残差后的卷积结构(下采样), [3,3,512,1024]/2
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 512, 1024),
                                          trainable=trainable,
                                          name='conv43',
                                          downsample=True)

        # k. 进入第五组残差结构
        for i in range(4):
            # 残差结构, 通道数变化情况: 1024->512->1024
            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.º 14
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.º 15
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)

        # 依次为五个残差块 1-2-8-8-4
        for i in range(1):
            # 64 32 64 依次为上一输出的通道数 残差中两步卷积的通道
            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))

        # route1 2 3 inpudata 分别为用于后面concat的值 即 128残差后用于最大特征图concat的 route1 以此类推
        return route_1, route_2, input_data
Ejemplo n.º 16
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')  # 416 x 416 x  32
        input_data = tf.layers.dropout(input_data,
                                       rate=0.5,
                                       training=trainable)
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 32, 64),
                                          trainable=trainable,
                                          name='conv1',
                                          downsample=True)  # 208 x 208 x  64
        for i in range(1):
            residual_data = common.residual_block(
                input_data,
                64,
                32,
                64,
                trainable=trainable,
                name='residual%d' %
                (i + 0))  # 208 x 208 x  32, 208 x 208 x  64
            input_data = tf.layers.dropout(input_data,
                                           rate=0.5,
                                           training=trainable)
            input_data = common.attention_residual_block(
                input_data,
                residual_data,
                208,
                64,
                name='attention_residual%d' % (i + 0))

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 64, 128),
                                          trainable=trainable,
                                          name='conv4',
                                          downsample=True)  # 104 x 104 x 128
        input_data = tf.layers.dropout(input_data,
                                       rate=0.5,
                                       training=trainable)
        for i in range(2):
            residual_data = common.residual_block(
                input_data,
                128,
                64,
                128,
                trainable=trainable,
                name='residual%d' %
                (i + 1))  # 104 x 104 x  64, 104 x 104 x 128
            input_data = tf.layers.dropout(input_data,
                                           rate=0.5,
                                           training=trainable)
            input_data = common.attention_residual_block(
                input_data,
                residual_data,
                104,
                128,
                name='attention_residual%d' % (i + 1))

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 128, 256),
                                          trainable=trainable,
                                          name='conv9',
                                          downsample=True)  # 52 x  52 x 256
        input_data = tf.layers.dropout(input_data,
                                       rate=0.5,
                                       training=trainable)
        for i in range(8):
            residual_data = common.residual_block(
                input_data,
                256,
                128,
                256,
                trainable=trainable,
                name='residual%d' % (i + 3))  # 52 x  52 x 128, 52 x  52 x 256
            input_data = tf.layers.dropout(input_data,
                                           rate=0.5,
                                           training=trainable)
            input_data = common.attention_residual_block(
                input_data,
                residual_data,
                52,
                256,
                name='attention_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)  # 26 x  26 x 512
        input_data = tf.layers.dropout(input_data,
                                       rate=0.5,
                                       training=trainable)
        for i in range(8):
            residual_data = common.residual_block(
                input_data,
                512,
                256,
                512,
                trainable=trainable,
                name='residual%d' % (i + 11))  # 26 x  26 x 256, 26 x  26 x 512
            input_data = tf.layers.dropout(input_data,
                                           rate=0.5,
                                           training=trainable)
            input_data = common.attention_residual_block(
                input_data,
                residual_data,
                26,
                512,
                name='attention_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)  # 13 x  13 x1024
        input_data = tf.layers.dropout(input_data,
                                       rate=0.5,
                                       training=trainable)
        for i in range(4):
            residual_data = common.residual_block(
                input_data,
                1024,
                512,
                1024,
                trainable=trainable,
                name='residual%d' % (i + 19))  # 13 x  13 x 512, 13 x  13 x1024
            input_data = tf.layers.dropout(input_data,
                                           rate=0.5,
                                           training=trainable)
            input_data = common.attention_residual_block(
                input_data,
                residual_data,
                13,
                1024,
                name='attention_residual%d' % (i + 19))

        return route_1, route_2, input_data
Ejemplo n.º 17
0
def darknet53(input_data, trainable):
    '''
    53层卷积网络
    :param input_dat:
    :param trainable:
    :return:
    '''

    with tf.variable_scope('darknet'):
        input_data = common.convolutional(
            input_data,
            filters_shape=(3, 3, 3, 32),  #3X3卷积,3通道,32个卷积核
            trainable=trainable,
            name='conv0')
        input_data = common.convolutional(
            input_data,
            filters_shape=(3, 3, 32, 64),  #输入数据厚度为32,输出厚度为64
            trainable=trainable,
            name='conv1',
            downsample=True)  #第1次下采样

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

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 64, 128),
                                          trainable=trainable,
                                          name='conv4',
                                          downsample=True)  #第2次下采样

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

        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 128, 256),
                                          trainable=trainable,
                                          name='conv9',
                                          downsample=True)  #第3次下采样

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

        route_1 = input_data  #52X52 52来源:输入数据大小为416X416,至此,经过了3次下采样,每下采样一次,大小缩小一半,故3次下采样后,大小为416/(2^3)=52
        input_data = common.convolutional(input_data,
                                          filters_shape=(3, 3, 256, 512),
                                          trainable=trainable,
                                          name='conv26',
                                          downsample=True)  #第4次下采样

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

        route_2 = input_data  #26X26
        input_data = common.convolutional(
            input_data,
            filters_shape=(3, 3, 512, 1024),
            trainable=trainable,
            name='conv43',
            downsample=True
        )  #第5次下采样,该次下采样之后,input_data.shape=(?,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))
        #input_data:13X13

        return route_1, route_2, input_data
Ejemplo n.º 18
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.º 19
0
def cspdarknet53(input_data):

    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)
    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)
    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)
    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)
    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)
    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))

    return route_1, route_2, input_data