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