diff --git a/README.md b/README.md new file mode 100644 index 0000000..7f33a26 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +### WeChat QRCode + +CNN models for `wechat_qrcode` module, including the detector model and the super scale model. + +|  file   | MD5 | +|  ----   | ----  | +| detect.caffemodel | 238e2b2d6f3c18d6c3a30de0c31e23cf | +| detect.prototxt  | 6fb4976b32695f9f5c6305c19f12537d | +| sr.caffemodel | cbfcd60361a73beb8c583eea7e8e6664 | +| sr.prototxt | 69db99927a70df953b471daaba03fbef | \ No newline at end of file diff --git a/detect.caffemodel b/detect.caffemodel new file mode 100644 index 0000000..453126c Binary files /dev/null and b/detect.caffemodel differ diff --git a/detect.prototxt b/detect.prototxt new file mode 100644 index 0000000..bd2417c --- /dev/null +++ b/detect.prototxt @@ -0,0 +1,2716 @@ +layer { + name: "data" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 1 + dim: 384 + dim: 384 + } + } +} +layer { + name: "data/bn" + type: "BatchNorm" + bottom: "data" + top: "data" + 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: "data/bn/scale" + type: "Scale" + bottom: "data" + top: "data" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + scale_param { + filler { + type: "constant" + value: 1.0 + } + bias_term: true + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "stage1" + type: "Convolution" + bottom: "data" + top: "stage1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 1 + kernel_size: 3 + group: 1 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage1/bn" + type: "BatchNorm" + bottom: "stage1" + top: "stage1" + 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: "stage1/bn/scale" + type: "Scale" + bottom: "stage1" + top: "stage1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + scale_param { + filler { + type: "constant" + value: 1.0 + } + bias_term: true + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "stage1/relu" + type: "ReLU" + bottom: "stage1" + top: "stage1" +} +layer { + name: "stage2" + type: "Pooling" + bottom: "stage1" + top: "stage2" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + pad: 0 + } +} +layer { + name: "stage3_1/conv1" + type: "Convolution" + bottom: "stage2" + top: "stage3_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/conv1/relu" + type: "ReLU" + bottom: "stage3_1/conv1" + top: "stage3_1/conv1" +} +layer { + name: "stage3_1/conv2" + type: "Convolution" + bottom: "stage3_1/conv1" + top: "stage3_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/conv3" + type: "Convolution" + bottom: "stage3_1/conv2" + top: "stage3_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/relu" + type: "ReLU" + bottom: "stage3_1/conv3" + top: "stage3_1/conv3" +} +layer { + name: "stage3_2/conv1" + type: "Convolution" + bottom: "stage3_1/conv3" + top: "stage3_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/conv1/relu" + type: "ReLU" + bottom: "stage3_2/conv1" + top: "stage3_2/conv1" +} +layer { + name: "stage3_2/conv2" + type: "Convolution" + bottom: "stage3_2/conv1" + top: "stage3_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/conv3" + type: "Convolution" + bottom: "stage3_2/conv2" + top: "stage3_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/sum" + type: "Eltwise" + bottom: "stage3_1/conv3" + bottom: "stage3_2/conv3" + top: "stage3_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_2/relu" + type: "ReLU" + bottom: "stage3_2/sum" + top: "stage3_2/sum" +} +layer { + name: "stage3_3/conv1" + type: "Convolution" + bottom: "stage3_2/sum" + top: "stage3_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/conv1/relu" + type: "ReLU" + bottom: "stage3_3/conv1" + top: "stage3_3/conv1" +} +layer { + name: "stage3_3/conv2" + type: "Convolution" + bottom: "stage3_3/conv1" + top: "stage3_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/conv3" + type: "Convolution" + bottom: "stage3_3/conv2" + top: "stage3_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/sum" + type: "Eltwise" + bottom: "stage3_2/sum" + bottom: "stage3_3/conv3" + top: "stage3_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_3/relu" + type: "ReLU" + bottom: "stage3_3/sum" + top: "stage3_3/sum" +} +layer { + name: "stage3_4/conv1" + type: "Convolution" + bottom: "stage3_3/sum" + top: "stage3_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/conv1/relu" + type: "ReLU" + bottom: "stage3_4/conv1" + top: "stage3_4/conv1" +} +layer { + name: "stage3_4/conv2" + type: "Convolution" + bottom: "stage3_4/conv1" + top: "stage3_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/conv3" + type: "Convolution" + bottom: "stage3_4/conv2" + top: "stage3_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/sum" + type: "Eltwise" + bottom: "stage3_3/sum" + bottom: "stage3_4/conv3" + top: "stage3_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_4/relu" + type: "ReLU" + bottom: "stage3_4/sum" + top: "stage3_4/sum" +} +layer { + name: "stage4_1/conv1" + type: "Convolution" + bottom: "stage3_4/sum" + top: "stage4_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/conv1/relu" + type: "ReLU" + bottom: "stage4_1/conv1" + top: "stage4_1/conv1" +} +layer { + name: "stage4_1/conv2" + type: "Convolution" + bottom: "stage4_1/conv1" + top: "stage4_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/conv3" + type: "Convolution" + bottom: "stage4_1/conv2" + top: "stage4_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/relu" + type: "ReLU" + bottom: "stage4_1/conv3" + top: "stage4_1/conv3" +} +layer { + name: "stage4_2/conv1" + type: "Convolution" + bottom: "stage4_1/conv3" + top: "stage4_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/conv1/relu" + type: "ReLU" + bottom: "stage4_2/conv1" + top: "stage4_2/conv1" +} +layer { + name: "stage4_2/conv2" + type: "Convolution" + bottom: "stage4_2/conv1" + top: "stage4_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/conv3" + type: "Convolution" + bottom: "stage4_2/conv2" + top: "stage4_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/sum" + type: "Eltwise" + bottom: "stage4_1/conv3" + bottom: "stage4_2/conv3" + top: "stage4_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_2/relu" + type: "ReLU" + bottom: "stage4_2/sum" + top: "stage4_2/sum" +} +layer { + name: "stage4_3/conv1" + type: "Convolution" + bottom: "stage4_2/sum" + top: "stage4_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/conv1/relu" + type: "ReLU" + bottom: "stage4_3/conv1" + top: "stage4_3/conv1" +} +layer { + name: "stage4_3/conv2" + type: "Convolution" + bottom: "stage4_3/conv1" + top: "stage4_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/conv3" + type: "Convolution" + bottom: "stage4_3/conv2" + top: "stage4_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/sum" + type: "Eltwise" + bottom: "stage4_2/sum" + bottom: "stage4_3/conv3" + top: "stage4_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_3/relu" + type: "ReLU" + bottom: "stage4_3/sum" + top: "stage4_3/sum" +} +layer { + name: "stage4_4/conv1" + type: "Convolution" + bottom: "stage4_3/sum" + top: "stage4_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/conv1/relu" + type: "ReLU" + bottom: "stage4_4/conv1" + top: "stage4_4/conv1" +} +layer { + name: "stage4_4/conv2" + type: "Convolution" + bottom: "stage4_4/conv1" + top: "stage4_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/conv3" + type: "Convolution" + bottom: "stage4_4/conv2" + top: "stage4_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/sum" + type: "Eltwise" + bottom: "stage4_3/sum" + bottom: "stage4_4/conv3" + top: "stage4_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_4/relu" + type: "ReLU" + bottom: "stage4_4/sum" + top: "stage4_4/sum" +} +layer { + name: "stage4_5/conv1" + type: "Convolution" + bottom: "stage4_4/sum" + top: "stage4_5/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/conv1/relu" + type: "ReLU" + bottom: "stage4_5/conv1" + top: "stage4_5/conv1" +} +layer { + name: "stage4_5/conv2" + type: "Convolution" + bottom: "stage4_5/conv1" + top: "stage4_5/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/conv3" + type: "Convolution" + bottom: "stage4_5/conv2" + top: "stage4_5/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/sum" + type: "Eltwise" + bottom: "stage4_4/sum" + bottom: "stage4_5/conv3" + top: "stage4_5/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_5/relu" + type: "ReLU" + bottom: "stage4_5/sum" + top: "stage4_5/sum" +} +layer { + name: "stage4_6/conv1" + type: "Convolution" + bottom: "stage4_5/sum" + top: "stage4_6/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/conv1/relu" + type: "ReLU" + bottom: "stage4_6/conv1" + top: "stage4_6/conv1" +} +layer { + name: "stage4_6/conv2" + type: "Convolution" + bottom: "stage4_6/conv1" + top: "stage4_6/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/conv3" + type: "Convolution" + bottom: "stage4_6/conv2" + top: "stage4_6/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/sum" + type: "Eltwise" + bottom: "stage4_5/sum" + bottom: "stage4_6/conv3" + top: "stage4_6/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_6/relu" + type: "ReLU" + bottom: "stage4_6/sum" + top: "stage4_6/sum" +} +layer { + name: "stage4_7/conv1" + type: "Convolution" + bottom: "stage4_6/sum" + top: "stage4_7/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/conv1/relu" + type: "ReLU" + bottom: "stage4_7/conv1" + top: "stage4_7/conv1" +} +layer { + name: "stage4_7/conv2" + type: "Convolution" + bottom: "stage4_7/conv1" + top: "stage4_7/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/conv3" + type: "Convolution" + bottom: "stage4_7/conv2" + top: "stage4_7/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/sum" + type: "Eltwise" + bottom: "stage4_6/sum" + bottom: "stage4_7/conv3" + top: "stage4_7/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_7/relu" + type: "ReLU" + bottom: "stage4_7/sum" + top: "stage4_7/sum" +} +layer { + name: "stage4_8/conv1" + type: "Convolution" + bottom: "stage4_7/sum" + top: "stage4_8/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/conv1/relu" + type: "ReLU" + bottom: "stage4_8/conv1" + top: "stage4_8/conv1" +} +layer { + name: "stage4_8/conv2" + type: "Convolution" + bottom: "stage4_8/conv1" + top: "stage4_8/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/conv3" + type: "Convolution" + bottom: "stage4_8/conv2" + top: "stage4_8/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/sum" + type: "Eltwise" + bottom: "stage4_7/sum" + bottom: "stage4_8/conv3" + top: "stage4_8/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_8/relu" + type: "ReLU" + bottom: "stage4_8/sum" + top: "stage4_8/sum" +} +layer { + name: "stage5_1/conv1" + type: "Convolution" + bottom: "stage4_8/sum" + top: "stage5_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_1/conv1/relu" + type: "ReLU" + bottom: "stage5_1/conv1" + top: "stage5_1/conv1" +} +layer { + name: "stage5_1/conv2" + type: "Convolution" + bottom: "stage5_1/conv1" + top: "stage5_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_1/conv3" + type: "Convolution" + bottom: "stage5_1/conv2" + top: "stage5_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_1/relu" + type: "ReLU" + bottom: "stage5_1/conv3" + top: "stage5_1/conv3" +} +layer { + name: "stage5_2/conv1" + type: "Convolution" + bottom: "stage5_1/conv3" + top: "stage5_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_2/conv1/relu" + type: "ReLU" + bottom: "stage5_2/conv1" + top: "stage5_2/conv1" +} +layer { + name: "stage5_2/conv2" + type: "Convolution" + bottom: "stage5_2/conv1" + top: "stage5_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_2/conv3" + type: "Convolution" + bottom: "stage5_2/conv2" + top: "stage5_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_2/sum" + type: "Eltwise" + bottom: "stage5_1/conv3" + bottom: "stage5_2/conv3" + top: "stage5_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_2/relu" + type: "ReLU" + bottom: "stage5_2/sum" + top: "stage5_2/sum" +} +layer { + name: "stage5_3/conv1" + type: "Convolution" + bottom: "stage5_2/sum" + top: "stage5_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_3/conv1/relu" + type: "ReLU" + bottom: "stage5_3/conv1" + top: "stage5_3/conv1" +} +layer { + name: "stage5_3/conv2" + type: "Convolution" + bottom: "stage5_3/conv1" + top: "stage5_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_3/conv3" + type: "Convolution" + bottom: "stage5_3/conv2" + top: "stage5_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_3/sum" + type: "Eltwise" + bottom: "stage5_2/sum" + bottom: "stage5_3/conv3" + top: "stage5_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_3/relu" + type: "ReLU" + bottom: "stage5_3/sum" + top: "stage5_3/sum" +} +layer { + name: "stage5_4/conv1" + type: "Convolution" + bottom: "stage5_3/sum" + top: "stage5_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_4/conv1/relu" + type: "ReLU" + bottom: "stage5_4/conv1" + top: "stage5_4/conv1" +} +layer { + name: "stage5_4/conv2" + type: "Convolution" + bottom: "stage5_4/conv1" + top: "stage5_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_4/conv3" + type: "Convolution" + bottom: "stage5_4/conv2" + top: "stage5_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_4/sum" + type: "Eltwise" + bottom: "stage5_3/sum" + bottom: "stage5_4/conv3" + top: "stage5_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_4/relu" + type: "ReLU" + bottom: "stage5_4/sum" + top: "stage5_4/sum" +} +layer { + name: "stage6_1/conv4" + type: "Convolution" + bottom: "stage5_4/sum" + top: "stage6_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/conv1" + type: "Convolution" + bottom: "stage5_4/sum" + top: "stage6_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/conv1/relu" + type: "ReLU" + bottom: "stage6_1/conv1" + top: "stage6_1/conv1" +} +layer { + name: "stage6_1/conv2" + type: "Convolution" + bottom: "stage6_1/conv1" + top: "stage6_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage6_1/conv3" + type: "Convolution" + bottom: "stage6_1/conv2" + top: "stage6_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/sum" + type: "Eltwise" + bottom: "stage6_1/conv4" + bottom: "stage6_1/conv3" + top: "stage6_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage6_1/relu" + type: "ReLU" + bottom: "stage6_1/sum" + top: "stage6_1/sum" +} +layer { + name: "stage6_2/conv1" + type: "Convolution" + bottom: "stage6_1/sum" + top: "stage6_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_2/conv1/relu" + type: "ReLU" + bottom: "stage6_2/conv1" + top: "stage6_2/conv1" +} +layer { + name: "stage6_2/conv2" + type: "Convolution" + bottom: "stage6_2/conv1" + top: "stage6_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage6_2/conv3" + type: "Convolution" + bottom: "stage6_2/conv2" + top: "stage6_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_2/sum" + type: "Eltwise" + bottom: "stage6_1/sum" + bottom: "stage6_2/conv3" + top: "stage6_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage6_2/relu" + type: "ReLU" + bottom: "stage6_2/sum" + top: "stage6_2/sum" +} +layer { + name: "stage7_1/conv4" + type: "Convolution" + bottom: "stage6_2/sum" + top: "stage7_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/conv1" + type: "Convolution" + bottom: "stage6_2/sum" + top: "stage7_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/conv1/relu" + type: "ReLU" + bottom: "stage7_1/conv1" + top: "stage7_1/conv1" +} +layer { + name: "stage7_1/conv2" + type: "Convolution" + bottom: "stage7_1/conv1" + top: "stage7_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage7_1/conv3" + type: "Convolution" + bottom: "stage7_1/conv2" + top: "stage7_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/sum" + type: "Eltwise" + bottom: "stage7_1/conv4" + bottom: "stage7_1/conv3" + top: "stage7_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage7_1/relu" + type: "ReLU" + bottom: "stage7_1/sum" + top: "stage7_1/sum" +} +layer { + name: "stage7_2/conv1" + type: "Convolution" + bottom: "stage7_1/sum" + top: "stage7_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_2/conv1/relu" + type: "ReLU" + bottom: "stage7_2/conv1" + top: "stage7_2/conv1" +} +layer { + name: "stage7_2/conv2" + type: "Convolution" + bottom: "stage7_2/conv1" + top: "stage7_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage7_2/conv3" + type: "Convolution" + bottom: "stage7_2/conv2" + top: "stage7_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_2/sum" + type: "Eltwise" + bottom: "stage7_1/sum" + bottom: "stage7_2/conv3" + top: "stage7_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage7_2/relu" + type: "ReLU" + bottom: "stage7_2/sum" + top: "stage7_2/sum" +} +layer { + name: "stage8_1/conv4" + type: "Convolution" + bottom: "stage7_2/sum" + top: "stage8_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/conv1" + type: "Convolution" + bottom: "stage7_2/sum" + top: "stage8_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/conv1/relu" + type: "ReLU" + bottom: "stage8_1/conv1" + top: "stage8_1/conv1" +} +layer { + name: "stage8_1/conv2" + type: "Convolution" + bottom: "stage8_1/conv1" + top: "stage8_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage8_1/conv3" + type: "Convolution" + bottom: "stage8_1/conv2" + top: "stage8_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/sum" + type: "Eltwise" + bottom: "stage8_1/conv4" + bottom: "stage8_1/conv3" + top: "stage8_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage8_1/relu" + type: "ReLU" + bottom: "stage8_1/sum" + top: "stage8_1/sum" +} +layer { + name: "stage8_2/conv1" + type: "Convolution" + bottom: "stage8_1/sum" + top: "stage8_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_2/conv1/relu" + type: "ReLU" + bottom: "stage8_2/conv1" + top: "stage8_2/conv1" +} +layer { + name: "stage8_2/conv2" + type: "Convolution" + bottom: "stage8_2/conv1" + top: "stage8_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage8_2/conv3" + type: "Convolution" + bottom: "stage8_2/conv2" + top: "stage8_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_2/sum" + type: "Eltwise" + bottom: "stage8_1/sum" + bottom: "stage8_2/conv3" + top: "stage8_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage8_2/relu" + type: "ReLU" + bottom: "stage8_2/sum" + top: "stage8_2/sum" +} +layer { + name: "cls1/conv" + type: "Convolution" + bottom: "stage4_8/sum" + top: "cls1/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls1/permute" + type: "Permute" + bottom: "cls1/conv" + top: "cls1/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls1/flatten" + type: "Flatten" + bottom: "cls1/permute" + top: "cls1/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc1/conv" + type: "Convolution" + bottom: "stage4_8/sum" + top: "loc1/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc1/permute" + type: "Permute" + bottom: "loc1/conv" + top: "loc1/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc1/flatten" + type: "Flatten" + bottom: "loc1/permute" + top: "loc1/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage4_8/sum/prior_box" + type: "PriorBox" + bottom: "stage4_8/sum" + bottom: "data" + top: "stage4_8/sum/prior_box" + prior_box_param { + min_size: 50.0 + max_size: 100.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 16.0 + } +} +layer { + name: "cls2/conv" + type: "Convolution" + bottom: "stage5_4/sum" + top: "cls2/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls2/permute" + type: "Permute" + bottom: "cls2/conv" + top: "cls2/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls2/flatten" + type: "Flatten" + bottom: "cls2/permute" + top: "cls2/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc2/conv" + type: "Convolution" + bottom: "stage5_4/sum" + top: "loc2/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc2/permute" + type: "Permute" + bottom: "loc2/conv" + top: "loc2/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc2/flatten" + type: "Flatten" + bottom: "loc2/permute" + top: "loc2/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage5_4/sum/prior_box" + type: "PriorBox" + bottom: "stage5_4/sum" + bottom: "data" + top: "stage5_4/sum/prior_box" + prior_box_param { + min_size: 100.0 + max_size: 150.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls3/conv" + type: "Convolution" + bottom: "stage6_2/sum" + top: "cls3/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls3/permute" + type: "Permute" + bottom: "cls3/conv" + top: "cls3/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls3/flatten" + type: "Flatten" + bottom: "cls3/permute" + top: "cls3/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc3/conv" + type: "Convolution" + bottom: "stage6_2/sum" + top: "loc3/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc3/permute" + type: "Permute" + bottom: "loc3/conv" + top: "loc3/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc3/flatten" + type: "Flatten" + bottom: "loc3/permute" + top: "loc3/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage6_2/sum/prior_box" + type: "PriorBox" + bottom: "stage6_2/sum" + bottom: "data" + top: "stage6_2/sum/prior_box" + prior_box_param { + min_size: 150.0 + max_size: 200.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls4/conv" + type: "Convolution" + bottom: "stage7_2/sum" + top: "cls4/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls4/permute" + type: "Permute" + bottom: "cls4/conv" + top: "cls4/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls4/flatten" + type: "Flatten" + bottom: "cls4/permute" + top: "cls4/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc4/conv" + type: "Convolution" + bottom: "stage7_2/sum" + top: "loc4/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc4/permute" + type: "Permute" + bottom: "loc4/conv" + top: "loc4/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc4/flatten" + type: "Flatten" + bottom: "loc4/permute" + top: "loc4/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage7_2/sum/prior_box" + type: "PriorBox" + bottom: "stage7_2/sum" + bottom: "data" + top: "stage7_2/sum/prior_box" + prior_box_param { + min_size: 200.0 + max_size: 300.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls5/conv" + type: "Convolution" + bottom: "stage8_2/sum" + top: "cls5/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls5/permute" + type: "Permute" + bottom: "cls5/conv" + top: "cls5/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls5/flatten" + type: "Flatten" + bottom: "cls5/permute" + top: "cls5/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc5/conv" + type: "Convolution" + bottom: "stage8_2/sum" + top: "loc5/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc5/permute" + type: "Permute" + bottom: "loc5/conv" + top: "loc5/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc5/flatten" + type: "Flatten" + bottom: "loc5/permute" + top: "loc5/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage8_2/sum/prior_box" + type: "PriorBox" + bottom: "stage8_2/sum" + bottom: "data" + top: "stage8_2/sum/prior_box" + prior_box_param { + min_size: 300.0 + max_size: 400.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "mbox_conf" + type: "Concat" + bottom: "cls1/flatten" + bottom: "cls2/flatten" + bottom: "cls3/flatten" + bottom: "cls4/flatten" + bottom: "cls5/flatten" + top: "mbox_conf" + concat_param { + axis: 1 + } +} +layer { + name: "mbox_loc" + type: "Concat" + bottom: "loc1/flatten" + bottom: "loc2/flatten" + bottom: "loc3/flatten" + bottom: "loc4/flatten" + bottom: "loc5/flatten" + top: "mbox_loc" + concat_param { + axis: 1 + } +} +layer { + name: "mbox_priorbox" + type: "Concat" + bottom: "stage4_8/sum/prior_box" + bottom: "stage5_4/sum/prior_box" + bottom: "stage6_2/sum/prior_box" + bottom: "stage7_2/sum/prior_box" + bottom: "stage8_2/sum/prior_box" + top: "mbox_priorbox" + concat_param { + axis: 2 + } +} +layer { + name: "mbox_conf_reshape" + type: "Reshape" + bottom: "mbox_conf" + top: "mbox_conf_reshape" + reshape_param { + shape { + dim: 0 + dim: -1 + dim: 2 + } + } +} +layer { + name: "mbox_conf_softmax" + type: "Softmax" + bottom: "mbox_conf_reshape" + top: "mbox_conf_softmax" + softmax_param { + axis: 2 + } +} +layer { + name: "mbox_conf_flatten" + type: "Flatten" + bottom: "mbox_conf_softmax" + top: "mbox_conf_flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "detection_output" + type: "DetectionOutput" + bottom: "mbox_loc" + bottom: "mbox_conf_flatten" + bottom: "mbox_priorbox" + top: "detection_output" + detection_output_param { + num_classes: 2 + share_location: true + background_label_id: 0 + nms_param { + nms_threshold: 0.44999998807907104 + top_k: 100 + } + code_type: CENTER_SIZE + keep_top_k: 100 + confidence_threshold: 0.20000000298023224 + } +} diff --git a/sr.caffemodel b/sr.caffemodel new file mode 100644 index 0000000..168b54d Binary files /dev/null and b/sr.caffemodel differ diff --git a/sr.prototxt b/sr.prototxt new file mode 100644 index 0000000..e85caa1 --- /dev/null +++ b/sr.prototxt @@ -0,0 +1,403 @@ +layer { + name: "data" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 1 + dim: 224 + dim: 224 + } + } +} +layer { + name: "conv0" + type: "Convolution" + bottom: "data" + top: "conv0" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 1 + kernel_size: 3 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv0/lrelu" + type: "ReLU" + bottom: "conv0" + top: "conv0" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/reduce" + type: "Convolution" + bottom: "conv0" + top: "db1/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/reduce/lrelu" + type: "ReLU" + bottom: "db1/reduce" + top: "db1/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/3x3" + type: "Convolution" + bottom: "db1/reduce" + top: "db1/3x3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 1 + kernel_size: 3 + group: 8 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/3x3/lrelu" + type: "ReLU" + bottom: "db1/3x3" + top: "db1/3x3" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/1x1" + type: "Convolution" + bottom: "db1/3x3" + top: "db1/1x1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/1x1/lrelu" + type: "ReLU" + bottom: "db1/1x1" + top: "db1/1x1" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/concat" + type: "Concat" + bottom: "conv0" + bottom: "db1/1x1" + top: "db1/concat" + concat_param { + axis: 1 + } +} +layer { + name: "db2/reduce" + type: "Convolution" + bottom: "db1/concat" + top: "db2/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/reduce/lrelu" + type: "ReLU" + bottom: "db2/reduce" + top: "db2/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/3x3" + type: "Convolution" + bottom: "db2/reduce" + top: "db2/3x3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 1 + kernel_size: 3 + group: 8 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/3x3/lrelu" + type: "ReLU" + bottom: "db2/3x3" + top: "db2/3x3" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/1x1" + type: "Convolution" + bottom: "db2/3x3" + top: "db2/1x1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/1x1/lrelu" + type: "ReLU" + bottom: "db2/1x1" + top: "db2/1x1" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/concat" + type: "Concat" + bottom: "db1/concat" + bottom: "db2/1x1" + top: "db2/concat" + concat_param { + axis: 1 + } +} +layer { + name: "upsample/reduce" + type: "Convolution" + bottom: "db2/concat" + top: "upsample/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "upsample/reduce/lrelu" + type: "ReLU" + bottom: "upsample/reduce" + top: "upsample/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "upsample/deconv" + type: "Deconvolution" + bottom: "upsample/reduce" + top: "upsample/deconv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 1 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + } +} +layer { + name: "upsample/lrelu" + type: "ReLU" + bottom: "upsample/deconv" + top: "upsample/deconv" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "upsample/rec" + type: "Convolution" + bottom: "upsample/deconv" + top: "upsample/rec" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 1 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "nearest" + type: "Deconvolution" + bottom: "data" + top: "nearest" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 1 + bias_term: false + pad: 0 + kernel_size: 2 + group: 1 + stride: 2 + weight_filler { + type: "constant" + value: 1.0 + } + } +} +layer { + name: "Crop1" + type: "Crop" + bottom: "nearest" + bottom: "upsample/rec" + top: "Crop1" +} +layer { + name: "fc" + type: "Eltwise" + bottom: "Crop1" + bottom: "upsample/rec" + top: "fc" + eltwise_param { + operation: SUM + } +}