├── 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 | ![image](https://github.com/maxuehao/yolov3-caffe/blob/master/demo.png) 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 | --------------------------------------------------------------------------------