Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caffe Convert TensorRT Error #943

Open
passinme opened this issue Oct 23, 2023 · 1 comment
Open

Caffe Convert TensorRT Error #943

passinme opened this issue Oct 23, 2023 · 1 comment

Comments

@passinme
Copy link

This is my error message

Message Details
trtexec --model=pedestrain.caffemodel --deploy=pedestrain.prototxt --verbose --output=prob-attr --saveEngine=pedestrain.trt

[10/23/2023-16:30:43] [I] === Model Options ===
[10/23/2023-16:30:43] [I] Format: Caffe
[10/23/2023-16:30:43] [I] Model: pedestrain.caffemodel
[10/23/2023-16:30:43] [I] Prototxt: pedestrain.prototxt
[10/23/2023-16:30:43] [I] Output: prob-attr
[10/23/2023-16:30:43] [I] === Build Options ===
[10/23/2023-16:30:43] [I] Max batch: 1
[10/23/2023-16:30:43] [I] Workspace: 16 MiB
[10/23/2023-16:30:43] [I] minTiming: 1
[10/23/2023-16:30:43] [I] avgTiming: 8
[10/23/2023-16:30:43] [I] Precision: FP32
[10/23/2023-16:30:43] [I] Calibration:
[10/23/2023-16:30:43] [I] Refit: Disabled
[10/23/2023-16:30:43] [I] Sparsity: Disabled
[10/23/2023-16:30:43] [I] Safe mode: Disabled
[10/23/2023-16:30:43] [I] DirectIO mode: Disabled
[10/23/2023-16:30:43] [I] Restricted mode: Disabled
[10/23/2023-16:30:43] [I] Save engine: pedestrain.trt
[10/23/2023-16:30:43] [I] Load engine:
[10/23/2023-16:30:43] [I] Profiling verbosity: 0
[10/23/2023-16:30:43] [I] Tactic sources: Using default tactic sources
[10/23/2023-16:30:43] [I] timingCacheMode: local
[10/23/2023-16:30:43] [I] timingCacheFile:
[10/23/2023-16:30:43] [I] Input(s)s format: fp32:CHW
[10/23/2023-16:30:43] [I] Output(s)s format: fp32:CHW
[10/23/2023-16:30:43] [I] Input build shapes: model
[10/23/2023-16:30:43] [I] Input calibration shapes: model
[10/23/2023-16:30:43] [I] === System Options ===
[10/23/2023-16:30:43] [I] Device: 0
[10/23/2023-16:30:43] [I] DLACore:
[10/23/2023-16:30:43] [I] Plugins:
[10/23/2023-16:30:43] [I] === Inference Options ===
[10/23/2023-16:30:43] [I] Batch: 1
[10/23/2023-16:30:43] [I] Input inference shapes: model
[10/23/2023-16:30:43] [I] Iterations: 10
[10/23/2023-16:30:43] [I] Duration: 3s (+ 200ms warm up)
[10/23/2023-16:30:43] [I] Sleep time: 0ms
[10/23/2023-16:30:43] [I] Idle time: 0ms
[10/23/2023-16:30:43] [I] Streams: 1
[10/23/2023-16:30:43] [I] ExposeDMA: Disabled
[10/23/2023-16:30:43] [I] Data transfers: Enabled
[10/23/2023-16:30:43] [I] Spin-wait: Disabled
[10/23/2023-16:30:43] [I] Multithreading: Disabled
[10/23/2023-16:30:43] [I] CUDA Graph: Disabled
[10/23/2023-16:30:43] [I] Separate profiling: Disabled
[10/23/2023-16:30:43] [I] Time Deserialize: Disabled
[10/23/2023-16:30:43] [I] Time Refit: Disabled
[10/23/2023-16:30:43] [I] Skip inference: Disabled
[10/23/2023-16:30:43] [I] Inputs:
[10/23/2023-16:30:43] [I] === Reporting Options ===
[10/23/2023-16:30:43] [I] Verbose: Enabled
[10/23/2023-16:30:43] [I] Averages: 10 inferences
[10/23/2023-16:30:43] [I] Percentile: 99
[10/23/2023-16:30:43] [I] Dump refittable layers:Disabled
[10/23/2023-16:30:43] [I] Dump output: Disabled
[10/23/2023-16:30:43] [I] Profile: Disabled
[10/23/2023-16:30:43] [I] Export timing to JSON file:
[10/23/2023-16:30:43] [I] Export output to JSON file:
[10/23/2023-16:30:43] [I] Export profile to JSON file:
[10/23/2023-16:30:43] [I]
[10/23/2023-16:30:43] [I] === Device Information ===
[10/23/2023-16:30:43] [I] Selected Device: Tesla T4
[10/23/2023-16:30:43] [I] Compute Capability: 7.5
[10/23/2023-16:30:43] [I] SMs: 40
[10/23/2023-16:30:43] [I] Compute Clock Rate: 1.59 GHz
[10/23/2023-16:30:43] [I] Device Global Memory: 14910 MiB
[10/23/2023-16:30:43] [I] Shared Memory per SM: 64 KiB
[10/23/2023-16:30:43] [I] Memory Bus Width: 256 bits (ECC enabled)
[10/23/2023-16:30:43] [I] Memory Clock Rate: 5.001 GHz
[10/23/2023-16:30:43] [I]
[10/23/2023-16:30:43] [I] TensorRT version: 8.2.1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::GridAnchor_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::GridAnchorRect_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::NMS_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::Reorg_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::Region_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::Clip_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::LReLU_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::PriorBox_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::Normalize_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::ScatterND version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::RPROI_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::BatchedNMS_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::BatchedNMSDynamic_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::FlattenConcat_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::CropAndResize version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::DetectionLayer_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::EfficientNMS_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::EfficientNMS_ONNX_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::EfficientNMS_TFTRT_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::Proposal version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::ProposalLayer_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::PyramidROIAlign_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::ResizeNearest_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::Split version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::SpecialSlice_TRT version 1
[10/23/2023-16:30:43] [V] [TRT] Registered plugin creator - ::InstanceNormalization_TRT version 1
[10/23/2023-16:30:44] [I] [TRT] [MemUsageChange] Init CUDA: CPU +321, GPU +0, now: CPU 333, GPU 1006 (MiB)
[10/23/2023-16:30:44] [I] [TRT] [MemUsageSnapshot] Begin constructing builder kernel library: CPU 333 MiB, GPU 1006 MiB
[10/23/2023-16:30:44] [I] [TRT] [MemUsageSnapshot] End constructing builder kernel library: CPU 468 MiB, GPU 1040 MiB
[10/23/2023-16:30:44] [I] Start parsing network model
could not parse layer type Slice
[10/23/2023-16:30:44] [E] Failed to parse caffe model or prototxt, tensors blob not found
[10/23/2023-16:30:44] [I] Finish parsing network model
[10/23/2023-16:30:44] [E] Parsing model failed
[10/23/2023-16:30:44] [E] Failed to create engine from model.
[10/23/2023-16:30:44] [E] Engine set up failed

How can I solve it ?

@passinme
Copy link
Author

This is caffe prototxt

Prototxt Details

input: "data"
input_shape {
  dim: 1
  dim: 3
  dim: 227
  dim: 227
}



################shared part for attribute model and view prediction ######

layer {
  bottom: "data"
  top: "conv1/7x7_s2"
  name: "conv1/7x7_s2"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 3
    kernel_size: 7
    stride: 2
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "conv1/7x7_s2"
  name: "conv1/7x7_s2/bn"
  top: "conv1/7x7_s2/bn"
  type: "BatchNorm"
}
layer {
  bottom: "conv1/7x7_s2/bn"
  top: "conv1/7x7_s2/bn/sc"
  name: "conv1/7x7_s2/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "conv1/7x7_s2/bn/sc"
  top: "conv1/7x7_s2/bn/sc"
  name: "conv1/7x7_s2/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "conv1/7x7_s2/bn/sc"
  top: "pool1/3x3_s2"
  name: "pool1/3x3_s2"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
 bottom: "pool1/3x3_s2"
  top: "conv2/3x3_reduce"
  name: "conv2/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "conv2/3x3_reduce"
  name: "conv2/3x3_reduce/bn"
  top: "conv2/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "conv2/3x3_reduce/bn"
  top: "conv2/3x3_reduce/bn/sc"
  name: "conv2/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "conv2/3x3_reduce/bn/sc"
  top: "conv2/3x3_reduce/bn/sc"
  name: "conv2/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "conv2/3x3_reduce/bn/sc"
  top: "conv2/3x3"
  name: "conv2/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "conv2/3x3"
  name: "conv2/3x3/bn"
  top: "conv2/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "conv2/3x3/bn"
  top: "conv2/3x3/bn/sc"
  name: "conv2/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "conv2/3x3/bn/sc"
  top: "conv2/3x3/bn/sc"
  name: "conv2/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "conv2/3x3/bn/sc"
  top: "pool2/3x3_s2"
  name: "pool2/3x3_s2"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
 bottom: "pool2/3x3_s2"
  top: "inception_3a/1x1"
  name: "inception_3a/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/1x1"
  name: "inception_3a/1x1/bn"
  top: "inception_3a/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/1x1/bn"
  top: "inception_3a/1x1/bn/sc"
  name: "inception_3a/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/1x1/bn/sc"
  top: "inception_3a/1x1/bn/sc"
  name: "inception_3a/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "pool2/3x3_s2"
  top: "inception_3a/3x3_reduce"
  name: "inception_3a/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/3x3_reduce"
  name: "inception_3a/3x3_reduce/bn"
  top: "inception_3a/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/3x3_reduce/bn"
  top: "inception_3a/3x3_reduce/bn/sc"
  name: "inception_3a/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/3x3_reduce/bn/sc"
  top: "inception_3a/3x3_reduce/bn/sc"
  name: "inception_3a/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3a/3x3_reduce/bn/sc"
  top: "inception_3a/3x3"
  name: "inception_3a/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/3x3"
  name: "inception_3a/3x3/bn"
  top: "inception_3a/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/3x3/bn"
  top: "inception_3a/3x3/bn/sc"
  name: "inception_3a/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/3x3/bn/sc"
  top: "inception_3a/3x3/bn/sc"
  name: "inception_3a/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "pool2/3x3_s2"
  top: "inception_3a/double3x3_reduce"
  name: "inception_3a/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/double3x3_reduce"
  name: "inception_3a/double3x3_reduce/bn"
  top: "inception_3a/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/double3x3_reduce/bn"
  top: "inception_3a/double3x3_reduce/bn/sc"
  name: "inception_3a/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/double3x3_reduce/bn/sc"
  top: "inception_3a/double3x3_reduce/bn/sc"
  name: "inception_3a/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3a/double3x3_reduce/bn/sc"
  top: "inception_3a/double3x3a"
  name: "inception_3a/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/double3x3a"
  name: "inception_3a/double3x3a/bn"
  top: "inception_3a/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/double3x3a/bn"
  top: "inception_3a/double3x3a/bn/sc"
  name: "inception_3a/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/double3x3a/bn/sc"
  top: "inception_3a/double3x3a/bn/sc"
  name: "inception_3a/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3a/double3x3a/bn/sc"
  top: "inception_3a/double3x3b"
  name: "inception_3a/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/double3x3b"
  name: "inception_3a/double3x3b/bn"
  top: "inception_3a/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/double3x3b/bn"
  top: "inception_3a/double3x3b/bn/sc"
  name: "inception_3a/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/double3x3b/bn/sc"
  top: "inception_3a/double3x3b/bn/sc"
  name: "inception_3a/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "pool2/3x3_s2"
  top: "inception_3a/pool"
  name: "inception_3a/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_3a/pool"
  top: "inception_3a/pool_proj"
  name: "inception_3a/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3a/pool_proj"
  name: "inception_3a/pool_proj/bn"
  top: "inception_3a/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3a/pool_proj/bn"
  top: "inception_3a/pool_proj/bn/sc"
  name: "inception_3a/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3a/pool_proj/bn/sc"
  top: "inception_3a/pool_proj/bn/sc"
  name: "inception_3a/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_3a/1x1/bn/sc"
  bottom: "inception_3a/3x3/bn/sc"
  bottom: "inception_3a/double3x3b/bn/sc"
  bottom: "inception_3a/pool_proj/bn/sc"
  top: "inception_3a/output"
  name: "inception_3a/output"
  type: "Concat"
}

