caffe Resnet-50模型训练及测试

caffe Resnet-50模型训练及测试

caffe Resnet-50模型训练及测试

1.       注意事项

Resnet-50计算精度比较高,而且运算量较小,因此是一种理想的残差网络的训练模型。采用Resnet-50模型进行训练,需要注意以下方面:

(1)     BatchNorm层的参数

在finetuneResnet时,网络结构文件中BatchNorm层的参数要注意: 
1.在训练时所有BN层要设置use_global_stats: false(也可以不写,caffe默认是false) 
2.在测试时所有BN层要设置use_global_stats: true

影响: 
1.训练如果不设为false,会导致模型不收敛 
2.测试如果不设置为true,会导致准确率极低 
(亲测,测试时为false时acc=0.05,为true时acc=0.91)

区别: 
use_global_stats: false是使用了每个Batch里的数据的均值和方差; 
use_global_stats: true是使用了所有数据的均值和方差。

(2)     Prototxt模型参数

当训练和测试直接采用图片而不是lmdb文件进行训练时,训练和测试数据中的类型需要设置为:type:"ImageData";另外,需要采用image_data_param项来代替data_param项,image_data_param项中的source和root_folder的路径必须是完整的绝对路径,而不能是相对路径。

2.       深度网络结构可视化网址

Resnet-50模型比较复杂,因此可以通过以下网址来实现模型的可视化分析。

http://ethereon.github.io/netscope/#/editor

3.       训练测试脚本

另外一个是我在linux下bash脚本文件里遇到的一个坑:

.sh 文件里caffetrain 命令中间不能有注释, 否则会各种报错

下面是正确的训练脚本: 
其中包括了将日志输出到log文件夹下,并以时间命名的功能。 
训练脚本

#########################################################################

# File Name: train_res50.sh

# Author: plustang

# mail:

# Created Time: Mon 20 Feb 2017 10:59:03 PM EDT

#########################################################################

#!/bin/bash

#!/usr/bin/env sh

PRETRAINED_MODEL=../models/pre-trained-models/residual_network/ResNet-50-model.caffemodel

t=$(date +%Y-%m-%d_%H:%M:%S)

LOG=./log/tuan_res50_$t.log

GLOG_logtostderr=1 ../build/tools/caffe train \

   --solver=../models/residual_network/solver.prototxt \

   --weights=$PRETRAINED_MODEL \

    --gpu=2,3 2>&1 |tee $LOG

测试脚本

#!/bin/bash

#!/usr/bin/env sh

GLOG_logtostderr=1 ../build/tools/caffe test \

   --model=../models/residual_network/ResNet-50-val.prototxt \

   --weights=../models/residual_network/res_50_iter_40000.caffemodel \

    --gpu=0 \

    --iterations=2000

中途恢复训练

#!/bin/bash

#!/usr/bin/env sh

t=$(date +%Y-%m-%d_%H:%M:%S)

LOG=./log/tuan_res50_$t.log

GLOG_logtostderr=1 ../build/tools/caffe train \

   --solver=../models/residual_network/solver.prototxt \

   --snapshot=../models/residual_network/res_50_iter_40000.solverstate \

    --gpu=2,3 2>&1 |tee $LOG


finetune 时修改网络结构文件,只修改数据输入层和类别数即可。 
下面是我修改后的prototxt,其中数据层是将图片直接输入网络,并且做了一些镜像、颜色、亮度、缩放的变换增加数据量,文件里测试部分没有用,可以删掉。不删也不影响训练,后面有一个用来测试的prototxt文件。 
类别数在最后的全连接层fc204层,将类别数量改为所需的即可。 
(ps: #后面都是注释,可以删掉)

4.       Solver1.prototxt

# The train/test net protocol buffer definition

net: "res32_cifar_train_test.prototxt"

# test_iter specifies how many forward passes the test should carry out.

# In the case of CIFAR10, we have test batch size 100 and 100 test iterations,

# covering the full 10,000 testing images.

test_iter: 100

# Carry out testing every 1000 training iterations.

test_interval: 500

# The base learning rate, momentum and the weight decay of the network.

base_lr: 0.1

momentum: 0.9

weight_decay: 0.0001

# The learning rate policy

lr_policy: "multistep"

gamma:0.1

stepvalue:32000

stepvalue:48000

# Display every 200 iterations

display: 100

# The maximum number of iterations

max_iter: 64000

# snapshot intermediate results

snapshot: 10000

snapshot_prefix: "cifar10_res32"

# solver mode: CPU or GPU

solver_mode: GPU

test_initialization: false

Solver文件2:

net: "ResNet_50_train_val.prototxt"

iter_size: 2

test_iter: 1000

test_interval: 600

test_initialization: false

display: 30

base_lr: 0.05

lr_policy: "multistep"

stepvalue: 150000

stepvalue: 300000

gamma: 0.1

max_iter: 600000

momentum: 0.9

weight_decay: 0.0001

snapshot: 6000

snapshot_prefix: "resnet"

solver_mode: GPU

Solver文件3:

net: "models/ResNet-18/train.prototxt"

test_iter: 5000

test_interval: 5000

base_lr: 0.05

display: 20

lr_policy: "poly"

max_iter: 650000

power: 1

momentum: 0.9

weight_decay: 0.0005

snapshot: 5000

snapshot_prefix: "models/ResNet-18/resnet-18"

random_seed: 0

test_initialization: false

device_id: 0,1

5.       训练用的网络:ResNet-50-train-val.prototxt

name: "ResNet-50"

layer {

    name: "data"

    type:"ImageData"

    top: "data"

    top: "label"

    include {

        phase: TRAIN

    }

    transform_param {

        #scale: 0.00390625

        crop_size: 224

        mean_value: 104

        mean_value: 117

        mean_value: 123

        mirror: true

       gamma_color_transform: true

        gamma_left: 0.8 #0.5

        gamma_right: 2.0 #1.5

        gamma_step_num: 8 #4

        brightness:true

       brightness_alpha_left: 0.7

       brightness_alpha_right: 1.2

        brightness_beta_left:-5.0

       brightness_beta_right: 5.0

        brightness_alpha_num:4

        brightness_beta_num:4

        resize:true

        resize_ratio:14

        rotate:false

    }

    image_data_param {

          new_width:256

          new_height:256

          shuffle: true

          source: "/home/export/plustang/data/tuan_style_data/tuan_train.txt"

          root_folder :"/home/export/plustang/data/tuan_style_data/imgs/"

          batch_size: 28

    }

    #data_param {

        #source:"/root/plustang/data/facenet_train_rand_sample15_lmdb"

        #need_data_augment:true

        #batch_size: 1000

        #backend: LMDB

    #}

}

layer {

    name: "data"

    type:"ImageData"

    top: "data"

    top: "label"

    include {

        phase: TEST

    }

    transform_param {

        #scale: 0.00390625

        crop_size: 224

        mean_value: 104

        mean_value: 117

        mean_value: 123

        mirror: false

    }

    image_data_param {

      new_width:256

      new_height:256

      shuffle: false

      source: "/home/export/plustang/data/tuan_style_data/tuan_val.txt"

      root_folder : "/home/export/plustang/data/tuan_style_data/imgs/"

      batch_size: 1

    }

}

#layer {

#  name: "data"

#  type: "Data"

#  top: "data"

#  top: "label"

#  include {

#    phase: TRAIN

#  }

#  transform_param {

#    crop_size: 224

#    mean_value: 104

#    mean_value: 117

#    mean_value: 123

#    mirror: true

#    gamma_color_transform:true

#    gamma_left: 0.8 #0.5

#    gamma_right: 2.0 #1.5

#    gamma_step_num: 8 #4

#    brightness:true

#    brightness_alpha_left:0.7

#    brightness_alpha_right:1.2

#    brightness_beta_left:-5.0

#    brightness_beta_right:5.0

#    brightness_alpha_num: 4

#    brightness_beta_num: 4

#    resize:true

#    resize_ratio:14

#    rotate:true

#  }

#  data_param {

#    source:"/export/plustang/data/tuan_style_data/train_lmdb"

#    need_data_augment:true

#    batch_size: 28

#    backend: LMDB

#  }

#}

#layer {

#  name: "data"

#  type: "Data"

#  top: "data"

#  top: "label"

#  include {

#    phase: TEST

#  }

#  transform_param {

#    crop_size: 224

#    mean_value: 104

#    mean_value: 117

#    mean_value: 123

#    mirror: false

#  }

#  data_param {

#    source:"/export/plustang/data/tuan_style_data/val_lmdb"

#    need_data_augment:false

#    batch_size: 1

#    backend: LMDB

#  }

#}

layer {

    bottom: "data"

    top: "conv1"

    name: "conv1"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 7

        pad: 3

        stride: 2

    }

}

layer {

    bottom: "conv1"

    top: "conv1"

    name:"bn_conv1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom: "conv1"

    top: "conv1"

    name:"scale_conv1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "conv1"

    top: "conv1"

    name:"conv1_relu"

    type: "ReLU"

}

layer {

    bottom: "conv1"

    top: "pool1"

    name: "pool1"

    type: "Pooling"

    pooling_param {

        kernel_size: 3

        stride: 2

        pool: MAX

    }

}

layer {

    bottom: "pool1"

    top:"res2a_branch1"

    name:"res2a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch1"

    top:"res2a_branch1"

    name:"bn2a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2a_branch1"

    top:"res2a_branch1"

    name:"scale2a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "pool1"

    top:"res2a_branch2a"

    name:"res2a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2a"

    name:"bn2a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2a"

    name:"scale2a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2a_branch2a"

    top: "res2a_branch2a"

    name:"res2a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2b"

    name:"res2a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2b"

    name:"bn2a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2b"

    name:"scale2a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2b"

    name:"res2a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2c"

    name:"res2a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch2c"

    top:"res2a_branch2c"

    name:"bn2a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2a_branch2c"

    top:"res2a_branch2c"

    name:"scale2a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2a_branch1"

    bottom:"res2a_branch2c"

    top: "res2a"

    name: "res2a"

    type: "Eltwise"

}

layer {

    bottom: "res2a"

    top: "res2a"

    name:"res2a_relu"

    type: "ReLU"

}

layer {

    bottom: "res2a"

    top:"res2b_branch2a"

    name:"res2b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2b_branch2a"

    top:"res2b_branch2a"

    name:"bn2b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom: "res2b_branch2a"

    top:"res2b_branch2a"

    name:"scale2b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2b_branch2a"

    top:"res2b_branch2a"

    name:"res2b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res2b_branch2a"

    top:"res2b_branch2b"

    name:"res2b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2b"

    name:"bn2b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2b"

    name:"scale2b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2b"

    name:"res2b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2c"

    name:"res2b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2b_branch2c"

    top:"res2b_branch2c"

    name:"bn2b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2b_branch2c"

    top:"res2b_branch2c"

    name:"scale2b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2a"

    bottom:"res2b_branch2c"

    top: "res2b"

    name: "res2b"

    type: "Eltwise"

}

layer {

    bottom: "res2b"

    top: "res2b"

    name:"res2b_relu"

    type: "ReLU"

}

layer {

    bottom: "res2b"

    top:"res2c_branch2a"

    name:"res2c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2a"

    name:"bn2c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2a"

    name:"scale2c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2a"

    name:"res2c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2b"

    name:"res2c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2b"

    name:"bn2c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2b"

    name:"scale2c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2b"

    name:"res2c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2c"

    name:"res2c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2c_branch2c"

    top:"res2c_branch2c"

    name:"bn2c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res2c_branch2c"

    top:"res2c_branch2c"

    name:"scale2c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2b"

    bottom:"res2c_branch2c"

    top: "res2c"

    name: "res2c"

    type: "Eltwise"

}

layer {

    bottom: "res2c"

    top: "res2c"

    name:"res2c_relu"

    type: "ReLU"

}

layer {

    bottom: "res2c"

    top:"res3a_branch1"

    name:"res3a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch1"

    top:"res3a_branch1"

    name:"bn3a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3a_branch1"

    top:"res3a_branch1"

    name:"scale3a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2c"

    top:"res3a_branch2a"

    name:"res3a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2a"

    name:"bn3a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2a"

    name:"scale3a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2a"

    name:"res3a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2b"

    name:"res3a_branch2b"

    type: "Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2b"

    name:"bn3a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2b"

    name:"scale3a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3a_branch2b"

    top:"res3a_branch2b"

    name:"res3a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2c"

    name:"res3a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch2c"

    top:"res3a_branch2c"

    name:"bn3a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3a_branch2c"

    top:"res3a_branch2c"

    name:"scale3a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3a_branch1"

    bottom:"res3a_branch2c"

    top: "res3a"

    name: "res3a"

    type: "Eltwise"

}

layer {

    bottom: "res3a"

    top: "res3a"

    name:"res3a_relu"

    type: "ReLU"

}

layer {

    bottom: "res3a"

    top:"res3b_branch2a"

    name:"res3b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3b_branch2a"

    top:"res3b_branch2a"

    name:"bn3b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3b_branch2a"

    top:"res3b_branch2a"

    name:"scale3b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3b_branch2a"

    top: "res3b_branch2a"

    name:"res3b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3b_branch2a"

    top:"res3b_branch2b"

    name:"res3b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2b"

    name:"bn3b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2b"

    name:"scale3b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2b"

    name:"res3b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2c"

    name:"res3b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3b_branch2c"

    top:"res3b_branch2c"

    name:"bn3b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3b_branch2c"

    top:"res3b_branch2c"

    name:"scale3b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3a"

    bottom:"res3b_branch2c"

    top: "res3b"

    name: "res3b"

    type: "Eltwise"

}

layer {

    bottom: "res3b"

    top: "res3b"

    name:"res3b_relu"

    type: "ReLU"

}

layer {

    bottom: "res3b"

    top:"res3c_branch2a"

    name:"res3c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2a"

    name:"bn3c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2a"

    name:"scale3c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2a"

    name:"res3c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2b"

    name:"res3c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2b"

    name:"bn3c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2b"

    name:"scale3c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2b"

    name:"res3c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2c"

    name:"res3c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3c_branch2c"

    top:"res3c_branch2c"

    name:"bn3c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3c_branch2c"

    top:"res3c_branch2c"

    name:"scale3c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3b"

    bottom:"res3c_branch2c"

    top: "res3c"

    name: "res3c"

    type: "Eltwise"

}

layer {

    bottom: "res3c"

    top: "res3c"

    name:"res3c_relu"

    type: "ReLU"

}

layer {

    bottom: "res3c"

    top:"res3d_branch2a"

    name:"res3d_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2a"

    name:"bn3d_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2a"

    name:"scale3d_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2a"

    name:"res3d_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2b"

    name:"res3d_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2b"

    name:"bn3d_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2b"

    name:"scale3d_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2b"

    name:"res3d_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2c"

    name:"res3d_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3d_branch2c"

    top:"res3d_branch2c"

    name:"bn3d_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res3d_branch2c"

    top:"res3d_branch2c"

    name:"scale3d_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3c"

    bottom:"res3d_branch2c"

    top: "res3d"

    name: "res3d"

    type: "Eltwise"

}

layer {

    bottom: "res3d"

    top: "res3d"

    name:"res3d_relu"

    type: "ReLU"

}

layer {

    bottom: "res3d"

    top:"res4a_branch1"

    name:"res4a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch1"

    top:"res4a_branch1"

    name:"bn4a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4a_branch1"

    top:"res4a_branch1"

    name:"scale4a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3d"

    top:"res4a_branch2a"

    name:"res4a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2a"

    name:"bn4a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2a"

    name:"scale4a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2a"

    name:"res4a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2b"

    name:"res4a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2b"

    name:"bn4a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2b"

    name:"scale4a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4a_branch2b"

    top:"res4a_branch2b"

    name:"res4a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2c"

    name:"res4a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch2c"

    top:"res4a_branch2c"

    name:"bn4a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats: false

    }

}

layer {

    bottom:"res4a_branch2c"

    top:"res4a_branch2c"

    name:"scale4a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4a_branch1"

    bottom:"res4a_branch2c"

    top: "res4a"

    name: "res4a"

    type: "Eltwise"

}

layer {

    bottom: "res4a"

    top: "res4a"

    name:"res4a_relu"

    type: "ReLU"

}

layer {

    bottom: "res4a"

    top:"res4b_branch2a"

    name:"res4b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2a"

    name:"bn4b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2a"

    name:"scale4b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2a"

    name:"res4b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2b"

    name:"res4b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2b"

    name:"bn4b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2b"

    name:"scale4b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2b"

    name:"res4b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2c"

    name:"res4b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4b_branch2c"

    top:"res4b_branch2c"

    name:"bn4b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4b_branch2c"

    top:"res4b_branch2c"

    name:"scale4b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4a"

    bottom:"res4b_branch2c"

    top: "res4b"

    name: "res4b"

    type: "Eltwise"

}

layer {

    bottom: "res4b"

    top: "res4b"

    name:"res4b_relu"

    type: "ReLU"

}

layer {

    bottom: "res4b"

    top:"res4c_branch2a"

    name:"res4c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2a"

    name:"bn4c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2a"

    name:"scale4c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4c_branch2a"

    top: "res4c_branch2a"

    name:"res4c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2b"

    name:"res4c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2b"

    name:"bn4c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2b"

    name:"scale4c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2b"

    name:"res4c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2c"

    name:"res4c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4c_branch2c"

    top:"res4c_branch2c"

    name:"bn4c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4c_branch2c"

    top:"res4c_branch2c"

    name:"scale4c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4b"

    bottom:"res4c_branch2c"

    top: "res4c"

    name: "res4c"

    type: "Eltwise"

}

layer {

    bottom: "res4c"

    top: "res4c"

    name:"res4c_relu"

    type: "ReLU"

}

layer {

    bottom: "res4c"

    top:"res4d_branch2a"

    name:"res4d_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4d_branch2a"

    top:"res4d_branch2a"

    name:"bn4d_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4d_branch2a"

    top: "res4d_branch2a"

    name:"scale4d_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4d_branch2a"

    top:"res4d_branch2a"

    name:"res4d_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4d_branch2a"

    top:"res4d_branch2b"

    name:"res4d_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2b"

    name:"bn4d_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2b"

    name:"scale4d_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2b"

    name:"res4d_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2c"

    name:"res4d_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4d_branch2c"

    top:"res4d_branch2c"

    name:"bn4d_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4d_branch2c"

    top:"res4d_branch2c"

    name:"scale4d_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4c"

    bottom:"res4d_branch2c"

    top: "res4d"

    name: "res4d"

    type: "Eltwise"

}

layer {

    bottom: "res4d"

    top: "res4d"

    name:"res4d_relu"

    type: "ReLU"

}

layer {

    bottom: "res4d"

    top:"res4e_branch2a"

    name:"res4e_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2a"

    name:"bn4e_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2a"

    name:"scale4e_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2a"

    name:"res4e_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2b"

    name:"res4e_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2b"

    name:"bn4e_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2b"

    name:"scale4e_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2b"

    name:"res4e_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2c"

    name:"res4e_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4e_branch2c"

    top:"res4e_branch2c"

    name:"bn4e_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4e_branch2c"

    top:"res4e_branch2c"

    name:"scale4e_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4d"

    bottom:"res4e_branch2c"

    top: "res4e"

    name: "res4e"

    type: "Eltwise"

}

layer {

    bottom: "res4e"

    top: "res4e"

    name:"res4e_relu"

    type: "ReLU"

}

layer {

    bottom: "res4e"

    top:"res4f_branch2a"

    name:"res4f_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2a"

    name:"bn4f_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2a"

    name:"scale4f_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2a"

    name:"res4f_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2b"

    name:"res4f_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2b"

    name:"bn4f_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2b"

    name:"scale4f_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2b"

    name:"res4f_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2c"

    name:"res4f_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4f_branch2c"

    top:"res4f_branch2c"

    name:"bn4f_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res4f_branch2c"

    top:"res4f_branch2c"

    name:"scale4f_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4e"

    bottom:"res4f_branch2c"

    top: "res4f"

    name: "res4f"

    type: "Eltwise"

}

layer {

    bottom: "res4f"

    top: "res4f"

    name:"res4f_relu"

    type: "ReLU"

}

layer {

    bottom: "res4f"

    top:"res5a_branch1"

    name:"res5a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch1"

    top:"res5a_branch1"

    name:"bn5a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5a_branch1"

    top:"res5a_branch1"

    name:"scale5a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4f"

    top:"res5a_branch2a"

    name:"res5a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch2a"

    top:"res5a_branch2a"

    name:"bn5a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5a_branch2a"

    top:"res5a_branch2a"

    name:"scale5a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5a_branch2a"

    top: "res5a_branch2a"

    name:"res5a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res5a_branch2a"

    top:"res5a_branch2b"

    name:"res5a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2b"

    name:"bn5a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2b"

    name:"scale5a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2b"

    name:"res5a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2c"

    name:"res5a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch2c"

    top:"res5a_branch2c"

    name:"bn5a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5a_branch2c"

    top:"res5a_branch2c"

    name:"scale5a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5a_branch1"

    bottom:"res5a_branch2c"

    top: "res5a"

    name: "res5a"

    type: "Eltwise"

}

layer {

    bottom: "res5a"

    top: "res5a"

    name:"res5a_relu"

    type: "ReLU"

}

layer {

    bottom: "res5a"

    top:"res5b_branch2a"

    name:"res5b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2a"

    name:"bn5b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom: "res5b_branch2a"

    top:"res5b_branch2a"

    name:"scale5b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2a"

    name:"res5b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2b"

    name:"res5b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2b"

    name:"bn5b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2b"

    name:"scale5b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2b"

    name:"res5b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2c"

    name:"res5b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5b_branch2c"

    top:"res5b_branch2c"

    name: "bn5b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5b_branch2c"

    top:"res5b_branch2c"

    name:"scale5b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res5a"

    bottom:"res5b_branch2c"

    top: "res5b"

    name: "res5b"

    type: "Eltwise"

}

layer {

    bottom: "res5b"

    top: "res5b"

    name:"res5b_relu"

    type: "ReLU"

}

layer {

    bottom: "res5b"

    top:"res5c_branch2a"

    name:"res5c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2a"

    name:"bn5c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2a"

    name:"scale5c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2a"

    name:"res5c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2b"

    name:"res5c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2b"

    name:"bn5c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2b"

    name:"scale5c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2b"

    name:"res5c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2c"

    name:"res5c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5c_branch2c"

    top:"res5c_branch2c"

    name:"bn5c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:false

    }

}

layer {

    bottom:"res5c_branch2c"

    top:"res5c_branch2c"

    name:"scale5c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res5b"

    bottom:"res5c_branch2c"

    top: "res5c"

    name: "res5c"

    type: "Eltwise"

}

layer {

    bottom: "res5c"

    top: "res5c"

    name:"res5c_relu"

    type: "ReLU"

}

layer {

    bottom: "res5c"

    top: "pool5"

    name: "pool5"

    type: "Pooling"

    pooling_param {

        kernel_size: 7

        stride: 1

        pool: AVE

    }

}

layer {

    bottom: "pool5"

    top: "fc204"

    name: "fc204"

    type:"InnerProduct"

    param {

        lr_mult: 1

        decay_mult: 2

    }

    inner_product_param {

        num_output: 204

    }

}

layer {

  name:"accuracy-1"

  type: "Accuracy"

  bottom: "fc204"

  bottom: "label"

  top: "accuracy-1"

  include {

    phase: TEST

  }

}

layer {

  name:"accuracy-5"

  type: "Accuracy"

  bottom: "fc204"

  bottom: "label"

  top: "accuracy-5"

  include {

    phase: TEST

  }

  accuracy_param {

    top_k:5

  }

}

layer {

  name: "loss"

  type:"SoftmaxWithLoss"

  bottom: "fc204"

  bottom: "label"

  top: "loss"

}

#layer {

#   bottom: "fc204"

#   top: "prob"

#   name: "prob"

#   type: "Softmax"

#}


6.       测试用的网络文件:ResNet-50-val.prototxt

name: "ResNet-50"

layer {

    name: "data"

    type:"ImageData"

    top: "data"

    top: "label"

    include {

        phase: TEST

    }

    transform_param {

        #scale: 0.00390625

        crop_size: 224

        mean_value: 104

        mean_value: 117

        mean_value: 123

        mirror: false

    }

    image_data_param {

      new_width:256

      new_height:256

      shuffle: false

      source:"/export/plustang/data/tuan_style_data/tuan_val.txt"

      root_folder :"/export/plustang/data/tuan_style_data/imgs/"

      batch_size: 32

    }

}

#layer {

#  name: "data"

#  type: "Data"

#  top: "data"

#  top: "label"

#  include {

#    phase: TRAIN

#  }

#  transform_param {

#    crop_size: 224

#    mean_value: 104

#    mean_value: 117

#    mean_value: 123

#    mirror: true

#    gamma_color_transform:true

#    gamma_left: 0.8 #0.5

#    gamma_right: 2.0 #1.5

#    gamma_step_num: 8 #4

#    brightness:true

#    brightness_alpha_left:0.7

#    brightness_alpha_right:1.2

#    brightness_beta_left:-5.0

#    brightness_beta_right:5.0

#    brightness_alpha_num: 4

#    brightness_beta_num: 4

#    resize:true

#    resize_ratio:14

#    rotate:true

#  }

#  data_param {

#    source:"/export/plustang/data/tuan_style_data/train_lmdb"

#    need_data_augment:true

#    batch_size: 28

#    backend: LMDB

#  }

#}

#layer {

#  name: "data"

#  type: "Data"

#  top: "data"

#  top: "label"

#  include {

#    phase: TEST

#  }

#  transform_param {

#    crop_size: 224

#    mean_value: 104

#    mean_value: 117

#    mean_value: 123

#    mirror: false

#  }

#  data_param {

#    source:"/export/plustang/data/tuan_style_data/val_lmdb"

#    need_data_augment:false

#    batch_size: 1

#    backend: LMDB

#  }

#}

layer {

    bottom: "data"

    top: "conv1"

    name: "conv1"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 7

        pad: 3

        stride: 2

    }

}

layer {

    bottom: "conv1"

    top: "conv1"

    name:"bn_conv1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom: "conv1"

    top: "conv1"

    name:"scale_conv1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "conv1"

    top: "conv1"

    name:"conv1_relu"

    type: "ReLU"

}

layer {

    bottom: "conv1"

    top: "pool1"

    name: "pool1"

    type: "Pooling"

    pooling_param {

        kernel_size: 3

        stride: 2

        pool: MAX

    }

}

layer {

    bottom: "pool1"

    top:"res2a_branch1"

    name:"res2a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch1"

    top:"res2a_branch1"

    name:"bn2a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2a_branch1"

    top: "res2a_branch1"

    name:"scale2a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "pool1"

    top:"res2a_branch2a"

    name:"res2a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2a"

    name:"bn2a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2a"

    name:"scale2a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2a"

    name:"res2a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res2a_branch2a"

    top:"res2a_branch2b"

    name:"res2a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2b"

    name:"bn2a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2b"

    name:"scale2a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2b"

    name:"res2a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res2a_branch2b"

    top:"res2a_branch2c"

    name:"res2a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2a_branch2c"

    top:"res2a_branch2c"

    name:"bn2a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2a_branch2c"

    top:"res2a_branch2c"

    name: "scale2a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2a_branch1"

    bottom:"res2a_branch2c"

    top: "res2a"

    name: "res2a"

    type: "Eltwise"

}

layer {

    bottom: "res2a"

    top: "res2a"

    name:"res2a_relu"

    type: "ReLU"

}

layer {

    bottom: "res2a"

    top:"res2b_branch2a"

    name:"res2b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2b_branch2a"

    top:"res2b_branch2a"

    name:"bn2b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2b_branch2a"

    top: "res2b_branch2a"

    name:"scale2b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2b_branch2a"

    top:"res2b_branch2a"

    name:"res2b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res2b_branch2a"

    top:"res2b_branch2b"

    name:"res2b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2b"

    name:"bn2b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2b"

    name:"scale2b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2b"

    name:"res2b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res2b_branch2b"

    top:"res2b_branch2c"

    name:"res2b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2b_branch2c"

    top:"res2b_branch2c"

    name:"bn2b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2b_branch2c"

    top:"res2b_branch2c"

    name:"scale2b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2a"

    bottom:"res2b_branch2c"

    top: "res2b"

    name: "res2b"

    type: "Eltwise"

}

layer {

    bottom: "res2b"

    top: "res2b"

    name:"res2b_relu"

    type: "ReLU"

}

layer {

    bottom: "res2b"

    top:"res2c_branch2a"

    name:"res2c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2a"

    name:"bn2c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2a"

    name:"scale2c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2a"

    name:"res2c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res2c_branch2a"

    top:"res2c_branch2b"

    name:"res2c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 64

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2b"

    name:"bn2c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2b"

    name:"scale2c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2c_branch2b"

    top:"res2c_branch2b"

    name:"res2c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res2c_branch2b"

    top:"res2c_branch2c"

    name:"res2c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res2c_branch2c"

    top:"res2c_branch2c"

    name:"bn2c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res2c_branch2c"

    top:"res2c_branch2c"

    name:"scale2c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2b"

    bottom:"res2c_branch2c"

    top: "res2c"

    name: "res2c"

    type: "Eltwise"

}

layer {

    bottom: "res2c"

    top: "res2c"

    name:"res2c_relu"

    type: "ReLU"

}

layer {

    bottom: "res2c"

    top:"res3a_branch1"

    name:"res3a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch1"

    top:"res3a_branch1"

    name:"bn3a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3a_branch1"

    top:"res3a_branch1"

    name:"scale3a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res2c"

    top:"res3a_branch2a"

    name:"res3a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2a"

    name:"bn3a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2a"

    name:"scale3a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2a"

    name:"res3a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3a_branch2a"

    top:"res3a_branch2b"

    name:"res3a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2b"

    name:"bn3a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2b"

    name:"scale3a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2b"

    name:"res3a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3a_branch2b"

    top:"res3a_branch2c"

    name:"res3a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3a_branch2c"

    top:"res3a_branch2c"

    name:"bn3a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3a_branch2c"

    top:"res3a_branch2c"

    name:"scale3a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3a_branch1"

    bottom:"res3a_branch2c"

    top: "res3a"

    name: "res3a"

    type: "Eltwise"

}

layer {

    bottom: "res3a"

    top: "res3a"

    name:"res3a_relu"

    type: "ReLU"

}

layer {

    bottom: "res3a"

    top:"res3b_branch2a"

    name:"res3b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3b_branch2a"

    top:"res3b_branch2a"

    name:"bn3b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3b_branch2a"

    top:"res3b_branch2a"

    name:"scale3b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3b_branch2a"

    top:"res3b_branch2a"

    name:"res3b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3b_branch2a"

    top:"res3b_branch2b"

    name:"res3b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2b"

    name:"bn3b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2b"

    name:"scale3b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2b"

    name:"res3b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3b_branch2b"

    top:"res3b_branch2c"

    name:"res3b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3b_branch2c"

    top:"res3b_branch2c"

    name:"bn3b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3b_branch2c"

    top:"res3b_branch2c"

    name:"scale3b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3a"

    bottom:"res3b_branch2c"

    top: "res3b"

    name: "res3b"

    type: "Eltwise"

}

layer {

    bottom: "res3b"

    top: "res3b"

    name:"res3b_relu"

    type: "ReLU"

}

layer {

    bottom: "res3b"

    top:"res3c_branch2a"

    name:"res3c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2a"

    name:"bn3c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2a"

    name:"scale3c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2a"

    name:"res3c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3c_branch2a"

    top:"res3c_branch2b"

    name:"res3c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2b"

    name:"bn3c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2b"

    name:"scale3c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2b"

    name:"res3c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3c_branch2b"

    top:"res3c_branch2c"

    name:"res3c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3c_branch2c"

    top:"res3c_branch2c"

    name:"bn3c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3c_branch2c"

    top:"res3c_branch2c"

    name: "scale3c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3b"

    bottom:"res3c_branch2c"

    top: "res3c"

    name: "res3c"

    type: "Eltwise"

}

layer {

    bottom: "res3c"

    top: "res3c"

    name:"res3c_relu"

    type: "ReLU"

}

layer {

    bottom: "res3c"

    top:"res3d_branch2a"

    name:"res3d_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2a"

    name:"bn3d_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2a"

    name:"scale3d_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2a"

    name:"res3d_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res3d_branch2a"

    top:"res3d_branch2b"

    name:"res3d_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 128

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2b"

    name:"bn3d_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2b"

    name:"scale3d_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2b"

    name:"res3d_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res3d_branch2b"

    top:"res3d_branch2c"

    name:"res3d_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res3d_branch2c"

    top:"res3d_branch2c"

    name:"bn3d_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res3d_branch2c"

    top:"res3d_branch2c"

    name:"scale3d_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3c"

    bottom:"res3d_branch2c"

    top: "res3d"

    name: "res3d"

    type: "Eltwise"

}

layer {

    bottom: "res3d"

    top: "res3d"

    name:"res3d_relu"

    type: "ReLU"

}

layer {

    bottom: "res3d"

    top:"res4a_branch1"

    name:"res4a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom: "res4a_branch1"

    top:"res4a_branch1"

    name:"bn4a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4a_branch1"

    top:"res4a_branch1"

    name:"scale4a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res3d"

    top:"res4a_branch2a"

    name:"res4a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2a"

    name:"bn4a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2a"

    name:"scale4a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2a"

    name:"res4a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4a_branch2a"

    top:"res4a_branch2b"

    name:"res4a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2b"

    name:"bn4a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2b"

    name:"scale4a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2b"

    name:"res4a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4a_branch2b"

    top:"res4a_branch2c"

    name:"res4a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4a_branch2c"

    top:"res4a_branch2c"

    name: "bn4a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4a_branch2c"

    top:"res4a_branch2c"

    name:"scale4a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4a_branch1"

    bottom:"res4a_branch2c"

    top: "res4a"

    name: "res4a"

    type: "Eltwise"

}

layer {

    bottom: "res4a"

    top: "res4a"

    name:"res4a_relu"

    type: "ReLU"

}

layer {

    bottom: "res4a"

    top:"res4b_branch2a"

    name:"res4b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2a"

    name:"bn4b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2a"

    name:"scale4b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2a"

    name:"res4b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4b_branch2a"

    top:"res4b_branch2b"

    name:"res4b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2b"

    name:"bn4b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2b"

    name:"scale4b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2b"

    name:"res4b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4b_branch2b"

    top:"res4b_branch2c"

    name:"res4b_branch2c"

    type: "Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4b_branch2c"

    top:"res4b_branch2c"

    name:"bn4b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4b_branch2c"

    top:"res4b_branch2c"

    name:"scale4b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4a"

    bottom:"res4b_branch2c"

    top: "res4b"

    name: "res4b"

    type: "Eltwise"

}

layer {

    bottom: "res4b"

    top: "res4b"

    name:"res4b_relu"

    type: "ReLU"

}

layer {

    bottom: "res4b"

    top:"res4c_branch2a"

    name:"res4c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2a"

    name:"bn4c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2a"

    name:"scale4c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2a"

    name:"res4c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4c_branch2a"

    top:"res4c_branch2b"

    name:"res4c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2b"

    name:"bn4c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2b"

    name:"scale4c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4c_branch2b"

    top: "res4c_branch2b"

    name:"res4c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4c_branch2b"

    top:"res4c_branch2c"

    name:"res4c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4c_branch2c"

    top:"res4c_branch2c"

    name:"bn4c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4c_branch2c"

    top:"res4c_branch2c"

    name:"scale4c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4b"

    bottom:"res4c_branch2c"

    top: "res4c"

    name: "res4c"

    type: "Eltwise"

}

layer {

    bottom: "res4c"

    top: "res4c"

    name:"res4c_relu"

    type: "ReLU"

}

layer {

    bottom: "res4c"

    top:"res4d_branch2a"

    name:"res4d_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4d_branch2a"

    top:"res4d_branch2a"

    name:"bn4d_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4d_branch2a"

    top:"res4d_branch2a"

    name:"scale4d_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4d_branch2a"

    top: "res4d_branch2a"

    name:"res4d_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4d_branch2a"

    top:"res4d_branch2b"

    name:"res4d_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2b"

    name:"bn4d_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2b"

    name:"scale4d_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2b"

    name:"res4d_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4d_branch2b"

    top:"res4d_branch2c"

    name:"res4d_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4d_branch2c"

    top:"res4d_branch2c"

    name:"bn4d_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4d_branch2c"

    top:"res4d_branch2c"

    name:"scale4d_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4c"

    bottom:"res4d_branch2c"

    top: "res4d"

    name: "res4d"

    type: "Eltwise"

}

layer {

    bottom: "res4d"

    top: "res4d"

    name:"res4d_relu"

    type: "ReLU"

}

layer {

    bottom: "res4d"

    top:"res4e_branch2a"

    name:"res4e_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2a"

    name:"bn4e_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2a"

    name:"scale4e_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2a"

    name:"res4e_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4e_branch2a"

    top:"res4e_branch2b"

    name:"res4e_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2b"

    name:"bn4e_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2b"

    name: "scale4e_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2b"

    name:"res4e_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4e_branch2b"

    top:"res4e_branch2c"

    name:"res4e_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4e_branch2c"

    top: "res4e_branch2c"

    name:"bn4e_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4e_branch2c"

    top:"res4e_branch2c"

    name:"scale4e_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4d"

    bottom:"res4e_branch2c"

    top: "res4e"

    name: "res4e"

    type: "Eltwise"

}

layer {

    bottom: "res4e"

    top: "res4e"

    name:"res4e_relu"

    type: "ReLU"

}

layer {

    bottom: "res4e"

    top:"res4f_branch2a"

    name:"res4f_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2a"

    name:"bn4f_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2a"

    name:"scale4f_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2a"

    name:"res4f_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res4f_branch2a"

    top:"res4f_branch2b"

    name:"res4f_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 256

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2b"

    name:"bn4f_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2b"

    name:"scale4f_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2b"

    name:"res4f_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res4f_branch2b"

    top:"res4f_branch2c"

    name:"res4f_branch2c"

    type: "Convolution"

    convolution_param {

        num_output: 1024

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res4f_branch2c"

    top:"res4f_branch2c"

    name:"bn4f_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res4f_branch2c"

    top:"res4f_branch2c"

    name:"scale4f_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4e"

    bottom:"res4f_branch2c"

    top: "res4f"

    name: "res4f"

    type: "Eltwise"

}

layer {

    bottom: "res4f"

    top: "res4f"

    name:"res4f_relu"

    type: "ReLU"

}

layer {

    bottom: "res4f"

    top:"res5a_branch1"

    name:"res5a_branch1"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch1"

    top:"res5a_branch1"

    name:"bn5a_branch1"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5a_branch1"

    top:"res5a_branch1"

    name:"scale5a_branch1"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res4f"

    top:"res5a_branch2a"

    name:"res5a_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 2

        bias_term: false

    }

}

