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
}
}