笔尖检测-实验模型关键代码

主要是在这三个文件中修改

anchor_generators/multiple_grid_anchor_generator.py中修改:313行开始,修改anchor尺寸及比例

models/feature_map_generators.py中修改:130行开始,修改用于预测的feature map的生成方式

models/ssd_mobilenet_v2_feature_extractor.py中修改:100行开始,修改用于预测的层的名字以及通道数

config配置文件中的修改

模型11

1
2
3
4
5
6
7
8
feature_map_layout = {
'from_layer': ['layer_8/expansion_output',
'layer_15/expansion_output',
'layer_19'],
'layer_depth': [-1, -1, -1],
'use_depthwise': self._use_depthwise,
'use_explicit_padding': self._use_explicit_padding,
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# ===================从此处修改预测层的代码============================
for index, from_layer in enumerate(feature_map_layout['from_layer']):
layer_depth = feature_map_layout['layer_depth'][index]
conv_kernel_size = 3
if 'conv_kernel_size' in feature_map_layout:
conv_kernel_size = feature_map_layout['conv_kernel_size'][index]
if from_layer:
feature_map = image_features[from_layer]
if from_layer == "layer_8/expansion_output":
# feature_map = image_features[from_layer]
layer_19_1x1 = slim.conv2d(
image_features['layer_15/expansion_output'],
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_19_1x1')
layer_19_1x1_upsample = ops.nearest_neighbor_upsampling(layer_19_1x1, 2)
feature_map = slim.conv2d(
feature_map,
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_8_expansion_output_1x1')
feature_map = feature_map + layer_19_1x1_upsample
if from_layer == "layer_19":
layer_15_1x1= slim.conv2d(
image_features['layer_15/expansion_output'],
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_15_1x1')
layer_15_passthrough= slim.max_pool2d(
layer_15_1x1,
[2, 2],
scope='passthrough_pool')
feature_map= slim.conv2d(
feature_map,
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_19_layer_15_passthrough_1x1')
feature_map = feature_map + layer_15_passthrough

base_from_layer = from_layer
feature_map_keys.append(from_layer)
else:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for layer, scale, scale_next in zip(
range(num_layers), scales[:-1], scales[1:]):
layer_box_specs = []
if layer == 0 and reduce_boxes_in_lowest_layer:
layer_box_specs = [(0.05, 1.0),(0.1, 1.0)]
elif layer == 1:
layer_box_specs = [(0.1, 1.0)]
elif layer == 2:
layer_box_specs = [(0.2, 1.0)]
elif layer == 3:
layer_box_specs = [(0.4, 1.0)]
# elif layer == 4:
# layer_box_specs = [(0.4, 1.0)]
else:
for aspect_ratio in aspect_ratios:
layer_box_specs.append((scale, aspect_ratio))
# Add one more anchor, with a scale between the current scale, and the
# scale for the next layer, with a specified aspect ratio (1.0 by
# default).
if interpolated_scale_aspect_ratio > 0.0:
layer_box_specs.append((np.sqrt(scale*scale_next),
interpolated_scale_aspect_ratio))

模型12

对1x1降维的卷积,不用relu激活函数,用线性函数,即卷集中加一句

1
normalizer_fn = None,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# ===================从此处修改预测层的代码============================
for index, from_layer in enumerate(feature_map_layout['from_layer']):
layer_depth = feature_map_layout['layer_depth'][index]
conv_kernel_size = 3
if 'conv_kernel_size' in feature_map_layout:
conv_kernel_size = feature_map_layout['conv_kernel_size'][index]
if from_layer:
feature_map = image_features[from_layer]
if from_layer == "layer_8/expansion_output":
# feature_map = image_features[from_layer]
layer_19_1x1 = slim.conv2d(
image_features['layer_15/expansion_output'],
256, [1, 1],
padding='SAME',
normalizer_fn = None,
stride=1,
scope='layer_19_1x1')
layer_19_1x1_upsample = ops.nearest_neighbor_upsampling(layer_19_1x1, 2)
feature_map = slim.conv2d(
feature_map,
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_8_expansion_output_1x1')
feature_map = feature_map + layer_19_1x1_upsample
if from_layer == "layer_19":
layer_15_1x1= slim.conv2d(
image_features['layer_15/expansion_output'],
512, [1, 1],
padding='SAME',
normalizer_fn = None,
stride=1,
scope='layer_15_1x1')
layer_15_passthrough= slim.max_pool2d(
layer_15_1x1,
[2, 2],
scope='passthrough_pool')
feature_map= slim.conv2d(
feature_map,
512, [1, 1],
padding='SAME',
normalizer_fn = None,
stride=1,
scope='layer_19_layer_15_passthrough_1x1')
feature_map = feature_map + layer_15_passthrough

base_from_layer = from_layer
feature_map_keys.append(from_layer)
else:

模型13

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# ===================从此处修改预测层的代码============================
for index, from_layer in enumerate(feature_map_layout['from_layer']):
layer_depth = feature_map_layout['layer_depth'][index]
conv_kernel_size = 3
if 'conv_kernel_size' in feature_map_layout:
conv_kernel_size = feature_map_layout['conv_kernel_size'][index]
if from_layer:
feature_map = image_features[from_layer]
if from_layer == "layer_8/expansion_output":
# feature_map = image_features[from_layer]
layer_19_1x1 = slim.conv2d(
image_features['layer_19'],
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_19_1x1')
layer_19_1x1_upsample = ops.nearest_neighbor_upsampling(layer_19_1x1, 2)
layer_15_1x1 = slim.conv2d(
image_features['layer_15/expansion_output'],
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_15_1x1')
layer_15_19 = layer_15_1x1 + layer_19_1x1_upsample
layer_15_19_upsample = ops.nearest_neighbor_upsampling(layer_15_19, 2)
feature_map = slim.conv2d(
feature_map,
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_8_expansion_output_1x1')
feature_map = feature_map + layer_15_19_upsample
if from_layer == "layer_19":
layer_15_1x1_2 = slim.conv2d(
image_features['layer_15/expansion_output'],
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_15_1x1_2')
layer_15_passthrough= slim.max_pool2d(
layer_15_1x1_2,
[2, 2],
scope='passthrough_pool')
feature_map= slim.conv2d(
feature_map,
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_19_layer_15_passthrough_1x1')
feature_map = feature_map + layer_15_passthrough

base_from_layer = from_layer
feature_map_keys.append(from_layer)
else:

模型14

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# ===================从此处修改预测层的代码============================
layer_15_1x1 = slim.conv2d(
image_features['layer_15/expansion_output'],
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_15_1x1')

for index, from_layer in enumerate(feature_map_layout['from_layer']):
layer_depth = feature_map_layout['layer_depth'][index]
conv_kernel_size = 3
if 'conv_kernel_size' in feature_map_layout:
conv_kernel_size = feature_map_layout['conv_kernel_size'][index]
if from_layer:
feature_map = image_features[from_layer]
if from_layer == "layer_8/expansion_output":
# feature_map = image_features[from_layer]
layer_15_1x1_upsample = ops.nearest_neighbor_upsampling(layer_15_1x1, 2)
feature_map = slim.conv2d(
feature_map,
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_8_expansion_output_1x1')
feature_map = feature_map + layer_15_1x1_upsample
if from_layer == "layer_15/expansion_output":
feature_map = layer_15_1x1
if from_layer == "layer_19":
layer_15_passthrough= slim.max_pool2d(
layer_15_1x1,
[2, 2],
scope='passthrough_pool')
feature_map= slim.conv2d(
feature_map,
512, [1, 1],
padding='SAME',
stride=1,
scope='layer_19_layer_15_passthrough_1x1')
feature_map = feature_map + layer_15_passthrough

base_from_layer = from_layer
feature_map_keys.append(from_layer)
else:

模型15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# ===================从此处修改预测层的代码============================
layer_15_1x1 = slim.conv2d(
image_features['layer_15/expansion_output'],
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_15_1x1')

for index, from_layer in enumerate(feature_map_layout['from_layer']):
layer_depth = feature_map_layout['layer_depth'][index]
conv_kernel_size = 3
if 'conv_kernel_size' in feature_map_layout:
conv_kernel_size = feature_map_layout['conv_kernel_size'][index]
if from_layer:
feature_map = image_features[from_layer]
if from_layer == "layer_8/expansion_output":
# feature_map = image_features[from_layer]
layer_15_1x1_upsample = ops.nearest_neighbor_upsampling(layer_15_1x1, 2)
feature_map = slim.conv2d(
feature_map,
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_8_expansion_output_1x1')
feature_map = feature_map + layer_15_1x1_upsample
if from_layer == "layer_15/expansion_output":
feature_map = layer_15_1x1
if from_layer == "layer_19":
layer_15_passthrough= slim.max_pool2d(
layer_15_1x1,
[2, 2],
scope='passthrough_pool')
feature_map= slim.conv2d(
feature_map,
256, [1, 1],
padding='SAME',
stride=1,
scope='layer_19_layer_15_passthrough_1x1')
feature_map = feature_map + layer_15_passthrough

base_from_layer = from_layer
feature_map_keys.append(from_layer)
else: