人脸属性分析多任务训练 multi cnn for face attribution

face_attribute.prototxt 

shuffle_net   10-20ms

name: "FaceAttribution"
layer {
  name: "data"
  type: "Data"
  top: "data"
  include {
    phase: TRAIN
  }
  transform_param {
		mean_value: 104
		mean_value: 117
		mean_value: 124
		scale: 0.0078125
  }
  data_param {
    source: "../lmdb/train_data_npd"
    batch_size: 128
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "label"
  include {
    phase: TRAIN
  }
  data_param {
    source: "../lmdb/train_label_npd"
    batch_size: 128
    backend: LMDB
  }
}

layer {
  name: "data"
  type: "Data"
  top: "data"
  include {
    phase: TEST
  }
  transform_param {
		mean_value: 104
		mean_value: 117
		mean_value: 124
		scale: 0.0078125
  }
  data_param {
    source: "../lmdb/test_data_npd"
    batch_size: 128
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "label"
  include {
    phase: TEST
  }
  data_param {
    source: "../lmdb/test_label_npd"
    batch_size: 128
    backend: LMDB
  }
}


layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 24
    pad: 1
    kernel_size: 3
    stride: 2
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "conv1_bn"
  type: "BatchNorm"
  bottom: "conv1"
  top: "conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "conv1_scale"
  bottom: "conv1"
  top: "conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "conv1_relu"
  type: "ReLU"
  bottom: "conv1"
  top: "conv1"
}


layer {
  name: "conv2"
  type: "Convolution"
  bottom: "conv1"
  top: "conv2"
  convolution_param {
    num_output: 48
    pad: 1
    kernel_size: 3
    stride: 2
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "conv2_bn"
  type: "BatchNorm"
  bottom: "conv2"
  top: "conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "conv2_scale"
  bottom: "conv2"
  top: "conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "conv2_relu"
  type: "ReLU"
  bottom: "conv2"
  top: "conv2"
}

layer {
  name: "branch1_1_conv1"
  type: "ConvolutionDepthwise"
  bottom: "conv2"
  top: "branch1_1_conv1"
  convolution_param {
    num_output: 48
    kernel_size: 3
    stride: 2
    pad: 1
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch1_1_conv1_bn"
  type: "BatchNorm"
  bottom: "branch1_1_conv1"
  top: "branch1_1_conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch1_1_conv1_scale"
  bottom: "branch1_1_conv1"
  top: "branch1_1_conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch1_1_conv2"
  type: "Convolution"
  bottom: "branch1_1_conv1"
  top: "branch1_1_conv2"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch1_1_conv2_bn"
  type: "BatchNorm"
  bottom: "branch1_1_conv2"
  top: "branch1_1_conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch1_1_conv2_scale"
  bottom: "branch1_1_conv2"
  top: "branch1_1_conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch1_1_conv2_relu"
  type: "ReLU"
  bottom: "branch1_1_conv2"
  top: "branch1_1_conv2"
}
layer {
  name: "branch1_2_conv1"
  type: "Convolution"
  bottom: "conv2"
  top: "branch1_2_conv1"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch1_2_conv1_bn"
  type: "BatchNorm"
  bottom: "branch1_2_conv1"
  top: "branch1_2_conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch1_2_conv1_scale"
  bottom: "branch1_2_conv1"
  top: "branch1_2_conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch1_2_conv1_relu"
  type: "ReLU"
  bottom: "branch1_2_conv1"
  top: "branch1_2_conv1"
}
layer {
  name: "branch1_2_conv2"
  type: "ConvolutionDepthwise"
  bottom: "branch1_2_conv1"
  top: "branch1_2_conv2"
  convolution_param {
    num_output: 64
    kernel_size: 3
    stride: 2
    pad: 1
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch1_2_conv2_bn"
  type: "BatchNorm"
  bottom: "branch1_2_conv2"
  top: "branch1_2_conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch1_2_conv2_scale"
  bottom: "branch1_2_conv2"
  top: "branch1_2_conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch1_2_conv3"
  type: "Convolution"
  bottom: "branch1_2_conv2"
  top: "branch1_2_conv3"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch1_2_conv3_bn"
  type: "BatchNorm"
  bottom: "branch1_2_conv3"
  top: "branch1_2_conv3"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch1_2_conv3_scale"
  bottom: "branch1_2_conv3"
  top: "branch1_2_conv3"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch1_2_conv3_relu"
  type: "ReLU"
  bottom: "branch1_2_conv3"
  top: "branch1_2_conv3"
}
layer {
  name: "concat1"
  type: "Concat"
  bottom: "branch1_1_conv2"
  bottom: "branch1_2_conv3"
  top: "concat1"
}
layer {
  name: "shuffle1"
  type: "ShuffleChannel"
  bottom: "concat1"
  top: "shuffle1"
  shuffle_channel_param {
    group: 2
  }
}
layer {
  name: "slice2"
  type: "Slice"
  bottom: "shuffle1"
  top: "branch2_1"
  top: "branch2_2"
  slice_param {
    slice_point: 64
    axis: 1
  }
}
layer {
  name: "branch2_2_conv1"
  type: "Convolution"
  bottom: "branch2_2"
  top: "branch2_2_conv1"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch2_2_conv1_bn"
  type: "BatchNorm"
  bottom: "branch2_2_conv1"
  top: "branch2_2_conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch2_2_conv1_scale"
  bottom: "branch2_2_conv1"
  top: "branch2_2_conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch2_2_conv1_relu"
  type: "ReLU"
  bottom: "branch2_2_conv1"
  top: "branch2_2_conv1"
}
layer {
  name: "branch2_2_conv2"
  type: "ConvolutionDepthwise"
  bottom: "branch2_2_conv1"
  top: "branch2_2_conv2"
  convolution_param {
    num_output: 64
    kernel_size: 3
    stride: 1
    pad: 1
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch2_2_conv2_bn"
  type: "BatchNorm"
  bottom: "branch2_2_conv2"
  top: "branch2_2_conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch2_2_conv2_scale"
  bottom: "branch2_2_conv2"
  top: "branch2_2_conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch2_2_conv3"
  type: "Convolution"
  bottom: "branch2_2_conv2"
  top: "branch2_2_conv3"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch2_2_conv3_bn"
  type: "BatchNorm"
  bottom: "branch2_2_conv3"
  top: "branch2_2_conv3"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch2_2_conv3_scale"
  bottom: "branch2_2_conv3"
  top: "branch2_2_conv3"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch2_2_conv3_relu"
  type: "ReLU"
  bottom: "branch2_2_conv3"
  top: "branch2_2_conv3"
}
layer {
  name: "concat2"
  type: "Concat"
  bottom: "branch2_1"
  bottom: "branch2_2_conv3"
  top: "concat2"
}
layer {
  name: "shuffle2"
  type: "ShuffleChannel"
  bottom: "concat2"
  top: "shuffle2"
  shuffle_channel_param {
    group: 2
  }
}
layer {
  name: "slice3"
  type: "Slice"
  bottom: "shuffle2"
  top: "branch3_1"
  top: "branch3_2"
  slice_param {
    slice_point: 64
    axis: 1
  }
}
layer {
  name: "branch3_2_conv1"
  type: "Convolution"
  bottom: "branch3_2"
  top: "branch3_2_conv1"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch3_2_conv1_bn"
  type: "BatchNorm"
  bottom: "branch3_2_conv1"
  top: "branch3_2_conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch3_2_conv1_scale"
  bottom: "branch3_2_conv1"
  top: "branch3_2_conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch3_2_conv1_relu"
  type: "ReLU"
  bottom: "branch3_2_conv1"
  top: "branch3_2_conv1"
}
layer {
  name: "branch3_2_conv2"
  type: "ConvolutionDepthwise"
  bottom: "branch3_2_conv1"
  top: "branch3_2_conv2"
  convolution_param {
    num_output: 64
    kernel_size: 3
    stride: 1
    pad: 1
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch3_2_conv2_bn"
  type: "BatchNorm"
  bottom: "branch3_2_conv2"
  top: "branch3_2_conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch3_2_conv2_scale"
  bottom: "branch3_2_conv2"
  top: "branch3_2_conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch3_2_conv3"
  type: "Convolution"
  bottom: "branch3_2_conv2"
  top: "branch3_2_conv3"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch3_2_conv3_bn"
  type: "BatchNorm"
  bottom: "branch3_2_conv3"
  top: "branch3_2_conv3"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch3_2_conv3_scale"
  bottom: "branch3_2_conv3"
  top: "branch3_2_conv3"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch3_2_conv3_relu"
  type: "ReLU"
  bottom: "branch3_2_conv3"
  top: "branch3_2_conv3"
}
layer {
  name: "concat3"
  type: "Concat"
  bottom: "branch3_1"
  bottom: "branch3_2_conv3"
  top: "concat3"
}

layer {
  name: "shuffle3"
  type: "ShuffleChannel"
  bottom: "concat3"
  top: "shuffle3"
  shuffle_channel_param {
    group: 2
  }
}
layer {
  name: "slice4"
  type: "Slice"
  bottom: "shuffle3"
  top: "branch4_1"
  top: "branch4_2"
  slice_param {
    slice_point: 64
    axis: 1
  }
}
layer {
  name: "branch4_2_conv1"
  type: "Convolution"
  bottom: "branch4_2"
  top: "branch4_2_conv1"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch4_2_conv1_bn"
  type: "BatchNorm"
  bottom: "branch4_2_conv1"
  top: "branch4_2_conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch4_2_conv1_scale"
  bottom: "branch4_2_conv1"
  top: "branch4_2_conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch4_2_conv1_relu"
  type: "ReLU"
  bottom: "branch4_2_conv1"
  top: "branch4_2_conv1"
}
layer {
  name: "branch4_2_conv2"
  type: "ConvolutionDepthwise"
  bottom: "branch4_2_conv1"
  top: "branch4_2_conv2"
  convolution_param {
    num_output: 64
    kernel_size: 3
    stride: 1
    pad: 1
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch4_2_conv2_bn"
  type: "BatchNorm"
  bottom: "branch4_2_conv2"
  top: "branch4_2_conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch4_2_conv2_scale"
  bottom: "branch4_2_conv2"
  top: "branch4_2_conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch4_2_conv3"
  type: "Convolution"
  bottom: "branch4_2_conv2"
  top: "branch4_2_conv3"
  convolution_param {
    num_output: 64
    kernel_size: 1
    stride: 1
    pad: 0
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "branch4_2_conv3_bn"
  type: "BatchNorm"
  bottom: "branch4_2_conv3"
  top: "branch4_2_conv3"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "branch4_2_conv3_scale"
  bottom: "branch4_2_conv3"
  top: "branch4_2_conv3"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "branch4_2_conv3_relu"
  type: "ReLU"
  bottom: "branch4_2_conv3"
  top: "branch4_2_conv3"
}
layer {
  name: "concat4"
  type: "Concat"
  bottom: "branch4_1"
  bottom: "branch4_2_conv3"
  top: "concat4"
}
layer {
  name: "shuffle4"
  type: "ShuffleChannel"
  bottom: "concat4"
  top: "shuffle4"
  shuffle_channel_param {
    group: 2
  }
}

layer {
  name: "age/conv_4_1_pw"
  type: "Convolution"
  bottom: "shuffle4"
  top: "age/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_1_pw"
  type: "Scale"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_1_pw"
  type: "ReLU"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_pw"
}
layer {
  name: "age/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_1_dw"
  type: "Scale"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_1_dw"
  type: "ReLU"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_dw"
}
layer {
  name: "age/conv_4_1_linear"
  type: "Convolution"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "age/conv_4_1_linear"
  top: "age/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_1_linear"
  type: "Scale"
  bottom: "age/conv_4_1_linear"
  top: "age/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/conv_4_2_pw"
  type: "Convolution"
  bottom: "age/conv_4_1_linear"
  top: "age/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_2_pw"
  type: "Scale"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_2_pw"
  type: "ReLU"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_pw"
}
layer {
  name: "age/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_2_dw"
  type: "Scale"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_2_dw"
  type: "ReLU"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_dw"
}
layer {
  name: "age/conv_4_2_linear"
  type: "Convolution"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "age/conv_4_2_linear"
  top: "age/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_2_linear"
  type: "Scale"
  bottom: "age/conv_4_2_linear"
  top: "age/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/add_4_2"
  type: "Eltwise"
  bottom: "age/conv_4_1_linear"
  bottom: "age/conv_4_2_linear"
  top: "age/add_4_2"
}

layer {
  name: "age/ip1"
  type: "InnerProduct"
  bottom: "age/add_4_2"
  top: "age/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 96
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "age/ip2"
  type: "InnerProduct"
  bottom: "age/ip1"
  top: "age/ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "emotion/conv_4_1_pw"
  type: "Convolution"
  bottom: "shuffle4"
  top: "emotion/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_1_pw"
  type: "Scale"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_1_pw"
  type: "ReLU"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_pw"
}
layer {
  name: "emotion/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_1_dw"
  type: "Scale"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_1_dw"
  type: "ReLU"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_dw"
}
layer {
  name: "emotion/conv_4_1_linear"
  type: "Convolution"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "emotion/conv_4_1_linear"
  top: "emotion/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_1_linear"
  type: "Scale"
  bottom: "emotion/conv_4_1_linear"
  top: "emotion/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/conv_4_2_pw"
  type: "Convolution"
  bottom: "emotion/conv_4_1_linear"
  top: "emotion/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_2_pw"
  type: "Scale"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_2_pw"
  type: "ReLU"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_pw"
}
layer {
  name: "emotion/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_2_dw"
  type: "Scale"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_2_dw"
  type: "ReLU"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_dw"
}
layer {
  name: "emotion/conv_4_2_linear"
  type: "Convolution"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "emotion/conv_4_2_linear"
  top: "emotion/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_2_linear"
  type: "Scale"
  bottom: "emotion/conv_4_2_linear"
  top: "emotion/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/add_4_2"
  type: "Eltwise"
  bottom: "emotion/conv_4_1_linear"
  bottom: "emotion/conv_4_2_linear"
  top: "emotion/add_4_2"
}

layer {
  name: "emotion/conv1_"
  type: "Convolution"
  bottom: "emotion/add_4_2"
  top: "emotion/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "emotion/relu1_"
  type: "ReLU"
  bottom: "emotion/conv1_"
  top: "emotion/conv1_"
}
layer {
  name: "emotion/pool1_"
  type: "Pooling"
  bottom: "emotion/conv1_"
  top: "emotion/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "emotion/ip1"
  type: "InnerProduct"
  bottom: "emotion/pool1_"
  top: "emotion/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

layer {
  name: "sex/conv_4_1_pw"
  type: "Convolution"
  bottom: "shuffle4"
  top: "sex/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_1_pw"
  type: "Scale"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_1_pw"
  type: "ReLU"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_pw"
}
layer {
  name: "sex/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_1_dw"
  type: "Scale"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_1_dw"
  type: "ReLU"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_dw"
}
layer {
  name: "sex/conv_4_1_linear"
  type: "Convolution"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "sex/conv_4_1_linear"
  top: "sex/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_1_linear"
  type: "Scale"
  bottom: "sex/conv_4_1_linear"
  top: "sex/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/conv_4_2_pw"
  type: "Convolution"
  bottom: "sex/conv_4_1_linear"
  top: "sex/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_2_pw"
  type: "Scale"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_2_pw"
  type: "ReLU"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_pw"
}
layer {
  name: "sex/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_2_dw"
  type: "Scale"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_2_dw"
  type: "ReLU"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_dw"
}
layer {
  name: "sex/conv_4_2_linear"
  type: "Convolution"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "sex/conv_4_2_linear"
  top: "sex/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_2_linear"
  type: "Scale"
  bottom: "sex/conv_4_2_linear"
  top: "sex/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/add_4_2"
  type: "Eltwise"
  bottom: "sex/conv_4_1_linear"
  bottom: "sex/conv_4_2_linear"
  top: "sex/add_4_2"
}

layer {
  name: "sex/conv1_"
  type: "Convolution"
  bottom: "sex/add_4_2"
  top: "sex/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "sex/relu1_"
  type: "ReLU"
  bottom: "sex/conv1_"
  top: "sex/conv1_"
}
layer {
  name: "sex/pool1_"
  type: "Pooling"
  bottom: "sex/conv1_"
  top: "sex/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "sex/ip1"
  type: "InnerProduct"
  bottom: "sex/pool1_"
  top: "sex/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 2
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "glass/conv_4_1_pw"
  type: "Convolution"
  bottom: "shuffle4"
  top: "glass/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_1_pw"
  type: "Scale"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_1_pw"
  type: "ReLU"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_pw"
}
layer {
  name: "glass/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_1_dw"
  type: "Scale"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_1_dw"
  type: "ReLU"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_dw"
}
layer {
  name: "glass/conv_4_1_linear"
  type: "Convolution"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "glass/conv_4_1_linear"
  top: "glass/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_1_linear"
  type: "Scale"
  bottom: "glass/conv_4_1_linear"
  top: "glass/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/conv_4_2_pw"
  type: "Convolution"
  bottom: "glass/conv_4_1_linear"
  top: "glass/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_2_pw"
  type: "Scale"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_2_pw"
  type: "ReLU"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_pw"
}
layer {
  name: "glass/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_2_dw"
  type: "Scale"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_2_dw"
  type: "ReLU"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_dw"
}
layer {
  name: "glass/conv_4_2_linear"
  type: "Convolution"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "glass/conv_4_2_linear"
  top: "glass/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_2_linear"
  type: "Scale"
  bottom: "glass/conv_4_2_linear"
  top: "glass/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/add_4_2"
  type: "Eltwise"
  bottom: "glass/conv_4_1_linear"
  bottom: "glass/conv_4_2_linear"
  top: "glass/add_4_2"
}

layer {
  name: "glass/conv1_"
  type: "Convolution"
  bottom: "glass/add_4_2"
  top: "glass/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "glass/relu1_"
  type: "ReLU"
  bottom: "glass/conv1_"
  top: "glass/conv1_"
}
layer {
  name: "glass/pool1_"
  type: "Pooling"
  bottom: "glass/conv1_"
  top: "glass/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "glass/ip1"
  type: "InnerProduct"
  bottom: "glass/pool1_"
  top: "glass/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

layer {
  name: "race/conv_4_1_pw"
  type: "Convolution"
  bottom: "shuffle4"
  top: "race/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_1_pw"
  type: "Scale"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_1_pw"
  type: "ReLU"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_pw"
}
layer {
  name: "race/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_1_dw"
  type: "Scale"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_1_dw"
  type: "ReLU"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_dw"
}
layer {
  name: "race/conv_4_1_linear"
  type: "Convolution"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "race/conv_4_1_linear"
  top: "race/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_1_linear"
  type: "Scale"
  bottom: "race/conv_4_1_linear"
  top: "race/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/conv_4_2_pw"
  type: "Convolution"
  bottom: "race/conv_4_1_linear"
  top: "race/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_2_pw"
  type: "Scale"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_2_pw"
  type: "ReLU"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_pw"
}
layer {
  name: "race/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_2_dw"
  type: "Scale"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_2_dw"
  type: "ReLU"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_dw"
}
layer {
  name: "race/conv_4_2_linear"
  type: "Convolution"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "race/conv_4_2_linear"
  top: "race/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_2_linear"
  type: "Scale"
  bottom: "race/conv_4_2_linear"
  top: "race/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/add_4_2"
  type: "Eltwise"
  bottom: "race/conv_4_1_linear"
  bottom: "race/conv_4_2_linear"
  top: "race/add_4_2"
}

layer {
  name: "race/conv1_"
  type: "Convolution"
  bottom: "race/add_4_2"
  top: "race/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "race/relu1_"
  type: "ReLU"
  bottom: "race/conv1_"
  top: "race/conv1_"
}
layer {
  name: "race/pool1_"
  type: "Pooling"
  bottom: "race/conv1_"
  top: "race/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "race/ip1"
  type: "InnerProduct"
  bottom: "race/pool1_"
  top: "race/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 4
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "slice"
  type: "Slice"
  bottom: "label"
  top: "label_age"
  top: "label_emotion"
  top: "label_sex"
  top: "label_glass"
  top: "label_race"
  slice_param {
    axis: 1
  }
}

layer {
  name: "loss_age"
  type: "AbsoluteLoss"
  bottom: "age/ip2"
  bottom: "label_age"
  top: "loss_age"
}
#layer {
#  name: "loss_age"
#  type: "EuclideanLoss"
#  bottom: "age/ip2"
#  bottom: "label_age"
#  top: "loss_age"
#}


layer {
  name: "accuracy_age"
  type: "AbsoluteLoss"
  bottom: "age/ip2"
  bottom: "label_age"
  top: "accuracy_age"
  include {
    phase: TEST
  }
}



layer {
  name: "loss_emotion"
  type: "SoftmaxWithLoss"
  bottom: "emotion/ip1"
  bottom: "label_emotion"
  top: "loss_emotion"
}

layer {
  name: "accuracy_emotion"
  type: "Accuracy"
  bottom: "emotion/ip1"
  bottom: "label_emotion"
  top: "accuracy_emotion"
  include {
    phase: TEST
  }
}

layer {
  name: "loss_sex"
  type: "SoftmaxWithLoss"
  bottom: "sex/ip1"
  bottom: "label_sex"
  top: "loss_sex"
}

layer {
  name: "accuracy_sex"
  type: "Accuracy"
  bottom: "sex/ip1"
  bottom: "label_sex"
  top: "accuracy_sex"
  include {
    phase: TEST
  }
}



layer {
  name: "loss_glass"
  type: "SoftmaxWithLoss"
  bottom: "glass/ip1"
  bottom: "label_glass"
  top: "loss_glass"
}

layer {
  name: "accuracy_glass"
  type: "Accuracy"
  bottom: "glass/ip1"
  bottom: "label_glass"
  top: "accuracy_glass"
  include {
    phase: TEST
  }
}

layer {
  name: "loss_race"
  type: "SoftmaxWithLoss"
  bottom: "race/ip1"
  bottom: "label_race"
  top: "loss_race"
}

layer {
  name: "accuracy_race"
  type: "Accuracy"
  bottom: "race/ip1"
  bottom: "label_race"
  top: "accuracy_race"
  include {
    phase: TEST
  }
}














 

mobile_net.prototxt

name: "FaceAttribution"
layer {
  name: "data"
  type: "Data"
  top: "data"
  include {
    phase: TRAIN
  }
  transform_param {
		mean_value: 127.5
		mean_value: 127.5
		mean_value: 127.5
		scale: 0.0078125
  }
  data_param {
    source: "D:/face_attribute/lmdb/train_data_npd"
    batch_size: 64
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "label"
  include {
    phase: TRAIN
  }
  data_param {
    source: "D:/face_attribute/lmdb/train_label_npd"
    batch_size: 64
    backend: LMDB
  }
}

layer {
  name: "data"
  type: "Data"
  top: "data"
  include {
    phase: TEST
  }
  transform_param {
		mean_value: 127.5
		mean_value: 127.5
		mean_value: 127.5
		scale: 0.0078125
  }
  data_param {
    source: "D:/face_attribute/lmdb/test_data_npd"
    batch_size: 64
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "label"
  include {
    phase: TEST
  }
  data_param {
    source: "D:/face_attribute/lmdb/test_label_npd"
    batch_size: 64
    backend: LMDB
  }
}


layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 24
    pad: 1
    kernel_size: 3
    stride: 2
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "conv1_bn"
  type: "BatchNorm"
  bottom: "conv1"
  top: "conv1"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "conv1_scale"
  bottom: "conv1"
  top: "conv1"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "conv1_relu"
  type: "PReLU"
  bottom: "conv1"
  top: "conv1"
}


layer {
  name: "conv2"
  type: "Convolution"
  bottom: "conv1"
  top: "conv2"
  convolution_param {
    num_output: 48
    pad: 1
    kernel_size: 3
    stride: 2
    bias_term: false
    weight_filler {
      type: "msra"
    }
  }
}
layer {
  name: "conv2_bn"
  type: "BatchNorm"
  bottom: "conv2"
  top: "conv2"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
}
layer {
  name: "conv2_scale"
  bottom: "conv2"
  top: "conv2"
  type: "Scale"
  scale_param {
    filler {
      value: 1
    }
    bias_term: true
    bias_filler {
      value: 0
    }
  }
}
layer {
  name: "conv2_relu"
  type: "PReLU"
  bottom: "conv2"
  top: "conv2"
}



layer {
  name: "conv_3_1_pw"
  type: "Convolution"
  bottom: "conv2"
  top: "conv_3_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_3_1_pw"
  type: "BatchNorm"
  bottom: "conv_3_1_pw"
  top: "conv_3_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_3_1_pw"
  type: "Scale"
  bottom: "conv_3_1_pw"
  top: "conv_3_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_3_1_pw"
  type: "PReLU"
  bottom: "conv_3_1_pw"
  top: "conv_3_1_pw"
}
layer {
  name: "conv_3_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "conv_3_1_pw"
  top: "conv_3_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_3_1_dw"
  type: "BatchNorm"
  bottom: "conv_3_1_dw"
  top: "conv_3_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_3_1_dw"
  type: "Scale"
  bottom: "conv_3_1_dw"
  top: "conv_3_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_3_1_dw"
  type: "PReLU"
  bottom: "conv_3_1_dw"
  top: "conv_3_1_dw"
}
layer {
  name: "conv_3_1_linear"
  type: "Convolution"
  bottom: "conv_3_1_dw"
  top: "conv_3_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 64
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_3_1_linear"
  type: "BatchNorm"
  bottom: "conv_3_1_linear"
  top: "conv_3_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_3_1_linear"
  type: "Scale"
  bottom: "conv_3_1_linear"
  top: "conv_3_1_linear"
  scale_param {
    bias_term: true
  }
}


layer {
  name: "conv_4_1_pw"
  type: "Convolution"
  bottom: "conv_3_1_linear"
  top: "conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_4_1_pw"
  type: "BatchNorm"
  bottom: "conv_4_1_pw"
  top: "conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_4_1_pw"
  type: "Scale"
  bottom: "conv_4_1_pw"
  top: "conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_4_1_pw"
  type: "PReLU"
  bottom: "conv_4_1_pw"
  top: "conv_4_1_pw"
}
layer {
  name: "conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "conv_4_1_pw"
  top: "conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_4_1_dw"
  type: "BatchNorm"
  bottom: "conv_4_1_dw"
  top: "conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_4_1_dw"
  type: "Scale"
  bottom: "conv_4_1_dw"
  top: "conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_4_1_dw"
  type: "PReLU"
  bottom: "conv_4_1_dw"
  top: "conv_4_1_dw"
}
layer {
  name: "conv_4_1_linear"
  type: "Convolution"
  bottom: "conv_4_1_dw"
  top: "conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 64
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_4_1_linear"
  type: "BatchNorm"
  bottom: "conv_4_1_linear"
  top: "conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_4_1_linear"
  type: "Scale"
  bottom: "conv_4_1_linear"
  top: "conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}

layer {
  name: "add_4_1"
  type: "Eltwise"
  bottom: "conv_3_1_linear"
  bottom: "conv_4_1_linear"
  top: "add_4_2"
}

layer {
  name: "conv_5_1_pw"
  type: "Convolution"
  bottom: "add_4_2"
  top: "conv_5_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_5_1_pw"
  type: "BatchNorm"
  bottom: "conv_5_1_pw"
  top: "conv_5_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_5_1_pw"
  type: "Scale"
  bottom: "conv_5_1_pw"
  top: "conv_5_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_5_1_pw"
  type: "PReLU"
  bottom: "conv_5_1_pw"
  top: "conv_5_1_pw"
}
layer {
  name: "conv_5_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "conv_5_1_pw"
  top: "conv_5_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_5_1_dw"
  type: "BatchNorm"
  bottom: "conv_5_1_dw"
  top: "conv_5_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_5_1_dw"
  type: "Scale"
  bottom: "conv_5_1_dw"
  top: "conv_5_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_5_1_dw"
  type: "PReLU"
  bottom: "conv_5_1_dw"
  top: "conv_5_1_dw"
}
layer {
  name: "conv_5_1_linear"
  type: "Convolution"
  bottom: "conv_5_1_dw"
  top: "conv_5_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 64
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_5_1_linear"
  type: "BatchNorm"
  bottom: "conv_5_1_linear"
  top: "conv_5_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_5_1_linear"
  type: "Scale"
  bottom: "conv_5_1_linear"
  top: "conv_5_1_linear"
  scale_param {
    bias_term: true
  }
}

layer {
  name: "add_5_1"
  type: "Eltwise"
  bottom: "add_4_2"
  bottom: "conv_5_1_linear"
  top: "add_5_1"
}


layer {
  name: "conv_6_1_pw"
  type: "Convolution"
  bottom: "add_5_1"
  top: "conv_6_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_6_1_pw"
  type: "BatchNorm"
  bottom: "conv_6_1_pw"
  top: "conv_6_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_6_1_pw"
  type: "Scale"
  bottom: "conv_6_1_pw"
  top: "conv_6_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_6_1_pw"
  type: "PReLU"
  bottom: "conv_6_1_pw"
  top: "conv_6_1_pw"
}
layer {
  name: "conv_6_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "conv_6_1_pw"
  top: "conv_6_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_6_1_dw"
  type: "BatchNorm"
  bottom: "conv_6_1_dw"
  top: "conv_6_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_6_1_dw"
  type: "Scale"
  bottom: "conv_6_1_dw"
  top: "conv_6_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "relu_6_1_dw"
  type: "PReLU"
  bottom: "conv_6_1_dw"
  top: "conv_6_1_dw"
}
layer {
  name: "conv_6_1_linear"
  type: "Convolution"
  bottom: "conv_6_1_dw"
  top: "conv_6_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 64
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "bn_6_1_linear"
  type: "BatchNorm"
  bottom: "conv_6_1_linear"
  top: "conv_6_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "scale_6_1_linear"
  type: "Scale"
  bottom: "conv_6_1_linear"
  top: "conv_6_1_linear"
  scale_param {
    bias_term: true
  }
}

layer {
  name: "add_6_1"
  type: "Eltwise"
  bottom: "add_5_1"
  bottom: "conv_6_1_linear"
  top: "add_6_1"
}


layer {
  name: "age/conv_4_1_pw"
  type: "Convolution"
  bottom: "add_6_1"
  top: "age/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_1_pw"
  type: "Scale"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_1_pw"
  type: "PReLU"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_pw"
}
layer {
  name: "age/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "age/conv_4_1_pw"
  top: "age/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_1_dw"
  type: "Scale"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_1_dw"
  type: "PReLU"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_dw"
}
layer {
  name: "age/conv_4_1_linear"
  type: "Convolution"
  bottom: "age/conv_4_1_dw"
  top: "age/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "age/conv_4_1_linear"
  top: "age/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_1_linear"
  type: "Scale"
  bottom: "age/conv_4_1_linear"
  top: "age/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/conv_4_2_pw"
  type: "Convolution"
  bottom: "age/conv_4_1_linear"
  top: "age/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_2_pw"
  type: "Scale"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_2_pw"
  type: "PReLU"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_pw"
}
layer {
  name: "age/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "age/conv_4_2_pw"
  top: "age/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_2_dw"
  type: "Scale"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/relu_4_2_dw"
  type: "PReLU"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_dw"
}
layer {
  name: "age/conv_4_2_linear"
  type: "Convolution"
  bottom: "age/conv_4_2_dw"
  top: "age/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "age/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "age/conv_4_2_linear"
  top: "age/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "age/scale_4_2_linear"
  type: "Scale"
  bottom: "age/conv_4_2_linear"
  top: "age/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "age/add_4_2"
  type: "Eltwise"
  bottom: "age/conv_4_1_linear"
  bottom: "age/conv_4_2_linear"
  top: "age/add_4_2"
}

layer {
  name: "age/ip1"
  type: "InnerProduct"
  bottom: "age/add_4_2"
  top: "age/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 96
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "age/ip2"
  type: "InnerProduct"
  bottom: "age/ip1"
  top: "age/ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "emotion/conv_4_1_pw"
  type: "Convolution"
  bottom: "add_6_1"
  top: "emotion/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_1_pw"
  type: "Scale"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_1_pw"
  type: "PReLU"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_pw"
}
layer {
  name: "emotion/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "emotion/conv_4_1_pw"
  top: "emotion/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_1_dw"
  type: "Scale"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_1_dw"
  type: "PReLU"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_dw"
}
layer {
  name: "emotion/conv_4_1_linear"
  type: "Convolution"
  bottom: "emotion/conv_4_1_dw"
  top: "emotion/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "emotion/conv_4_1_linear"
  top: "emotion/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_1_linear"
  type: "Scale"
  bottom: "emotion/conv_4_1_linear"
  top: "emotion/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/conv_4_2_pw"
  type: "Convolution"
  bottom: "emotion/conv_4_1_linear"
  top: "emotion/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_2_pw"
  type: "Scale"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_2_pw"
  type: "PReLU"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_pw"
}
layer {
  name: "emotion/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "emotion/conv_4_2_pw"
  top: "emotion/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_2_dw"
  type: "Scale"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/relu_4_2_dw"
  type: "PReLU"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_dw"
}
layer {
  name: "emotion/conv_4_2_linear"
  type: "Convolution"
  bottom: "emotion/conv_4_2_dw"
  top: "emotion/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "emotion/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "emotion/conv_4_2_linear"
  top: "emotion/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "emotion/scale_4_2_linear"
  type: "Scale"
  bottom: "emotion/conv_4_2_linear"
  top: "emotion/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "emotion/add_4_2"
  type: "Eltwise"
  bottom: "emotion/conv_4_1_linear"
  bottom: "emotion/conv_4_2_linear"
  top: "emotion/add_4_2"
}

layer {
  name: "emotion/conv1_"
  type: "Convolution"
  bottom: "emotion/add_4_2"
  top: "emotion/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "emotion/relu1_"
  type: "PReLU"
  bottom: "emotion/conv1_"
  top: "emotion/conv1_"
}
layer {
  name: "emotion/pool1_"
  type: "Pooling"
  bottom: "emotion/conv1_"
  top: "emotion/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "emotion/ip1"
  type: "InnerProduct"
  bottom: "emotion/pool1_"
  top: "emotion/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

layer {
  name: "sex/conv_4_1_pw"
  type: "Convolution"
  bottom: "add_6_1"
  top: "sex/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_1_pw"
  type: "Scale"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_1_pw"
  type: "PReLU"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_pw"
}
layer {
  name: "sex/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "sex/conv_4_1_pw"
  top: "sex/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_1_dw"
  type: "Scale"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_1_dw"
  type: "PReLU"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_dw"
}
layer {
  name: "sex/conv_4_1_linear"
  type: "Convolution"
  bottom: "sex/conv_4_1_dw"
  top: "sex/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "sex/conv_4_1_linear"
  top: "sex/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_1_linear"
  type: "Scale"
  bottom: "sex/conv_4_1_linear"
  top: "sex/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/conv_4_2_pw"
  type: "Convolution"
  bottom: "sex/conv_4_1_linear"
  top: "sex/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_2_pw"
  type: "Scale"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_2_pw"
  type: "PReLU"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_pw"
}
layer {
  name: "sex/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "sex/conv_4_2_pw"
  top: "sex/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_2_dw"
  type: "Scale"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/relu_4_2_dw"
  type: "PReLU"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_dw"
}
layer {
  name: "sex/conv_4_2_linear"
  type: "Convolution"
  bottom: "sex/conv_4_2_dw"
  top: "sex/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sex/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "sex/conv_4_2_linear"
  top: "sex/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "sex/scale_4_2_linear"
  type: "Scale"
  bottom: "sex/conv_4_2_linear"
  top: "sex/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "sex/add_4_2"
  type: "Eltwise"
  bottom: "sex/conv_4_1_linear"
  bottom: "sex/conv_4_2_linear"
  top: "sex/add_4_2"
}

layer {
  name: "sex/conv1_"
  type: "Convolution"
  bottom: "sex/add_4_2"
  top: "sex/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "sex/relu1_"
  type: "PReLU"
  bottom: "sex/conv1_"
  top: "sex/conv1_"
}
layer {
  name: "sex/pool1_"
  type: "Pooling"
  bottom: "sex/conv1_"
  top: "sex/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "sex/ip1"
  type: "InnerProduct"
  bottom: "sex/pool1_"
  top: "sex/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 2
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "glass/conv_4_1_pw"
  type: "Convolution"
  bottom: "add_6_1"
  top: "glass/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_1_pw"
  type: "Scale"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_1_pw"
  type: "PReLU"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_pw"
}
layer {
  name: "glass/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "glass/conv_4_1_pw"
  top: "glass/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_1_dw"
  type: "Scale"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_1_dw"
  type: "PReLU"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_dw"
}
layer {
  name: "glass/conv_4_1_linear"
  type: "Convolution"
  bottom: "glass/conv_4_1_dw"
  top: "glass/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "glass/conv_4_1_linear"
  top: "glass/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_1_linear"
  type: "Scale"
  bottom: "glass/conv_4_1_linear"
  top: "glass/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/conv_4_2_pw"
  type: "Convolution"
  bottom: "glass/conv_4_1_linear"
  top: "glass/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_2_pw"
  type: "Scale"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_2_pw"
  type: "PReLU"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_pw"
}
layer {
  name: "glass/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "glass/conv_4_2_pw"
  top: "glass/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_2_dw"
  type: "Scale"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/relu_4_2_dw"
  type: "PReLU"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_dw"
}
layer {
  name: "glass/conv_4_2_linear"
  type: "Convolution"
  bottom: "glass/conv_4_2_dw"
  top: "glass/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "glass/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "glass/conv_4_2_linear"
  top: "glass/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "glass/scale_4_2_linear"
  type: "Scale"
  bottom: "glass/conv_4_2_linear"
  top: "glass/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "glass/add_4_2"
  type: "Eltwise"
  bottom: "glass/conv_4_1_linear"
  bottom: "glass/conv_4_2_linear"
  top: "glass/add_4_2"
}

layer {
  name: "glass/conv1_"
  type: "Convolution"
  bottom: "glass/add_4_2"
  top: "glass/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "glass/relu1_"
  type: "PReLU"
  bottom: "glass/conv1_"
  top: "glass/conv1_"
}
layer {
  name: "glass/pool1_"
  type: "Pooling"
  bottom: "glass/conv1_"
  top: "glass/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "glass/ip1"
  type: "InnerProduct"
  bottom: "glass/pool1_"
  top: "glass/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

layer {
  name: "race/conv_4_1_pw"
  type: "Convolution"
  bottom: "add_6_1"
  top: "race/conv_4_1_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_1_pw"
  type: "BatchNorm"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_1_pw"
  type: "Scale"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_1_pw"
  type: "PReLU"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_pw"
}
layer {
  name: "race/conv_4_1_dw"
  type: "ConvolutionDepthwise"
  bottom: "race/conv_4_1_pw"
  top: "race/conv_4_1_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_1_dw"
  type: "BatchNorm"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_1_dw"
  type: "Scale"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_1_dw"
  type: "PReLU"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_dw"
}
layer {
  name: "race/conv_4_1_linear"
  type: "Convolution"
  bottom: "race/conv_4_1_dw"
  top: "race/conv_4_1_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_1_linear"
  type: "BatchNorm"
  bottom: "race/conv_4_1_linear"
  top: "race/conv_4_1_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_1_linear"
  type: "Scale"
  bottom: "race/conv_4_1_linear"
  top: "race/conv_4_1_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/conv_4_2_pw"
  type: "Convolution"
  bottom: "race/conv_4_1_linear"
  top: "race/conv_4_2_pw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_2_pw"
  type: "BatchNorm"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_pw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_2_pw"
  type: "Scale"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_pw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_2_pw"
  type: "PReLU"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_pw"
}
layer {
  name: "race/conv_4_2_dw"
  type: "ConvolutionDepthwise"
  bottom: "race/conv_4_2_pw"
  top: "race/conv_4_2_dw"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 192
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_2_dw"
  type: "BatchNorm"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_dw"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_2_dw"
  type: "Scale"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_dw"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/relu_4_2_dw"
  type: "PReLU"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_dw"
}
layer {
  name: "race/conv_4_2_linear"
  type: "Convolution"
  bottom: "race/conv_4_2_dw"
  top: "race/conv_4_2_linear"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  convolution_param {
    num_output: 96
    bias_term: false
    pad: 0
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "race/bn_4_2_linear"
  type: "BatchNorm"
  bottom: "race/conv_4_2_linear"
  top: "race/conv_4_2_linear"
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
  param {
    lr_mult: 0.0
    decay_mult: 0.0
  }
}
layer {
  name: "race/scale_4_2_linear"
  type: "Scale"
  bottom: "race/conv_4_2_linear"
  top: "race/conv_4_2_linear"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "race/add_4_2"
  type: "Eltwise"
  bottom: "race/conv_4_1_linear"
  bottom: "race/conv_4_2_linear"
  top: "race/add_4_2"
}

layer {
  name: "race/conv1_"
  type: "Convolution"
  bottom: "race/add_4_2"
  top: "race/conv1_"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 128
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layer {
  name: "race/relu1_"
  type: "PReLU"
  bottom: "race/conv1_"
  top: "race/conv1_"
}
layer {
  name: "race/pool1_"
  type: "Pooling"
  bottom: "race/conv1_"
  top: "race/pool1_"
  pooling_param {
    pool: AVE
    kernel_size: 4
    stride: 4
  }
}
layer {
  name: "race/ip1"
  type: "InnerProduct"
  bottom: "race/pool1_"
  top: "race/ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 4
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}


layer {
  name: "slice"
  type: "Slice"
  bottom: "label"
  top: "label_age"
  top: "label_emotion"
  top: "label_sex"
  top: "label_glass"
  top: "label_race"
  slice_param {
    axis: 1
  }
}

layer {
  name: "loss_age"
  type: "AbsoluteLoss"
  bottom: "age/ip2"
  bottom: "label_age"
  top: "loss_age"
  loss_weight: 0.1
}

#layer {
#  name: "loss_age"
#  type: "EuclideanLoss"
#  bottom: "age/ip2"
#  bottom: "label_age"
#  top: "loss_age"
#}

layer {
  name: "accuracy_age_abs"
  type: "AbsoluteLoss"
  bottom: "age/ip2"
  bottom: "label_age"
  top: "accuracy_age"
  include {
    phase: TEST
  }
}

#layer {
#  name: "accuracy_age_euc"
#  type: "EuclideanLoss"
#  bottom: "age/ip2"
#  bottom: "label_age"
#  top: "accuracy_age2"
#  include {
#    phase: TEST
#  }
#}


layer {
  name: "loss_emotion"
  type: "FocalLoss"
  bottom: "emotion/ip1"
  bottom: "label_emotion"
  top: "loss_emotion"
}

layer {
  name: "accuracy_emotion"
  type: "Accuracy"
  bottom: "emotion/ip1"
  bottom: "label_emotion"
  top: "accuracy_emotion"
  include {
    phase: TEST
  }
}

layer {
  name: "loss_sex"
  type: "FocalLoss"
  bottom: "sex/ip1"
  bottom: "label_sex"
  top: "loss_sex"
}

layer {
  name: "accuracy_sex"
  type: "Accuracy"
  bottom: "sex/ip1"
  bottom: "label_sex"
  top: "accuracy_sex"
  include {
    phase: TEST
  }
}



layer {
  name: "loss_glass"
  type: "FocalLoss"
  bottom: "glass/ip1"
  bottom: "label_glass"
  top: "loss_glass"
}

layer {
  name: "accuracy_glass"
  type: "Accuracy"
  bottom: "glass/ip1"
  bottom: "label_glass"
  top: "accuracy_glass"
  include {
    phase: TEST
  }
}

layer {
  name: "loss_race"
  type: "FocalLoss"
  bottom: "race/ip1"
  bottom: "label_race"
  top: "loss_race"
}

layer {
  name: "accuracy_race"
  type: "Accuracy"
  bottom: "race/ip1"
  bottom: "label_race"
  top: "accuracy_race"
  include {
    phase: TEST
  }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NineDays66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值