Coder Social home page Coder Social logo

icnet's Introduction

ICNet for Real-Time Semantic Segmentation on High-Resolution Images

by Hengshuang Zhao, Xiaojuan Qi, Xiaoyong Shen, Jianping Shi, Jiaya Jia, details are in project page.

Introduction

Based on PSPNet, this repository is build for evaluation in ICNet. For installation, please follow the description in PSPNet repository (support CUDA 7.0/7.5 + cuDNN v4).

Usage

  1. Clone the repository recursively:

    git clone --recursive https://github.com/hszhao/ICNet.git
  2. Build Caffe and matcaffe:

    cd $ICNET_ROOT/PSPNet
    cp Makefile.config.example Makefile.config
    vim Makefile.config
    make -j8 && make matcaffe
    cd ..
  3. Evaluation mIoU:

    • Evaluation code is in folder 'evaluation'.

    • Download trained models and put them in folder 'evaluation/model':

      • icnet_cityscapes_train_30k.caffemodel: GoogleDrive

        (31M, md5: c7038630c4b6c869afaaadd811bdb539; train on trainset for 30k)

      • icnet_cityscapes_trainval_90k.caffemodel: GoogleDrive

        (31M, md5: 4f4dd9eecd465dd8de7e4cf88ba5d5d5; train on trainvalset for 90k)

    • Modify the related paths in 'eval_all.m':

      • Mainly variables 'data_root' and 'eval_list', and your image list for evaluation should be similar to that in folder 'evaluation/samplelist' if you use this evaluation code structure.
    cd evaluation
    vim eval_all.m
    • Run the evaluation scripts:
    ./run.sh
    
  4. Evaluation time:

    • To get inference time as accurate as possible, it's suggested to make sure the GPU card with specified ID in script 'test_time.sh' is empty (without other processes executing)

    • Run the evaluation scripts:

    ./test_time.sh
    
  5. Results:

    • Prediction results will show in folder 'evaluation/mc_result' and the expected scores are:
      • ICNet train on trainset for 30K, evaluated on valset (mIoU/pAcc): 67.7/94.5
      • ICNet train on trainvalset for 90K, evaluated on testset (mIoU): 69.5
    • Log information of inference time will be in file 'time.log', approximately 33~36ms on TitanX.
  6. Demo video:

    • Video processed by ICNet on cityscapes dataset:
      • Alpha blending with value as 0.5: Video

Citation

If ICNet is useful for your research, please consider citing:

@inproceedings{zhao2018icnet,
  title={ICNet for Real-Time Semantic Segmentation on High-Resolution Images},
  author={Zhao, Hengshuang and Qi, Xiaojuan and Shen, Xiaoyong and Shi, Jianping and Jia, Jiaya},
  booktitle={ECCV},
  year={2018}
}

Questions

Please contact '[email protected]'

icnet's People

Contributors

gvi-lab avatar hszhao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

icnet's Issues

How to get 'without bn' weights from 'bnnomerge' weights?

The performance of icnet_cityscapes_train_30k.caffemodel is better than icnet_cityscapes_train_30k_bnnomerge.caffemodel, however the trained model is supposed to output the latter model file. How is the conversion done between the two model weights and what's the reason behind it? I couldn't get it from the information in the note provided. Thanks!

Not exactly similar as the description in your paper

I have not found the 1/4 branch (low resolution) in your prototxt, but more important thing is that you used lots of 1x1 convolution instead of 3x3 to reduce the size with a bottleneck shape. Could you share more about your cascade guidance? Thanks a lot.

About the test time

Hi,
I once used this script to test the speed of ICNet in Matlab :

tic;
score = net.forward({input_data});
temp = toc;

But I got the result of 15.6fps on 1080ti without other programs running, the result provided by the author is more than 30fps, then I used the scripts provided by the author in Caffe, the result is 31fps on 1080ti, which is lager than the original result, I was confused about it. Can you help me?

Invalid MEX-file, undefined symbol, libQtTest

If such error occur, try:
$ ldd /ICNet/PSPNet/matlab/+caffe/private/caffe_.mexa64
and in matlab:

! ldd /ICNet/PSPNet/matlab/+caffe/private/caffe_.mexa64

You will find libQtOpenGL, libQtGui, libQtCore is point to /bin/glnxa64
but libQtTest is point to sth in /lib64/

However, all 4 lib should use the one in /lib64/

solution:
delete libQtOpenGL, libQtGui, libQtCore in /bin/glnxa64
create symbolic link of these 3 and point to the one in /lib64/

Train architecture

Could you provide train architecture? I want to implement your idea at TensorFlow, but I cannot get your idea of network only using information from paper.
There are lacking information like:

  1. Number of filters in each layer, especially in pipeline image/4/
  2. I released prototxt I do not see any image/4 as input, where it go?
  3. I see that you are using residuals, are they the same like in PSPNet?

I was using this visualization as base, but I'm not able to match this architecture with that from pipeline.

Cityscapes Test result

Does your Cityscapes test dataset have labels?I have downloaded a label without a test data set from the official website.So I can't get the test mean IOU

How to set weights for different classes

How do you set the weights for different classes when calculating loss? I train the model using the weights I give. But the model still learn the detect the background. Can you introduce the method you use?

Training parameters set