layer {

    bottom: "res5a_branch2a"

    top:"res5a_branch2a"

    name:"bn5a_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5a_branch2a"

    top:"res5a_branch2a"

    name:"scale5a_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5a_branch2a"

    top:"res5a_branch2a"

    name:"res5a_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res5a_branch2a"

    top:"res5a_branch2b"

    name:"res5a_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2b"

    name:"bn5a_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2b"

    name:"scale5a_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2b"

    name:"res5a_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res5a_branch2b"

    top:"res5a_branch2c"

    name:"res5a_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5a_branch2c"

    top:"res5a_branch2c"

    name:"bn5a_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5a_branch2c"

    top:"res5a_branch2c"

    name:"scale5a_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5a_branch1"

    bottom:"res5a_branch2c"

    top: "res5a"

    name: "res5a"

    type: "Eltwise"

}

layer {

    bottom: "res5a"

    top: "res5a"

    name:"res5a_relu"

    type: "ReLU"

}

layer {

    bottom: "res5a"

    top:"res5b_branch2a"

    name:"res5b_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2a"

    name:"bn5b_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2a"

    name:"scale5b_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2a"

    name:"res5b_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res5b_branch2a"

    top:"res5b_branch2b"

    name:"res5b_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2b"

    name:"bn5b_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2b"

    name:"scale5b_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5b_branch2b"

    top: "res5b_branch2b"

    name:"res5b_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res5b_branch2b"

    top:"res5b_branch2c"

    name:"res5b_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5b_branch2c"

    top:"res5b_branch2c"

    name:"bn5b_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5b_branch2c"

    top:"res5b_branch2c"

    name:"scale5b_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res5a"

    bottom:"res5b_branch2c"

    top: "res5b"

    name: "res5b"

    type: "Eltwise"

}

layer {

    bottom: "res5b"

    top: "res5b"

    name:"res5b_relu"

    type: "ReLU"

}

layer {

    bottom: "res5b"

    top:"res5c_branch2a"

    name:"res5c_branch2a"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2a"

    name:"bn5c_branch2a"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2a"

    name:"scale5c_branch2a"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5c_branch2a"

    top: "res5c_branch2a"

    name:"res5c_branch2a_relu"

    type: "ReLU"

}

layer {

    bottom:"res5c_branch2a"

    top:"res5c_branch2b"

    name:"res5c_branch2b"

    type:"Convolution"

    convolution_param {

        num_output: 512

        kernel_size: 3

        pad: 1

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2b"

    name:"bn5c_branch2b"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2b"

    name:"scale5c_branch2b"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2b"

    name:"res5c_branch2b_relu"

    type: "ReLU"

}

layer {

    bottom:"res5c_branch2b"

    top:"res5c_branch2c"

    name:"res5c_branch2c"

    type:"Convolution"

    convolution_param {

        num_output: 2048

        kernel_size: 1

        pad: 0

        stride: 1

        bias_term: false

    }

}

layer {

    bottom:"res5c_branch2c"

    top:"res5c_branch2c"

    name:"bn5c_branch2c"

    type:"BatchNorm"

    batch_norm_param {

        use_global_stats:true

    }

}

layer {

    bottom:"res5c_branch2c"

    top:"res5c_branch2c"

    name:"scale5c_branch2c"

    type: "Scale"

    scale_param {

        bias_term: true

    }

}

layer {

    bottom: "res5b"

    bottom:"res5c_branch2c"

    top: "res5c"

    name: "res5c"

    type: "Eltwise"

}

layer {

    bottom: "res5c"

    top: "res5c"

    name:"res5c_relu"

    type: "ReLU"

}

layer {

    bottom: "res5c"

    top: "pool5"

    name: "pool5"

    type: "Pooling"

    pooling_param {

        kernel_size: 7

        stride: 1

        pool: AVE

    }

}

layer {

    bottom: "pool5"

    top: "fc204"

    name: "fc204"

    type:"InnerProduct"

    inner_product_param {

        num_output: 204

    }

}

layer {

  name:"accuracy-1"

  type: "Accuracy"

  bottom: "fc204"

  bottom: "label"

  top: "accuracy-1"

  include {

    phase: TEST

  }

}

layer {

  name:"accuracy-5"

  type: "Accuracy"

  bottom: "fc204"

  bottom: "label"

  top: "accuracy-5"

  include {

    phase: TEST

  }

  accuracy_param {

    top_k:5

  }

}

#layer {

#  name: "loss"

#  type:"SoftmaxWithLoss"

#  bottom: "fc204"

#  bottom: "label"

#  top: "loss"

#}

#layer {

#   bottom: "fc204"

#   top: "prob"

#   name: "prob"

#   type: "Softmax"

#}

7.       Reference

[1].   18层的resnet网络:https://github.com/HolmesShuan/ResNet-18-Caffemodel-on-ImageNet

[2].   多种层数的resnet网络:https://github.com/antingshen/resnet-protofiles

[3].   网络结构可视化网址:http://ethereon.github.io/netscope/#/editor

猜你喜欢

转载自blog.csdn.net/CVAIDL/article/details/88801756
今日推荐