├── label.names
├── README.md
├── Yolov3-Detection.py
└── YOLOV3.prototxt
/label.names:
--------------------------------------------------------------------------------
1 | person
2 | cat
3 | dog
4 | bicycle
5 | boat
6 | bus
7 | truck
8 | car
9 | motorcycle
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## YOLOV3-Detection
2 | Object detection program based on PyCaffe and YoloV3
3 |
4 | ## Environmental requirements
5 | 1.Python2.7
2.python-opencv3.Caffe(add upsample layer https://github.com/maxuehao/caffe)
6 |
7 | ## CaffeModel
8 | 1.Caffeodel https://pan.baidu.com/s/1u_xCALs-tGr-7GiocqvsNA
9 |
10 | 
11 |
12 |
--------------------------------------------------------------------------------
/Yolov3-Detection.py:
--------------------------------------------------------------------------------
1 | # -*- coding: UTF-8 -*-
2 | from __future__ import division
3 | import math
4 | import caffe
5 | import numpy as np
6 | import cv2
7 | from collections import Counter
8 | import time,os
9 |
10 | #nms算法
11 | def nms(dets, thresh=0.35):
12 | #dets:N*M,N是bbox的个数,M的前4位是对应的(x1,y1,x2,y2),第5位是对应的分数
13 | #thresh:0.3,0.5....
14 | x1 = dets[:, 0]
15 | y1 = dets[:, 1]
16 | x2 = dets[:, 2]
17 | y2 = dets[:, 3]
18 | scores = dets[:, 4]
19 | areas = (x2 - x1 + 1) * (y2 - y1 + 1)#求每个bbox的面积
20 | order = scores.argsort()[::-1]#对分数进行倒排序
21 | keep = []#用来保存最后留下来的bbox
22 | while order.size > 0:
23 | i = order[0]#无条件保留每次迭代中置信度最高的bbox
24 | keep.append(i)
25 | #计算置信度最高的bbox和其他剩下bbox之间的交叉区域
26 | xx1 = np.maximum(x1[i], x1[order[1:]])
27 | yy1 = np.maximum(y1[i], y1[order[1:]])
28 | xx2 = np.minimum(x2[i], x2[order[1:]])
29 | yy2 = np.minimum(y2[i], y2[order[1:]])
30 | #计算置信度高的bbox和其他剩下bbox之间交叉区域的面积
31 | w = np.maximum(0.0, xx2 - xx1 + 1)
32 | h = np.maximum(0.0, yy2 - yy1 + 1)
33 | inter = w * h
34 | #求交叉区域的面积占两者(置信度高的bbox和其他bbox)面积和的必烈
35 | ovr = inter / (areas[i] + areas[order[1:]] - inter)
36 | #保留ovr小于thresh的bbox,进入下一次迭代。
37 | inds = np.where(ovr <= thresh)[0]
38 | #因为ovr中的索引不包括order[0]所以要向后移动一位
39 | order = order[inds + 1]
40 | return keep
41 |
42 | #定义sigmod函数
43 | def sigmod(x):
44 | return 1.0 / (1.0 + math.exp(-x))
45 |
46 | #检测模型前向运算
47 | def Load_YOLO_model(net,test_img,feature_conv_name):
48 | input_img = cv2.resize(test_img,(INPUT_SIZE,INPUT_SIZE),interpolation=cv2.INTER_AREA)
49 | input_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB)
50 | input_img = input_img.transpose(2,0,1)
51 | input_img = input_img.reshape((1,3,INPUT_SIZE,INPUT_SIZE))
52 | out = net.forward_all(data=input_img/256.)
53 | shape = []
54 | for i in range(3):
55 | shape.append(out[feature_conv_name[i]].transpose(0, 3, 2, 1)[0])
56 | return shape
57 |
58 | #处理前向输出feature_map
59 | def feature_map_handle(length, shape, test_img, box_list):
60 | ih,iw,_ = test_img.shape
61 | confidence = CONFIDENCE_DICT[str(length)]
62 | for i in range(length):
63 | for j in range(length):
64 | anchors_boxs_shape = shape[i][j].reshape((3, CLASS_NUM + 5))
65 | #将每个预测框向量包含信息迭代出来
66 | for k in range(3):
67 | anchors_box = anchors_boxs_shape[k]
68 | #计算实际置信度,阀值处理,anchors_box[7]
69 | score = sigmod(anchors_box[4])
70 | if score > confidence:
71 | #tolist()数组转list
72 | cls_list = anchors_box[5:CLASS_NUM + 5].tolist()
73 | label = cls_list.index(max(cls_list))
74 | obj_score = score
75 | x = ((sigmod(anchors_box[0]) + i)/float(length))*iw
76 | y = ((sigmod(anchors_box[1]) + j)/float(length))*ih
77 | feature_map_size = int(INPUT_SIZE/32)
78 | if length == feature_map_size:
79 | w = (((BIAS_W[k+6]) * math.exp(anchors_box[2]))/INPUT_SIZE)*iw
80 | h = (((BIAS_H[k+6]) * math.exp(anchors_box[3]))/INPUT_SIZE)*ih
81 | elif length == feature_map_size*2:
82 | w = (((BIAS_W[k+3]) * math.exp(anchors_box[2]))/INPUT_SIZE)*iw
83 | h = (((BIAS_H[k+3]) * math.exp(anchors_box[3]))/INPUT_SIZE)*ih
84 | elif length == feature_map_size*4:
85 | w = (((BIAS_W[k]) * math.exp(anchors_box[2]))/INPUT_SIZE)*iw
86 | h = (((BIAS_H[k]) * math.exp(anchors_box[3]))/INPUT_SIZE)*ih
87 | x1 = int(x - w * 0.5)
88 | x2 = int(x + w * 0.5)
89 | y1 = int(y - h * 0.5)
90 | y2 = int(y + h * 0.5)
91 | box_list.append([x1,y1,x2,y2,round(obj_score,4),label])
92 |
93 |
94 | #3个feature_map的预选框的合并及NMS处理
95 | def dect_box_handle(out_shape, test_img):
96 | box_list = []
97 | output_box = []
98 | for i in range(3):
99 | length = len(out_shape[i])
100 | feature_map_handle(length, out_shape[i], test_img, box_list)
101 | #print box_list
102 | if box_list:
103 | retain_box_index = nms(np.array(box_list))
104 | for i in retain_box_index:
105 | output_box.append(box_list[i])
106 | return output_box
107 |
108 | if __name__ == "__main__":
109 | FPS = 0
110 | #类别数目
111 | CLASS_NUM = 9
112 | #输入图片尺寸
113 | INPUT_SIZE = 416
114 | #加载label文件
115 | LABEL_NAMES = []
116 | with open('label.names', 'r') as f:
117 | for line in f.readlines():
118 | LABEL_NAMES.append(line.strip())
119 | #置信度
120 | CONFIDENCE_DICT = {"13":0.6, "26":0.5, "52":0.4}
121 | #模型训练时设置的anchor_box比例
122 | BIAS_W = [10, 16, 33, 30, 62, 59, 116, 156, 372]
123 | BIAS_H = [13, 30, 23, 61, 45, 119, 90, 198, 362]
124 | #需要输出的3层feature_map的名称
125 | feature_conv_name = ["layer44-conv","layer56-conv","layer68-conv"]
126 | caffe.set_mode_gpu()
127 | #加载检测模型
128 | net = caffe.Net('YOLOV3.prototxt', 'yolov3_res18.caffemodel', caffe.TEST)
129 | cap = cv2.VideoCapture(0)
130 | cap.set(3,1920) #设置分辨率
131 | cap.set(4,1080)
132 | #################################
133 | while True:
134 | ret, test_img = cap.read()
135 | start = time.clock()
136 | print ("++++++++++++++++++++++++++++++++++++++++++++++++++++++")
137 | print ("FPS:%s"%FPS)
138 | FPS += 1
139 | out_shape = Load_YOLO_model(net,test_img,feature_conv_name)
140 | end = time.clock()
141 | print "SPEND_TIME:"+str(end-start)
142 | output_box = dect_box_handle(out_shape, test_img)
143 | #绘制检测框
144 | for i in output_box:
145 | cv2.rectangle(test_img, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
146 | cv2.circle(test_img, (int(i[0]+0.5*(i[2]-i[0])), int(i[1]+0.5*(i[3]-i[1]))), 2, (0,255,0), 3)
147 | cv2.putText(test_img, "Score:"+str(i[4]), (i[0], i[1]-5), 0, 0.7, (255, 0, 255), 2)
148 | cv2.putText(test_img, "Label:"+str(LABEL_NAMES[i[5]]), (i[0], i[1]-20), 0, 0.7, (255, 255, 0), 2)
149 | #更新buff数组
150 | cv2.imshow("capture", test_img)
151 | cv2.waitKey(1)
152 | FPS += 1
153 | cap.release()
154 | cv2.destroyAllWindows()
155 |
--------------------------------------------------------------------------------
/YOLOV3.prototxt:
--------------------------------------------------------------------------------
1 | name: "DarkNet"
2 | input: "data"
3 | input_shape {
4 | dim: 1
5 | dim: 3
6 | dim: 416
7 | dim: 416
8 | }
9 |
10 | layer {
11 | bottom: "data"
12 | top: "layer1-conv"
13 | name: "layer1-conv"
14 | type: "Convolution"
15 | convolution_param {
16 | num_output: 64
17 | kernel_size: 7
18 | pad: 3
19 | stride: 2
20 | bias_term: false
21 | }
22 | }
23 | layer {
24 | bottom: "layer1-conv"
25 | top: "layer1-conv"
26 | name: "layer1-bn"
27 | type: "BatchNorm"
28 | batch_norm_param {
29 | use_global_stats: true
30 | }
31 | }
32 | layer {
33 | bottom: "layer1-conv"
34 | top: "layer1-conv"
35 | name: "layer1-scale"
36 | type: "Scale"
37 | scale_param {
38 | bias_term: true
39 | }
40 | }
41 | layer {
42 | bottom: "layer1-conv"
43 | top: "layer1-conv"
44 | name: "layer1-act"
45 | type: "ReLU"
46 | }
47 | layer {
48 | bottom: "layer1-conv"
49 | top: "layer2-maxpool"
50 | name: "layer2-maxpool"
51 | type: "Pooling"
52 | pooling_param {
53 | kernel_size: 2
54 | stride: 2
55 | pool: MAX
56 | }
57 | }
58 | layer {
59 | bottom: "layer2-maxpool"
60 | top: "layer3-conv"
61 | name: "layer3-conv"
62 | type: "Convolution"
63 | convolution_param {
64 | num_output: 64
65 | kernel_size: 1
66 | pad: 0
67 | stride: 1
68 | bias_term: false
69 | }
70 | }
71 | layer {
72 | bottom: "layer3-conv"
73 | top: "layer3-conv"
74 | name: "layer3-bn"
75 | type: "BatchNorm"
76 | batch_norm_param {
77 | use_global_stats: true
78 | }
79 | }
80 | layer {
81 | bottom: "layer3-conv"
82 | top: "layer3-conv"
83 | name: "layer3-scale"
84 | type: "Scale"
85 | scale_param {
86 | bias_term: true
87 | }
88 | }
89 | layer {
90 | bottom: "layer2-maxpool"
91 | top: "layer5-conv"
92 | name: "layer5-conv"
93 | type: "Convolution"
94 | convolution_param {
95 | num_output: 64
96 | kernel_size: 3
97 | pad: 1
98 | stride: 1
99 | bias_term: false
100 | }
101 | }
102 | layer {
103 | bottom: "layer5-conv"
104 | top: "layer5-conv"
105 | name: "layer5-bn"
106 | type: "BatchNorm"
107 | batch_norm_param {
108 | use_global_stats: true
109 | }
110 | }
111 | layer {
112 | bottom: "layer5-conv"
113 | top: "layer5-conv"
114 | name: "layer5-scale"
115 | type: "Scale"
116 | scale_param {
117 | bias_term: true
118 | }
119 | }
120 | layer {
121 | bottom: "layer5-conv"
122 | top: "layer5-conv"
123 | name: "layer5-act"
124 | type: "ReLU"
125 | }
126 | layer {
127 | bottom: "layer5-conv"
128 | top: "layer6-conv"
129 | name: "layer6-conv"
130 | type: "Convolution"
131 | convolution_param {
132 | num_output: 64
133 | kernel_size: 3
134 | pad: 1
135 | stride: 1
136 | bias_term: false
137 | }
138 | }
139 | layer {
140 | bottom: "layer6-conv"
141 | top: "layer6-conv"
142 | name: "layer6-bn"
143 | type: "BatchNorm"
144 | batch_norm_param {
145 | use_global_stats: true
146 | }
147 | }
148 | layer {
149 | bottom: "layer6-conv"
150 | top: "layer6-conv"
151 | name: "layer6-scale"
152 | type: "Scale"
153 | scale_param {
154 | bias_term: true
155 | }
156 | }
157 | layer {
158 | bottom: "layer3-conv"
159 | bottom: "layer6-conv"
160 | top: "layer7-shortcut"
161 | name: "layer7-shortcut"
162 | type: "Eltwise"
163 | eltwise_param {
164 | operation: SUM
165 | }
166 | }
167 | layer {
168 | bottom: "layer7-shortcut"
169 | top: "layer7-shortcut"
170 | name: "layer7-act"
171 | type: "ReLU"
172 | }
173 | layer {
174 | bottom: "layer7-shortcut"
175 | top: "layer8-conv"
176 | name: "layer8-conv"
177 | type: "Convolution"
178 | convolution_param {
179 | num_output: 64
180 | kernel_size: 3
181 | pad: 1
182 | stride: 1
183 | bias_term: false
184 | }
185 | }
186 | layer {
187 | bottom: "layer8-conv"
188 | top: "layer8-conv"
189 | name: "layer8-bn"
190 | type: "BatchNorm"
191 | batch_norm_param {
192 | use_global_stats: true
193 | }
194 | }
195 | layer {
196 | bottom: "layer8-conv"
197 | top: "layer8-conv"
198 | name: "layer8-scale"
199 | type: "Scale"
200 | scale_param {
201 | bias_term: true
202 | }
203 | }
204 | layer {
205 | bottom: "layer8-conv"
206 | top: "layer8-conv"
207 | name: "layer8-act"
208 | type: "ReLU"
209 | }
210 | layer {
211 | bottom: "layer8-conv"
212 | top: "layer9-conv"
213 | name: "layer9-conv"
214 | type: "Convolution"
215 | convolution_param {
216 | num_output: 64
217 | kernel_size: 3
218 | pad: 1
219 | stride: 1
220 | bias_term: false
221 | }
222 | }
223 | layer {
224 | bottom: "layer9-conv"
225 | top: "layer9-conv"
226 | name: "layer9-bn"
227 | type: "BatchNorm"
228 | batch_norm_param {
229 | use_global_stats: true
230 | }
231 | }
232 | layer {
233 | bottom: "layer9-conv"
234 | top: "layer9-conv"
235 | name: "layer9-scale"
236 | type: "Scale"
237 | scale_param {
238 | bias_term: true
239 | }
240 | }
241 | layer {
242 | bottom: "layer7-shortcut"
243 | bottom: "layer9-conv"
244 | top: "layer10-shortcut"
245 | name: "layer10-shortcut"
246 | type: "Eltwise"
247 | eltwise_param {
248 | operation: SUM
249 | }
250 | }
251 | layer {
252 | bottom: "layer10-shortcut"
253 | top: "layer10-shortcut"
254 | name: "layer10-act"
255 | type: "ReLU"
256 | }
257 | layer {
258 | bottom: "layer10-shortcut"
259 | top: "layer11-maxpool"
260 | name: "layer11-maxpool"
261 | type: "Pooling"
262 | pooling_param {
263 | kernel_size: 2
264 | stride: 2
265 | pool: MAX
266 | }
267 | }
268 | layer {
269 | bottom: "layer11-maxpool"
270 | top: "layer12-conv"
271 | name: "layer12-conv"
272 | type: "Convolution"
273 | convolution_param {
274 | num_output: 128
275 | kernel_size: 3
276 | pad: 1
277 | stride: 1
278 | bias_term: false
279 | }
280 | }
281 | layer {
282 | bottom: "layer12-conv"
283 | top: "layer12-conv"
284 | name: "layer12-bn"
285 | type: "BatchNorm"
286 | batch_norm_param {
287 | use_global_stats: true
288 | }
289 | }
290 | layer {
291 | bottom: "layer12-conv"
292 | top: "layer12-conv"
293 | name: "layer12-scale"
294 | type: "Scale"
295 | scale_param {
296 | bias_term: true
297 | }
298 | }
299 | layer {
300 | bottom: "layer11-maxpool"
301 | top: "layer14-conv"
302 | name: "layer14-conv"
303 | type: "Convolution"
304 | convolution_param {
305 | num_output: 128
306 | kernel_size: 3
307 | pad: 1
308 | stride: 1
309 | bias_term: false
310 | }
311 | }
312 | layer {
313 | bottom: "layer14-conv"
314 | top: "layer14-conv"
315 | name: "layer14-bn"
316 | type: "BatchNorm"
317 | batch_norm_param {
318 | use_global_stats: true
319 | }
320 | }
321 | layer {
322 | bottom: "layer14-conv"
323 | top: "layer14-conv"
324 | name: "layer14-scale"
325 | type: "Scale"
326 | scale_param {
327 | bias_term: true
328 | }
329 | }
330 | layer {
331 | bottom: "layer14-conv"
332 | top: "layer14-conv"
333 | name: "layer14-act"
334 | type: "ReLU"
335 | }
336 | layer {
337 | bottom: "layer14-conv"
338 | top: "layer15-conv"
339 | name: "layer15-conv"
340 | type: "Convolution"
341 | convolution_param {
342 | num_output: 128
343 | kernel_size: 3
344 | pad: 1
345 | stride: 1
346 | bias_term: false
347 | }
348 | }
349 | layer {
350 | bottom: "layer15-conv"
351 | top: "layer15-conv"
352 | name: "layer15-bn"
353 | type: "BatchNorm"
354 | batch_norm_param {
355 | use_global_stats: true
356 | }
357 | }
358 | layer {
359 | bottom: "layer15-conv"
360 | top: "layer15-conv"
361 | name: "layer15-scale"
362 | type: "Scale"
363 | scale_param {
364 | bias_term: true
365 | }
366 | }
367 | layer {
368 | bottom: "layer12-conv"
369 | bottom: "layer15-conv"
370 | top: "layer16-shortcut"
371 | name: "layer16-shortcut"
372 | type: "Eltwise"
373 | eltwise_param {
374 | operation: SUM
375 | }
376 | }
377 | layer {
378 | bottom: "layer16-shortcut"
379 | top: "layer16-shortcut"
380 | name: "layer16-act"
381 | type: "ReLU"
382 | }
383 | layer {
384 | bottom: "layer16-shortcut"
385 | top: "layer17-conv"
386 | name: "layer17-conv"
387 | type: "Convolution"
388 | convolution_param {
389 | num_output: 128
390 | kernel_size: 3
391 | pad: 1
392 | stride: 1
393 | bias_term: false
394 | }
395 | }
396 | layer {
397 | bottom: "layer17-conv"
398 | top: "layer17-conv"
399 | name: "layer17-bn"
400 | type: "BatchNorm"
401 | batch_norm_param {
402 | use_global_stats: true
403 | }
404 | }
405 | layer {
406 | bottom: "layer17-conv"
407 | top: "layer17-conv"
408 | name: "layer17-scale"
409 | type: "Scale"
410 | scale_param {
411 | bias_term: true
412 | }
413 | }
414 | layer {
415 | bottom: "layer17-conv"
416 | top: "layer17-conv"
417 | name: "layer17-act"
418 | type: "ReLU"
419 | }
420 | layer {
421 | bottom: "layer17-conv"
422 | top: "layer18-conv"
423 | name: "layer18-conv"
424 | type: "Convolution"
425 | convolution_param {
426 | num_output: 128
427 | kernel_size: 3
428 | pad: 1
429 | stride: 1
430 | bias_term: false
431 | }
432 | }
433 | layer {
434 | bottom: "layer18-conv"
435 | top: "layer18-conv"
436 | name: "layer18-bn"
437 | type: "BatchNorm"
438 | batch_norm_param {
439 | use_global_stats: true
440 | }
441 | }
442 | layer {
443 | bottom: "layer18-conv"
444 | top: "layer18-conv"
445 | name: "layer18-scale"
446 | type: "Scale"
447 | scale_param {
448 | bias_term: true
449 | }
450 | }
451 | layer {
452 | bottom: "layer16-shortcut"
453 | bottom: "layer18-conv"
454 | top: "layer19-shortcut"
455 | name: "layer19-shortcut"
456 | type: "Eltwise"
457 | eltwise_param {
458 | operation: SUM
459 | }
460 | }
461 | layer {
462 | bottom: "layer19-shortcut"
463 | top: "layer19-shortcut"
464 | name: "layer19-act"
465 | type: "ReLU"
466 | }
467 | layer {
468 | bottom: "layer19-shortcut"
469 | top: "layer20-maxpool"
470 | name: "layer20-maxpool"
471 | type: "Pooling"
472 | pooling_param {
473 | kernel_size: 2
474 | stride: 2
475 | pool: MAX
476 | }
477 | }
478 | layer {
479 | bottom: "layer20-maxpool"
480 | top: "layer21-conv"
481 | name: "layer21-conv"
482 | type: "Convolution"
483 | convolution_param {
484 | num_output: 256
485 | kernel_size: 3
486 | pad: 1
487 | stride: 1
488 | bias_term: false
489 | }
490 | }
491 | layer {
492 | bottom: "layer21-conv"
493 | top: "layer21-conv"
494 | name: "layer21-bn"
495 | type: "BatchNorm"
496 | batch_norm_param {
497 | use_global_stats: true
498 | }
499 | }
500 | layer {
501 | bottom: "layer21-conv"
502 | top: "layer21-conv"
503 | name: "layer21-scale"
504 | type: "Scale"
505 | scale_param {
506 | bias_term: true
507 | }
508 | }
509 | layer {
510 | bottom: "layer20-maxpool"
511 | top: "layer23-conv"
512 | name: "layer23-conv"
513 | type: "Convolution"
514 | convolution_param {
515 | num_output: 256
516 | kernel_size: 3
517 | pad: 1
518 | stride: 1
519 | bias_term: false
520 | }
521 | }
522 | layer {
523 | bottom: "layer23-conv"
524 | top: "layer23-conv"
525 | name: "layer23-bn"
526 | type: "BatchNorm"
527 | batch_norm_param {
528 | use_global_stats: true
529 | }
530 | }
531 | layer {
532 | bottom: "layer23-conv"
533 | top: "layer23-conv"
534 | name: "layer23-scale"
535 | type: "Scale"
536 | scale_param {
537 | bias_term: true
538 | }
539 | }
540 | layer {
541 | bottom: "layer23-conv"
542 | top: "layer23-conv"
543 | name: "layer23-act"
544 | type: "ReLU"
545 | }
546 | layer {
547 | bottom: "layer23-conv"
548 | top: "layer24-conv"
549 | name: "layer24-conv"
550 | type: "Convolution"
551 | convolution_param {
552 | num_output: 256
553 | kernel_size: 3
554 | pad: 1
555 | stride: 1
556 | bias_term: false
557 | }
558 | }
559 | layer {
560 | bottom: "layer24-conv"
561 | top: "layer24-conv"
562 | name: "layer24-bn"
563 | type: "BatchNorm"
564 | batch_norm_param {
565 | use_global_stats: true
566 | }
567 | }
568 | layer {
569 | bottom: "layer24-conv"
570 | top: "layer24-conv"
571 | name: "layer24-scale"
572 | type: "Scale"
573 | scale_param {
574 | bias_term: true
575 | }
576 | }
577 | layer {
578 | bottom: "layer21-conv"
579 | bottom: "layer24-conv"
580 | top: "layer25-shortcut"
581 | name: "layer25-shortcut"
582 | type: "Eltwise"
583 | eltwise_param {
584 | operation: SUM
585 | }
586 | }
587 | layer {
588 | bottom: "layer25-shortcut"
589 | top: "layer25-shortcut"
590 | name: "layer25-act"
591 | type: "ReLU"
592 | }
593 | layer {
594 | bottom: "layer25-shortcut"
595 | top: "layer26-conv"
596 | name: "layer26-conv"
597 | type: "Convolution"
598 | convolution_param {
599 | num_output: 256
600 | kernel_size: 3
601 | pad: 1
602 | stride: 1
603 | bias_term: false
604 | }
605 | }
606 | layer {
607 | bottom: "layer26-conv"
608 | top: "layer26-conv"
609 | name: "layer26-bn"
610 | type: "BatchNorm"
611 | batch_norm_param {
612 | use_global_stats: true
613 | }
614 | }
615 | layer {
616 | bottom: "layer26-conv"
617 | top: "layer26-conv"
618 | name: "layer26-scale"
619 | type: "Scale"
620 | scale_param {
621 | bias_term: true
622 | }
623 | }
624 | layer {
625 | bottom: "layer26-conv"
626 | top: "layer26-conv"
627 | name: "layer26-act"
628 | type: "ReLU"
629 | }
630 | layer {
631 | bottom: "layer26-conv"
632 | top: "layer27-conv"
633 | name: "layer27-conv"
634 | type: "Convolution"
635 | convolution_param {
636 | num_output: 256
637 | kernel_size: 3
638 | pad: 1
639 | stride: 1
640 | bias_term: false
641 | }
642 | }
643 | layer {
644 | bottom: "layer27-conv"
645 | top: "layer27-conv"
646 | name: "layer27-bn"
647 | type: "BatchNorm"
648 | batch_norm_param {
649 | use_global_stats: true
650 | }
651 | }
652 | layer {
653 | bottom: "layer27-conv"
654 | top: "layer27-conv"
655 | name: "layer27-scale"
656 | type: "Scale"
657 | scale_param {
658 | bias_term: true
659 | }
660 | }
661 | layer {
662 | bottom: "layer25-shortcut"
663 | bottom: "layer27-conv"
664 | top: "layer28-shortcut"
665 | name: "layer28-shortcut"
666 | type: "Eltwise"
667 | eltwise_param {
668 | operation: SUM
669 | }
670 | }
671 | layer {
672 | bottom: "layer28-shortcut"
673 | top: "layer28-shortcut"
674 | name: "layer28-act"
675 | type: "ReLU"
676 | }
677 | layer {
678 | bottom: "layer28-shortcut"
679 | top: "layer29-maxpool"
680 | name: "layer29-maxpool"
681 | type: "Pooling"
682 | pooling_param {
683 | kernel_size: 2
684 | stride: 2
685 | pool: MAX
686 | }
687 | }
688 | layer {
689 | bottom: "layer29-maxpool"
690 | top: "layer30-conv"
691 | name: "layer30-conv"
692 | type: "Convolution"
693 | convolution_param {
694 | num_output: 512
695 | kernel_size: 3
696 | pad: 1
697 | stride: 1
698 | bias_term: false
699 | }
700 | }
701 | layer {
702 | bottom: "layer30-conv"
703 | top: "layer30-conv"
704 | name: "layer30-bn"
705 | type: "BatchNorm"
706 | batch_norm_param {
707 | use_global_stats: true
708 | }
709 | }
710 | layer {
711 | bottom: "layer30-conv"
712 | top: "layer30-conv"
713 | name: "layer30-scale"
714 | type: "Scale"
715 | scale_param {
716 | bias_term: true
717 | }
718 | }
719 | layer {
720 | bottom: "layer29-maxpool"
721 | top: "layer32-conv"
722 | name: "layer32-conv"
723 | type: "Convolution"
724 | convolution_param {
725 | num_output: 512
726 | kernel_size: 3
727 | pad: 1
728 | stride: 1
729 | bias_term: false
730 | }
731 | }
732 | layer {
733 | bottom: "layer32-conv"
734 | top: "layer32-conv"
735 | name: "layer32-bn"
736 | type: "BatchNorm"
737 | batch_norm_param {
738 | use_global_stats: true
739 | }
740 | }
741 | layer {
742 | bottom: "layer32-conv"
743 | top: "layer32-conv"
744 | name: "layer32-scale"
745 | type: "Scale"
746 | scale_param {
747 | bias_term: true
748 | }
749 | }
750 | layer {
751 | bottom: "layer32-conv"
752 | top: "layer32-conv"
753 | name: "layer32-act"
754 | type: "ReLU"
755 | }
756 | layer {
757 | bottom: "layer32-conv"
758 | top: "layer33-conv"
759 | name: "layer33-conv"
760 | type: "Convolution"
761 | convolution_param {
762 | num_output: 512
763 | kernel_size: 3
764 | pad: 1
765 | stride: 1
766 | bias_term: false
767 | }
768 | }
769 | layer {
770 | bottom: "layer33-conv"
771 | top: "layer33-conv"
772 | name: "layer33-bn"
773 | type: "BatchNorm"
774 | batch_norm_param {
775 | use_global_stats: true
776 | }
777 | }
778 | layer {
779 | bottom: "layer33-conv"
780 | top: "layer33-conv"
781 | name: "layer33-scale"
782 | type: "Scale"
783 | scale_param {
784 | bias_term: true
785 | }
786 | }
787 | layer {
788 | bottom: "layer30-conv"
789 | bottom: "layer33-conv"
790 | top: "layer34-shortcut"
791 | name: "layer34-shortcut"
792 | type: "Eltwise"
793 | eltwise_param {
794 | operation: SUM
795 | }
796 | }
797 | layer {
798 | bottom: "layer34-shortcut"
799 | top: "layer34-shortcut"
800 | name: "layer34-act"
801 | type: "ReLU"
802 | }
803 | layer {
804 | bottom: "layer34-shortcut"
805 | top: "layer35-conv"
806 | name: "layer35-conv"
807 | type: "Convolution"
808 | convolution_param {
809 | num_output: 512
810 | kernel_size: 3
811 | pad: 1
812 | stride: 1
813 | bias_term: false
814 | }
815 | }
816 | layer {
817 | bottom: "layer35-conv"
818 | top: "layer35-conv"
819 | name: "layer35-bn"
820 | type: "BatchNorm"
821 | batch_norm_param {
822 | use_global_stats: true
823 | }
824 | }
825 | layer {
826 | bottom: "layer35-conv"
827 | top: "layer35-conv"
828 | name: "layer35-scale"
829 | type: "Scale"
830 | scale_param {
831 | bias_term: true
832 | }
833 | }
834 | layer {
835 | bottom: "layer35-conv"
836 | top: "layer35-conv"
837 | name: "layer35-act"
838 | type: "ReLU"
839 | }
840 | layer {
841 | bottom: "layer35-conv"
842 | top: "layer36-conv"
843 | name: "layer36-conv"
844 | type: "Convolution"
845 | convolution_param {
846 | num_output: 512
847 | kernel_size: 3
848 | pad: 1
849 | stride: 1
850 | bias_term: false
851 | }
852 | }
853 | layer {
854 | bottom: "layer36-conv"
855 | top: "layer36-conv"
856 | name: "layer36-bn"
857 | type: "BatchNorm"
858 | batch_norm_param {
859 | use_global_stats: true
860 | }
861 | }
862 | layer {
863 | bottom: "layer36-conv"
864 | top: "layer36-conv"
865 | name: "layer36-scale"
866 | type: "Scale"
867 | scale_param {
868 | bias_term: true
869 | }
870 | }
871 | layer {
872 | bottom: "layer34-shortcut"
873 | bottom: "layer36-conv"
874 | top: "layer37-shortcut"
875 | name: "layer37-shortcut"
876 | type: "Eltwise"
877 | eltwise_param {
878 | operation: SUM
879 | }
880 | }
881 | layer {
882 | bottom: "layer37-shortcut"
883 | top: "layer37-shortcut"
884 | name: "layer37-act"
885 | type: "ReLU"
886 | }
887 | layer {
888 | bottom: "layer37-shortcut"
889 | top: "layer38-conv"
890 | name: "layer38-conv"
891 | type: "Convolution"
892 | convolution_param {
893 | num_output: 512
894 | kernel_size: 1
895 | stride: 1
896 | bias_term: false
897 | }
898 | }
899 | layer {
900 | bottom: "layer38-conv"
901 | top: "layer38-conv"
902 | name: "layer38-bn"
903 | type: "BatchNorm"
904 | batch_norm_param {
905 | use_global_stats: true
906 | }
907 | }
908 | layer {
909 | bottom: "layer38-conv"
910 | top: "layer38-conv"
911 | name: "layer38-scale"
912 | type: "Scale"
913 | scale_param {
914 | bias_term: true
915 | }
916 | }
917 | layer {
918 | bottom: "layer38-conv"
919 | top: "layer38-conv"
920 | name: "layer38-act"
921 | type: "ReLU"
922 | }
923 | layer {
924 | bottom: "layer38-conv"
925 | top: "layer39-conv"
926 | name: "layer39-conv"
927 | type: "Convolution"
928 | convolution_param {
929 | num_output: 1024
930 | kernel_size: 3
931 | pad: 1
932 | stride: 1
933 | bias_term: false
934 | }
935 | }
936 | layer {
937 | bottom: "layer39-conv"
938 | top: "layer39-conv"
939 | name: "layer39-bn"
940 | type: "BatchNorm"
941 | batch_norm_param {
942 | use_global_stats: true
943 | }
944 | }
945 | layer {
946 | bottom: "layer39-conv"
947 | top: "layer39-conv"
948 | name: "layer39-scale"
949 | type: "Scale"
950 | scale_param {
951 | bias_term: true
952 | }
953 | }
954 | layer {
955 | bottom: "layer39-conv"
956 | top: "layer39-conv"
957 | name: "layer39-act"
958 | type: "ReLU"
959 | }
960 | layer {
961 | bottom: "layer39-conv"
962 | top: "layer40-conv"
963 | name: "layer40-conv"
964 | type: "Convolution"
965 | convolution_param {
966 | num_output: 512
967 | kernel_size: 1
968 | stride: 1
969 | bias_term: false
970 | }
971 | }
972 | layer {
973 | bottom: "layer40-conv"
974 | top: "layer40-conv"
975 | name: "layer40-bn"
976 | type: "BatchNorm"
977 | batch_norm_param {
978 | use_global_stats: true
979 | }
980 | }
981 | layer {
982 | bottom: "layer40-conv"
983 | top: "layer40-conv"
984 | name: "layer40-scale"
985 | type: "Scale"
986 | scale_param {
987 | bias_term: true
988 | }
989 | }
990 | layer {
991 | bottom: "layer40-conv"
992 | top: "layer40-conv"
993 | name: "layer40-act"
994 | type: "ReLU"
995 | }
996 | layer {
997 | bottom: "layer40-conv"
998 | top: "layer41-conv"
999 | name: "layer41-conv"
1000 | type: "Convolution"
1001 | convolution_param {
1002 | num_output: 1024
1003 | kernel_size: 3
1004 | pad: 1
1005 | stride: 1
1006 | bias_term: false
1007 | }
1008 | }
1009 | layer {
1010 | bottom: "layer41-conv"
1011 | top: "layer41-conv"
1012 | name: "layer41-bn"
1013 | type: "BatchNorm"
1014 | batch_norm_param {
1015 | use_global_stats: true
1016 | }
1017 | }
1018 | layer {
1019 | bottom: "layer41-conv"
1020 | top: "layer41-conv"
1021 | name: "layer41-scale"
1022 | type: "Scale"
1023 | scale_param {
1024 | bias_term: true
1025 | }
1026 | }
1027 | layer {
1028 | bottom: "layer41-conv"
1029 | top: "layer41-conv"
1030 | name: "layer41-act"
1031 | type: "ReLU"
1032 | }
1033 | layer {
1034 | bottom: "layer41-conv"
1035 | top: "layer42-conv"
1036 | name: "layer42-conv"
1037 | type: "Convolution"
1038 | convolution_param {
1039 | num_output: 512
1040 | kernel_size: 1
1041 | stride: 1
1042 | bias_term: false
1043 | }
1044 | }
1045 | layer {
1046 | bottom: "layer42-conv"
1047 | top: "layer42-conv"
1048 | name: "layer42-bn"
1049 | type: "BatchNorm"
1050 | batch_norm_param {
1051 | use_global_stats: true
1052 | }
1053 | }
1054 | layer {
1055 | bottom: "layer42-conv"
1056 | top: "layer42-conv"
1057 | name: "layer42-scale"
1058 | type: "Scale"
1059 | scale_param {
1060 | bias_term: true
1061 | }
1062 | }
1063 | layer {
1064 | bottom: "layer42-conv"
1065 | top: "layer42-conv"
1066 | name: "layer42-act"
1067 | type: "ReLU"
1068 | }
1069 | layer {
1070 | bottom: "layer42-conv"
1071 | top: "layer43-conv"
1072 | name: "layer43-conv"
1073 | type: "Convolution"
1074 | convolution_param {
1075 | num_output: 1024
1076 | kernel_size: 3
1077 | pad: 1
1078 | stride: 1
1079 | bias_term: false
1080 | }
1081 | }
1082 | layer {
1083 | bottom: "layer43-conv"
1084 | top: "layer43-conv"
1085 | name: "layer43-bn"
1086 | type: "BatchNorm"
1087 | batch_norm_param {
1088 | use_global_stats: true
1089 | }
1090 | }
1091 | layer {
1092 | bottom: "layer43-conv"
1093 | top: "layer43-conv"
1094 | name: "layer43-scale"
1095 | type: "Scale"
1096 | scale_param {
1097 | bias_term: true
1098 | }
1099 | }
1100 | layer {
1101 | bottom: "layer43-conv"
1102 | top: "layer43-conv"
1103 | name: "layer43-act"
1104 | type: "ReLU"
1105 | }
1106 | layer {
1107 | bottom: "layer43-conv"
1108 | top: "layer44-conv"
1109 | name: "layer44-conv"
1110 | type: "Convolution"
1111 | convolution_param {
1112 | num_output: 42
1113 | kernel_size: 1
1114 | stride: 1
1115 | bias_term: true
1116 | }
1117 | }
1118 |
1119 | layer {
1120 | bottom: "layer42-conv"
1121 | top: "layer47-conv"
1122 | name: "layer47-conv"
1123 | type: "Convolution"
1124 | convolution_param {
1125 | num_output: 256
1126 | kernel_size: 1
1127 | stride: 1
1128 | bias_term: false
1129 | }
1130 | }
1131 | layer {
1132 | bottom: "layer47-conv"
1133 | top: "layer47-conv"
1134 | name: "layer47-bn"
1135 | type: "BatchNorm"
1136 | batch_norm_param {
1137 | use_global_stats: true
1138 | }
1139 | }
1140 | layer {
1141 | bottom: "layer47-conv"
1142 | top: "layer47-conv"
1143 | name: "layer47-scale"
1144 | type: "Scale"
1145 | scale_param {
1146 | bias_term: true
1147 | }
1148 | }
1149 | layer {
1150 | bottom: "layer47-conv"
1151 | top: "layer47-conv"
1152 | name: "layer47-act"
1153 | type: "ReLU"
1154 | }
1155 | layer {
1156 | bottom: "layer47-conv"
1157 | top: "layer48-upsample"
1158 | name: "layer48-upsample"
1159 | type: "Upsample"
1160 | upsample_param {
1161 | scale: 2
1162 | }
1163 | }
1164 | layer {
1165 | bottom: "layer48-upsample"
1166 | bottom: "layer28-shortcut"
1167 | top: "layer49-concat"
1168 | name: "layer49-concat"
1169 | type: "Concat"
1170 | }
1171 | layer {
1172 | bottom: "layer49-concat"
1173 | top: "layer50-conv"
1174 | name: "layer50-conv"
1175 | type: "Convolution"
1176 | convolution_param {
1177 | num_output: 256
1178 | kernel_size: 1
1179 | stride: 1
1180 | bias_term: false
1181 | }
1182 | }
1183 | layer {
1184 | bottom: "layer50-conv"
1185 | top: "layer50-conv"
1186 | name: "layer50-bn"
1187 | type: "BatchNorm"
1188 | batch_norm_param {
1189 | use_global_stats: true
1190 | }
1191 | }
1192 | layer {
1193 | bottom: "layer50-conv"
1194 | top: "layer50-conv"
1195 | name: "layer50-scale"
1196 | type: "Scale"
1197 | scale_param {
1198 | bias_term: true
1199 | }
1200 | }
1201 | layer {
1202 | bottom: "layer50-conv"
1203 | top: "layer50-conv"
1204 | name: "layer50-act"
1205 | type: "ReLU"
1206 | }
1207 | layer {
1208 | bottom: "layer50-conv"
1209 | top: "layer51-conv"
1210 | name: "layer51-conv"
1211 | type: "Convolution"
1212 | convolution_param {
1213 | num_output: 512
1214 | kernel_size: 3
1215 | pad: 1
1216 | stride: 1
1217 | bias_term: false
1218 | }
1219 | }
1220 | layer {
1221 | bottom: "layer51-conv"
1222 | top: "layer51-conv"
1223 | name: "layer51-bn"
1224 | type: "BatchNorm"
1225 | batch_norm_param {
1226 | use_global_stats: true
1227 | }
1228 | }
1229 | layer {
1230 | bottom: "layer51-conv"
1231 | top: "layer51-conv"
1232 | name: "layer51-scale"
1233 | type: "Scale"
1234 | scale_param {
1235 | bias_term: true
1236 | }
1237 | }
1238 | layer {
1239 | bottom: "layer51-conv"
1240 | top: "layer51-conv"
1241 | name: "layer51-act"
1242 | type: "ReLU"
1243 | }
1244 | layer {
1245 | bottom: "layer51-conv"
1246 | top: "layer52-conv"
1247 | name: "layer52-conv"
1248 | type: "Convolution"
1249 | convolution_param {
1250 | num_output: 256
1251 | kernel_size: 1
1252 | stride: 1
1253 | bias_term: false
1254 | }
1255 | }
1256 | layer {
1257 | bottom: "layer52-conv"
1258 | top: "layer52-conv"
1259 | name: "layer52-bn"
1260 | type: "BatchNorm"
1261 | batch_norm_param {
1262 | use_global_stats: true
1263 | }
1264 | }
1265 | layer {
1266 | bottom: "layer52-conv"
1267 | top: "layer52-conv"
1268 | name: "layer52-scale"
1269 | type: "Scale"
1270 | scale_param {
1271 | bias_term: true
1272 | }
1273 | }
1274 | layer {
1275 | bottom: "layer52-conv"
1276 | top: "layer52-conv"
1277 | name: "layer52-act"
1278 | type: "ReLU"
1279 | }
1280 | layer {
1281 | bottom: "layer52-conv"
1282 | top: "layer53-conv"
1283 | name: "layer53-conv"
1284 | type: "Convolution"
1285 | convolution_param {
1286 | num_output: 512
1287 | kernel_size: 3
1288 | pad: 1
1289 | stride: 1
1290 | bias_term: false
1291 | }
1292 | }
1293 | layer {
1294 | bottom: "layer53-conv"
1295 | top: "layer53-conv"
1296 | name: "layer53-bn"
1297 | type: "BatchNorm"
1298 | batch_norm_param {
1299 | use_global_stats: true
1300 | }
1301 | }
1302 | layer {
1303 | bottom: "layer53-conv"
1304 | top: "layer53-conv"
1305 | name: "layer53-scale"
1306 | type: "Scale"
1307 | scale_param {
1308 | bias_term: true
1309 | }
1310 | }
1311 | layer {
1312 | bottom: "layer53-conv"
1313 | top: "layer53-conv"
1314 | name: "layer53-act"
1315 | type: "ReLU"
1316 | }
1317 | layer {
1318 | bottom: "layer53-conv"
1319 | top: "layer54-conv"
1320 | name: "layer54-conv"
1321 | type: "Convolution"
1322 | convolution_param {
1323 | num_output: 256
1324 | kernel_size: 1
1325 | stride: 1
1326 | bias_term: false
1327 | }
1328 | }
1329 | layer {
1330 | bottom: "layer54-conv"
1331 | top: "layer54-conv"
1332 | name: "layer54-bn"
1333 | type: "BatchNorm"
1334 | batch_norm_param {
1335 | use_global_stats: true
1336 | }
1337 | }
1338 | layer {
1339 | bottom: "layer54-conv"
1340 | top: "layer54-conv"
1341 | name: "layer54-scale"
1342 | type: "Scale"
1343 | scale_param {
1344 | bias_term: true
1345 | }
1346 | }
1347 | layer {
1348 | bottom: "layer54-conv"
1349 | top: "layer54-conv"
1350 | name: "layer54-act"
1351 | type: "ReLU"
1352 | }
1353 | layer {
1354 | bottom: "layer54-conv"
1355 | top: "layer55-conv"
1356 | name: "layer55-conv"
1357 | type: "Convolution"
1358 | convolution_param {
1359 | num_output: 512
1360 | kernel_size: 3
1361 | pad: 1
1362 | stride: 1
1363 | bias_term: false
1364 | }
1365 | }
1366 | layer {
1367 | bottom: "layer55-conv"
1368 | top: "layer55-conv"
1369 | name: "layer55-bn"
1370 | type: "BatchNorm"
1371 | batch_norm_param {
1372 | use_global_stats: true
1373 | }
1374 | }
1375 | layer {
1376 | bottom: "layer55-conv"
1377 | top: "layer55-conv"
1378 | name: "layer55-scale"
1379 | type: "Scale"
1380 | scale_param {
1381 | bias_term: true
1382 | }
1383 | }
1384 | layer {
1385 | bottom: "layer55-conv"
1386 | top: "layer55-conv"
1387 | name: "layer55-act"
1388 | type: "ReLU"
1389 | }
1390 | layer {
1391 | bottom: "layer55-conv"
1392 | top: "layer56-conv"
1393 | name: "layer56-conv"
1394 | type: "Convolution"
1395 | convolution_param {
1396 | num_output: 42
1397 | kernel_size: 1
1398 | stride: 1
1399 | bias_term: true
1400 | }
1401 | }
1402 |
1403 | layer {
1404 | bottom: "layer54-conv"
1405 | top: "layer59-conv"
1406 | name: "layer59-conv"
1407 | type: "Convolution"
1408 | convolution_param {
1409 | num_output: 128
1410 | kernel_size: 1
1411 | stride: 1
1412 | bias_term: false
1413 | }
1414 | }
1415 | layer {
1416 | bottom: "layer59-conv"
1417 | top: "layer59-conv"
1418 | name: "layer59-bn"
1419 | type: "BatchNorm"
1420 | batch_norm_param {
1421 | use_global_stats: true
1422 | }
1423 | }
1424 | layer {
1425 | bottom: "layer59-conv"
1426 | top: "layer59-conv"
1427 | name: "layer59-scale"
1428 | type: "Scale"
1429 | scale_param {
1430 | bias_term: true
1431 | }
1432 | }
1433 | layer {
1434 | bottom: "layer59-conv"
1435 | top: "layer59-conv"
1436 | name: "layer59-act"
1437 | type: "ReLU"
1438 | }
1439 | layer {
1440 | bottom: "layer59-conv"
1441 | top: "layer60-upsample"
1442 | name: "layer60-upsample"
1443 | type: "Upsample"
1444 | upsample_param {
1445 | scale: 2
1446 | }
1447 | }
1448 | layer {
1449 | bottom: "layer60-upsample"
1450 | bottom: "layer19-shortcut"
1451 | top: "layer61-concat"
1452 | name: "layer61-concat"
1453 | type: "Concat"
1454 | }
1455 | layer {
1456 | bottom: "layer61-concat"
1457 | top: "layer62-conv"
1458 | name: "layer62-conv"
1459 | type: "Convolution"
1460 | convolution_param {
1461 | num_output: 128
1462 | kernel_size: 1
1463 | stride: 1
1464 | bias_term: false
1465 | }
1466 | }
1467 | layer {
1468 | bottom: "layer62-conv"
1469 | top: "layer62-conv"
1470 | name: "layer62-bn"
1471 | type: "BatchNorm"
1472 | batch_norm_param {
1473 | use_global_stats: true
1474 | }
1475 | }
1476 | layer {
1477 | bottom: "layer62-conv"
1478 | top: "layer62-conv"
1479 | name: "layer62-scale"
1480 | type: "Scale"
1481 | scale_param {
1482 | bias_term: true
1483 | }
1484 | }
1485 | layer {
1486 | bottom: "layer62-conv"
1487 | top: "layer62-conv"
1488 | name: "layer62-act"
1489 | type: "ReLU"
1490 | }
1491 | layer {
1492 | bottom: "layer62-conv"
1493 | top: "layer63-conv"
1494 | name: "layer63-conv"
1495 | type: "Convolution"
1496 | convolution_param {
1497 | num_output: 256
1498 | kernel_size: 3
1499 | pad: 1
1500 | stride: 1
1501 | bias_term: false
1502 | }
1503 | }
1504 | layer {
1505 | bottom: "layer63-conv"
1506 | top: "layer63-conv"
1507 | name: "layer63-bn"
1508 | type: "BatchNorm"
1509 | batch_norm_param {
1510 | use_global_stats: true
1511 | }
1512 | }
1513 | layer {
1514 | bottom: "layer63-conv"
1515 | top: "layer63-conv"
1516 | name: "layer63-scale"
1517 | type: "Scale"
1518 | scale_param {
1519 | bias_term: true
1520 | }
1521 | }
1522 | layer {
1523 | bottom: "layer63-conv"
1524 | top: "layer63-conv"
1525 | name: "layer63-act"
1526 | type: "ReLU"
1527 | }
1528 | layer {
1529 | bottom: "layer63-conv"
1530 | top: "layer64-conv"
1531 | name: "layer64-conv"
1532 | type: "Convolution"
1533 | convolution_param {
1534 | num_output: 128
1535 | kernel_size: 1
1536 | stride: 1
1537 | bias_term: false
1538 | }
1539 | }
1540 | layer {
1541 | bottom: "layer64-conv"
1542 | top: "layer64-conv"
1543 | name: "layer64-bn"
1544 | type: "BatchNorm"
1545 | batch_norm_param {
1546 | use_global_stats: true
1547 | }
1548 | }
1549 | layer {
1550 | bottom: "layer64-conv"
1551 | top: "layer64-conv"
1552 | name: "layer64-scale"
1553 | type: "Scale"
1554 | scale_param {
1555 | bias_term: true
1556 | }
1557 | }
1558 | layer {
1559 | bottom: "layer64-conv"
1560 | top: "layer64-conv"
1561 | name: "layer64-act"
1562 | type: "ReLU"
1563 | }
1564 | layer {
1565 | bottom: "layer64-conv"
1566 | top: "layer65-conv"
1567 | name: "layer65-conv"
1568 | type: "Convolution"
1569 | convolution_param {
1570 | num_output: 256
1571 | kernel_size: 3
1572 | pad: 1
1573 | stride: 1
1574 | bias_term: false
1575 | }
1576 | }
1577 | layer {
1578 | bottom: "layer65-conv"
1579 | top: "layer65-conv"
1580 | name: "layer65-bn"
1581 | type: "BatchNorm"
1582 | batch_norm_param {
1583 | use_global_stats: true
1584 | }
1585 | }
1586 | layer {
1587 | bottom: "layer65-conv"
1588 | top: "layer65-conv"
1589 | name: "layer65-scale"
1590 | type: "Scale"
1591 | scale_param {
1592 | bias_term: true
1593 | }
1594 | }
1595 | layer {
1596 | bottom: "layer65-conv"
1597 | top: "layer65-conv"
1598 | name: "layer65-act"
1599 | type: "ReLU"
1600 | }
1601 | layer {
1602 | bottom: "layer65-conv"
1603 | top: "layer66-conv"
1604 | name: "layer66-conv"
1605 | type: "Convolution"
1606 | convolution_param {
1607 | num_output: 128
1608 | kernel_size: 1
1609 | stride: 1
1610 | bias_term: false
1611 | }
1612 | }
1613 | layer {
1614 | bottom: "layer66-conv"
1615 | top: "layer66-conv"
1616 | name: "layer66-bn"
1617 | type: "BatchNorm"
1618 | batch_norm_param {
1619 | use_global_stats: true
1620 | }
1621 | }
1622 | layer {
1623 | bottom: "layer66-conv"
1624 | top: "layer66-conv"
1625 | name: "layer66-scale"
1626 | type: "Scale"
1627 | scale_param {
1628 | bias_term: true
1629 | }
1630 | }
1631 | layer {
1632 | bottom: "layer66-conv"
1633 | top: "layer66-conv"
1634 | name: "layer66-act"
1635 | type: "ReLU"
1636 | }
1637 | layer {
1638 | bottom: "layer66-conv"
1639 | top: "layer67-conv"
1640 | name: "layer67-conv"
1641 | type: "Convolution"
1642 | convolution_param {
1643 | num_output: 256
1644 | kernel_size: 3
1645 | pad: 1
1646 | stride: 1
1647 | bias_term: false
1648 | }
1649 | }
1650 | layer {
1651 | bottom: "layer67-conv"
1652 | top: "layer67-conv"
1653 | name: "layer67-bn"
1654 | type: "BatchNorm"
1655 | batch_norm_param {
1656 | use_global_stats: true
1657 | }
1658 | }
1659 | layer {
1660 | bottom: "layer67-conv"
1661 | top: "layer67-conv"
1662 | name: "layer67-scale"
1663 | type: "Scale"
1664 | scale_param {
1665 | bias_term: true
1666 | }
1667 | }
1668 | layer {
1669 | bottom: "layer67-conv"
1670 | top: "layer67-conv"
1671 | name: "layer67-act"
1672 | type: "ReLU"
1673 | }
1674 | layer {
1675 | bottom: "layer67-conv"
1676 | top: "layer68-conv"
1677 | name: "layer68-conv"
1678 | type: "Convolution"
1679 | convolution_param {
1680 | num_output: 42
1681 | kernel_size: 1
1682 | stride: 1
1683 | bias_term: true
1684 | }
1685 | }
1686 |
1687 |
--------------------------------------------------------------------------------