Hello ! could you porvide me the training parameters set? beacause I train the model ,I found it can not reach the paper performance . Thank you !

Evaluaton Issue roott_path and eval_list

Modify the related paths in 'eval_all.m':

Mainly variables 'data_root' and 'eval_list', and your image list for evaluation should be similar to that in folder 'evaluation/samplelist' if you use this evaluation code structure.

How I modify the root_path and eval_list??

I have dataset in my laptop test train and val so how I Put my dataset path on data_root?

Please guide me what is the issue actually

how to train or finetune

any help?
name: "ICNet"

layer {
name: "data"
type: "ImageSegData"
top: "data"
top: "label"
#top: "data_dim"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_width: 2049
crop_height: 1025
mean_value: 104.008
mean_value: 116.669
mean_value: 122.675
scale_factors: 0.5
scale_factors: 0.75
scale_factors: 1
scale_factors: 1.25
scale_factors: 1.5
scale_factors: 1.75
scale_factors: 2.0
seg_class_num: 7
}
image_data_param {
#root_folder: "/home/rcvlab/workspace/caffe-seg/pspnet/"
source: "/home/train_list.txt"
batch_size: 2
is_color: true
new_height: 1160
new_width: 2312
shuffle: true
label_type: PIXEL
}
}

layer {
name: "data_sub1"
type: "Scale"
bottom: "data"
top: "data_sub1"
}

layer {
name: "data_sub2"
type: "Interp"
bottom: "data_sub1"
top: "data_sub2"
interp_param {
shrink_factor: 2
}
}

NETWORK

layer {
name: "conv1_1_3x3_s2"
type: "Convolution"
bottom: "data_sub2"
top: "conv1_1_3x3_s2"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv1_1_3x3_s2/bn"
type: "BN"
bottom: "conv1_1_3x3_s2"
top: "conv1_1_3x3_s2"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv1_1_3x3_s2/relu"
type: "ReLU"
bottom: "conv1_1_3x3_s2"
top: "conv1_1_3x3_s2"
}
layer {
name: "conv1_2_3x3"
type: "Convolution"
bottom: "conv1_1_3x3_s2"
top: "conv1_2_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv1_2_3x3/bn"
type: "BN"
bottom: "conv1_2_3x3"
top: "conv1_2_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv1_2_3x3/relu"
type: "ReLU"
bottom: "conv1_2_3x3"
top: "conv1_2_3x3"
}
layer {
name: "conv1_3_3x3"
type: "Convolution"
bottom: "conv1_2_3x3"
top: "conv1_3_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv1_3_3x3/bn"
type: "BN"
bottom: "conv1_3_3x3"
top: "conv1_3_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv1_3_3x3/relu"
type: "ReLU"
bottom: "conv1_3_3x3"
top: "conv1_3_3x3"
}
layer {
name: "pool1_3x3_s2"
type: "Pooling"
bottom: "conv1_3_3x3"
top: "pool1_3x3_s2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
pad: 1
}
}
layer {
name: "conv2_1_1x1_reduce"
type: "Convolution"
bottom: "pool1_3x3_s2"
top: "conv2_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_1_1x1_reduce/bn"
type: "BN"
bottom: "conv2_1_1x1_reduce"
top: "conv2_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_1_1x1_reduce/relu"
type: "ReLU"
bottom: "conv2_1_1x1_reduce"
top: "conv2_1_1x1_reduce"
}
layer {
name: "conv2_1_3x3"
type: "Convolution"
bottom: "conv2_1_1x1_reduce"
top: "conv2_1_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_1_3x3/bn"
type: "BN"
bottom: "conv2_1_3x3"
top: "conv2_1_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_1_3x3/relu"
type: "ReLU"
bottom: "conv2_1_3x3"
top: "conv2_1_3x3"
}
layer {
name: "conv2_1_1x1_increase"
type: "Convolution"
bottom: "conv2_1_3x3"
top: "conv2_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_1_1x1_increase/bn"
type: "BN"
bottom: "conv2_1_1x1_increase"
top: "conv2_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_1_1x1_proj"
type: "Convolution"
bottom: "pool1_3x3_s2"
top: "conv2_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_1_1x1_proj/bn"
type: "BN"
bottom: "conv2_1_1x1_proj"
top: "conv2_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_1"
type: "Eltwise"
bottom: "conv2_1_1x1_proj"
bottom: "conv2_1_1x1_increase"
top: "conv2_1"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv2_1/relu"
type: "ReLU"
bottom: "conv2_1"
top: "conv2_1"
}
layer {
name: "conv2_2_1x1_reduce"
type: "Convolution"
bottom: "conv2_1"
top: "conv2_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_2_1x1_reduce/bn"
type: "BN"
bottom: "conv2_2_1x1_reduce"
top: "conv2_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_2_1x1_reduce/relu"
type: "ReLU"
bottom: "conv2_2_1x1_reduce"
top: "conv2_2_1x1_reduce"
}
layer {
name: "conv2_2_3x3"
type: "Convolution"
bottom: "conv2_2_1x1_reduce"
top: "conv2_2_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_2_3x3/bn"
type: "BN"
bottom: "conv2_2_3x3"
top: "conv2_2_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_2_3x3/relu"
type: "ReLU"
bottom: "conv2_2_3x3"
top: "conv2_2_3x3"
}
layer {
name: "conv2_2_1x1_increase"
type: "Convolution"
bottom: "conv2_2_3x3"
top: "conv2_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_2_1x1_increase/bn"
type: "BN"
bottom: "conv2_2_1x1_increase"
top: "conv2_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_2"
type: "Eltwise"
bottom: "conv2_1"
bottom: "conv2_2_1x1_increase"
top: "conv2_2"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv2_2/relu"
type: "ReLU"
bottom: "conv2_2"
top: "conv2_2"
}
layer {
name: "conv2_3_1x1_reduce"
type: "Convolution"
bottom: "conv2_2"
top: "conv2_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_3_1x1_reduce/bn"
type: "BN"
bottom: "conv2_3_1x1_reduce"
top: "conv2_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_3_1x1_reduce/relu"
type: "ReLU"
bottom: "conv2_3_1x1_reduce"
top: "conv2_3_1x1_reduce"
}
layer {
name: "conv2_3_3x3"
type: "Convolution"
bottom: "conv2_3_1x1_reduce"
top: "conv2_3_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_3_3x3/bn"
type: "BN"
bottom: "conv2_3_3x3"
top: "conv2_3_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_3_3x3/relu"
type: "ReLU"
bottom: "conv2_3_3x3"
top: "conv2_3_3x3"
}
layer {
name: "conv2_3_1x1_increase"
type: "Convolution"
bottom: "conv2_3_3x3"
top: "conv2_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_3_1x1_increase/bn"
type: "BN"
bottom: "conv2_3_1x1_increase"
top: "conv2_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_3"
type: "Eltwise"
bottom: "conv2_2"
bottom: "conv2_3_1x1_increase"
top: "conv2_3"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv2_3/relu"
type: "ReLU"
bottom: "conv2_3"
top: "conv2_3"
}
layer {
name: "conv3_1_1x1_reduce"
type: "Convolution"
bottom: "conv2_3"
top: "conv3_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_1_1x1_reduce/bn"
type: "BN"
bottom: "conv3_1_1x1_reduce"
top: "conv3_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_1_1x1_reduce/relu"
type: "ReLU"
bottom: "conv3_1_1x1_reduce"
top: "conv3_1_1x1_reduce"
}
layer {
name: "conv3_1_3x3"
type: "Convolution"
bottom: "conv3_1_1x1_reduce"
top: "conv3_1_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_1_3x3/bn"
type: "BN"
bottom: "conv3_1_3x3"
top: "conv3_1_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_1_3x3/relu"
type: "ReLU"
bottom: "conv3_1_3x3"
top: "conv3_1_3x3"
}
layer {
name: "conv3_1_1x1_increase"
type: "Convolution"
bottom: "conv3_1_3x3"
top: "conv3_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_1_1x1_increase/bn"
type: "BN"
bottom: "conv3_1_1x1_increase"
top: "conv3_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_1_1x1_proj"
type: "Convolution"
bottom: "conv2_3"
top: "conv3_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_1_1x1_proj/bn"
type: "BN"
bottom: "conv3_1_1x1_proj"
top: "conv3_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_1"
type: "Eltwise"
bottom: "conv3_1_1x1_proj"
bottom: "conv3_1_1x1_increase"
top: "conv3_1"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv3_1/relu"
type: "ReLU"
bottom: "conv3_1"
top: "conv3_1"
}
layer {
name: "conv3_1_sub4"
type: "Interp"
bottom: "conv3_1"
top: "conv3_1_sub4"
interp_param {
shrink_factor: 2
}
}

layer {
name: "conv3_2_1x1_reduce"
type: "Convolution"
bottom: "conv3_1_sub4"
top: "conv3_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_2_1x1_reduce/bn"
type: "BN"
bottom: "conv3_2_1x1_reduce"
top: "conv3_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_2_1x1_reduce/relu"
type: "ReLU"
bottom: "conv3_2_1x1_reduce"
top: "conv3_2_1x1_reduce"
}
layer {
name: "conv3_2_3x3"
type: "Convolution"
bottom: "conv3_2_1x1_reduce"
top: "conv3_2_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_2_3x3/bn"
type: "BN"
bottom: "conv3_2_3x3"
top: "conv3_2_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_2_3x3/relu"
type: "ReLU"
bottom: "conv3_2_3x3"
top: "conv3_2_3x3"
}
layer {
name: "conv3_2_1x1_increase"
type: "Convolution"
bottom: "conv3_2_3x3"
top: "conv3_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_2_1x1_increase/bn"
type: "BN"
bottom: "conv3_2_1x1_increase"
top: "conv3_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_2"
type: "Eltwise"
bottom: "conv3_1_sub4"
bottom: "conv3_2_1x1_increase"
top: "conv3_2"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv3_2/relu"
type: "ReLU"
bottom: "conv3_2"
top: "conv3_2"
}
layer {
name: "conv3_3_1x1_reduce"
type: "Convolution"
bottom: "conv3_2"
top: "conv3_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_3_1x1_reduce/bn"
type: "BN"
bottom: "conv3_3_1x1_reduce"
top: "conv3_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_3_1x1_reduce/relu"
type: "ReLU"
bottom: "conv3_3_1x1_reduce"
top: "conv3_3_1x1_reduce"
}
layer {
name: "conv3_3_3x3"
type: "Convolution"
bottom: "conv3_3_1x1_reduce"
top: "conv3_3_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_3_3x3/bn"
type: "BN"
bottom: "conv3_3_3x3"
top: "conv3_3_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_3_3x3/relu"
type: "ReLU"
bottom: "conv3_3_3x3"
top: "conv3_3_3x3"
}
layer {
name: "conv3_3_1x1_increase"
type: "Convolution"
bottom: "conv3_3_3x3"
top: "conv3_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_3_1x1_increase/bn"
type: "BN"
bottom: "conv3_3_1x1_increase"
top: "conv3_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_3"
type: "Eltwise"
bottom: "conv3_2"
bottom: "conv3_3_1x1_increase"
top: "conv3_3"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv3_3/relu"
type: "ReLU"
bottom: "conv3_3"
top: "conv3_3"
}
layer {
name: "conv3_4_1x1_reduce"
type: "Convolution"
bottom: "conv3_3"
top: "conv3_4_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_4_1x1_reduce/bn"
type: "BN"
bottom: "conv3_4_1x1_reduce"
top: "conv3_4_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_4_1x1_reduce/relu"
type: "ReLU"
bottom: "conv3_4_1x1_reduce"
top: "conv3_4_1x1_reduce"
}
layer {
name: "conv3_4_3x3"
type: "Convolution"
bottom: "conv3_4_1x1_reduce"
top: "conv3_4_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_4_3x3/bn"
type: "BN"
bottom: "conv3_4_3x3"
top: "conv3_4_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_4_3x3/relu"
type: "ReLU"
bottom: "conv3_4_3x3"
top: "conv3_4_3x3"
}
layer {
name: "conv3_4_1x1_increase"
type: "Convolution"
bottom: "conv3_4_3x3"
top: "conv3_4_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_4_1x1_increase/bn"
type: "BN"
bottom: "conv3_4_1x1_increase"
top: "conv3_4_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_4"
type: "Eltwise"
bottom: "conv3_3"
bottom: "conv3_4_1x1_increase"
top: "conv3_4"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv3_4/relu"
type: "ReLU"
bottom: "conv3_4"
top: "conv3_4"
}
layer {
name: "conv4_1_1x1_reduce"
type: "Convolution"
bottom: "conv3_4"
top: "conv4_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_1_1x1_reduce/bn"
type: "BN"
bottom: "conv4_1_1x1_reduce"
top: "conv4_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_1_1x1_reduce/relu"
type: "ReLU"
bottom: "conv4_1_1x1_reduce"
top: "conv4_1_1x1_reduce"
}
layer {
name: "conv4_1_3x3"
type: "Convolution"
bottom: "conv4_1_1x1_reduce"
top: "conv4_1_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 2
dilation: 2
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_1_3x3/bn"
type: "BN"
bottom: "conv4_1_3x3"
top: "conv4_1_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_1_3x3/relu"
type: "ReLU"
bottom: "conv4_1_3x3"
top: "conv4_1_3x3"
}
layer {
name: "conv4_1_1x1_increase"
type: "Convolution"
bottom: "conv4_1_3x3"
top: "conv4_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_1_1x1_increase/bn"
type: "BN"
bottom: "conv4_1_1x1_increase"
top: "conv4_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_1_1x1_proj"
type: "Convolution"
bottom: "conv3_4"
top: "conv4_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_1_1x1_proj/bn"
type: "BN"
bottom: "conv4_1_1x1_proj"
top: "conv4_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_1"
type: "Eltwise"
bottom: "conv4_1_1x1_proj"
bottom: "conv4_1_1x1_increase"
top: "conv4_1"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv4_1/relu"
type: "ReLU"
bottom: "conv4_1"
top: "conv4_1"
}
layer {
name: "conv4_2_1x1_reduce"
type: "Convolution"
bottom: "conv4_1"
top: "conv4_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_2_1x1_reduce/bn"
type: "BN"
bottom: "conv4_2_1x1_reduce"
top: "conv4_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_2_1x1_reduce/relu"
type: "ReLU"
bottom: "conv4_2_1x1_reduce"
top: "conv4_2_1x1_reduce"
}
layer {
name: "conv4_2_3x3"
type: "Convolution"
bottom: "conv4_2_1x1_reduce"
top: "conv4_2_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 2
dilation: 2
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_2_3x3/bn"
type: "BN"
bottom: "conv4_2_3x3"
top: "conv4_2_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_2_3x3/relu"
type: "ReLU"
bottom: "conv4_2_3x3"
top: "conv4_2_3x3"
}
layer {
name: "conv4_2_1x1_increase"
type: "Convolution"
bottom: "conv4_2_3x3"
top: "conv4_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_2_1x1_increase/bn"
type: "BN"
bottom: "conv4_2_1x1_increase"
top: "conv4_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_2"
type: "Eltwise"
bottom: "conv4_1"
bottom: "conv4_2_1x1_increase"
top: "conv4_2"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv4_2/relu"
type: "ReLU"
bottom: "conv4_2"
top: "conv4_2"
}
layer {
name: "conv4_3_1x1_reduce"
type: "Convolution"
bottom: "conv4_2"
top: "conv4_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_3_1x1_reduce/bn"
type: "BN"
bottom: "conv4_3_1x1_reduce"
top: "conv4_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_3_1x1_reduce/relu"
type: "ReLU"
bottom: "conv4_3_1x1_reduce"
top: "conv4_3_1x1_reduce"
}
layer {
name: "conv4_3_3x3"
type: "Convolution"
bottom: "conv4_3_1x1_reduce"
top: "conv4_3_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 2
dilation: 2
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_3_3x3/bn"
type: "BN"
bottom: "conv4_3_3x3"
top: "conv4_3_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_3_3x3/relu"
type: "ReLU"
bottom: "conv4_3_3x3"
top: "conv4_3_3x3"
}
layer {
name: "conv4_3_1x1_increase"
type: "Convolution"
bottom: "conv4_3_3x3"
top: "conv4_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_3_1x1_increase/bn"
type: "BN"
bottom: "conv4_3_1x1_increase"
top: "conv4_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_3"
type: "Eltwise"
bottom: "conv4_2"
bottom: "conv4_3_1x1_increase"
top: "conv4_3"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv4_3/relu"
type: "ReLU"
bottom: "conv4_3"
top: "conv4_3"
}
layer {
name: "conv4_4_1x1_reduce"
type: "Convolution"
bottom: "conv4_3"
top: "conv4_4_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_4_1x1_reduce/bn"
type: "BN"
bottom: "conv4_4_1x1_reduce"
top: "conv4_4_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_4_1x1_reduce/relu"
type: "ReLU"
bottom: "conv4_4_1x1_reduce"
top: "conv4_4_1x1_reduce"
}
layer {
name: "conv4_4_3x3"
type: "Convolution"
bottom: "conv4_4_1x1_reduce"
top: "conv4_4_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 2
dilation: 2
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_4_3x3/bn"
type: "BN"
bottom: "conv4_4_3x3"
top: "conv4_4_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_4_3x3/relu"
type: "ReLU"
bottom: "conv4_4_3x3"
top: "conv4_4_3x3"
}
layer {
name: "conv4_4_1x1_increase"
type: "Convolution"
bottom: "conv4_4_3x3"
top: "conv4_4_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_4_1x1_increase/bn"
type: "BN"
bottom: "conv4_4_1x1_increase"
top: "conv4_4_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_4"
type: "Eltwise"
bottom: "conv4_3"
bottom: "conv4_4_1x1_increase"
top: "conv4_4"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv4_4/relu"
type: "ReLU"
bottom: "conv4_4"
top: "conv4_4"
}
layer {
name: "conv4_5_1x1_reduce"
type: "Convolution"
bottom: "conv4_4"
top: "conv4_5_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_5_1x1_reduce/bn"
type: "BN"
bottom: "conv4_5_1x1_reduce"
top: "conv4_5_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_5_1x1_reduce/relu"
type: "ReLU"
bottom: "conv4_5_1x1_reduce"
top: "conv4_5_1x1_reduce"
}
layer {
name: "conv4_5_3x3"
type: "Convolution"
bottom: "conv4_5_1x1_reduce"
top: "conv4_5_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 2
dilation: 2
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_5_3x3/bn"
type: "BN"
bottom: "conv4_5_3x3"
top: "conv4_5_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_5_3x3/relu"
type: "ReLU"
bottom: "conv4_5_3x3"
top: "conv4_5_3x3"
}
layer {
name: "conv4_5_1x1_increase"
type: "Convolution"
bottom: "conv4_5_3x3"
top: "conv4_5_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_5_1x1_increase/bn"
type: "BN"
bottom: "conv4_5_1x1_increase"
top: "conv4_5_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_5"
type: "Eltwise"
bottom: "conv4_4"
bottom: "conv4_5_1x1_increase"
top: "conv4_5"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv4_5/relu"
type: "ReLU"
bottom: "conv4_5"
top: "conv4_5"
}
layer {
name: "conv4_6_1x1_reduce"
type: "Convolution"
bottom: "conv4_5"
top: "conv4_6_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_6_1x1_reduce/bn"
type: "BN"
bottom: "conv4_6_1x1_reduce"
top: "conv4_6_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_6_1x1_reduce/relu"
type: "ReLU"
bottom: "conv4_6_1x1_reduce"
top: "conv4_6_1x1_reduce"
}
layer {
name: "conv4_6_3x3"
type: "Convolution"
bottom: "conv4_6_1x1_reduce"
top: "conv4_6_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
pad: 2
dilation: 2
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_6_3x3/bn"
type: "BN"
bottom: "conv4_6_3x3"
top: "conv4_6_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_6_3x3/relu"
type: "ReLU"
bottom: "conv4_6_3x3"
top: "conv4_6_3x3"
}
layer {
name: "conv4_6_1x1_increase"
type: "Convolution"
bottom: "conv4_6_3x3"
top: "conv4_6_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 512
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv4_6_1x1_increase/bn"
type: "BN"
bottom: "conv4_6_1x1_increase"
top: "conv4_6_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv4_6"
type: "Eltwise"
bottom: "conv4_5"
bottom: "conv4_6_1x1_increase"
top: "conv4_6"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv4_6/relu"
type: "ReLU"
bottom: "conv4_6"
top: "conv4_6"
}
layer {
name: "conv5_1_1x1_reduce"
type: "Convolution"
bottom: "conv4_6"
top: "conv5_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_1_1x1_reduce/bn"
type: "BN"
bottom: "conv5_1_1x1_reduce"
top: "conv5_1_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_1_1x1_reduce/relu"
type: "ReLU"
bottom: "conv5_1_1x1_reduce"
top: "conv5_1_1x1_reduce"
}
layer {
name: "conv5_1_3x3"
type: "Convolution"
bottom: "conv5_1_1x1_reduce"
top: "conv5_1_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 4
dilation: 4
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_1_3x3/bn"
type: "BN"
bottom: "conv5_1_3x3"
top: "conv5_1_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_1_3x3/relu"
type: "ReLU"
bottom: "conv5_1_3x3"
top: "conv5_1_3x3"
}
layer {
name: "conv5_1_1x1_increase"
type: "Convolution"
bottom: "conv5_1_3x3"
top: "conv5_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 1024
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_1_1x1_increase/bn"
type: "BN"
bottom: "conv5_1_1x1_increase"
top: "conv5_1_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_1_1x1_proj"
type: "Convolution"
bottom: "conv4_6"
top: "conv5_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 1024
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_1_1x1_proj/bn"
type: "BN"
bottom: "conv5_1_1x1_proj"
top: "conv5_1_1x1_proj"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_1"
type: "Eltwise"
bottom: "conv5_1_1x1_proj"
bottom: "conv5_1_1x1_increase"
top: "conv5_1"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv5_1/relu"
type: "ReLU"
bottom: "conv5_1"
top: "conv5_1"
}
layer {
name: "conv5_2_1x1_reduce"
type: "Convolution"
bottom: "conv5_1"
top: "conv5_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_2_1x1_reduce/bn"
type: "BN"
bottom: "conv5_2_1x1_reduce"
top: "conv5_2_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_2_1x1_reduce/relu"
type: "ReLU"
bottom: "conv5_2_1x1_reduce"
top: "conv5_2_1x1_reduce"
}
layer {
name: "conv5_2_3x3"
type: "Convolution"
bottom: "conv5_2_1x1_reduce"
top: "conv5_2_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 4
dilation: 4
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_2_3x3/bn"
type: "BN"
bottom: "conv5_2_3x3"
top: "conv5_2_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_2_3x3/relu"
type: "ReLU"
bottom: "conv5_2_3x3"
top: "conv5_2_3x3"
}
layer {
name: "conv5_2_1x1_increase"
type: "Convolution"
bottom: "conv5_2_3x3"
top: "conv5_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 1024
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_2_1x1_increase/bn"
type: "BN"
bottom: "conv5_2_1x1_increase"
top: "conv5_2_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_2"
type: "Eltwise"
bottom: "conv5_1"
bottom: "conv5_2_1x1_increase"
top: "conv5_2"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv5_2/relu"
type: "ReLU"
bottom: "conv5_2"
top: "conv5_2"
}
layer {
name: "conv5_3_1x1_reduce"
type: "Convolution"
bottom: "conv5_2"
top: "conv5_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_3_1x1_reduce/bn"
type: "BN"
bottom: "conv5_3_1x1_reduce"
top: "conv5_3_1x1_reduce"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_3_1x1_reduce/relu"
type: "ReLU"
bottom: "conv5_3_1x1_reduce"
top: "conv5_3_1x1_reduce"
}
layer {
name: "conv5_3_3x3"
type: "Convolution"
bottom: "conv5_3_1x1_reduce"
top: "conv5_3_3x3"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
pad: 4
dilation: 4
kernel_size: 3
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_3_3x3/bn"
type: "BN"
bottom: "conv5_3_3x3"
top: "conv5_3_3x3"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_3_3x3/relu"
type: "ReLU"
bottom: "conv5_3_3x3"
top: "conv5_3_3x3"
}
layer {
name: "conv5_3_1x1_increase"
type: "Convolution"
bottom: "conv5_3_3x3"
top: "conv5_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 1024
pad: 0
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_3_1x1_increase/bn"
type: "BN"
bottom: "conv5_3_1x1_increase"
top: "conv5_3_1x1_increase"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_3"
type: "Eltwise"
bottom: "conv5_2"
bottom: "conv5_3_1x1_increase"
top: "conv5_3"
eltwise_param {
operation: SUM
}
}
layer {
name: "conv5_3/relu"
type: "ReLU"
bottom: "conv5_3"
top: "conv5_3"
}
layer {
name: "conv5_3_pool1"
type: "Pooling"
bottom: "conv5_3"
top: "conv5_3_pool1"
pooling_param {
pool: AVE
kernel_h: 33
kernel_w: 65
stride_h: 33
stride_w: 65
}
}
layer {
name: "conv5_3_pool1_interp"
type: "Interp"
bottom: "conv5_3_pool1"
top: "conv5_3_pool1_interp"
interp_param {
height: 33
width: 65
}
}
layer {
name: "conv5_3_pool2"
type: "Pooling"
bottom: "conv5_3"
top: "conv5_3_pool2"
pooling_param {
pool: AVE
kernel_h: 17
kernel_w: 33
stride_h: 16
stride_w: 32
}
}
layer {
name: "conv5_3_pool2_interp"
type: "Interp"
bottom: "conv5_3_pool2"
top: "conv5_3_pool2_interp"
interp_param {
height: 33
width: 65
}
}
layer {
name: "conv5_3_pool3"
type: "Pooling"
bottom: "conv5_3"
top: "conv5_3_pool3"
pooling_param {
pool: AVE
kernel_h: 13
kernel_w: 25
stride_h: 10
stride_w: 20
}
}
layer {
name: "conv5_3_pool3_interp"
type: "Interp"
bottom: "conv5_3_pool3"
top: "conv5_3_pool3_interp"
interp_param {
height: 33
width: 65
}
}
layer {
name: "conv5_3_pool6"
type: "Pooling"
bottom: "conv5_3"
top: "conv5_3_pool6"
pooling_param {
pool: AVE
kernel_h: 8
kernel_w: 15
stride_h: 5
stride_w: 10
}
}
layer {
name: "conv5_3_pool6_interp"
type: "Interp"
bottom: "conv5_3_pool6"
top: "conv5_3_pool6_interp"
interp_param {
height: 33
width: 65
}
}
layer {
name: "conv5_3_sum"
type: "Eltwise"
bottom: "conv5_3"
bottom: "conv5_3_pool6_interp"
bottom: "conv5_3_pool3_interp"
bottom: "conv5_3_pool2_interp"
bottom: "conv5_3_pool1_interp"
top: "conv5_3_sum"
}
layer {
name: "conv5_4_k1"
type: "Convolution"
bottom: "conv5_3_sum"
top: "conv5_4_k1"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 256
kernel_size: 1
stride: 1
pad: 0
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv5_4_k1/bn"
type: "BN"
bottom: "conv5_4_k1"
top: "conv5_4_k1"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv5_4_k1/relu"
type: "ReLU"
bottom: "conv5_4_k1"
top: "conv5_4_k1"
}
layer {
name: "conv5_4_interp"
type: "Interp"
bottom: "conv5_4_k1"
top: "conv5_4_interp"
interp_param {
zoom_factor: 2
}
}
layer {
name: "conv_sub4"
type: "Convolution"
bottom: "conv5_4_interp"
top: "conv_sub4"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
kernel_size: 3
stride: 1
pad: 2
dilation: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv_sub4/bn"
type: "BN"
bottom: "conv_sub4"
top: "conv_sub4"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}

####################sub2####################
layer {
name: "conv3_1_sub2_proj"
type: "Convolution"
bottom: "conv3_1"
top: "conv3_1_sub2_proj"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
kernel_size: 1
stride: 1
pad: 0
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_1_sub2_proj/bn"
type: "BN"
bottom: "conv3_1_sub2_proj"
top: "conv3_1_sub2_proj"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "sub24_sum"
type: "Eltwise"
bottom: "conv3_1_sub2_proj"
bottom: "conv_sub4"
top: "sub24_sum"
}
layer {
name: "sub24_sum/relu"
type: "ReLU"
bottom: "sub24_sum"
top: "sub24_sum"
}
layer {
name: "sub24_sum_interp"
type: "Interp"
bottom: "sub24_sum"
top: "sub24_sum_interp"
interp_param {
zoom_factor: 2
}
}
layer {
name: "conv_sub2"
type: "Convolution"
bottom: "sub24_sum_interp"
top: "conv_sub2"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
kernel_size: 3
stride: 1
pad: 2
dilation: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv_sub2/bn"
type: "BN"
bottom: "conv_sub2"
top: "conv_sub2"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}

####################sub1####################
layer {
name: "conv1_sub1"
type: "Convolution"
bottom: "data_sub1"
top: "conv1_sub1"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv1_sub1/bn"
type: "BN"
bottom: "conv1_sub1"
top: "conv1_sub1"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv1_sub1/relu"
type: "ReLU"
bottom: "conv1_sub1"
top: "conv1_sub1"
}
layer {
name: "conv2_sub1"
type: "Convolution"
bottom: "conv1_sub1"
top: "conv2_sub1"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv2_sub1/bn"
type: "BN"
bottom: "conv2_sub1"
top: "conv2_sub1"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv2_sub1/relu"
type: "ReLU"
bottom: "conv2_sub1"
top: "conv2_sub1"
}
layer {
name: "conv3_sub1"
type: "Convolution"
bottom: "conv2_sub1"
top: "conv3_sub1"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 2
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_sub1/bn"
type: "BN"
bottom: "conv3_sub1"
top: "conv3_sub1"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}
layer {
name: "conv3_sub1/relu"
type: "ReLU"
bottom: "conv3_sub1"
top: "conv3_sub1"
}
layer {
name: "conv3_sub1_proj"
type: "Convolution"
bottom: "conv3_sub1"
top: "conv3_sub1_proj"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 128
kernel_size: 1
stride: 1
pad: 0
weight_filler {
type: "msra"
}
bias_term: true
}
}
layer {
name: "conv3_sub1_proj/bn"
type: "BN"
bottom: "conv3_sub1_proj"
top: "conv3_sub1_proj"
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 1
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
bn_param {
slope_filler {
type: "constant"
value: 1
}
bias_filler {
type: "constant"
value: 0
}
frozen: false
momentum: 0.95
}
}

layer {
name: "sub12_sum"
type: "Eltwise"
bottom: "conv3_sub1_proj"
bottom: "conv_sub2"
top: "sub12_sum"
}
layer {
name: "sub12_sum/relu"
type: "ReLU"
bottom: "sub12_sum"
top: "sub12_sum"
}
layer {
name: "sub12_sum_interp"
type: "Interp"
bottom: "sub12_sum"
top: "sub12_sum_interp"
interp_param {
zoom_factor: 2
}
}

layer {
name: "conv6_cls_a"
type: "Convolution"
bottom: "sub12_sum_interp"
top: "conv6_cls"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 7
kernel_size: 1
stride: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv6_interp"
type: "Interp"
bottom: "conv6_cls"
top: "conv6_interp"
interp_param {
zoom_factor: 4
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "conv6_interp"
bottom: "label"
top: "loss"
include {
phase: TRAIN
}
loss_param {
ignore_label: 255
}
}
but error 74
F1214 20:46:44.748036 22556 math_functions.cu:79] Check failed: error == cudaSuccess (74 vs. 0) misaligned address
*** Check failure stack trace: ***
@ 0x7f9cf2a81daa (unknown)
@ 0x7f9cf2a81ce4 (unknown)
@ 0x7f9cf2a816e6 (unknown)
@ 0x7f9cf2a84687 (unknown)
@ 0x7f9cf3285218 caffe::caffe_gpu_memcpy()
@ 0x7f9cf323a82b caffe::SyncedMemory::gpu_data()
@ 0x7f9cf31dbb02 caffe::Blob<>::gpu_data()
@ 0x7f9cf32777b5 caffe::ScaleLayer<>::Backward_gpu()
@ 0x7f9cf31c8125 caffe::Net<>::BackwardFromTo()
@ 0x7f9cf31c8271 caffe::Net<>::Backward()
@ 0x7f9cf3247b73 caffe::Solver<>::Step()
@ 0x7f9cf324851a caffe::Solver<>::Solve()
@ 0x408085 train()
@ 0x4059ac main
@ 0x7f9cf1a8df45 (unknown)
@ 0x40620b (unknown)
@ (nil) (unknown)

Code available?

Hi Hengshuang,

I am wondering if by any chance your code is available for test?
Thank you

How to train or finetune in caffe?

hello, I want to train ICNet with pascal voc dataset in caffe. I have changed the number of class in .prototxt, and written the solver.pototxt according to the paper. But the loss also around 0.5, and the accuracy is too low.
Because my GPU is 8G memory, I can only set mini_batchsize to 8, but by setting iter_size to 2. So the batch size is 16. Can you help me.
Looking forward to your reply!

Not able to reproduce the prediction results

Hi @hszhao , I am evaluating the ICNet, and run eval_all.m on the evaluation/samplelist/cityscapes_val.txt.

Model using to evaluate:

model_weights = 'model/icnet_cityscapes_train_30k.caffemodel'; %trainval_90k for testset
model_deploy = 'prototxt/icnet_cityscapes.prototxt';

Here is my result on ICNet train on trainset for 30K, evaluated on valset (mIoU/pAcc):

==== Summary IoU ====
  1             road: 0.0000
  2         sidewalk: 0.0045
  3         building: 0.0109
  4             wall: 0.0025
  5            fence: 0.0438
  6             pole: 0.0101
  7    traffic light: 0.0000
  8     traffic sign: 0.0001
  9       vegetation: 0.0008
 10          terrain: 0.0047
 11              sky: 0.0000
 12           person: 0.0031
 13            rider: 0.0008
 14              car: 0.0012
 15            truck: 0.0000
 16              bus: 0.0000
 17            train: 0.0000
 18       motorcycle: 0.0005
 19          bicycle: 0.0000
 
Mean IoU over 19 classes: 0.44%
Pixel-wise Accuracy: 0.51%

Is there anything I am missing to run this model, thanks in advance for anything input.

By the way, does anybody be able to reproduce the result, and if yes, please let me know, what was missing?

Thanks
Huaqi

Low res network architecture

Hi! From paper its not clear layer amounts or some details of Your low resolution branch.Please can You describe Your low resolution branch architecture, or if it possible share your full model prototxt?

.

.

Evaluation with cityscapes

Hi As per step 3. evaluation

downloaded cityscapes dataset from https://drive.google.com/file/d/1z_2yifjYICczhZjBqCEhE1m6GYwJuljn/view

While running the ./run.sh, I got the below error

Error using importdata
Unable to open file.

Error in eval_sub (line 3)
list = importdata(fullfile(data_root,eval_list));

Error in eval_all (line 35)
eval_sub(data_name,data_root,eval_list,model_weights,model_deploy,fea_cha,crop_size_h,crop_size_w,data_class,data_colormap, ...

Please help

All predcition are road

Hi, Hengshuang!
This is a valid work for practical application. I've run your code. But something may be wrong. The predictions of network are all road, i.e. every element of 'imPred' is one. I can not locate the problem. I tested many images and got same results. What's wrong with that? thx

Can you not avoid using MATLAB ?!

any way I can use this without having the beloved MATLAB?
I love so much closed source that I am really close to buy a licence but hey ... no actually.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.