Skip to content

Instantly share code, notes, and snippets.

@eric612
Created May 25, 2018 02:27
Show Gist options
  • Save eric612/46ef14840c10aa9a0b8b5f4bf5a45ee9 to your computer and use it in GitHub Desktop.
Save eric612/46ef14840c10aa9a0b8b5f4bf5a45ee9 to your computer and use it in GitHub Desktop.
MobileNetv2-YOLOv2 prototxt
name: "MobileNetv2-YOLOv2Loss"
layer {
name: "data"
type: "AnnotatedData"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.007843
mirror: true
mean_value: 127.5
mean_value: 127.5
mean_value: 127.5
resize_param {
prob: 1.0
resize_mode: WARP
height: 416
width: 416
interp_mode: LINEAR
interp_mode: AREA
interp_mode: LANCZOS4
}
emit_constraint {
emit_type: CENTER
}
distort_param {
brightness_prob: 0.5
brightness_delta: 32.0
contrast_prob: 0.5
contrast_lower: 0.5
contrast_upper: 1.5
hue_prob: 0.5
hue_delta: 18.0
saturation_prob: 0.5
saturation_lower: 0.5
saturation_upper: 1.5
random_order_prob: 0.0
}
expand_param {
prob: 0.2
max_expand_ratio: 1.2
}
}
data_param {
source: "examples/VOC0712/VOC0712_trainval_lmdb"
batch_size: 12
backend: LMDB
}
annotated_data_param {
yolo_data_type : 1
batch_sampler {
max_sample: 1
max_trials: 1
use_original_image: 1
}
batch_sampler {
sampler {
min_scale: 0.8
max_scale: 1.0
min_aspect_ratio: 1
max_aspect_ratio: 1
}
sample_constraint {
min_jaccard_overlap: 0.8
max_jaccard_overlap: 1.0
}
max_sample: 1
max_trials: 50
}
batch_sampler {
sampler {
min_scale: 0.8
max_scale: 1.0
min_aspect_ratio: 1
max_aspect_ratio: 1
}
sample_constraint {
min_jaccard_overlap: 0.9
max_jaccard_overlap: 1.0
}
max_sample: 1
max_trials: 50
}
label_map_file: "data/VOC0712/labelmap_voc.prototxt"
}
}
layer {
name: "Conv"
type: "Convolution"
bottom: "data"
top: "Conv"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 32
bias_term: false
pad: 1
kernel_size: 3
stride: 2
weight_filler {
type: "msra"
}
}
}
layer {
name: "Conv/bn"
type: "BatchNorm"
bottom: "Conv"
top: "Conv"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "Conv/scale"
type: "Scale"
bottom: "Conv"
top: "Conv"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "Conv/relu"
type: "ReLU6"
bottom: "Conv"
top: "Conv"
}
layer {
name: "conv/depthwise"
type: "Convolution"
bottom: "Conv"
top: "conv/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 32
bias_term: false
pad: 1
kernel_size: 3
group: 32
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv/depthwise/bn"
type: "BatchNorm"
bottom: "conv/depthwise"
top: "conv/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv/depthwise/scale"
type: "Scale"
bottom: "conv/depthwise"
top: "conv/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv/depthwise/relu"
type: "ReLU6"
bottom: "conv/depthwise"
top: "conv/depthwise"
}
layer {
name: "conv/project"
type: "Convolution"
bottom: "conv/depthwise"
top: "conv/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 16
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv/project/bn"
type: "BatchNorm"
bottom: "conv/project"
top: "conv/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv/project/scale"
type: "Scale"
bottom: "conv/project"
top: "conv/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_1/expand"
type: "Convolution"
bottom: "conv/project"
top: "conv_1/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 96
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_1/expand/bn"
type: "BatchNorm"
bottom: "conv_1/expand"
top: "conv_1/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_1/expand/scale"
type: "Scale"
bottom: "conv_1/expand"
top: "conv_1/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_1/expand/relu"
type: "ReLU6"
bottom: "conv_1/expand"
top: "conv_1/expand"
}
layer {
name: "conv_1/depthwise"
type: "Convolution"
bottom: "conv_1/expand"
top: "conv_1/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 96
bias_term: false
pad: 1
kernel_size: 3
stride: 2
group: 96
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_1/depthwise/bn"
type: "BatchNorm"
bottom: "conv_1/depthwise"
top: "conv_1/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_1/depthwise/scale"
type: "Scale"
bottom: "conv_1/depthwise"
top: "conv_1/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_1/depthwise/relu"
type: "ReLU6"
bottom: "conv_1/depthwise"
top: "conv_1/depthwise"
}
layer {
name: "conv_1/project"
type: "Convolution"
bottom: "conv_1/depthwise"
top: "conv_1/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 24
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_1/project/bn"
type: "BatchNorm"
bottom: "conv_1/project"
top: "conv_1/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_1/project/scale"
type: "Scale"
bottom: "conv_1/project"
top: "conv_1/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_2/expand"
type: "Convolution"
bottom: "conv_1/project"
top: "conv_2/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 144
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_2/expand/bn"
type: "BatchNorm"
bottom: "conv_2/expand"
top: "conv_2/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_2/expand/scale"
type: "Scale"
bottom: "conv_2/expand"
top: "conv_2/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_2/expand/relu"
type: "ReLU6"
bottom: "conv_2/expand"
top: "conv_2/expand"
}
layer {
name: "conv_2/depthwise"
type: "Convolution"
bottom: "conv_2/expand"
top: "conv_2/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 144
bias_term: false
pad: 1
kernel_size: 3
group: 144
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_2/depthwise/bn"
type: "BatchNorm"
bottom: "conv_2/depthwise"
top: "conv_2/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_2/depthwise/scale"
type: "Scale"
bottom: "conv_2/depthwise"
top: "conv_2/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_2/depthwise/relu"
type: "ReLU6"
bottom: "conv_2/depthwise"
top: "conv_2/depthwise"
}
layer {
name: "conv_2/project"
type: "Convolution"
bottom: "conv_2/depthwise"
top: "conv_2/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 24
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_2/project/bn"
type: "BatchNorm"
bottom: "conv_2/project"
top: "conv_2/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_2/project/scale"
type: "Scale"
bottom: "conv_2/project"
top: "conv_2/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_2/sum"
type: "Eltwise"
bottom: "conv_1/project"
bottom: "conv_2/project"
top: "conv_2"
}
layer {
name: "conv_3/expand"
type: "Convolution"
bottom: "conv_2"
top: "conv_3/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 144
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_3/expand/bn"
type: "BatchNorm"
bottom: "conv_3/expand"
top: "conv_3/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_3/expand/scale"
type: "Scale"
bottom: "conv_3/expand"
top: "conv_3/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_3/expand/relu"
type: "ReLU6"
bottom: "conv_3/expand"
top: "conv_3/expand"
}
layer {
name: "conv_3/depthwise"
type: "Convolution"
bottom: "conv_3/expand"
top: "conv_3/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 144
bias_term: false
pad: 1
kernel_size: 3
stride: 2
group: 144
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_3/depthwise/bn"
type: "BatchNorm"
bottom: "conv_3/depthwise"
top: "conv_3/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_3/depthwise/scale"
type: "Scale"
bottom: "conv_3/depthwise"
top: "conv_3/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_3/depthwise/relu"
type: "ReLU6"
bottom: "conv_3/depthwise"
top: "conv_3/depthwise"
}
layer {
name: "conv_3/project"
type: "Convolution"
bottom: "conv_3/depthwise"
top: "conv_3/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 32
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_3/project/bn"
type: "BatchNorm"
bottom: "conv_3/project"
top: "conv_3/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_3/project/scale"
type: "Scale"
bottom: "conv_3/project"
top: "conv_3/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_4/expand"
type: "Convolution"
bottom: "conv_3/project"
top: "conv_4/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 192
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_4/expand/bn"
type: "BatchNorm"
bottom: "conv_4/expand"
top: "conv_4/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_4/expand/scale"
type: "Scale"
bottom: "conv_4/expand"
top: "conv_4/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_4/expand/relu"
type: "ReLU6"
bottom: "conv_4/expand"
top: "conv_4/expand"
}
layer {
name: "conv_4/depthwise"
type: "Convolution"
bottom: "conv_4/expand"
top: "conv_4/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 192
bias_term: false
pad: 1
kernel_size: 3
group: 192
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_4/depthwise/bn"
type: "BatchNorm"
bottom: "conv_4/depthwise"
top: "conv_4/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_4/depthwise/scale"
type: "Scale"
bottom: "conv_4/depthwise"
top: "conv_4/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_4/depthwise/relu"
type: "ReLU6"
bottom: "conv_4/depthwise"
top: "conv_4/depthwise"
}
layer {
name: "conv_4/project"
type: "Convolution"
bottom: "conv_4/depthwise"
top: "conv_4/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 32
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_4/project/bn"
type: "BatchNorm"
bottom: "conv_4/project"
top: "conv_4/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_4/project/scale"
type: "Scale"
bottom: "conv_4/project"
top: "conv_4/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_4/sum"
type: "Eltwise"
bottom: "conv_3/project"
bottom: "conv_4/project"
top: "conv_4"
}
layer {
name: "conv_5/expand"
type: "Convolution"
bottom: "conv_4"
top: "conv_5/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 192
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_5/expand/bn"
type: "BatchNorm"
bottom: "conv_5/expand"
top: "conv_5/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_5/expand/scale"
type: "Scale"
bottom: "conv_5/expand"
top: "conv_5/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_5/expand/relu"
type: "ReLU6"
bottom: "conv_5/expand"
top: "conv_5/expand"
}
layer {
name: "conv_5/depthwise"
type: "Convolution"
bottom: "conv_5/expand"
top: "conv_5/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 192
bias_term: false
pad: 1
kernel_size: 3
group: 192
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_5/depthwise/bn"
type: "BatchNorm"
bottom: "conv_5/depthwise"
top: "conv_5/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_5/depthwise/scale"
type: "Scale"
bottom: "conv_5/depthwise"
top: "conv_5/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_5/depthwise/relu"
type: "ReLU6"
bottom: "conv_5/depthwise"
top: "conv_5/depthwise"
}
layer {
name: "conv_5/project"
type: "Convolution"
bottom: "conv_5/depthwise"
top: "conv_5/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 32
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_5/project/bn"
type: "BatchNorm"
bottom: "conv_5/project"
top: "conv_5/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_5/project/scale"
type: "Scale"
bottom: "conv_5/project"
top: "conv_5/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_5/sum"
type: "Eltwise"
bottom: "conv_4"
bottom: "conv_5/project"
top: "conv_5"
}
layer {
name: "conv_6/expand"
type: "Convolution"
bottom: "conv_5"
top: "conv_6/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 192
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_6/expand/bn"
type: "BatchNorm"
bottom: "conv_6/expand"
top: "conv_6/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_6/expand/scale"
type: "Scale"
bottom: "conv_6/expand"
top: "conv_6/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_6/expand/relu"
type: "ReLU6"
bottom: "conv_6/expand"
top: "conv_6/expand"
}
layer {
name: "conv_6/depthwise"
type: "Convolution"
bottom: "conv_6/expand"
top: "conv_6/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 192
bias_term: false
pad: 1
kernel_size: 3
stride: 2
group: 192
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_6/depthwise/bn"
type: "BatchNorm"
bottom: "conv_6/depthwise"
top: "conv_6/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_6/depthwise/scale"
type: "Scale"
bottom: "conv_6/depthwise"
top: "conv_6/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_6/depthwise/relu"
type: "ReLU6"
bottom: "conv_6/depthwise"
top: "conv_6/depthwise"
}
layer {
name: "conv_6/project"
type: "Convolution"
bottom: "conv_6/depthwise"
top: "conv_6/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 64
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_6/project/bn"
type: "BatchNorm"
bottom: "conv_6/project"
top: "conv_6/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_6/project/scale"
type: "Scale"
bottom: "conv_6/project"
top: "conv_6/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_7/expand"
type: "Convolution"
bottom: "conv_6/project"
top: "conv_7/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_7/expand/bn"
type: "BatchNorm"
bottom: "conv_7/expand"
top: "conv_7/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_7/expand/scale"
type: "Scale"
bottom: "conv_7/expand"
top: "conv_7/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_7/expand/relu"
type: "ReLU6"
bottom: "conv_7/expand"
top: "conv_7/expand"
}
layer {
name: "conv_7/depthwise"
type: "Convolution"
bottom: "conv_7/expand"
top: "conv_7/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
pad: 1
kernel_size: 3
group: 384
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_7/depthwise/bn"
type: "BatchNorm"
bottom: "conv_7/depthwise"
top: "conv_7/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_7/depthwise/scale"
type: "Scale"
bottom: "conv_7/depthwise"
top: "conv_7/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_7/depthwise/relu"
type: "ReLU6"
bottom: "conv_7/depthwise"
top: "conv_7/depthwise"
}
layer {
name: "conv_7/project"
type: "Convolution"
bottom: "conv_7/depthwise"
top: "conv_7/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 64
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_7/project/bn"
type: "BatchNorm"
bottom: "conv_7/project"
top: "conv_7/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_7/project/scale"
type: "Scale"
bottom: "conv_7/project"
top: "conv_7/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_7/sum"
type: "Eltwise"
bottom: "conv_6/project"
bottom: "conv_7/project"
top: "conv_7"
}
layer {
name: "conv_8/expand"
type: "Convolution"
bottom: "conv_7"
top: "conv_8/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_8/expand/bn"
type: "BatchNorm"
bottom: "conv_8/expand"
top: "conv_8/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_8/expand/scale"
type: "Scale"
bottom: "conv_8/expand"
top: "conv_8/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_8/expand/relu"
type: "ReLU6"
bottom: "conv_8/expand"
top: "conv_8/expand"
}
layer {
name: "conv_8/depthwise"
type: "Convolution"
bottom: "conv_8/expand"
top: "conv_8/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
pad: 1
kernel_size: 3
group: 384
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_8/depthwise/bn"
type: "BatchNorm"
bottom: "conv_8/depthwise"
top: "conv_8/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_8/depthwise/scale"
type: "Scale"
bottom: "conv_8/depthwise"
top: "conv_8/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_8/depthwise/relu"
type: "ReLU6"
bottom: "conv_8/depthwise"
top: "conv_8/depthwise"
}
layer {
name: "conv_8/project"
type: "Convolution"
bottom: "conv_8/depthwise"
top: "conv_8/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 64
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_8/project/bn"
type: "BatchNorm"
bottom: "conv_8/project"
top: "conv_8/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_8/project/scale"
type: "Scale"
bottom: "conv_8/project"
top: "conv_8/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_8/sum"
type: "Eltwise"
bottom: "conv_7"
bottom: "conv_8/project"
top: "conv_8"
}
layer {
name: "conv_9/expand"
type: "Convolution"
bottom: "conv_8"
top: "conv_9/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_9/expand/bn"
type: "BatchNorm"
bottom: "conv_9/expand"
top: "conv_9/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_9/expand/scale"
type: "Scale"
bottom: "conv_9/expand"
top: "conv_9/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_9/expand/relu"
type: "ReLU6"
bottom: "conv_9/expand"
top: "conv_9/expand"
}
layer {
name: "conv_9/depthwise"
type: "Convolution"
bottom: "conv_9/expand"
top: "conv_9/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
pad: 1
kernel_size: 3
group: 384
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_9/depthwise/bn"
type: "BatchNorm"
bottom: "conv_9/depthwise"
top: "conv_9/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_9/depthwise/scale"
type: "Scale"
bottom: "conv_9/depthwise"
top: "conv_9/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_9/depthwise/relu"
type: "ReLU6"
bottom: "conv_9/depthwise"
top: "conv_9/depthwise"
}
layer {
name: "conv_9/project"
type: "Convolution"
bottom: "conv_9/depthwise"
top: "conv_9/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 64
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_9/project/bn"
type: "BatchNorm"
bottom: "conv_9/project"
top: "conv_9/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_9/project/scale"
type: "Scale"
bottom: "conv_9/project"
top: "conv_9/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_9/sum"
type: "Eltwise"
bottom: "conv_8"
bottom: "conv_9/project"
top: "conv_9"
}
layer {
name: "conv_10/expand"
type: "Convolution"
bottom: "conv_9"
top: "conv_10/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_10/expand/bn"
type: "BatchNorm"
bottom: "conv_10/expand"
top: "conv_10/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_10/expand/scale"
type: "Scale"
bottom: "conv_10/expand"
top: "conv_10/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_10/expand/relu"
type: "ReLU6"
bottom: "conv_10/expand"
top: "conv_10/expand"
}
layer {
name: "conv_10/depthwise"
type: "Convolution"
bottom: "conv_10/expand"
top: "conv_10/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 384
bias_term: false
pad: 1
kernel_size: 3
group: 384
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_10/depthwise/bn"
type: "BatchNorm"
bottom: "conv_10/depthwise"
top: "conv_10/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_10/depthwise/scale"
type: "Scale"
bottom: "conv_10/depthwise"
top: "conv_10/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_10/depthwise/relu"
type: "ReLU6"
bottom: "conv_10/depthwise"
top: "conv_10/depthwise"
}
layer {
name: "conv_10/project"
type: "Convolution"
bottom: "conv_10/depthwise"
top: "conv_10/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 96
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_10/project/bn"
type: "BatchNorm"
bottom: "conv_10/project"
top: "conv_10/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_10/project/scale"
type: "Scale"
bottom: "conv_10/project"
top: "conv_10/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_11/expand"
type: "Convolution"
bottom: "conv_10/project"
top: "conv_11/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 576
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_11/expand/bn"
type: "BatchNorm"
bottom: "conv_11/expand"
top: "conv_11/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_11/expand/scale"
type: "Scale"
bottom: "conv_11/expand"
top: "conv_11/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_11/expand/relu"
type: "ReLU6"
bottom: "conv_11/expand"
top: "conv_11/expand"
}
layer {
name: "conv_11/depthwise"
type: "Convolution"
bottom: "conv_11/expand"
top: "conv_11/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 576
bias_term: false
pad: 1
kernel_size: 3
group: 576
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_11/depthwise/bn"
type: "BatchNorm"
bottom: "conv_11/depthwise"
top: "conv_11/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_11/depthwise/scale"
type: "Scale"
bottom: "conv_11/depthwise"
top: "conv_11/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_11/depthwise/relu"
type: "ReLU6"
bottom: "conv_11/depthwise"
top: "conv_11/depthwise"
}
layer {
name: "conv_11/project"
type: "Convolution"
bottom: "conv_11/depthwise"
top: "conv_11/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 96
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_11/project/bn"
type: "BatchNorm"
bottom: "conv_11/project"
top: "conv_11/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_11/project/scale"
type: "Scale"
bottom: "conv_11/project"
top: "conv_11/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_11/sum"
type: "Eltwise"
bottom: "conv_10/project"
bottom: "conv_11/project"
top: "conv_11"
}
layer {
name: "conv_12/expand"
type: "Convolution"
bottom: "conv_11"
top: "conv_12/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 576
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_12/expand/bn"
type: "BatchNorm"
bottom: "conv_12/expand"
top: "conv_12/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_12/expand/scale"
type: "Scale"
bottom: "conv_12/expand"
top: "conv_12/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_12/expand/relu"
type: "ReLU6"
bottom: "conv_12/expand"
top: "conv_12/expand"
}
layer {
name: "conv_12/depthwise"
type: "Convolution"
bottom: "conv_12/expand"
top: "conv_12/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 576
bias_term: false
pad: 1
kernel_size: 3
group: 576
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_12/depthwise/bn"
type: "BatchNorm"
bottom: "conv_12/depthwise"
top: "conv_12/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_12/depthwise/scale"
type: "Scale"
bottom: "conv_12/depthwise"
top: "conv_12/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_12/depthwise/relu"
type: "ReLU6"
bottom: "conv_12/depthwise"
top: "conv_12/depthwise"
}
layer {
name: "conv_12/project"
type: "Convolution"
bottom: "conv_12/depthwise"
top: "conv_12/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 96
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_12/project/bn"
type: "BatchNorm"
bottom: "conv_12/project"
top: "conv_12/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_12/project/scale"
type: "Scale"
bottom: "conv_12/project"
top: "conv_12/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_12/sum"
type: "Eltwise"
bottom: "conv_11"
bottom: "conv_12/project"
top: "conv_12"
}
layer {
name: "conv_13/expand"
type: "Convolution"
bottom: "conv_12"
top: "conv_13/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 576
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_13/expand/bn"
type: "BatchNorm"
bottom: "conv_13/expand"
top: "conv_13/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_13/expand/scale"
type: "Scale"
bottom: "conv_13/expand"
top: "conv_13/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_13/expand/relu"
type: "ReLU6"
bottom: "conv_13/expand"
top: "conv_13/expand"
}
layer {
name: "conv_13/depthwise"
type: "Convolution"
bottom: "conv_13/expand"
top: "conv_13/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 576
bias_term: false
pad: 1
kernel_size: 3
stride: 2
group: 576
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_13/depthwise/bn"
type: "BatchNorm"
bottom: "conv_13/depthwise"
top: "conv_13/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_13/depthwise/scale"
type: "Scale"
bottom: "conv_13/depthwise"
top: "conv_13/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_13/depthwise/relu"
type: "ReLU6"
bottom: "conv_13/depthwise"
top: "conv_13/depthwise"
}
layer {
name: "conv_13/project"
type: "Convolution"
bottom: "conv_13/depthwise"
top: "conv_13/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 160
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_13/project/bn"
type: "BatchNorm"
bottom: "conv_13/project"
top: "conv_13/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_13/project/scale"
type: "Scale"
bottom: "conv_13/project"
top: "conv_13/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_14/expand"
type: "Convolution"
bottom: "conv_13/project"
top: "conv_14/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 960
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_14/expand/bn"
type: "BatchNorm"
bottom: "conv_14/expand"
top: "conv_14/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_14/expand/scale"
type: "Scale"
bottom: "conv_14/expand"
top: "conv_14/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_14/expand/relu"
type: "ReLU6"
bottom: "conv_14/expand"
top: "conv_14/expand"
}
layer {
name: "conv_14/depthwise"
type: "Convolution"
bottom: "conv_14/expand"
top: "conv_14/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 960
bias_term: false
pad: 1
kernel_size: 3
group: 960
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_14/depthwise/bn"
type: "BatchNorm"
bottom: "conv_14/depthwise"
top: "conv_14/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_14/depthwise/scale"
type: "Scale"
bottom: "conv_14/depthwise"
top: "conv_14/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_14/depthwise/relu"
type: "ReLU6"
bottom: "conv_14/depthwise"
top: "conv_14/depthwise"
}
layer {
name: "conv_14/project"
type: "Convolution"
bottom: "conv_14/depthwise"
top: "conv_14/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 160
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_14/project/bn"
type: "BatchNorm"
bottom: "conv_14/project"
top: "conv_14/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_14/project/scale"
type: "Scale"
bottom: "conv_14/project"
top: "conv_14/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_14/sum"
type: "Eltwise"
bottom: "conv_13/project"
bottom: "conv_14/project"
top: "conv_14"
}
layer {
name: "conv_15/expand"
type: "Convolution"
bottom: "conv_14"
top: "conv_15/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 960
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_15/expand/bn"
type: "BatchNorm"
bottom: "conv_15/expand"
top: "conv_15/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_15/expand/scale"
type: "Scale"
bottom: "conv_15/expand"
top: "conv_15/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_15/expand/relu"
type: "ReLU6"
bottom: "conv_15/expand"
top: "conv_15/expand"
}
layer {
name: "conv_15/depthwise"
type: "Convolution"
bottom: "conv_15/expand"
top: "conv_15/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 960
bias_term: false
pad: 1
kernel_size: 3
group: 960
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_15/depthwise/bn"
type: "BatchNorm"
bottom: "conv_15/depthwise"
top: "conv_15/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_15/depthwise/scale"
type: "Scale"
bottom: "conv_15/depthwise"
top: "conv_15/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_15/depthwise/relu"
type: "ReLU6"
bottom: "conv_15/depthwise"
top: "conv_15/depthwise"
}
layer {
name: "conv_15/project"
type: "Convolution"
bottom: "conv_15/depthwise"
top: "conv_15/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 160
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_15/project/bn"
type: "BatchNorm"
bottom: "conv_15/project"
top: "conv_15/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_15/project/scale"
type: "Scale"
bottom: "conv_15/project"
top: "conv_15/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_15/sum"
type: "Eltwise"
bottom: "conv_14"
bottom: "conv_15/project"
top: "conv_15"
}
layer {
name: "conv_16/expand"
type: "Convolution"
bottom: "conv_15"
top: "conv_16/expand"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 960
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_16/expand/bn"
type: "BatchNorm"
bottom: "conv_16/expand"
top: "conv_16/expand"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_16/expand/scale"
type: "Scale"
bottom: "conv_16/expand"
top: "conv_16/expand"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_16/expand/relu"
type: "ReLU6"
bottom: "conv_16/expand"
top: "conv_16/expand"
}
layer {
name: "conv_16/depthwise"
type: "Convolution"
bottom: "conv_16/expand"
top: "conv_16/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 960
bias_term: false
pad: 1
kernel_size: 3
group: 960
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_16/depthwise/bn"
type: "BatchNorm"
bottom: "conv_16/depthwise"
top: "conv_16/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_16/depthwise/scale"
type: "Scale"
bottom: "conv_16/depthwise"
top: "conv_16/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "conv_16/depthwise/relu"
type: "ReLU6"
bottom: "conv_16/depthwise"
top: "conv_16/depthwise"
}
layer {
name: "conv_16/project"
type: "Convolution"
bottom: "conv_16/depthwise"
top: "conv_16/project"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 320
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "conv_16/project/bn"
type: "BatchNorm"
bottom: "conv_16/project"
top: "conv_16/project"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "conv_16/project/scale"
type: "Scale"
bottom: "conv_16/project"
top: "conv_16/project"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "Conv_1"
type: "Convolution"
bottom: "conv_16/project"
top: "Conv_1"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 1280
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "Conv_1/bn"
type: "BatchNorm"
bottom: "Conv_1"
top: "Conv_1"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "Conv_1/scale"
type: "Scale"
bottom: "Conv_1"
top: "Conv_1"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "Conv_1/relu"
type: "ReLU6"
bottom: "Conv_1"
top: "Conv_1"
}
layer {
name: "layer_16"
type: "Convolution"
bottom: "Conv_1"
top: "layer_16"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_16/bn"
type: "BatchNorm"
bottom: "layer_16"
top: "layer_16"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_16/scale"
type: "Scale"
bottom: "layer_16"
top: "layer_16"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_16/relu"
type: "ReLU6"
bottom: "layer_16"
top: "layer_16"
}
layer {
name: "layer_17/depthwise"
type: "Convolution"
bottom: "layer_16"
top: "layer_17/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
pad: 1
kernel_size: 3
stride: 1
group: 512
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_17/depthwise/bn"
type: "BatchNorm"
bottom: "layer_17/depthwise"
top: "layer_17/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_17/depthwise/scale"
type: "Scale"
bottom: "layer_17/depthwise"
top: "layer_17/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_17/depthwise/relu"
type: "ReLU6"
bottom: "layer_17/depthwise"
top: "layer_17/depthwise"
}
layer {
name: "layer_17"
type: "Convolution"
bottom: "layer_17/depthwise"
top: "layer_17"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_17/bn"
type: "BatchNorm"
bottom: "layer_17"
top: "layer_17"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_17/scale"
type: "Scale"
bottom: "layer_17"
top: "layer_17"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_17/relu"
type: "ReLU6"
bottom: "layer_17"
top: "layer_17"
}
layer {
name: "layer_18"
type: "Convolution"
bottom: "layer_17"
top: "layer_18"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_18/bn"
type: "BatchNorm"
bottom: "layer_18"
top: "layer_18"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_18/scale"
type: "Scale"
bottom: "layer_18"
top: "layer_18"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_18/relu"
type: "ReLU6"
bottom: "layer_18"
top: "layer_18"
}
layer {
name: "layer_19/depthwise"
type: "Convolution"
bottom: "layer_18"
top: "layer_19/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
pad: 1
kernel_size: 3
stride: 1
group: 512
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_19/depthwise/bn"
type: "BatchNorm"
bottom: "layer_19/depthwise"
top: "layer_19/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_19/depthwise/scale"
type: "Scale"
bottom: "layer_19/depthwise"
top: "layer_19/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_19/depthwise/relu"
type: "ReLU6"
bottom: "layer_19/depthwise"
top: "layer_19/depthwise"
}
layer {
name: "layer_19"
type: "Convolution"
bottom: "layer_19/depthwise"
top: "layer_19"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_19/bn"
type: "BatchNorm"
bottom: "layer_19"
top: "layer_19"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_19/scale"
type: "Scale"
bottom: "layer_19"
top: "layer_19"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_19/relu"
type: "ReLU6"
bottom: "layer_19"
top: "layer_19"
}
layer {
name: "layer_20"
type: "Convolution"
bottom: "layer_19"
top: "layer_20"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_20/bn"
type: "BatchNorm"
bottom: "layer_20"
top: "layer_20"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_20/scale"
type: "Scale"
bottom: "layer_20"
top: "layer_20"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_20/relu"
type: "ReLU6"
bottom: "layer_20"
top: "layer_20"
}
layer {
name: "layer_21/depthwise"
type: "Convolution"
bottom: "layer_20"
top: "layer_21/depthwise"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 512
bias_term: false
pad: 1
kernel_size: 3
stride: 1
group: 512
engine: CAFFE
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_21/depthwise/bn"
type: "BatchNorm"
bottom: "layer_21/depthwise"
top: "layer_21/depthwise"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_21/depthwise/scale"
type: "Scale"
bottom: "layer_21/depthwise"
top: "layer_21/depthwise"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_21/depthwise/relu"
type: "ReLU6"
bottom: "layer_21/depthwise"
top: "layer_21/depthwise"
}
layer {
name: "layer_21"
type: "Convolution"
bottom: "layer_21/depthwise"
top: "layer_21"
param {
lr_mult: 1.0
decay_mult: 1.0
}
convolution_param {
num_output: 1024
bias_term: false
kernel_size: 1
weight_filler {
type: "msra"
}
}
}
layer {
name: "layer_21/bn"
type: "BatchNorm"
bottom: "layer_21"
top: "layer_21"
batch_norm_param {
eps: 0.001
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
}
layer {
name: "layer_21/scale"
type: "Scale"
bottom: "layer_21"
top: "layer_21"
param {
lr_mult: 1.0
decay_mult: 0.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
scale_param {
filler {
value: 1
}
bias_term: true
bias_filler {
value: 0
}
}
}
layer {
name: "layer_21/relu"
type: "ReLU6"
bottom: "layer_21"
top: "layer_21"
}
layer {
name: "conv22_indoor"
type: "Convolution"
bottom: "layer_21"
top: "conv22"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 125
kernel_size: 1
pad: 0
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
value: 0
}
}
}
layer {
name: "Region_Loss"
type: "RegionLoss"
bottom: "conv22"
bottom: "label"
top: "det_loss"
loss_weight: 1
region_loss_param {
side: 13
num_class: 20
coords: 4
num: 5
softmax: 1
jitter: 0.2
rescore: 1
object_scale: 5.0
noobject_scale: 1.0
class_scale: 1.0
coord_scale: 1.0
absolute: 1
thresh: 0.5
random: 0
biases: 1.08
biases: 1.19
biases: 3.42
biases: 4.41
biases: 6.63
biases: 11.38
biases: 9.42
biases: 5.11
biases: 16.62
biases: 10.52
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment