name: "deploy"
input: "data"
input_shape {
  dim: 1
  dim: 3
  dim: 640
  dim: 480
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 3
    kernel_size: 7
    stride: 4
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv1_bn"
  type: "BatchNorm"
  bottom: "conv1"
  top: "conv1"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "conv1_neg"
  type: "Power"
  bottom: "conv1"
  top: "conv1_neg"
  power_param {
    power: 1
    scale: -1.0
    shift: 0
  }
}
layer {
  name: "conv1_concat"
  type: "Concat"
  bottom: "conv1"
  bottom: "conv1_neg"
  top: "conv1_concat"
}
layer {
  name: "conv1_scale"
  type: "Scale"
  bottom: "conv1_concat"
  top: "conv1_concat"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv1_relu"
  type: "ReLU"
  bottom: "conv1_concat"
  top: "conv1_concat"
}
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1_concat"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 2
    kernel_size: 5
    stride: 2
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv2_bn"
  type: "BatchNorm"
  bottom: "conv2"
  top: "conv2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "conv2_neg"
  type: "Power"
  bottom: "conv2"
  top: "conv2_neg"
  power_param {
    power: 1
    scale: -1.0
    shift: 0
  }
}
layer {
  name: "conv2_concat"
  type: "Concat"
  bottom: "conv2"
  bottom: "conv2_neg"
  top: "conv2_concat"
}
layer {
  name: "conv2_scale"
  type: "Scale"
  bottom: "conv2_concat"
  top: "conv2_concat"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv2_relu"
  type: "ReLU"
  bottom: "conv2_concat"
  top: "conv2_concat"
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2_concat"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  name: "inception_a1_pool_ave"
  type: "Pooling"
  bottom: "pool2"
  top: "inception_a1_pool_ave"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
  name: "inception_a1_1x1"
  type: "Convolution"
  bottom: "inception_a1_pool_ave"
  top: "inception_a1_1x1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_1x1_bn"
  type: "BatchNorm"
  bottom: "inception_a1_1x1"
  top: "inception_a1_1x1"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_1x1_scale"
  type: "Scale"
  bottom: "inception_a1_1x1"
  top: "inception_a1_1x1"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_1x1_relu"
  type: "ReLU"
  bottom: "inception_a1_1x1"
  top: "inception_a1_1x1"
}
layer {
  name: "inception_a1_1x1_2"
  type: "Convolution"
  bottom: "pool2"
  top: "inception_a1_1x1_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_1x1_2_bn"
  type: "BatchNorm"
  bottom: "inception_a1_1x1_2"
  top: "inception_a1_1x1_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_1x1_2_scale"
  type: "Scale"
  bottom: "inception_a1_1x1_2"
  top: "inception_a1_1x1_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_1x1_2_relu"
  type: "ReLU"
  bottom: "inception_a1_1x1_2"
  top: "inception_a1_1x1_2"
}
layer {
  name: "inception_a1_3x3_reduce"
  type: "Convolution"
  bottom: "pool2"
  top: "inception_a1_3x3_reduce"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_3x3_reduce_bn"
  type: "BatchNorm"
  bottom: "inception_a1_3x3_reduce"
  top: "inception_a1_3x3_reduce"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_3x3_reduce_scale"
  type: "Scale"
  bottom: "inception_a1_3x3_reduce"
  top: "inception_a1_3x3_reduce"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_3x3_reduce_relu"
  type: "ReLU"
  bottom: "inception_a1_3x3_reduce"
  top: "inception_a1_3x3_reduce"
}
layer {
  name: "inception_a1_3x3"
  type: "Convolution"
  bottom: "inception_a1_3x3_reduce"
  top: "inception_a1_3x3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_3x3_bn"
  type: "BatchNorm"
  bottom: "inception_a1_3x3"
  top: "inception_a1_3x3"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_3x3_scale"
  type: "Scale"
  bottom: "inception_a1_3x3"
  top: "inception_a1_3x3"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_3x3_relu"
  type: "ReLU"
  bottom: "inception_a1_3x3"
  top: "inception_a1_3x3"
}
layer {
  name: "inception_a1_3x3_2_reduce"
  type: "Convolution"
  bottom: "pool2"
  top: "inception_a1_3x3_2_reduce"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_3x3_2_reduce_bn"
  type: "BatchNorm"
  bottom: "inception_a1_3x3_2_reduce"
  top: "inception_a1_3x3_2_reduce"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_3x3_2_reduce_scale"
  type: "Scale"
  bottom: "inception_a1_3x3_2_reduce"
  top: "inception_a1_3x3_2_reduce"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_3x3_2_reduce_relu"
  type: "ReLU"
  bottom: "inception_a1_3x3_2_reduce"
  top: "inception_a1_3x3_2_reduce"
}
layer {
  name: "inception_a1_3x3_2"
  type: "Convolution"
  bottom: "inception_a1_3x3_2_reduce"
  top: "inception_a1_3x3_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_3x3_2_bn"
  type: "BatchNorm"
  bottom: "inception_a1_3x3_2"
  top: "inception_a1_3x3_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_3x3_2_scale"
  type: "Scale"
  bottom: "inception_a1_3x3_2"
  top: "inception_a1_3x3_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_3x3_2_relu"
  type: "ReLU"
  bottom: "inception_a1_3x3_2"
  top: "inception_a1_3x3_2"
}
layer {
  name: "inception_a1_3x3_3"
  type: "Convolution"
  bottom: "inception_a1_3x3_2"
  top: "inception_a1_3x3_3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a1_3x3_3_bn"
  type: "BatchNorm"
  bottom: "inception_a1_3x3_3"
  top: "inception_a1_3x3_3"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a1_3x3_3_scale"
  type: "Scale"
  bottom: "inception_a1_3x3_3"
  top: "inception_a1_3x3_3"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a1_3x3_3_relu"
  type: "ReLU"
  bottom: "inception_a1_3x3_3"
  top: "inception_a1_3x3_3"
}
layer {
  name: "inception_a1_concat"
  type: "Concat"
  bottom: "inception_a1_1x1"
  bottom: "inception_a1_1x1_2"
  bottom: "inception_a1_3x3"
  bottom: "inception_a1_3x3_3"
  top: "inception_a1_concat"
}
layer {
  name: "inception_a2_pool_ave"
  type: "Pooling"
  bottom: "inception_a1_concat"
  top: "inception_a2_pool_ave"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
  name: "inception_a2_1x1"
  type: "Convolution"
  bottom: "inception_a2_pool_ave"
  top: "inception_a2_1x1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_1x1_bn"
  type: "BatchNorm"
  bottom: "inception_a2_1x1"
  top: "inception_a2_1x1"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_1x1_scale"
  type: "Scale"
  bottom: "inception_a2_1x1"
  top: "inception_a2_1x1"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_1x1_relu"
  type: "ReLU"
  bottom: "inception_a2_1x1"
  top: "inception_a2_1x1"
}
layer {
  name: "inception_a2_1x1_2"
  type: "Convolution"
  bottom: "inception_a1_concat"
  top: "inception_a2_1x1_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_1x1_2_bn"
  type: "BatchNorm"
  bottom: "inception_a2_1x1_2"
  top: "inception_a2_1x1_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_1x1_2_scale"
  type: "Scale"
  bottom: "inception_a2_1x1_2"
  top: "inception_a2_1x1_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_1x1_2_relu"
  type: "ReLU"
  bottom: "inception_a2_1x1_2"
  top: "inception_a2_1x1_2"
}
layer {
  name: "inception_a2_3x3_reduce"
  type: "Convolution"
  bottom: "inception_a1_concat"
  top: "inception_a2_3x3_reduce"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_3x3_reduce_bn"
  type: "BatchNorm"
  bottom: "inception_a2_3x3_reduce"
  top: "inception_a2_3x3_reduce"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_3x3_reduce_scale"
  type: "Scale"
  bottom: "inception_a2_3x3_reduce"
  top: "inception_a2_3x3_reduce"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_3x3_reduce_relu"
  type: "ReLU"
  bottom: "inception_a2_3x3_reduce"
  top: "inception_a2_3x3_reduce"
}
layer {
  name: "inception_a2_3x3"
  type: "Convolution"
  bottom: "inception_a2_3x3_reduce"
  top: "inception_a2_3x3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_3x3_bn"
  type: "BatchNorm"
  bottom: "inception_a2_3x3"
  top: "inception_a2_3x3"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_3x3_scale"
  type: "Scale"
  bottom: "inception_a2_3x3"
  top: "inception_a2_3x3"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_3x3_relu"
  type: "ReLU"
  bottom: "inception_a2_3x3"
  top: "inception_a2_3x3"
}
layer {
  name: "inception_a2_3x3_2_reduce"
  type: "Convolution"
  bottom: "inception_a1_concat"
  top: "inception_a2_3x3_2_reduce"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_3x3_2_reduce_bn"
  type: "BatchNorm"
  bottom: "inception_a2_3x3_2_reduce"
  top: "inception_a2_3x3_2_reduce"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_3x3_2_reduce_scale"
  type: "Scale"
  bottom: "inception_a2_3x3_2_reduce"
  top: "inception_a2_3x3_2_reduce"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_3x3_2_reduce_relu"
  type: "ReLU"
  bottom: "inception_a2_3x3_2_reduce"
  top: "inception_a2_3x3_2_reduce"
}
layer {
  name: "inception_a2_3x3_2"
  type: "Convolution"
  bottom: "inception_a2_3x3_2_reduce"
  top: "inception_a2_3x3_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_3x3_2_bn"
  type: "BatchNorm"
  bottom: "inception_a2_3x3_2"
  top: "inception_a2_3x3_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_3x3_2_scale"
  type: "Scale"
  bottom: "inception_a2_3x3_2"
  top: "inception_a2_3x3_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_3x3_2_relu"
  type: "ReLU"
  bottom: "inception_a2_3x3_2"
  top: "inception_a2_3x3_2"
}
layer {
  name: "inception_a2_3x3_3"
  type: "Convolution"
  bottom: "inception_a2_3x3_2"
  top: "inception_a2_3x3_3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a2_3x3_3_bn"
  type: "BatchNorm"
  bottom: "inception_a2_3x3_3"
  top: "inception_a2_3x3_3"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a2_3x3_3_scale"
  type: "Scale"
  bottom: "inception_a2_3x3_3"
  top: "inception_a2_3x3_3"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a2_3x3_3_relu"
  type: "ReLU"
  bottom: "inception_a2_3x3_3"
  top: "inception_a2_3x3_3"
}
layer {
  name: "inception_a2_concat"
  type: "Concat"
  bottom: "inception_a2_1x1"
  bottom: "inception_a2_1x1_2"
  bottom: "inception_a2_3x3"
  bottom: "inception_a2_3x3_3"
  top: "inception_a2_concat"
}
layer {
  name: "inception_a3_pool_ave"
  type: "Pooling"
  bottom: "inception_a2_concat"
  top: "inception_a3_pool_ave"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
  name: "inception_a3_1x1"
  type: "Convolution"
  bottom: "inception_a3_pool_ave"
  top: "inception_a3_1x1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_1x1_bn"
  type: "BatchNorm"
  bottom: "inception_a3_1x1"
  top: "inception_a3_1x1"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_1x1_scale"
  type: "Scale"
  bottom: "inception_a3_1x1"
  top: "inception_a3_1x1"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_1x1_relu"
  type: "ReLU"
  bottom: "inception_a3_1x1"
  top: "inception_a3_1x1"
}
layer {
  name: "inception_a3_1x1_2"
  type: "Convolution"
  bottom: "inception_a2_concat"
  top: "inception_a3_1x1_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_1x1_2_bn"
  type: "BatchNorm"
  bottom: "inception_a3_1x1_2"
  top: "inception_a3_1x1_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_1x1_2_scale"
  type: "Scale"
  bottom: "inception_a3_1x1_2"
  top: "inception_a3_1x1_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_1x1_2_relu"
  type: "ReLU"
  bottom: "inception_a3_1x1_2"
  top: "inception_a3_1x1_2"
}
layer {
  name: "inception_a3_3x3_reduce"
  type: "Convolution"
  bottom: "inception_a2_concat"
  top: "inception_a3_3x3_reduce"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_3x3_reduce_bn"
  type: "BatchNorm"
  bottom: "inception_a3_3x3_reduce"
  top: "inception_a3_3x3_reduce"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_3x3_reduce_scale"
  type: "Scale"
  bottom: "inception_a3_3x3_reduce"
  top: "inception_a3_3x3_reduce"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_3x3_reduce_relu"
  type: "ReLU"
  bottom: "inception_a3_3x3_reduce"
  top: "inception_a3_3x3_reduce"
}
layer {
  name: "inception_a3_3x3"
  type: "Convolution"
  bottom: "inception_a3_3x3_reduce"
  top: "inception_a3_3x3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_3x3_bn"
  type: "BatchNorm"
  bottom: "inception_a3_3x3"
  top: "inception_a3_3x3"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_3x3_scale"
  type: "Scale"
  bottom: "inception_a3_3x3"
  top: "inception_a3_3x3"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_3x3_relu"
  type: "ReLU"
  bottom: "inception_a3_3x3"
  top: "inception_a3_3x3"
}
layer {
  name: "inception_a3_3x3_2_reduce"
  type: "Convolution"
  bottom: "inception_a2_concat"
  top: "inception_a3_3x3_2_reduce"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_3x3_2_reduce_bn"
  type: "BatchNorm"
  bottom: "inception_a3_3x3_2_reduce"
  top: "inception_a3_3x3_2_reduce"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_3x3_2_reduce_scale"
  type: "Scale"
  bottom: "inception_a3_3x3_2_reduce"
  top: "inception_a3_3x3_2_reduce"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_3x3_2_reduce_relu"
  type: "ReLU"
  bottom: "inception_a3_3x3_2_reduce"
  top: "inception_a3_3x3_2_reduce"
}
layer {
  name: "inception_a3_3x3_2"
  type: "Convolution"
  bottom: "inception_a3_3x3_2_reduce"
  top: "inception_a3_3x3_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_3x3_2_bn"
  type: "BatchNorm"
  bottom: "inception_a3_3x3_2"
  top: "inception_a3_3x3_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_3x3_2_scale"
  type: "Scale"
  bottom: "inception_a3_3x3_2"
  top: "inception_a3_3x3_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_3x3_2_relu"
  type: "ReLU"
  bottom: "inception_a3_3x3_2"
  top: "inception_a3_3x3_2"
}
layer {
  name: "inception_a3_3x3_3"
  type: "Convolution"
  bottom: "inception_a3_3x3_2"
  top: "inception_a3_3x3_3"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 1
    kernel_size: 3
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "inception_a3_3x3_3_bn"
  type: "BatchNorm"
  bottom: "inception_a3_3x3_3"
  top: "inception_a3_3x3_3"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "inception_a3_3x3_3_scale"
  type: "Scale"
  bottom: "inception_a3_3x3_3"
  top: "inception_a3_3x3_3"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "inception_a3_3x3_3_relu"
  type: "ReLU"
  bottom: "inception_a3_3x3_3"
  top: "inception_a3_3x3_3"
}
layer {
  name: "inception_a3_concat"
  type: "Concat"
  bottom: "inception_a3_1x1"
  bottom: "inception_a3_1x1_2"
  bottom: "inception_a3_3x3"
  bottom: "inception_a3_3x3_3"
  top: "inception_a3_concat"
}
layer {
  name: "conv3_1"
  type: "Convolution"
  bottom: "inception_a3_concat"
  top: "conv3_1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv3_1_bn"
  type: "BatchNorm"
  bottom: "conv3_1"
  top: "conv3_1"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "conv3_1_scale"
  type: "Scale"
  bottom: "conv3_1"
  top: "conv3_1"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv3_1_relu"
  type: "ReLU"
  bottom: "conv3_1"
  top: "conv3_1"
}
layer {
  name: "conv3_2"
  type: "Convolution"
  bottom: "conv3_1"
  top: "conv3_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 256
    pad: 1
    kernel_size: 3
    stride: 2
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv3_2_bn"
  type: "BatchNorm"
  bottom: "conv3_2"
  top: "conv3_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "conv3_2_scale"
  type: "Scale"
  bottom: "conv3_2"
  top: "conv3_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv3_2_relu"
  type: "ReLU"
  bottom: "conv3_2"
  top: "conv3_2"
}
layer {
  name: "conv4_1"
  type: "Convolution"
  bottom: "conv3_2"
  top: "conv4_1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv4_1_bn"
  type: "BatchNorm"
  bottom: "conv4_1"
  top: "conv4_1"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "conv4_1_scale"
  type: "Scale"
  bottom: "conv4_1"
  top: "conv4_1"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv4_1_relu"
  type: "ReLU"
  bottom: "conv4_1"
  top: "conv4_1"
}
layer {
  name: "conv4_2"
  type: "Convolution"
  bottom: "conv4_1"
  top: "conv4_2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 256
    pad: 1
    kernel_size: 3
    stride: 2
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv4_2_bn"
  type: "BatchNorm"
  bottom: "conv4_2"
  top: "conv4_2"
  batch_norm_param {
    use_global_stats: true
  }
}
layer {
  name: "conv4_2_scale"
  type: "Scale"
  bottom: "conv4_2"
  top: "conv4_2"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv4_2_relu"
  type: "ReLU"
  bottom: "conv4_2"
  top: "conv4_2"
}
layer {
  name: "inception_a3_concat_mbox_loc"
  type: "Convolution"
  bottom: "inception_a3_concat"
  top: "inception_a3_concat_mbox_loc"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 84
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "inception_a3_concat_mbox_loc_perm"
  type: "Permute"
  bottom: "inception_a3_concat_mbox_loc"
  top: "inception_a3_concat_mbox_loc_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}
layer {
  name: "inception_a3_concat_mbox_loc_flat"
  type: "Flatten"
  bottom: "inception_a3_concat_mbox_loc_perm"
  top: "inception_a3_concat_mbox_loc_flat"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "inception_a3_concat_mbox_conf"
  type: "Convolution"
  bottom: "inception_a3_concat"
  top: "inception_a3_concat_mbox_conf"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 42
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "inception_a3_concat_mbox_conf_perm"
  type: "Permute"
  bottom: "inception_a3_concat_mbox_conf"
  top: "inception_a3_concat_mbox_conf_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}
layer {
  name: "inception_a3_concat_mbox_conf_flat"
  type: "Flatten"
  bottom: "inception_a3_concat_mbox_conf_perm"
  top: "inception_a3_concat_mbox_conf_flat"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "inception_a3_concat_mbox_priorbox"
  type: "PriorBox"
  bottom: "inception_a3_concat"
  bottom: "data"
  top: "inception_a3_concat_mbox_priorbox"
  prior_box_param {
    min_size: 32
    min_size: 64
    min_size: 128
    clip: false
    variance: 0.1
    variance: 0.1
    variance: 0.2
    variance: 0.2
    step: 32
    offset: 0.5
  }
}
layer {
  name: "conv3_2_mbox_loc"
  type: "Convolution"
  bottom: "conv3_2"
  top: "conv3_2_mbox_loc"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 4
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "conv3_2_mbox_loc_perm"
  type: "Permute"
  bottom: "conv3_2_mbox_loc"
  top: "conv3_2_mbox_loc_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}
layer {
  name: "conv3_2_mbox_loc_flat"
  type: "Flatten"
  bottom: "conv3_2_mbox_loc_perm"
  top: "conv3_2_mbox_loc_flat"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "conv3_2_mbox_conf"
  type: "Convolution"
  bottom: "conv3_2"
  top: "conv3_2_mbox_conf"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 2
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "conv3_2_mbox_conf_perm"
  type: "Permute"
  bottom: "conv3_2_mbox_conf"
  top: "conv3_2_mbox_conf_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}
layer {
  name: "conv3_2_mbox_conf_flat"
  type: "Flatten"
  bottom: "conv3_2_mbox_conf_perm"
  top: "conv3_2_mbox_conf_flat"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "conv3_2_mbox_priorbox"
  type: "PriorBox"
  bottom: "conv3_2"
  bottom: "data"
  top: "conv3_2_mbox_priorbox"
  prior_box_param {
    min_size: 256
    clip: false
    variance: 0.1
    variance: 0.1
    variance: 0.2
    variance: 0.2
    step: 64
    offset: 0.5
  }
}
layer {
  name: "conv4_2_mbox_loc"
  type: "Convolution"
  bottom: "conv4_2"
  top: "conv4_2_mbox_loc"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 4
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "conv4_2_mbox_loc_perm"
  type: "Permute"
  bottom: "conv4_2_mbox_loc"
  top: "conv4_2_mbox_loc_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}
layer {
  name: "conv4_2_mbox_loc_flat"
  type: "Flatten"
  bottom: "conv4_2_mbox_loc_perm"
  top: "conv4_2_mbox_loc_flat"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "conv4_2_mbox_conf"
  type: "Convolution"
  bottom: "conv4_2"
  top: "conv4_2_mbox_conf"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 2
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.2
    }
  }
}
layer {
  name: "conv4_2_mbox_conf_perm"
  type: "Permute"
  bottom: "conv4_2_mbox_conf"
  top: "conv4_2_mbox_conf_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}
layer {
  name: "conv4_2_mbox_conf_flat"
  type: "Flatten"
  bottom: "conv4_2_mbox_conf_perm"
  top: "conv4_2_mbox_conf_flat"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "conv4_2_mbox_priorbox"
  type: "PriorBox"
  bottom: "conv4_2"
  bottom: "data"
  top: "conv4_2_mbox_priorbox"
  prior_box_param {
    min_size: 512
    clip: false
    variance: 0.1
    variance: 0.1
    variance: 0.2
    variance: 0.2
    step: 128
    offset: 0.5
  }
}
layer {
  name: "mbox_loc"
  type: "Concat"
  bottom: "inception_a3_concat_mbox_loc_flat"
  bottom: "conv3_2_mbox_loc_flat"
  bottom: "conv4_2_mbox_loc_flat"
  top: "mbox_loc"
  concat_param {
    axis: 1
  }
}
layer {
  name: "mbox_conf"
  type: "Concat"
  bottom: "inception_a3_concat_mbox_conf_flat"
  bottom: "conv3_2_mbox_conf_flat"
  bottom: "conv4_2_mbox_conf_flat"
  top: "mbox_conf"
  concat_param {
    axis: 1
  }
}
layer {
  name: "mbox_priorbox"
  type: "Concat"
  bottom: "inception_a3_concat_mbox_priorbox"
  bottom: "conv3_2_mbox_priorbox"
  bottom: "conv4_2_mbox_priorbox"
  top: "mbox_priorbox"
  concat_param {
    axis: 2
  }
}
layer {
  name: "mbox_conf_reshape"
  type: "Reshape"
  bottom: "mbox_conf"
  top: "mbox_conf_reshape"
  reshape_param {
    shape {
      dim: 0
      dim: -1
      dim: 2
    }
  }
}
layer {
  name: "mbox_conf_softmax"
  type: "Softmax"
  bottom: "mbox_conf_reshape"
  top: "mbox_conf_softmax"
  softmax_param {
    axis: 2
  }
}
layer {
  name: "mbox_conf_flatten"
  type: "Flatten"
  bottom: "mbox_conf_softmax"
  top: "mbox_conf_flatten"
  flatten_param {
    axis: 1
  }
}
layer {
  name: "detection_out"
  type: "DetectionOutput"
  bottom: "mbox_loc"
  bottom: "mbox_conf_flatten"
  bottom: "mbox_priorbox"
  top: "detection_out"
  include {
    phase: TEST
  }
  detection_output_param {
    num_classes: 2
    share_location: true
    background_label_id: 0
    nms_param {
      nms_threshold: 0.3
      top_k: 5000
    }
    code_type: CENTER_SIZE
    keep_top_k: 750
    confidence_threshold: 0.05
  }
}

