caffe Resnet-50模型训练及测试
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的路径必须是完整的绝对路径,而不能是相对路径。
Resnet-50模型比较复杂,因此可以通过以下网址来实现模型的可视化分析。
http://ethereon.github.io/netscope/#/editor
另外一个是我在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: #后面都是注释,可以删掉)
# 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 |
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"
#}
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"
#}
[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