layer {
 bottom: "inception_3a/output"
  top: "inception_3b/1x1"
  name: "inception_3b/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/1x1"
  name: "inception_3b/1x1/bn"
  top: "inception_3b/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/1x1/bn"
  top: "inception_3b/1x1/bn/sc"
  name: "inception_3b/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/1x1/bn/sc"
  top: "inception_3b/1x1/bn/sc"
  name: "inception_3b/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3a/output"
  top: "inception_3b/3x3_reduce"
  name: "inception_3b/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/3x3_reduce"
  name: "inception_3b/3x3_reduce/bn"
  top: "inception_3b/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/3x3_reduce/bn"
  top: "inception_3b/3x3_reduce/bn/sc"
  name: "inception_3b/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/3x3_reduce/bn/sc"
  top: "inception_3b/3x3_reduce/bn/sc"
  name: "inception_3b/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3b/3x3_reduce/bn/sc"
  top: "inception_3b/3x3"
  name: "inception_3b/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/3x3"
  name: "inception_3b/3x3/bn"
  top: "inception_3b/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/3x3/bn"
  top: "inception_3b/3x3/bn/sc"
  name: "inception_3b/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/3x3/bn/sc"
  top: "inception_3b/3x3/bn/sc"
  name: "inception_3b/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3a/output"
  top: "inception_3b/double3x3_reduce"
  name: "inception_3b/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/double3x3_reduce"
  name: "inception_3b/double3x3_reduce/bn"
  top: "inception_3b/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/double3x3_reduce/bn"
  top: "inception_3b/double3x3_reduce/bn/sc"
  name: "inception_3b/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/double3x3_reduce/bn/sc"
  top: "inception_3b/double3x3_reduce/bn/sc"
  name: "inception_3b/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3b/double3x3_reduce/bn/sc"
  top: "inception_3b/double3x3a"
  name: "inception_3b/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/double3x3a"
  name: "inception_3b/double3x3a/bn"
  top: "inception_3b/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/double3x3a/bn"
  top: "inception_3b/double3x3a/bn/sc"
  name: "inception_3b/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/double3x3a/bn/sc"
  top: "inception_3b/double3x3a/bn/sc"
  name: "inception_3b/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3b/double3x3a/bn/sc"
  top: "inception_3b/double3x3b"
  name: "inception_3b/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/double3x3b"
  name: "inception_3b/double3x3b/bn"
  top: "inception_3b/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/double3x3b/bn"
  top: "inception_3b/double3x3b/bn/sc"
  name: "inception_3b/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/double3x3b/bn/sc"
  top: "inception_3b/double3x3b/bn/sc"
  name: "inception_3b/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_3a/output"
  top: "inception_3b/pool"
  name: "inception_3b/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_3b/pool"
  top: "inception_3b/pool_proj"
  name: "inception_3b/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3b/pool_proj"
  name: "inception_3b/pool_proj/bn"
  top: "inception_3b/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3b/pool_proj/bn"
  top: "inception_3b/pool_proj/bn/sc"
  name: "inception_3b/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3b/pool_proj/bn/sc"
  top: "inception_3b/pool_proj/bn/sc"
  name: "inception_3b/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_3b/1x1/bn/sc"
  bottom: "inception_3b/3x3/bn/sc"
  bottom: "inception_3b/double3x3b/bn/sc"
  bottom: "inception_3b/pool_proj/bn/sc"
  top: "inception_3b/output"
  name: "inception_3b/output"
  type: "Concat"
}
layer {
 bottom: "inception_3b/output"
  top: "inception_3c/3x3_reduce"
  name: "inception_3c/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3c/3x3_reduce"
  name: "inception_3c/3x3_reduce/bn"
  top: "inception_3c/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3c/3x3_reduce/bn"
  top: "inception_3c/3x3_reduce/bn/sc"
  name: "inception_3c/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3c/3x3_reduce/bn/sc"
  top: "inception_3c/3x3_reduce/bn/sc"
  name: "inception_3c/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3c/3x3_reduce/bn/sc"
  top: "inception_3c/3x3"
  name: "inception_3c/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3c/3x3"
  name: "inception_3c/3x3/bn"
  top: "inception_3c/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3c/3x3/bn"
  top: "inception_3c/3x3/bn/sc"
  name: "inception_3c/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3c/3x3/bn/sc"
  top: "inception_3c/3x3/bn/sc"
  name: "inception_3c/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3b/output"
  top: "inception_3c/double3x3_reduce"
  name: "inception_3c/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3c/double3x3_reduce"
  name: "inception_3c/double3x3_reduce/bn"
  top: "inception_3c/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3c/double3x3_reduce/bn"
  top: "inception_3c/double3x3_reduce/bn/sc"
  name: "inception_3c/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3c/double3x3_reduce/bn/sc"
  top: "inception_3c/double3x3_reduce/bn/sc"
  name: "inception_3c/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3c/double3x3_reduce/bn/sc"
  top: "inception_3c/double3x3a"
  name: "inception_3c/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3c/double3x3a"
  name: "inception_3c/double3x3a/bn"
  top: "inception_3c/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3c/double3x3a/bn"
  top: "inception_3c/double3x3a/bn/sc"
  name: "inception_3c/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3c/double3x3a/bn/sc"
  top: "inception_3c/double3x3a/bn/sc"
  name: "inception_3c/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3c/double3x3a/bn/sc"
  top: "inception_3c/double3x3b"
  name: "inception_3c/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_3c/double3x3b"
  name: "inception_3c/double3x3b/bn"
  top: "inception_3c/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_3c/double3x3b/bn"
  top: "inception_3c/double3x3b/bn/sc"
  name: "inception_3c/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_3c/double3x3b/bn/sc"
  top: "inception_3c/double3x3b/bn/sc"
  name: "inception_3c/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_3b/output"
  top: "inception_3c/pool"
  name: "inception_3c/pool"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  bottom: "inception_3c/3x3/bn/sc"
  bottom: "inception_3c/double3x3b/bn/sc"
  bottom: "inception_3c/pool"
  top: "inception_3c/output"
  name: "inception_3c/output"
  type: "Concat"
}

