def ssd_net(inputs, num_classes=SSDNet.default_params.num_classes, feat_layers=SSDNet.default_params.feat_layers, anchor_sizes=SSDNet.default_params.anchor_sizes, anchor_ratios=SSDNet.default_params.anchor_ratios, normalizations=SSDNet.default_params.normalizations, is_training=True, dropout_keep_prob=0.5, prediction_fn=slim.softmax, reuse=None, scope='ssd_512_vgg'): """SSD net definition. """ # End_points collect relevant activations for external use. end_points = {} with tf.variable_scope(scope, 'ssd_512_vgg', [inputs], reuse=reuse): # Original VGG-16 blocks. net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') end_points['block1'] = net net = slim.max_pool2d(net, [2, 2], scope='pool1') # Block 2. net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') end_points['block2'] = net net = slim.max_pool2d(net, [2, 2], scope='pool2') # Block 3. net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3') end_points['block3'] = net net = slim.max_pool2d(net, [2, 2], scope='pool3') # Block 4. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4') end_points['block4'] = net net = slim.max_pool2d(net, [2, 2], scope='pool4') # Block 5. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5') end_points['block5'] = net net = slim.max_pool2d(net, [3, 3], 1, scope='pool5') # Additional SSD blocks. # Block 6: let's dilate the hell out of it! net = slim.conv2d(net, 1024, [3, 3], rate=6, scope='conv6') end_points['block6'] = net # Block 7: 1x1 conv. Because the f**k. net = slim.conv2d(net, 1024, [1, 1], scope='conv7') end_points['block7'] = net # Block 8/9/10/11: 1x1 and 3x3 convolutions stride 2 (except lasts). end_point = 'block8' with tf.variable_scope(end_point): net = slim.conv2d(net, 256, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 512, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block9' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block10' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block11' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block12' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [4, 4], scope='conv4x4', padding='VALID') # Fix padding to match Caffe version (pad=1). # pad_shape = [(i-j) for i, j in zip(layer_shape(net), [0, 1, 1, 0])] # net = tf.slice(net, [0, 0, 0, 0], pad_shape, name='caffe_pad') end_points[end_point] = net # Prediction and localisations layers. predictions = [] logits = [] localisations = [] for i, layer in enumerate(feat_layers): with tf.variable_scope(layer + '_box'): p, l = ssd_vgg_300.ssd_multibox_layer(end_points[layer], num_classes, anchor_sizes[i], anchor_ratios[i], normalizations[i]) predictions.append(prediction_fn(p)) logits.append(p) localisations.append(l) return predictions, localisations, logits, end_points
def ssd_net(inputs, num_classes=SSDNet.default_params.num_classes, feat_layers=SSDNet.default_params.feat_layers, anchor_sizes=SSDNet.default_params.anchor_sizes, anchor_ratios=SSDNet.default_params.anchor_ratios, normalizations=SSDNet.default_params.normalizations, is_training=True, dropout_keep_prob=0.5, prediction_fn=slim.softmax, reuse=None, scope='ssd_512_vgg', DSSD_FLAG=False): """SSD net definition. """ # End_points collect relevant activations for external use. end_points = {} if inputs.shape[2] == inputs.shape[3]: mode = 'bnwh' else: mode = 'bwhn' with tf.variable_scope(scope, 'ssd_512_vgg', [inputs], reuse=reuse): # Original VGG-16 blocks. net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') end_points['block1'] = net net = slim.max_pool2d(net, [2, 2], scope='pool1') # Block 2. net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') end_points['block2'] = net net = slim.max_pool2d(net, [2, 2], scope='pool2') # Block 3. net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3') end_points['block3'] = net net = slim.max_pool2d(net, [2, 2], scope='pool3') # Block 4. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4') end_points['block4'] = net net = slim.max_pool2d(net, [2, 2], scope='pool4') # Block 5. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5') end_points['block5'] = net net = slim.max_pool2d(net, [3, 3], 1, scope='pool5') # Additional SSD blocks. # Block 6: let's dilate the hell out of it! net = slim.conv2d(net, 1024, [3, 3], rate=6, scope='conv6') end_points['block6'] = net # Block 7: 1x1 conv. Because the f**k. net = slim.conv2d(net, 1024, [1, 1], scope='conv7') end_points['block7'] = net # Block 8/9/10/11: 1x1 and 3x3 convolutions stride 2 (except lasts). end_point = 'block8' with tf.variable_scope(end_point): net = slim.conv2d(net, 256, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 512, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block9' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block10' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block11' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block12' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [4, 4], scope='conv4x4', padding='VALID') # Fix padding to match Caffe version (pad=1). # pad_shape = [(i-j) for i, j in zip(layer_shape(net), [0, 1, 1, 0])] # net = tf.slice(net, [0, 0, 0, 0], pad_shape, name='caffe_pad') end_points[end_point] = net # Prediction and localisations layers. # rever_feat_layers = list(reversed(feat_layers)) # for i, l in enumerate(rever_feat_layers): # if i == 0: continue # l_ = rever_feat_layers[i - 1] # # end_points[l] = tf.concat([upbilinear([end_points[l_], end_points[l]], name=l_), end_points[l]],axis=1) # with tf.variable_scope("fpn11"): # # # end_points['block11'] = tf.add(upbilinear([end_points['block12'], end_points['block11']],name ="up_11",mode=mode), # end_points['block11'],name= "fpn_block11") # # with tf.variable_scope("fpn10"): # # end_points['block10'] = tf.add(upbilinear([end_points['block11'],end_points['block10']],name ="up_10",mode=mode), # end_points['block10'], # name="fpn_block10") # with tf.variable_scope("fpn9"): # b9 = slim.conv2d(end_points['block10'], 256, [1, 1], scope='9conv1x1') # b9_ = slim.conv2d(end_points['block9'], 256, [1, 1], scope='9_conv1x1') # end_points['block9'] = tf.add(upbilinear([end_points['block10'],end_points['block9']],name ="up_9",mode=mode), # end_points['block9'], # name="fpn_block9") # with tf.variable_scope("fpn8"): # b8 = slim.conv2d(end_points['block9'], 512, [1, 1], scope='8conv1x1') # # end_points['block8'] = tf.add(upbilinear([b8, end_points['block8']],name ="up_8",mode=mode), end_points['block8'], # name="fpn_block8") # with tf.variable_scope("fpn7"): # b7 = slim.conv2d(end_points['block8'], 1024, [1, 1], scope='7conv1x1') # # end_points['block7'] = tf.add(upbilinear([b7, end_points['block7']],name ="up_7",mode=mode), end_points['block7'], # name="fpn_block7") # with tf.variable_scope("fpn4"): # b4 = slim.conv2d(end_points['block7'], 512, [1, 1], scope='4conv1x1') # # end_points['block4'] = tf.add(upbilinear([b4, end_points['block4']],name ="up_4",mode=mode), end_points['block4'], # name="fpn_block4") if DSSD_FLAG: with tf.variable_scope("dssd11"): de_12 = slim.conv2d_transpose(end_points['block12'], 512, [3, 3], stride=2, scope="de_12") con_12 = slim.conv2d(de_12, 512, [3, 3], scope='conv_12') bn_12 = slim.batch_norm(con_12, is_training=is_training) con_11 = slim.conv2d(end_points["block11"], 512, [3, 3], scope="conv11") bn_11 = slim.batch_norm(con_11, is_training=is_training) relu_11 = tf.nn.relu(bn_11) con_11 = slim.conv2d(relu_11, 512, [3, 3], scope="conv11_2") bn_11 = slim.batch_norm(con_11, is_training=is_training) end_points["block11"] = tf.nn.relu(tf.multiply(bn_12, bn_11)) with tf.variable_scope("dssd10"): de_11 = slim.conv2d_transpose(end_points['block11'], 512, [3, 3], stride=2, scope="de_11") con_11 = slim.conv2d(de_11, 512, [3, 3], scope='conv_11') bn_11 = slim.batch_norm(con_11, is_training=is_training) con_10 = slim.conv2d(end_points["block10"], 512, [3, 3], scope="conv10") bn_10 = slim.batch_norm(con_10, is_training=is_training) relu_10 = tf.nn.relu(bn_10) con_10 = slim.conv2d(relu_10, 512, [3, 3], scope="conv10_2") bn_10 = slim.batch_norm(con_10, is_training=is_training) end_points["block10"] = tf.nn.relu(tf.multiply(bn_11, bn_10)) with tf.variable_scope("dssd9"): de_10 = slim.conv2d_transpose(end_points['block10'], 512, [3, 3], stride=2, scope="de_10") con_10 = slim.conv2d(de_10, 512, [3, 3], scope='conv_10') bn_10 = slim.batch_norm(con_10, is_training=is_training) con_9 = slim.conv2d(end_points["block9"], 512, [3, 3], scope="conv9") bn_9 = slim.batch_norm(con_9, is_training=is_training) relu_9 = tf.nn.relu(bn_9) con_9 = slim.conv2d(relu_9, 512, [3, 3], scope="conv9_2") bn_9 = slim.batch_norm(con_9, is_training=is_training) end_points["block9"] = tf.nn.relu(tf.multiply(bn_10, bn_9)) with tf.variable_scope("dssd8"): de_9 = slim.conv2d_transpose(end_points['block9'], 512, [3, 3], stride=2, scope="de_9") con_9 = slim.conv2d(de_9, 512, [3, 3], scope='conv_9') bn_9 = slim.batch_norm(con_9, is_training=is_training) con_8 = slim.conv2d(end_points["block8"], 512, [3, 3], scope="conv8") bn_8 = slim.batch_norm(con_8, is_training=is_training) relu_8 = tf.nn.relu(bn_8) con_8 = slim.conv2d(relu_8, 512, [3, 3], scope="conv8_2") bn_8 = slim.batch_norm(con_8, is_training=is_training) end_points["block8"] = tf.nn.relu(tf.multiply(bn_9, bn_8)) with tf.variable_scope("dssd7"): de_8 = slim.conv2d_transpose(end_points['block8'], 512, [3, 3], stride=2, scope="de_8") con_8 = slim.conv2d(de_8, 512, [3, 3], scope='conv_8') bn_8 = slim.batch_norm(con_8, is_training=is_training) con_7 = slim.conv2d(end_points["block7"], 512, [3, 3], scope="conv7") bn_7 = slim.batch_norm(con_7, is_training=is_training) relu_7 = tf.nn.relu(bn_7) con_7 = slim.conv2d(relu_7, 512, [3, 3], scope="conv7_2") bn_7 = slim.batch_norm(con_7, is_training=is_training) end_points["block7"] = tf.nn.relu(tf.multiply(bn_8, bn_7)) with tf.variable_scope("dssd4"): de_7 = slim.conv2d_transpose(end_points['block7'], 512, [3, 3], stride=2, scope="de_7") con_7 = slim.conv2d(de_7, 512, [3, 3], scope='conv_7') bn_7 = slim.batch_norm(con_7, is_training=is_training) con_4 = slim.conv2d(end_points["block4"], 512, [3, 3], scope="conv4") bn_4 = slim.batch_norm(con_4, is_training=is_training) relu_4 = tf.nn.relu(bn_4) con_4 = slim.conv2d(relu_4, 512, [3, 3], scope="conv4_2") bn_4 = slim.batch_norm(con_4, is_training=is_training) end_points["block4"] = tf.nn.relu(tf.multiply(bn_7, bn_4)) # predictions = [] logits = [] localisations = [] for i, layer in enumerate(feat_layers): with tf.variable_scope(layer + '_box'): p, l = ssd_vgg_300.ssd_multibox_layer(end_points[layer], num_classes, anchor_sizes[i], anchor_ratios[i], normalizations[i]) predictions.append(prediction_fn(p)) logits.append(p) localisations.append(l) return predictions, localisations, logits, end_points
def ssd_net(inputs, num_classes=SSDNet.default_params.num_classes, feat_layers=SSDNet.default_params.feat_layers, anchor_sizes=SSDNet.default_params.anchor_sizes, anchor_ratios=SSDNet.default_params.anchor_ratios, normalizations=SSDNet.default_params.normalizations, is_training=True, dropout_keep_prob=0.5, prediction_fn=slim.softmax, reuse=None, scope='ssd_512_vgg'): """SSD net definition. """ # End_points collect relevant activations for external use. end_points = {} with tf.variable_scope(scope, 'ssd_512_vgg', [inputs], reuse=reuse): # Original VGG-16 blocks. print(inputs.shape) #inputs = tf.transpose(inputs, [0,2,3,1]) with tf.variable_scope("RseNet50"): with tf.variable_scope("RseNet50"): net = slim.conv2d(inputs, 64, [3, 3], activation_fn=tf.nn.selu, stride=2, data_format=data_format) # 256 print(net.shape) end_points['block0'] = net print('block0') net = unit_neck(net, [32, 32, 32], 'block1', False) end_points['block1'] = net print('block1') net = block(net, [[96, 96, 48], [144, 144, 48]], 2, 'block1') # 128 end_points['block2'] = net print('block2') net = block(net, [[144, 144, 64], [192, 192, 64]], 3, 'block2') # 64 end_points['block3'] = net print('block3') net = block(net, [[144, 144, 64], [192, 192, 64]], 3, 'block3') # 32 end_points['block4'] = net print('block4') net = block(net, [[192, 192, 128], [384, 384, 128]], 4, 'block4') # 16 end_points['block5'] = net print('block5') net = block(net, [[384, 384, 192], [576, 576, 192]], 3, 'block5', stride=1) net = block(net, [[576, 576, 320], [960, 960, 320]], 3, 'block6') # 8 end_points['block6'] = net print('block6') net = block(net, [[576, 576, 320], [960, 960, 320]], 3, 'block7') # 4 end_points['block7'] = net end_point = 'Fblock6' with tf.variable_scope(end_point): p = slim.conv2d_transpose(net, 256, [3, 3], stride=2, activation_fn=tf.nn.selu, data_format=data_format) c = slim.conv2d(end_points['block6'], 256, [3, 3], activation_fn=tf.nn.selu, data_format=data_format) print(p.shape, c.shape) f = tf.concat([p, c], axis=funsion_axis) net = slim.conv2d(f, 256, [1, 1], scope='F6conv1x1', activation_fn=tf.nn.selu, data_format=data_format) print(net.shape) end_points[end_point] = net end_point = 'Fblock5' with tf.variable_scope(end_point): p = slim.conv2d_transpose(net, 256, [3, 3], stride=2, activation_fn=tf.nn.selu, data_format=data_format) c = slim.conv2d(end_points['block5'], 256, [3, 3], activation_fn=tf.nn.selu, data_format=data_format) print(p.shape, c.shape) f = tf.concat([p, c], axis=funsion_axis) net = slim.conv2d(f, 256, [1, 1], scope='F5conv1x1', activation_fn=tf.nn.selu, data_format=data_format) print(net.shape) end_points[end_point] = net end_point = 'Fblock4' with tf.variable_scope(end_point): p = slim.conv2d_transpose(net, 256, [3, 3], stride=2, activation_fn=tf.nn.selu, data_format=data_format) c = slim.conv2d(end_points['block4'], 256, [3, 3], activation_fn=tf.nn.selu, data_format=data_format) print(p.shape, c.shape) f = tf.concat([p, c], axis=funsion_axis) net = slim.conv2d(f, 256, [1, 1], scope='F4conv1x1', activation_fn=tf.nn.selu, data_format=data_format) print(net.shape) end_points[end_point] = net end_point = 'Fblock3' with tf.variable_scope(end_point): p = slim.conv2d_transpose(net, 256, [3, 3], stride=2, activation_fn=tf.nn.selu, data_format=data_format) c = slim.conv2d(end_points['block3'], 256, [3, 3], activation_fn=tf.nn.selu, data_format=data_format) print(p.shape, c.shape) f = tf.concat([p, c], axis=funsion_axis) net = slim.conv2d(f, 256, [1, 1], scope='F3conv1x1', activation_fn=tf.nn.selu, data_format=data_format) print(net.shape) end_points[end_point] = net predictions = [] logits = [] localisations = [] for i, layer in enumerate(feat_layers): with tf.variable_scope(layer + '_box'): p, l = ssd_vgg_300.ssd_multibox_layer(end_points[layer], num_classes, anchor_sizes[i], anchor_ratios[i], normalizations[i]) predictions.append(prediction_fn(p)) logits.append(p) localisations.append(l) return predictions, localisations, logits, end_points
def ssd_net(inputs, num_classes=SSDNet.default_params.num_classes, feat_layers=SSDNet.default_params.feat_layers, anchor_sizes=SSDNet.default_params.anchor_sizes, anchor_ratios=SSDNet.default_params.anchor_ratios, normalizations=SSDNet.default_params.normalizations, is_training=True, dropout_keep_prob=0.5, prediction_fn=slim.softmax, reuse=None, scope='ssd_512_vgg'): """SSD net definition. """ # End_points collect relevant activations for external use. end_points = {} with tf.variable_scope(scope, 'ssd_512_vgg', [inputs], reuse=reuse): # Original VGG-16 blocks. net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') end_points['block1'] = net # print("====net.shape = {}".format(net)) net = slim.max_pool2d(net, [2, 2], scope='pool1') # Block 2. net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') end_points['block2'] = net net = slim.max_pool2d(net, [2, 2], scope='pool2') # Block 3.txt. net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3') end_points['block3'] = net net = slim.max_pool2d(net, [2, 2], scope='pool3') # Block 4. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4') end_points['block4'] = net net = slim.max_pool2d(net, [2, 2], scope='pool4') # Block 5. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5') end_points['block5'] = net net = slim.max_pool2d(net, [3, 3], 1, scope='pool5') # Additional SSD blocks. # Block 6: let's dilate the hell out of it! net = slim.conv2d(net, 1024, [3, 3], rate=6, scope='conv6') end_points['block6'] = net # Block 7: 1x1 conv. Because the f**k. net = slim.conv2d(net, 1024, [1, 1], scope='conv7') end_points['block7'] = net if IS_FPN: stride_b8_to_b12 = 1 else: stride_b8_to_b12 = 2 # Block 8/9/10/11: 1x1 and 3x3 convolutions stride 2 (except lasts). end_point = 'block8' with tf.variable_scope(end_point): net = slim.conv2d(net, 256, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 512, [3, 3], stride=2, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block9' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=stride_b8_to_b12, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block10' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=stride_b8_to_b12, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'block11' with tf.variable_scope(end_point): net = slim.conv2d(net, 128, [1, 1], scope='conv1x1') net = custom_layers.pad2d(net, pad=(1, 1)) net = slim.conv2d(net, 256, [3, 3], stride=stride_b8_to_b12, scope='conv3x3', padding='VALID') end_points[end_point] = net end_point = 'concat' with tf.variable_scope(end_point): high_feature_list = [] for i in range(9, 12): high_feature_list.append(end_points['block' + str(i)]) high_feature = tf.concat(high_feature_list, 1) end_points[end_point] = high_feature end_point = 'block4_concat' with tf.variable_scope(end_point): net_block4 = slim.conv2d(end_points['concat'], 128, [1, 1], scope='conv1x1') # print("net_block4 ========{}".format(net_block4)) net_block4 = tf.layers.conv2d_transpose( net_block4, 512, kernel_size=3, strides=(4, 4), data_format='channels_first') # print("net_block4 ========{}".format(net_block4)) end_points['block4'] += net_block4 end_point = 'block7_concat' with tf.variable_scope(end_point): net_block7 = slim.conv2d(end_points['concat'], 128, [1, 1], scope='conv1x1') # print("net_block4 ========{}".format(net_block4)) net_block7 = tf.layers.conv2d_transpose( net_block7, 1024, kernel_size=1, strides=(2, 2), data_format='channels_first') # print("net_block4 ========{}".format(net_block4)) end_points['block7'] += net_block7 end_point = 'block8_concat' with tf.variable_scope(end_point): net_block8 = slim.conv2d(end_points['concat'], 512, [1, 1], scope='conv1x1') end_points['block8'] += net_block8 # with tf.variable_scope(end_point): # print("=debug===========high_feature = {}".format(high_feature)) # for i in range(1,12): # print("=debug===== "+str(i)+" = {}".format(end_points['block'+str(i)])) # Prediction and localisations layers. predictions_pest = [] logits_pest = [] predictions = [] logits = [] localisations = [] for i, layer in enumerate(feat_layers): with tf.variable_scope(layer + '_box'): # print("=debug===== "+str(i)+" = {}".format(end_points[layer])) # 这里获取每一个anchor的预测值 pest, p, l = ssd_vgg_300.ssd_multibox_layer( end_points[layer], num_classes, anchor_sizes[i], anchor_ratios[i], normalizations[i]) predictions_pest.append(prediction_fn(pest)) logits_pest.append(pest) predictions.append(prediction_fn(p)) logits.append(p) localisations.append(l) return predictions_pest, logits_pest, predictions, localisations, logits, end_points