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