#################### view prediction ##################
layer {
  bottom: "inception_3c/output"
  top: "pool3/5x5_s3"
  name: "pool3/5x5_s3"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 5
    stride: 3
  }
}
layer {
 bottom: "pool3/5x5_s3"
  top: "loss1/conv"
  name: "loss1/conv"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "loss1/conv"
  name: "loss1/conv/bn"
  top: "loss1/conv/bn"
  type: "BatchNorm"
}
layer {
  bottom: "loss1/conv/bn"
  top: "loss1/conv/bn/sc"
  name: "loss1/conv/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "loss1/conv/bn/sc"
  top: "loss1/conv/bn/sc"
  name: "loss1/conv/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "loss1/conv/bn/sc"
  top: "loss1/fc"
  name: "loss1/fc"
  type: "InnerProduct"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  inner_product_param {
    num_output: 1024
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "loss1/fc"
  name: "loss1/fc/bn"
  top: "loss1/fc/bn"
  type: "BatchNorm"
}
layer {
  bottom: "loss1/fc/bn"
  top: "loss1/fc/bn/sc"
  name: "loss1/fc/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "loss1/fc/bn/sc"
  top: "loss1/fc/bn/sc"
  name: "loss1/fc/bn/sc/relu"
  type: "ReLU"
}

layer {
  name: "loss1/score"
  type: "InnerProduct"
  bottom: "loss1/fc/bn/sc"
  top: "loss1/score"
  param {
    lr_mult: 10
    decay_mult: 1
  }
  param {
    lr_mult: 20
    decay_mult: 0
  }
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

layer {
  bottom: "loss1/score"
  top: "prob-angle"
  name: "prob-angle"
  type: "Softmax"
}

########################## slice the view_probability ###################
layer {
  name: "slicer_angle_prob"
  type: "Slice"
  bottom: "prob-angle"
  top: "prob-front"
  top: "prob-back"
  top: "prob-side"
  slice_param {
    axis: 1
    slice_point: 1
    slice_point: 2
  }
}
####turn the array of shape(batch_size, 1) into the shape of batch_size
layer {
  name: "vec-front"
  type: "Reshape"
  bottom: "prob-front"
  top: "prob-front-1"
  propagate_down: false
  reshape_param {
    shape{dim: 0}
  }

}
layer {
  name: "vec-back"
  type: "Reshape"
  bottom: "prob-back"
  top: "prob-back-1"
  propagate_down: false
  reshape_param {
    shape{dim: 0}
  }

}

layer {
  name: "vec-side"
  type: "Reshape"
  bottom: "prob-side"
  top: "prob-side-1"
  propagate_down: false
  reshape_param {
    shape{dim: 0}
  }
}

################## part only for the attributes################33
layer {
 bottom: "inception_3c/output"
  top: "inception_4a/1x1"
  name: "inception_4a/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/1x1"
  name: "inception_4a/1x1/bn"
  top: "inception_4a/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/1x1/bn"
  top: "inception_4a/1x1/bn/sc"
  name: "inception_4a/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/1x1/bn/sc"
  top: "inception_4a/1x1/bn/sc"
  name: "inception_4a/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3c/output"
  top: "inception_4a/3x3_reduce"
  name: "inception_4a/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 64
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/3x3_reduce"
  name: "inception_4a/3x3_reduce/bn"
  top: "inception_4a/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/3x3_reduce/bn"
  top: "inception_4a/3x3_reduce/bn/sc"
  name: "inception_4a/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/3x3_reduce/bn/sc"
  top: "inception_4a/3x3_reduce/bn/sc"
  name: "inception_4a/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4a/3x3_reduce/bn/sc"
  top: "inception_4a/3x3"
  name: "inception_4a/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/3x3"
  name: "inception_4a/3x3/bn"
  top: "inception_4a/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/3x3/bn"
  top: "inception_4a/3x3/bn/sc"
  name: "inception_4a/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/3x3/bn/sc"
  top: "inception_4a/3x3/bn/sc"
  name: "inception_4a/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_3c/output"
  top: "inception_4a/double3x3_reduce"
  name: "inception_4a/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/double3x3_reduce"
  name: "inception_4a/double3x3_reduce/bn"
  top: "inception_4a/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/double3x3_reduce/bn"
  top: "inception_4a/double3x3_reduce/bn/sc"
  name: "inception_4a/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/double3x3_reduce/bn/sc"
  top: "inception_4a/double3x3_reduce/bn/sc"
  name: "inception_4a/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4a/double3x3_reduce/bn/sc"
  top: "inception_4a/double3x3a"
  name: "inception_4a/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/double3x3a"
  name: "inception_4a/double3x3a/bn"
  top: "inception_4a/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/double3x3a/bn"
  top: "inception_4a/double3x3a/bn/sc"
  name: "inception_4a/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/double3x3a/bn/sc"
  top: "inception_4a/double3x3a/bn/sc"
  name: "inception_4a/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4a/double3x3a/bn/sc"
  top: "inception_4a/double3x3b"
  name: "inception_4a/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/double3x3b"
  name: "inception_4a/double3x3b/bn"
  top: "inception_4a/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/double3x3b/bn"
  top: "inception_4a/double3x3b/bn/sc"
  name: "inception_4a/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/double3x3b/bn/sc"
  top: "inception_4a/double3x3b/bn/sc"
  name: "inception_4a/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_3c/output"
  top: "inception_4a/pool"
  name: "inception_4a/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_4a/pool"
  top: "inception_4a/pool_proj"
  name: "inception_4a/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4a/pool_proj"
  name: "inception_4a/pool_proj/bn"
  top: "inception_4a/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4a/pool_proj/bn"
  top: "inception_4a/pool_proj/bn/sc"
  name: "inception_4a/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4a/pool_proj/bn/sc"
  top: "inception_4a/pool_proj/bn/sc"
  name: "inception_4a/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4a/1x1/bn/sc"
  bottom: "inception_4a/3x3/bn/sc"
  bottom: "inception_4a/double3x3b/bn/sc"
  bottom: "inception_4a/pool_proj/bn/sc"
  top: "inception_4a/output"
  name: "inception_4a/output"
  type: "Concat"
}
layer {
 bottom: "inception_4a/output"
  top: "inception_4b/1x1"
  name: "inception_4b/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/1x1"
  name: "inception_4b/1x1/bn"
  top: "inception_4b/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/1x1/bn"
  top: "inception_4b/1x1/bn/sc"
  name: "inception_4b/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/1x1/bn/sc"
  top: "inception_4b/1x1/bn/sc"
  name: "inception_4b/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4a/output"
  top: "inception_4b/3x3_reduce"
  name: "inception_4b/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/3x3_reduce"
  name: "inception_4b/3x3_reduce/bn"
  top: "inception_4b/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/3x3_reduce/bn"
  top: "inception_4b/3x3_reduce/bn/sc"
  name: "inception_4b/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/3x3_reduce/bn/sc"
  top: "inception_4b/3x3_reduce/bn/sc"
  name: "inception_4b/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4b/3x3_reduce/bn/sc"
  top: "inception_4b/3x3"
  name: "inception_4b/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/3x3"
  name: "inception_4b/3x3/bn"
  top: "inception_4b/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/3x3/bn"
  top: "inception_4b/3x3/bn/sc"
  name: "inception_4b/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/3x3/bn/sc"
  top: "inception_4b/3x3/bn/sc"
  name: "inception_4b/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4a/output"
  top: "inception_4b/double3x3_reduce"
  name: "inception_4b/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/double3x3_reduce"
  name: "inception_4b/double3x3_reduce/bn"
  top: "inception_4b/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/double3x3_reduce/bn"
  top: "inception_4b/double3x3_reduce/bn/sc"
  name: "inception_4b/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/double3x3_reduce/bn/sc"
  top: "inception_4b/double3x3_reduce/bn/sc"
  name: "inception_4b/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4b/double3x3_reduce/bn/sc"
  top: "inception_4b/double3x3a"
  name: "inception_4b/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/double3x3a"
  name: "inception_4b/double3x3a/bn"
  top: "inception_4b/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/double3x3a/bn"
  top: "inception_4b/double3x3a/bn/sc"
  name: "inception_4b/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/double3x3a/bn/sc"
  top: "inception_4b/double3x3a/bn/sc"
  name: "inception_4b/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4b/double3x3a/bn/sc"
  top: "inception_4b/double3x3b"
  name: "inception_4b/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/double3x3b"
  name: "inception_4b/double3x3b/bn"
  top: "inception_4b/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/double3x3b/bn"
  top: "inception_4b/double3x3b/bn/sc"
  name: "inception_4b/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/double3x3b/bn/sc"
  top: "inception_4b/double3x3b/bn/sc"
  name: "inception_4b/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4a/output"
  top: "inception_4b/pool"
  name: "inception_4b/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_4b/pool"
  top: "inception_4b/pool_proj"
  name: "inception_4b/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4b/pool_proj"
  name: "inception_4b/pool_proj/bn"
  top: "inception_4b/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4b/pool_proj/bn"
  top: "inception_4b/pool_proj/bn/sc"
  name: "inception_4b/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4b/pool_proj/bn/sc"
  top: "inception_4b/pool_proj/bn/sc"
  name: "inception_4b/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4b/1x1/bn/sc"
  bottom: "inception_4b/3x3/bn/sc"
  bottom: "inception_4b/double3x3b/bn/sc"
  bottom: "inception_4b/pool_proj/bn/sc"
  top: "inception_4b/output"
  name: "inception_4b/output"
  type: "Concat"
}
layer {
 bottom: "inception_4b/output"
  top: "inception_4c/1x1"
  name: "inception_4c/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/1x1"
  name: "inception_4c/1x1/bn"
  top: "inception_4c/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/1x1/bn"
  top: "inception_4c/1x1/bn/sc"
  name: "inception_4c/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/1x1/bn/sc"
  top: "inception_4c/1x1/bn/sc"
  name: "inception_4c/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4b/output"
  top: "inception_4c/3x3_reduce"
  name: "inception_4c/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/3x3_reduce"
  name: "inception_4c/3x3_reduce/bn"
  top: "inception_4c/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/3x3_reduce/bn"
  top: "inception_4c/3x3_reduce/bn/sc"
  name: "inception_4c/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/3x3_reduce/bn/sc"
  top: "inception_4c/3x3_reduce/bn/sc"
  name: "inception_4c/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4c/3x3_reduce/bn/sc"
  top: "inception_4c/3x3"
  name: "inception_4c/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/3x3"
  name: "inception_4c/3x3/bn"
  top: "inception_4c/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/3x3/bn"
  top: "inception_4c/3x3/bn/sc"
  name: "inception_4c/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/3x3/bn/sc"
  top: "inception_4c/3x3/bn/sc"
  name: "inception_4c/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4b/output"
  top: "inception_4c/double3x3_reduce"
  name: "inception_4c/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/double3x3_reduce"
  name: "inception_4c/double3x3_reduce/bn"
  top: "inception_4c/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/double3x3_reduce/bn"
  top: "inception_4c/double3x3_reduce/bn/sc"
  name: "inception_4c/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/double3x3_reduce/bn/sc"
  top: "inception_4c/double3x3_reduce/bn/sc"
  name: "inception_4c/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4c/double3x3_reduce/bn/sc"
  top: "inception_4c/double3x3a"
  name: "inception_4c/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/double3x3a"
  name: "inception_4c/double3x3a/bn"
  top: "inception_4c/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/double3x3a/bn"
  top: "inception_4c/double3x3a/bn/sc"
  name: "inception_4c/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/double3x3a/bn/sc"
  top: "inception_4c/double3x3a/bn/sc"
  name: "inception_4c/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4c/double3x3a/bn/sc"
  top: "inception_4c/double3x3b"
  name: "inception_4c/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/double3x3b"
  name: "inception_4c/double3x3b/bn"
  top: "inception_4c/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/double3x3b/bn"
  top: "inception_4c/double3x3b/bn/sc"
  name: "inception_4c/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/double3x3b/bn/sc"
  top: "inception_4c/double3x3b/bn/sc"
  name: "inception_4c/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4b/output"
  top: "inception_4c/pool"
  name: "inception_4c/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_4c/pool"
  top: "inception_4c/pool_proj"
  name: "inception_4c/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4c/pool_proj"
  name: "inception_4c/pool_proj/bn"
  top: "inception_4c/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4c/pool_proj/bn"
  top: "inception_4c/pool_proj/bn/sc"
  name: "inception_4c/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4c/pool_proj/bn/sc"
  top: "inception_4c/pool_proj/bn/sc"
  name: "inception_4c/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4c/1x1/bn/sc"
  bottom: "inception_4c/3x3/bn/sc"
  bottom: "inception_4c/double3x3b/bn/sc"
  bottom: "inception_4c/pool_proj/bn/sc"
  top: "inception_4c/output"
  name: "inception_4c/output"
  type: "Concat"
}
layer {
 bottom: "inception_4c/output"
  top: "inception_4d/1x1"
  name: "inception_4d/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/1x1"
  name: "inception_4d/1x1/bn"
  top: "inception_4d/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/1x1/bn"
  top: "inception_4d/1x1/bn/sc"
  name: "inception_4d/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/1x1/bn/sc"
  top: "inception_4d/1x1/bn/sc"
  name: "inception_4d/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4c/output"
  top: "inception_4d/3x3_reduce"
  name: "inception_4d/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/3x3_reduce"
  name: "inception_4d/3x3_reduce/bn"
  top: "inception_4d/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/3x3_reduce/bn"
  top: "inception_4d/3x3_reduce/bn/sc"
  name: "inception_4d/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/3x3_reduce/bn/sc"
  top: "inception_4d/3x3_reduce/bn/sc"
  name: "inception_4d/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4d/3x3_reduce/bn/sc"
  top: "inception_4d/3x3"
  name: "inception_4d/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/3x3"
  name: "inception_4d/3x3/bn"
  top: "inception_4d/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/3x3/bn"
  top: "inception_4d/3x3/bn/sc"
  name: "inception_4d/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/3x3/bn/sc"
  top: "inception_4d/3x3/bn/sc"
  name: "inception_4d/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4c/output"
  top: "inception_4d/double3x3_reduce"
  name: "inception_4d/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/double3x3_reduce"
  name: "inception_4d/double3x3_reduce/bn"
  top: "inception_4d/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/double3x3_reduce/bn"
  top: "inception_4d/double3x3_reduce/bn/sc"
  name: "inception_4d/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/double3x3_reduce/bn/sc"
  top: "inception_4d/double3x3_reduce/bn/sc"
  name: "inception_4d/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4d/double3x3_reduce/bn/sc"
  top: "inception_4d/double3x3a"
  name: "inception_4d/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/double3x3a"
  name: "inception_4d/double3x3a/bn"
  top: "inception_4d/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/double3x3a/bn"
  top: "inception_4d/double3x3a/bn/sc"
  name: "inception_4d/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/double3x3a/bn/sc"
  top: "inception_4d/double3x3a/bn/sc"
  name: "inception_4d/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4d/double3x3a/bn/sc"
  top: "inception_4d/double3x3b"
  name: "inception_4d/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/double3x3b"
  name: "inception_4d/double3x3b/bn"
  top: "inception_4d/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/double3x3b/bn"
  top: "inception_4d/double3x3b/bn/sc"
  name: "inception_4d/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/double3x3b/bn/sc"
  top: "inception_4d/double3x3b/bn/sc"
  name: "inception_4d/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4c/output"
  top: "inception_4d/pool"
  name: "inception_4d/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_4d/pool"
  top: "inception_4d/pool_proj"
  name: "inception_4d/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 96
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4d/pool_proj"
  name: "inception_4d/pool_proj/bn"
  top: "inception_4d/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4d/pool_proj/bn"
  top: "inception_4d/pool_proj/bn/sc"
  name: "inception_4d/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4d/pool_proj/bn/sc"
  top: "inception_4d/pool_proj/bn/sc"
  name: "inception_4d/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4d/1x1/bn/sc"
  bottom: "inception_4d/3x3/bn/sc"
  bottom: "inception_4d/double3x3b/bn/sc"
  bottom: "inception_4d/pool_proj/bn/sc"
  top: "inception_4d/output"
  name: "inception_4d/output"
  type: "Concat"
}
layer {
 bottom: "inception_4d/output"
  top: "inception_4e/3x3_reduce"
  name: "inception_4e/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4e/3x3_reduce"
  name: "inception_4e/3x3_reduce/bn"
  top: "inception_4e/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4e/3x3_reduce/bn"
  top: "inception_4e/3x3_reduce/bn/sc"
  name: "inception_4e/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4e/3x3_reduce/bn/sc"
  top: "inception_4e/3x3_reduce/bn/sc"
  name: "inception_4e/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4e/3x3_reduce/bn/sc"
  top: "inception_4e/3x3"
  name: "inception_4e/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4e/3x3"
  name: "inception_4e/3x3/bn"
  top: "inception_4e/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4e/3x3/bn"
  top: "inception_4e/3x3/bn/sc"
  name: "inception_4e/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4e/3x3/bn/sc"
  top: "inception_4e/3x3/bn/sc"
  name: "inception_4e/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4d/output"
  top: "inception_4e/double3x3_reduce"
  name: "inception_4e/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4e/double3x3_reduce"
  name: "inception_4e/double3x3_reduce/bn"
  top: "inception_4e/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4e/double3x3_reduce/bn"
  top: "inception_4e/double3x3_reduce/bn/sc"
  name: "inception_4e/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4e/double3x3_reduce/bn/sc"
  top: "inception_4e/double3x3_reduce/bn/sc"
  name: "inception_4e/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4e/double3x3_reduce/bn/sc"
  top: "inception_4e/double3x3a"
  name: "inception_4e/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 256
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4e/double3x3a"
  name: "inception_4e/double3x3a/bn"
  top: "inception_4e/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4e/double3x3a/bn"
  top: "inception_4e/double3x3a/bn/sc"
  name: "inception_4e/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4e/double3x3a/bn/sc"
  top: "inception_4e/double3x3a/bn/sc"
  name: "inception_4e/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4e/double3x3a/bn/sc"
  top: "inception_4e/double3x3b"
  name: "inception_4e/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 256
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_4e/double3x3b"
  name: "inception_4e/double3x3b/bn"
  top: "inception_4e/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_4e/double3x3b/bn"
  top: "inception_4e/double3x3b/bn/sc"
  name: "inception_4e/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_4e/double3x3b/bn/sc"
  top: "inception_4e/double3x3b/bn/sc"
  name: "inception_4e/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4d/output"
  top: "inception_4e/pool"
  name: "inception_4e/pool"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
layer {
  bottom: "inception_4e/3x3/bn/sc"
  bottom: "inception_4e/double3x3b/bn/sc"
  bottom: "inception_4e/pool"
  top: "inception_4e/output"
  name: "inception_4e/output"
  type: "Concat"
}

layer {
 bottom: "inception_4e/output"
  top: "inception_5a/1x1"
  name: "inception_5a/1x1"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 352
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/1x1"
  name: "inception_5a/1x1/bn"
  top: "inception_5a/1x1/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/1x1/bn"
  top: "inception_5a/1x1/bn/sc"
  name: "inception_5a/1x1/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/1x1/bn/sc"
  top: "inception_5a/1x1/bn/sc"
  name: "inception_5a/1x1/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4e/output"
  top: "inception_5a/3x3_reduce"
  name: "inception_5a/3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/3x3_reduce"
  name: "inception_5a/3x3_reduce/bn"
  top: "inception_5a/3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/3x3_reduce/bn"
  top: "inception_5a/3x3_reduce/bn/sc"
  name: "inception_5a/3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/3x3_reduce/bn/sc"
  top: "inception_5a/3x3_reduce/bn/sc"
  name: "inception_5a/3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/3x3_reduce/bn/sc"
  top: "inception_5a/3x3"
  name: "inception_5a/3x3"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 320
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/3x3"
  name: "inception_5a/3x3/bn"
  top: "inception_5a/3x3/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/3x3/bn"
  top: "inception_5a/3x3/bn/sc"
  name: "inception_5a/3x3/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/3x3/bn/sc"
  top: "inception_5a/3x3/bn/sc"
  name: "inception_5a/3x3/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_4e/output"
  top: "inception_5a/double3x3_reduce"
  name: "inception_5a/double3x3_reduce"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 160
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/double3x3_reduce"
  name: "inception_5a/double3x3_reduce/bn"
  top: "inception_5a/double3x3_reduce/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/double3x3_reduce/bn"
  top: "inception_5a/double3x3_reduce/bn/sc"
  name: "inception_5a/double3x3_reduce/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/double3x3_reduce/bn/sc"
  top: "inception_5a/double3x3_reduce/bn/sc"
  name: "inception_5a/double3x3_reduce/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/double3x3_reduce/bn/sc"
  top: "inception_5a/double3x3a"
  name: "inception_5a/double3x3a"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/double3x3a"
  name: "inception_5a/double3x3a/bn"
  top: "inception_5a/double3x3a/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/double3x3a/bn"
  top: "inception_5a/double3x3a/bn/sc"
  name: "inception_5a/double3x3a/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/double3x3a/bn/sc"
  top: "inception_5a/double3x3a/bn/sc"
  name: "inception_5a/double3x3a/bn/sc/relu"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/double3x3a/bn/sc"
  top: "inception_5a/double3x3b"
  name: "inception_5a/double3x3b"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/double3x3b"
  name: "inception_5a/double3x3b/bn"
  top: "inception_5a/double3x3b/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/double3x3b/bn"
  top: "inception_5a/double3x3b/bn/sc"
  name: "inception_5a/double3x3b/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/double3x3b/bn/sc"
  top: "inception_5a/double3x3b/bn/sc"
  name: "inception_5a/double3x3b/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_4e/output"
  top: "inception_5a/pool"
  name: "inception_5a/pool"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_5a/pool"
  top: "inception_5a/pool_proj"
  name: "inception_5a/pool_proj"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5a/pool_proj"
  name: "inception_5a/pool_proj/bn"
  top: "inception_5a/pool_proj/bn"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5a/pool_proj/bn"
  top: "inception_5a/pool_proj/bn/sc"
  name: "inception_5a/pool_proj/bn/sc"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5a/pool_proj/bn/sc"
  top: "inception_5a/pool_proj/bn/sc"
  name: "inception_5a/pool_proj/bn/sc/relu"
  type: "ReLU"
}
layer {
  bottom: "inception_5a/1x1/bn/sc"
  bottom: "inception_5a/3x3/bn/sc"
  bottom: "inception_5a/double3x3b/bn/sc"
  bottom: "inception_5a/pool_proj/bn/sc"
  top: "inception_5a/output"
  name: "inception_5a/output"
  type: "Concat"
}

################## specific for front model #############################
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/1x1-front"
  name: "inception_5b/1x1-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 352
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/1x1-front"
  name: "inception_5b/1x1/bn-front"
  top: "inception_5b/1x1/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/1x1/bn-front"
  top: "inception_5b/1x1/bn/sc-front"
  name: "inception_5b/1x1/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/1x1/bn/sc-front"
  top: "inception_5b/1x1/bn/sc-front"
  name: "inception_5b/1x1/bn/sc/relu-front"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/3x3_reduce-front"
  name: "inception_5b/3x3_reduce-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/3x3_reduce-front"
  name: "inception_5b/3x3_reduce/bn-front"
  top: "inception_5b/3x3_reduce/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/3x3_reduce/bn-front"
  top: "inception_5b/3x3_reduce/bn/sc-front"
  name: "inception_5b/3x3_reduce/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/3x3_reduce/bn/sc-front"
  top: "inception_5b/3x3_reduce/bn/sc-front"
  name: "inception_5b/3x3_reduce/bn/sc/relu-front"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/3x3_reduce/bn/sc-front"
  top: "inception_5b/3x3-front"
  name: "inception_5b/3x3-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 320
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/3x3-front"
  name: "inception_5b/3x3/bn-front"
  top: "inception_5b/3x3/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/3x3/bn-front"
  top: "inception_5b/3x3/bn/sc-front"
  name: "inception_5b/3x3/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/3x3/bn/sc-front"
  top: "inception_5b/3x3/bn/sc-front"
  name: "inception_5b/3x3/bn/sc/relu-front"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/double3x3_reduce-front"
  name: "inception_5b/double3x3_reduce-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3_reduce-front"
  name: "inception_5b/double3x3_reduce/bn-front"
  top: "inception_5b/double3x3_reduce/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3_reduce/bn-front"
  top: "inception_5b/double3x3_reduce/bn/sc-front"
  name: "inception_5b/double3x3_reduce/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3_reduce/bn/sc-front"
  top: "inception_5b/double3x3_reduce/bn/sc-front"
  name: "inception_5b/double3x3_reduce/bn/sc/relu-front"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/double3x3_reduce/bn/sc-front"
  top: "inception_5b/double3x3a-front"
  name: "inception_5b/double3x3a-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3a-front"
  name: "inception_5b/double3x3a/bn-front"
  top: "inception_5b/double3x3a/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3a/bn-front"
  top: "inception_5b/double3x3a/bn/sc-front"
  name: "inception_5b/double3x3a/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3a/bn/sc-front"
  top: "inception_5b/double3x3a/bn/sc-front"
  name: "inception_5b/double3x3a/bn/sc/relu-front"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/double3x3a/bn/sc-front"
  top: "inception_5b/double3x3b-front"
  name: "inception_5b/double3x3b-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3b-front"
  name: "inception_5b/double3x3b/bn-front"
  top: "inception_5b/double3x3b/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3b/bn-front"
  top: "inception_5b/double3x3b/bn/sc-front"
  name: "inception_5b/double3x3b/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3b/bn/sc-front"
  top: "inception_5b/double3x3b/bn/sc-front"
  name: "inception_5b/double3x3b/bn/sc/relu-front"
  type: "ReLU"
}
layer {
  bottom: "inception_5a/output"
  top: "inception_5b/pool-front"
  name: "inception_5b/pool-front"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_5b/pool-front"
  top: "inception_5b/pool_proj-front"
  name: "inception_5b/pool_proj-front"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/pool_proj-front"
  name: "inception_5b/pool_proj/bn-front"
  top: "inception_5b/pool_proj/bn-front"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/pool_proj/bn-front"
  top: "inception_5b/pool_proj/bn/sc-front"
  name: "inception_5b/pool_proj/bn/sc-front"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/pool_proj/bn/sc-front"
  top: "inception_5b/pool_proj/bn/sc-front"
  name: "inception_5b/pool_proj/bn/sc/relu-front"
  type: "ReLU"
}
layer {
  bottom: "inception_5b/1x1/bn/sc-front"
  bottom: "inception_5b/3x3/bn/sc-front"
  bottom: "inception_5b/double3x3b/bn/sc-front"
  bottom: "inception_5b/pool_proj/bn/sc-front"
  top: "inception_5b/output-front"
  name: "inception_5b/output-front"
  type: "Concat"
}
layer {
  bottom: "inception_5b/output-front"
  top: "pool5/7x7_s1-front"
  name: "pool5/7x7_s1-front"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 7
    stride: 1
  }
}
layer {
  name: "front-score-peta35"
  type: "InnerProduct"
  bottom: "pool5/7x7_s1-front"
  top: "front-score"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 35
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

#######################specific for back model ##############################
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/1x1-bck"
  name: "inception_5b/1x1-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 352
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/1x1-bck"
  name: "inception_5b/1x1/bn-bck"
  top: "inception_5b/1x1/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/1x1/bn-bck"
  top: "inception_5b/1x1/bn/sc-bck"
  name: "inception_5b/1x1/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/1x1/bn/sc-bck"
  top: "inception_5b/1x1/bn/sc-bck"
  name: "inception_5b/1x1/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/3x3_reduce-bck"
  name: "inception_5b/3x3_reduce-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/3x3_reduce-bck"
  name: "inception_5b/3x3_reduce/bn-bck"
  top: "inception_5b/3x3_reduce/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/3x3_reduce/bn-bck"
  top: "inception_5b/3x3_reduce/bn/sc-bck"
  name: "inception_5b/3x3_reduce/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/3x3_reduce/bn/sc-bck"
  top: "inception_5b/3x3_reduce/bn/sc-bck"
  name: "inception_5b/3x3_reduce/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/3x3_reduce/bn/sc-bck"
  top: "inception_5b/3x3-bck"
  name: "inception_5b/3x3-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 320
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/3x3-bck"
  name: "inception_5b/3x3/bn-bck"
  top: "inception_5b/3x3/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/3x3/bn-bck"
  top: "inception_5b/3x3/bn/sc-bck"
  name: "inception_5b/3x3/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/3x3/bn/sc-bck"
  top: "inception_5b/3x3/bn/sc-bck"
  name: "inception_5b/3x3/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/double3x3_reduce-bck"
  name: "inception_5b/double3x3_reduce-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3_reduce-bck"
  name: "inception_5b/double3x3_reduce/bn-bck"
  top: "inception_5b/double3x3_reduce/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3_reduce/bn-bck"
  top: "inception_5b/double3x3_reduce/bn/sc-bck"
  name: "inception_5b/double3x3_reduce/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3_reduce/bn/sc-bck"
  top: "inception_5b/double3x3_reduce/bn/sc-bck"
  name: "inception_5b/double3x3_reduce/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/double3x3_reduce/bn/sc-bck"
  top: "inception_5b/double3x3a-bck"
  name: "inception_5b/double3x3a-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3a-bck"
  name: "inception_5b/double3x3a/bn-bck"
  top: "inception_5b/double3x3a/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3a/bn-bck"
  top: "inception_5b/double3x3a/bn/sc-bck"
  name: "inception_5b/double3x3a/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3a/bn/sc-bck"
  top: "inception_5b/double3x3a/bn/sc-bck"
  name: "inception_5b/double3x3a/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/double3x3a/bn/sc-bck"
  top: "inception_5b/double3x3b-bck"
  name: "inception_5b/double3x3b-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3b-bck"
  name: "inception_5b/double3x3b/bn-bck"
  top: "inception_5b/double3x3b/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3b/bn-bck"
  top: "inception_5b/double3x3b/bn/sc-bck"
  name: "inception_5b/double3x3b/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3b/bn/sc-bck"
  top: "inception_5b/double3x3b/bn/sc-bck"
  name: "inception_5b/double3x3b/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
  bottom: "inception_5a/output"
  top: "inception_5b/pool-bck"
  name: "inception_5b/pool-bck"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_5b/pool-bck"
  top: "inception_5b/pool_proj-bck"
  name: "inception_5b/pool_proj-bck"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/pool_proj-bck"
  name: "inception_5b/pool_proj/bn-bck"
  top: "inception_5b/pool_proj/bn-bck"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/pool_proj/bn-bck"
  top: "inception_5b/pool_proj/bn/sc-bck"
  name: "inception_5b/pool_proj/bn/sc-bck"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/pool_proj/bn/sc-bck"
  top: "inception_5b/pool_proj/bn/sc-bck"
  name: "inception_5b/pool_proj/bn/sc/relu-bck"
  type: "ReLU"
}
layer {
  bottom: "inception_5b/1x1/bn/sc-bck"
  bottom: "inception_5b/3x3/bn/sc-bck"
  bottom: "inception_5b/double3x3b/bn/sc-bck"
  bottom: "inception_5b/pool_proj/bn/sc-bck"
  top: "inception_5b/output-bck"
  name: "inception_5b/output-bck"
  type: "Concat"
}
layer {
  bottom: "inception_5b/output-bck"
  top: "pool5/7x7_s1-bck"
  name: "pool5/7x7_s1-bck"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 7
    stride: 1
  }
}
layer {
  name: "back-score-peta35"
  type: "InnerProduct"
  bottom: "pool5/7x7_s1-bck"
  top: "back-score"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 35
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

########################## specific for side model ###########################
layer {
  bottom: "inception_5a/output"
  top: "inception_5b/1x1-side"
  name: "inception_5b/1x1-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 352
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/1x1-side"
  name: "inception_5b/1x1/bn-side"
  top: "inception_5b/1x1/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/1x1/bn-side"
  top: "inception_5b/1x1/bn/sc-side"
  name: "inception_5b/1x1/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/1x1/bn/sc-side"
  top: "inception_5b/1x1/bn/sc-side"
  name: "inception_5b/1x1/bn/sc/relu-side"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/3x3_reduce-side"
  name: "inception_5b/3x3_reduce-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/3x3_reduce-side"
  name: "inception_5b/3x3_reduce/bn-side"
  top: "inception_5b/3x3_reduce/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/3x3_reduce/bn-side"
  top: "inception_5b/3x3_reduce/bn/sc-side"
  name: "inception_5b/3x3_reduce/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/3x3_reduce/bn/sc-side"
  top: "inception_5b/3x3_reduce/bn/sc-side"
  name: "inception_5b/3x3_reduce/bn/sc/relu-side"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/3x3_reduce/bn/sc-side"
  top: "inception_5b/3x3-side"
  name: "inception_5b/3x3-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 320
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/3x3-side"
  name: "inception_5b/3x3/bn-side"
  top: "inception_5b/3x3/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/3x3/bn-side"
  top: "inception_5b/3x3/bn/sc-side"
  name: "inception_5b/3x3/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/3x3/bn/sc-side"
  top: "inception_5b/3x3/bn/sc-side"
  name: "inception_5b/3x3/bn/sc/relu-side"
  type: "ReLU"
}
layer {
 bottom: "inception_5a/output"
  top: "inception_5b/double3x3_reduce-side"
  name: "inception_5b/double3x3_reduce-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 192
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3_reduce-side"
  name: "inception_5b/double3x3_reduce/bn-side"
  top: "inception_5b/double3x3_reduce/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3_reduce/bn-side"
  top: "inception_5b/double3x3_reduce/bn/sc-side"
  name: "inception_5b/double3x3_reduce/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3_reduce/bn/sc-side"
  top: "inception_5b/double3x3_reduce/bn/sc-side"
  name: "inception_5b/double3x3_reduce/bn/sc/relu-side"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/double3x3_reduce/bn/sc-side"
  top: "inception_5b/double3x3a-side"
  name: "inception_5b/double3x3a-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3a-side"
  name: "inception_5b/double3x3a/bn-side"
  top: "inception_5b/double3x3a/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3a/bn-side"
  top: "inception_5b/double3x3a/bn/sc-side"
  name: "inception_5b/double3x3a/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3a/bn/sc-side"
  top: "inception_5b/double3x3a/bn/sc-side"
  name: "inception_5b/double3x3a/bn/sc/relu-side"
  type: "ReLU"
}
layer {
 bottom: "inception_5b/double3x3a/bn/sc-side"
  top: "inception_5b/double3x3b-side"
  name: "inception_5b/double3x3b-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 224
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/double3x3b-side"
  name: "inception_5b/double3x3b/bn-side"
  top: "inception_5b/double3x3b/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/double3x3b/bn-side"
  top: "inception_5b/double3x3b/bn/sc-side"
  name: "inception_5b/double3x3b/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/double3x3b/bn/sc-side"
  top: "inception_5b/double3x3b/bn/sc-side"
  name: "inception_5b/double3x3b/bn/sc/relu-side"
  type: "ReLU"
}
layer {
  bottom: "inception_5a/output"
  top: "inception_5b/pool-side"
  name: "inception_5b/pool-side"
  type: "Pooling"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 1
    pad: 1
  }
}
layer {
 bottom: "inception_5b/pool-side"
  top: "inception_5b/pool_proj-side"
  name: "inception_5b/pool_proj-side"
  type: "Convolution"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 128
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_term: false
  }
}
layer {
  bottom: "inception_5b/pool_proj-side"
  name: "inception_5b/pool_proj/bn-side"
  top: "inception_5b/pool_proj/bn-side"
  type: "BatchNorm"
}
layer {
  bottom: "inception_5b/pool_proj/bn-side"
  top: "inception_5b/pool_proj/bn/sc-side"
  name: "inception_5b/pool_proj/bn/sc-side"
  type: "Scale"
  scale_param {
    bias_term: true
  }
}
layer {
  bottom: "inception_5b/pool_proj/bn/sc-side"
  top: "inception_5b/pool_proj/bn/sc-side"
  name: "inception_5b/pool_proj/bn/sc/relu-side"
  type: "ReLU"
}
layer {
  bottom: "inception_5b/1x1/bn/sc-side"
  bottom: "inception_5b/3x3/bn/sc-side"
  bottom: "inception_5b/double3x3b/bn/sc-side"
  bottom: "inception_5b/pool_proj/bn/sc-side"
  top: "inception_5b/output-side"
  name: "inception_5b/output-side"
  type: "Concat"
}
layer {
  bottom: "inception_5b/output-side"
  top: "pool5/7x7_s1-side"
  name: "pool5/7x7_s1-side"
  type: "Pooling"
  pooling_param {
    pool: AVE
    kernel_size: 7
    stride: 1
  }
}
layer {
  name: "side-score-peta35"
  type: "InnerProduct"
  bottom: "pool5/7x7_s1-side"
  top: "side-score"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 35
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

#### multiply the prob with the score of each model
layer {
  name : "front-mult"
  bottom: "front-score"
  bottom: "prob-front-1"
  top: "front-mult"
  type: "Scale"
  scale_param {
    axis: 0
  }
}

layer {
  name : "back-mult"
  bottom: "back-score"
  bottom: "prob-back-1"
  top: "back-mult"
  type: "Scale"
  scale_param {
    axis: 0
  }
}

layer {
  name : "side-mult"
  bottom: "side-score"
  bottom: "prob-side-1"
  top: "side-mult"
  type: "Scale"
  scale_param {
    axis: 0
  }
}

layer {
  name: "score_sum"
  type: "Eltwise"
  bottom: "front-mult"
  bottom: "back-mult"
  bottom: "side-mult"
  top: "score-sum"
  eltwise_param{ operation: SUM}

}

layer {
  name: "prob-attr"
  type: "Sigmoid"
  bottom: "score-sum"
  top: "prob-attr"
  }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant