summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.rst15
-rwxr-xr-xfhost.py2
-rw-r--r--instance/config.example.py2
-rwxr-xr-xnsfw_detect.py67
-rw-r--r--nsfw_model/LICENSE.md11
-rw-r--r--nsfw_model/deploy.prototxt3488
-rw-r--r--nsfw_model/resnet_50_1by2_nsfw.caffemodelbin23815355 -> 0 bytes
-rw-r--r--requirements.txt4
8 files changed, 22 insertions, 3567 deletions
diff --git a/README.rst b/README.rst
index ba8748a..70c88be 100644
--- a/README.rst
+++ b/README.rst
@@ -95,12 +95,15 @@ Optional:
NSFW Detection
--------------
-0x0 supports classification of NSFW content via Yahoo’s open_nsfw Caffe
-neural network model. This works for images and video files and requires
-the following:
-
-* Caffe Python module (built for Python 3)
-* `PyAV <https://github.com/PyAV-Org/PyAV>`_
+0x0 supports classification of NSFW content via
+`a machine learning model <https://huggingface.co/giacomoarienti/nsfw-classifier>`_.
+This works for images and video files and requires the following
+Python modules:
+
+* torch
+* transformers
+* pillow
+* `av <https://github.com/PyAV-Org/PyAV>`_
Virus Scanning
diff --git a/fhost.py b/fhost.py
index 8201954..00c5f8b 100755
--- a/fhost.py
+++ b/fhost.py
@@ -70,7 +70,7 @@ app.config.update(
],
FHOST_UPLOAD_BLACKLIST = None,
NSFW_DETECT = False,
- NSFW_THRESHOLD = 0.608,
+ NSFW_THRESHOLD = 0.92,
VSCAN_SOCKET = None,
VSCAN_QUARANTINE_PATH = "quarantine",
VSCAN_IGNORE = [
diff --git a/instance/config.example.py b/instance/config.example.py
index 9740ca2..7acfe3b 100644
--- a/instance/config.example.py
+++ b/instance/config.example.py
@@ -176,7 +176,7 @@ NSFW_DETECT = False
# are marked as NSFW.
#
# If NSFW_DETECT is set to False, then this has no effect.
-NSFW_THRESHOLD = 0.608
+NSFW_THRESHOLD = 0.92
# If you want to scan files for viruses using ClamAV, specify the socket used
diff --git a/nsfw_detect.py b/nsfw_detect.py
index 032f7e4..9c8b117 100755
--- a/nsfw_detect.py
+++ b/nsfw_detect.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""
- Copyright © 2020 Mia Herkt
+ Copyright © 2024 Mia Herkt
Licensed under the EUPL, Version 1.2 or - as soon as approved
by the European Commission - subsequent versions of the EUPL
(the "License");
@@ -18,57 +18,16 @@
and limitations under the License.
"""
-import numpy as np
import os
import sys
-from io import BytesIO
from pathlib import Path
-os.environ["GLOG_minloglevel"] = "2" # seriously :|
-import caffe
import av
-av.logging.set_level(av.logging.PANIC)
+from transformers import pipeline
class NSFWDetector:
def __init__(self):
- npath = Path(__file__).parent / "nsfw_model"
- self.nsfw_net = caffe.Net(
- str(npath / "deploy.prototxt"),
- caffe.TEST,
- weights = str(npath / "resnet_50_1by2_nsfw.caffemodel")
- )
- self.caffe_transformer = caffe.io.Transformer({
- 'data': self.nsfw_net.blobs['data'].data.shape
- })
- # move image channels to outermost
- self.caffe_transformer.set_transpose('data', (2, 0, 1))
- # subtract the dataset-mean value in each channel
- self.caffe_transformer.set_mean('data', np.array([104, 117, 123]))
- # rescale from [0, 1] to [0, 255]
- self.caffe_transformer.set_raw_scale('data', 255)
- # swap channels from RGB to BGR
- self.caffe_transformer.set_channel_swap('data', (2, 1, 0))
-
- def _compute(self, img):
- image = caffe.io.load_image(img)
-
- H, W, _ = image.shape
- _, _, h, w = self.nsfw_net.blobs["data"].data.shape
- h_off = int(max((H - h) / 2, 0))
- w_off = int(max((W - w) / 2, 0))
- crop = image[h_off:h_off + h, w_off:w_off + w, :]
-
- transformed_image = self.caffe_transformer.preprocess('data', crop)
- transformed_image.shape = (1,) + transformed_image.shape
-
- input_name = self.nsfw_net.inputs[0]
- output_layers = ["prob"]
- all_outputs = self.nsfw_net.forward_all(
- blobs=output_layers, **{input_name: transformed_image})
-
- outputs = all_outputs[output_layers[0]][0].astype(float)
-
- return outputs
+ self.classifier = pipeline("image-classification", model="giacomoarienti/nsfw-classifier")
def detect(self, fpath):
try:
@@ -77,23 +36,13 @@ class NSFWDetector:
except: container.seek(0)
frame = next(container.decode(video=0))
+ img = frame.to_image()
+ res = self.classifier(img)
- if frame.width >= frame.height:
- w = 256
- h = int(frame.height * (256 / frame.width))
- else:
- w = int(frame.width * (256 / frame.height))
- h = 256
- frame = frame.reformat(width=w, height=h, format="rgb24")
- img = BytesIO()
- frame.to_image().save(img, format="ppm")
-
- scores = self._compute(img)
- except:
- return -1.0
-
- return scores[1]
+ return max([x["score"] for x in res if x["label"] not in ["neutral", "drawings"]])
+ except: pass
+ return -1.0
if __name__ == "__main__":
n = NSFWDetector()
diff --git a/nsfw_model/LICENSE.md b/nsfw_model/LICENSE.md
deleted file mode 100644
index d1124b0..0000000
--- a/nsfw_model/LICENSE.md
+++ /dev/null
@@ -1,11 +0,0 @@
-
-Copyright 2016, Yahoo Inc.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/nsfw_model/deploy.prototxt b/nsfw_model/deploy.prototxt
deleted file mode 100644
index 16fb53e..0000000
--- a/nsfw_model/deploy.prototxt
+++ /dev/null
@@ -1,3488 +0,0 @@
-name: "ResNet_50_1by2_nsfw"
-layer {
- name: "data"
- type: "Input"
- top: "data"
- input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } }
-}
-layer {
- name: "conv_1"
- type: "Convolution"
- bottom: "data"
- top: "conv_1"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 3
- kernel_size: 7
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_1"
- type: "BatchNorm"
- bottom: "conv_1"
- top: "conv_1"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_1"
- type: "Scale"
- bottom: "conv_1"
- top: "conv_1"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_1"
- type: "ReLU"
- bottom: "conv_1"
- top: "conv_1"
-}
-layer {
- name: "pool1"
- type: "Pooling"
- bottom: "conv_1"
- top: "pool1"
- pooling_param {
- pool: MAX
- kernel_size: 3
- stride: 2
- }
-}
-layer {
- name: "conv_stage0_block0_proj_shortcut"
- type: "Convolution"
- bottom: "pool1"
- top: "conv_stage0_block0_proj_shortcut"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block0_proj_shortcut"
- type: "BatchNorm"
- bottom: "conv_stage0_block0_proj_shortcut"
- top: "conv_stage0_block0_proj_shortcut"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block0_proj_shortcut"
- type: "Scale"
- bottom: "conv_stage0_block0_proj_shortcut"
- top: "conv_stage0_block0_proj_shortcut"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "conv_stage0_block0_branch2a"
- type: "Convolution"
- bottom: "pool1"
- top: "conv_stage0_block0_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 32
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block0_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage0_block0_branch2a"
- top: "conv_stage0_block0_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block0_branch2a"
- type: "Scale"
- bottom: "conv_stage0_block0_branch2a"
- top: "conv_stage0_block0_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage0_block0_branch2a"
- type: "ReLU"
- bottom: "conv_stage0_block0_branch2a"
- top: "conv_stage0_block0_branch2a"
-}
-layer {
- name: "conv_stage0_block0_branch2b"
- type: "Convolution"
- bottom: "conv_stage0_block0_branch2a"
- top: "conv_stage0_block0_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 32
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block0_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage0_block0_branch2b"
- top: "conv_stage0_block0_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block0_branch2b"
- type: "Scale"
- bottom: "conv_stage0_block0_branch2b"
- top: "conv_stage0_block0_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage0_block0_branch2b"
- type: "ReLU"
- bottom: "conv_stage0_block0_branch2b"
- top: "conv_stage0_block0_branch2b"
-}
-layer {
- name: "conv_stage0_block0_branch2c"
- type: "Convolution"
- bottom: "conv_stage0_block0_branch2b"
- top: "conv_stage0_block0_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block0_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage0_block0_branch2c"
- top: "conv_stage0_block0_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block0_branch2c"
- type: "Scale"
- bottom: "conv_stage0_block0_branch2c"
- top: "conv_stage0_block0_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage0_block0"
- type: "Eltwise"
- bottom: "conv_stage0_block0_proj_shortcut"
- bottom: "conv_stage0_block0_branch2c"
- top: "eltwise_stage0_block0"
-}
-layer {
- name: "relu_stage0_block0"
- type: "ReLU"
- bottom: "eltwise_stage0_block0"
- top: "eltwise_stage0_block0"
-}
-layer {
- name: "conv_stage0_block1_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage0_block0"
- top: "conv_stage0_block1_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 32
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block1_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage0_block1_branch2a"
- top: "conv_stage0_block1_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block1_branch2a"
- type: "Scale"
- bottom: "conv_stage0_block1_branch2a"
- top: "conv_stage0_block1_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage0_block1_branch2a"
- type: "ReLU"
- bottom: "conv_stage0_block1_branch2a"
- top: "conv_stage0_block1_branch2a"
-}
-layer {
- name: "conv_stage0_block1_branch2b"
- type: "Convolution"
- bottom: "conv_stage0_block1_branch2a"
- top: "conv_stage0_block1_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 32
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block1_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage0_block1_branch2b"
- top: "conv_stage0_block1_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block1_branch2b"
- type: "Scale"
- bottom: "conv_stage0_block1_branch2b"
- top: "conv_stage0_block1_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage0_block1_branch2b"
- type: "ReLU"
- bottom: "conv_stage0_block1_branch2b"
- top: "conv_stage0_block1_branch2b"
-}
-layer {
- name: "conv_stage0_block1_branch2c"
- type: "Convolution"
- bottom: "conv_stage0_block1_branch2b"
- top: "conv_stage0_block1_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block1_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage0_block1_branch2c"
- top: "conv_stage0_block1_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block1_branch2c"
- type: "Scale"
- bottom: "conv_stage0_block1_branch2c"
- top: "conv_stage0_block1_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage0_block1"
- type: "Eltwise"
- bottom: "eltwise_stage0_block0"
- bottom: "conv_stage0_block1_branch2c"
- top: "eltwise_stage0_block1"
-}
-layer {
- name: "relu_stage0_block1"
- type: "ReLU"
- bottom: "eltwise_stage0_block1"
- top: "eltwise_stage0_block1"
-}
-layer {
- name: "conv_stage0_block2_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage0_block1"
- top: "conv_stage0_block2_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 32
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block2_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage0_block2_branch2a"
- top: "conv_stage0_block2_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block2_branch2a"
- type: "Scale"
- bottom: "conv_stage0_block2_branch2a"
- top: "conv_stage0_block2_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage0_block2_branch2a"
- type: "ReLU"
- bottom: "conv_stage0_block2_branch2a"
- top: "conv_stage0_block2_branch2a"
-}
-layer {
- name: "conv_stage0_block2_branch2b"
- type: "Convolution"
- bottom: "conv_stage0_block2_branch2a"
- top: "conv_stage0_block2_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 32
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block2_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage0_block2_branch2b"
- top: "conv_stage0_block2_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block2_branch2b"
- type: "Scale"
- bottom: "conv_stage0_block2_branch2b"
- top: "conv_stage0_block2_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage0_block2_branch2b"
- type: "ReLU"
- bottom: "conv_stage0_block2_branch2b"
- top: "conv_stage0_block2_branch2b"
-}
-layer {
- name: "conv_stage0_block2_branch2c"
- type: "Convolution"
- bottom: "conv_stage0_block2_branch2b"
- top: "conv_stage0_block2_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage0_block2_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage0_block2_branch2c"
- top: "conv_stage0_block2_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage0_block2_branch2c"
- type: "Scale"
- bottom: "conv_stage0_block2_branch2c"
- top: "conv_stage0_block2_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage0_block2"
- type: "Eltwise"
- bottom: "eltwise_stage0_block1"
- bottom: "conv_stage0_block2_branch2c"
- top: "eltwise_stage0_block2"
-}
-layer {
- name: "relu_stage0_block2"
- type: "ReLU"
- bottom: "eltwise_stage0_block2"
- top: "eltwise_stage0_block2"
-}
-layer {
- name: "conv_stage1_block0_proj_shortcut"
- type: "Convolution"
- bottom: "eltwise_stage0_block2"
- top: "conv_stage1_block0_proj_shortcut"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block0_proj_shortcut"
- type: "BatchNorm"
- bottom: "conv_stage1_block0_proj_shortcut"
- top: "conv_stage1_block0_proj_shortcut"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block0_proj_shortcut"
- type: "Scale"
- bottom: "conv_stage1_block0_proj_shortcut"
- top: "conv_stage1_block0_proj_shortcut"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "conv_stage1_block0_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage0_block2"
- top: "conv_stage1_block0_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 0
- kernel_size: 1
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block0_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage1_block0_branch2a"
- top: "conv_stage1_block0_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block0_branch2a"
- type: "Scale"
- bottom: "conv_stage1_block0_branch2a"
- top: "conv_stage1_block0_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block0_branch2a"
- type: "ReLU"
- bottom: "conv_stage1_block0_branch2a"
- top: "conv_stage1_block0_branch2a"
-}
-layer {
- name: "conv_stage1_block0_branch2b"
- type: "Convolution"
- bottom: "conv_stage1_block0_branch2a"
- top: "conv_stage1_block0_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block0_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage1_block0_branch2b"
- top: "conv_stage1_block0_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block0_branch2b"
- type: "Scale"
- bottom: "conv_stage1_block0_branch2b"
- top: "conv_stage1_block0_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block0_branch2b"
- type: "ReLU"
- bottom: "conv_stage1_block0_branch2b"
- top: "conv_stage1_block0_branch2b"
-}
-layer {
- name: "conv_stage1_block0_branch2c"
- type: "Convolution"
- bottom: "conv_stage1_block0_branch2b"
- top: "conv_stage1_block0_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block0_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage1_block0_branch2c"
- top: "conv_stage1_block0_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block0_branch2c"
- type: "Scale"
- bottom: "conv_stage1_block0_branch2c"
- top: "conv_stage1_block0_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage1_block0"
- type: "Eltwise"
- bottom: "conv_stage1_block0_proj_shortcut"
- bottom: "conv_stage1_block0_branch2c"
- top: "eltwise_stage1_block0"
-}
-layer {
- name: "relu_stage1_block0"
- type: "ReLU"
- bottom: "eltwise_stage1_block0"
- top: "eltwise_stage1_block0"
-}
-layer {
- name: "conv_stage1_block1_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage1_block0"
- top: "conv_stage1_block1_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block1_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage1_block1_branch2a"
- top: "conv_stage1_block1_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block1_branch2a"
- type: "Scale"
- bottom: "conv_stage1_block1_branch2a"
- top: "conv_stage1_block1_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block1_branch2a"
- type: "ReLU"
- bottom: "conv_stage1_block1_branch2a"
- top: "conv_stage1_block1_branch2a"
-}
-layer {
- name: "conv_stage1_block1_branch2b"
- type: "Convolution"
- bottom: "conv_stage1_block1_branch2a"
- top: "conv_stage1_block1_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block1_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage1_block1_branch2b"
- top: "conv_stage1_block1_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block1_branch2b"
- type: "Scale"
- bottom: "conv_stage1_block1_branch2b"
- top: "conv_stage1_block1_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block1_branch2b"
- type: "ReLU"
- bottom: "conv_stage1_block1_branch2b"
- top: "conv_stage1_block1_branch2b"
-}
-layer {
- name: "conv_stage1_block1_branch2c"
- type: "Convolution"
- bottom: "conv_stage1_block1_branch2b"
- top: "conv_stage1_block1_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block1_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage1_block1_branch2c"
- top: "conv_stage1_block1_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block1_branch2c"
- type: "Scale"
- bottom: "conv_stage1_block1_branch2c"
- top: "conv_stage1_block1_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage1_block1"
- type: "Eltwise"
- bottom: "eltwise_stage1_block0"
- bottom: "conv_stage1_block1_branch2c"
- top: "eltwise_stage1_block1"
-}
-layer {
- name: "relu_stage1_block1"
- type: "ReLU"
- bottom: "eltwise_stage1_block1"
- top: "eltwise_stage1_block1"
-}
-layer {
- name: "conv_stage1_block2_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage1_block1"
- top: "conv_stage1_block2_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block2_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage1_block2_branch2a"
- top: "conv_stage1_block2_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block2_branch2a"
- type: "Scale"
- bottom: "conv_stage1_block2_branch2a"
- top: "conv_stage1_block2_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block2_branch2a"
- type: "ReLU"
- bottom: "conv_stage1_block2_branch2a"
- top: "conv_stage1_block2_branch2a"
-}
-layer {
- name: "conv_stage1_block2_branch2b"
- type: "Convolution"
- bottom: "conv_stage1_block2_branch2a"
- top: "conv_stage1_block2_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block2_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage1_block2_branch2b"
- top: "conv_stage1_block2_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block2_branch2b"
- type: "Scale"
- bottom: "conv_stage1_block2_branch2b"
- top: "conv_stage1_block2_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block2_branch2b"
- type: "ReLU"
- bottom: "conv_stage1_block2_branch2b"
- top: "conv_stage1_block2_branch2b"
-}
-layer {
- name: "conv_stage1_block2_branch2c"
- type: "Convolution"
- bottom: "conv_stage1_block2_branch2b"
- top: "conv_stage1_block2_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block2_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage1_block2_branch2c"
- top: "conv_stage1_block2_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block2_branch2c"
- type: "Scale"
- bottom: "conv_stage1_block2_branch2c"
- top: "conv_stage1_block2_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage1_block2"
- type: "Eltwise"
- bottom: "eltwise_stage1_block1"
- bottom: "conv_stage1_block2_branch2c"
- top: "eltwise_stage1_block2"
-}
-layer {
- name: "relu_stage1_block2"
- type: "ReLU"
- bottom: "eltwise_stage1_block2"
- top: "eltwise_stage1_block2"
-}
-layer {
- name: "conv_stage1_block3_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage1_block2"
- top: "conv_stage1_block3_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block3_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage1_block3_branch2a"
- top: "conv_stage1_block3_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block3_branch2a"
- type: "Scale"
- bottom: "conv_stage1_block3_branch2a"
- top: "conv_stage1_block3_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block3_branch2a"
- type: "ReLU"
- bottom: "conv_stage1_block3_branch2a"
- top: "conv_stage1_block3_branch2a"
-}
-layer {
- name: "conv_stage1_block3_branch2b"
- type: "Convolution"
- bottom: "conv_stage1_block3_branch2a"
- top: "conv_stage1_block3_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block3_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage1_block3_branch2b"
- top: "conv_stage1_block3_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block3_branch2b"
- type: "Scale"
- bottom: "conv_stage1_block3_branch2b"
- top: "conv_stage1_block3_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage1_block3_branch2b"
- type: "ReLU"
- bottom: "conv_stage1_block3_branch2b"
- top: "conv_stage1_block3_branch2b"
-}
-layer {
- name: "conv_stage1_block3_branch2c"
- type: "Convolution"
- bottom: "conv_stage1_block3_branch2b"
- top: "conv_stage1_block3_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage1_block3_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage1_block3_branch2c"
- top: "conv_stage1_block3_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage1_block3_branch2c"
- type: "Scale"
- bottom: "conv_stage1_block3_branch2c"
- top: "conv_stage1_block3_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage1_block3"
- type: "Eltwise"
- bottom: "eltwise_stage1_block2"
- bottom: "conv_stage1_block3_branch2c"
- top: "eltwise_stage1_block3"
-}
-layer {
- name: "relu_stage1_block3"
- type: "ReLU"
- bottom: "eltwise_stage1_block3"
- top: "eltwise_stage1_block3"
-}
-layer {
- name: "conv_stage2_block0_proj_shortcut"
- type: "Convolution"
- bottom: "eltwise_stage1_block3"
- top: "conv_stage2_block0_proj_shortcut"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block0_proj_shortcut"
- type: "BatchNorm"
- bottom: "conv_stage2_block0_proj_shortcut"
- top: "conv_stage2_block0_proj_shortcut"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block0_proj_shortcut"
- type: "Scale"
- bottom: "conv_stage2_block0_proj_shortcut"
- top: "conv_stage2_block0_proj_shortcut"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "conv_stage2_block0_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage1_block3"
- top: "conv_stage2_block0_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block0_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage2_block0_branch2a"
- top: "conv_stage2_block0_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block0_branch2a"
- type: "Scale"
- bottom: "conv_stage2_block0_branch2a"
- top: "conv_stage2_block0_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block0_branch2a"
- type: "ReLU"
- bottom: "conv_stage2_block0_branch2a"
- top: "conv_stage2_block0_branch2a"
-}
-layer {
- name: "conv_stage2_block0_branch2b"
- type: "Convolution"
- bottom: "conv_stage2_block0_branch2a"
- top: "conv_stage2_block0_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block0_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage2_block0_branch2b"
- top: "conv_stage2_block0_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block0_branch2b"
- type: "Scale"
- bottom: "conv_stage2_block0_branch2b"
- top: "conv_stage2_block0_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block0_branch2b"
- type: "ReLU"
- bottom: "conv_stage2_block0_branch2b"
- top: "conv_stage2_block0_branch2b"
-}
-layer {
- name: "conv_stage2_block0_branch2c"
- type: "Convolution"
- bottom: "conv_stage2_block0_branch2b"
- top: "conv_stage2_block0_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block0_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage2_block0_branch2c"
- top: "conv_stage2_block0_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block0_branch2c"
- type: "Scale"
- bottom: "conv_stage2_block0_branch2c"
- top: "conv_stage2_block0_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage2_block0"
- type: "Eltwise"
- bottom: "conv_stage2_block0_proj_shortcut"
- bottom: "conv_stage2_block0_branch2c"
- top: "eltwise_stage2_block0"
-}
-layer {
- name: "relu_stage2_block0"
- type: "ReLU"
- bottom: "eltwise_stage2_block0"
- top: "eltwise_stage2_block0"
-}
-layer {
- name: "conv_stage2_block1_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage2_block0"
- top: "conv_stage2_block1_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block1_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage2_block1_branch2a"
- top: "conv_stage2_block1_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block1_branch2a"
- type: "Scale"
- bottom: "conv_stage2_block1_branch2a"
- top: "conv_stage2_block1_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block1_branch2a"
- type: "ReLU"
- bottom: "conv_stage2_block1_branch2a"
- top: "conv_stage2_block1_branch2a"
-}
-layer {
- name: "conv_stage2_block1_branch2b"
- type: "Convolution"
- bottom: "conv_stage2_block1_branch2a"
- top: "conv_stage2_block1_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block1_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage2_block1_branch2b"
- top: "conv_stage2_block1_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block1_branch2b"
- type: "Scale"
- bottom: "conv_stage2_block1_branch2b"
- top: "conv_stage2_block1_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block1_branch2b"
- type: "ReLU"
- bottom: "conv_stage2_block1_branch2b"
- top: "conv_stage2_block1_branch2b"
-}
-layer {
- name: "conv_stage2_block1_branch2c"
- type: "Convolution"
- bottom: "conv_stage2_block1_branch2b"
- top: "conv_stage2_block1_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block1_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage2_block1_branch2c"
- top: "conv_stage2_block1_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block1_branch2c"
- type: "Scale"
- bottom: "conv_stage2_block1_branch2c"
- top: "conv_stage2_block1_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage2_block1"
- type: "Eltwise"
- bottom: "eltwise_stage2_block0"
- bottom: "conv_stage2_block1_branch2c"
- top: "eltwise_stage2_block1"
-}
-layer {
- name: "relu_stage2_block1"
- type: "ReLU"
- bottom: "eltwise_stage2_block1"
- top: "eltwise_stage2_block1"
-}
-layer {
- name: "conv_stage2_block2_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage2_block1"
- top: "conv_stage2_block2_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block2_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage2_block2_branch2a"
- top: "conv_stage2_block2_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block2_branch2a"
- type: "Scale"
- bottom: "conv_stage2_block2_branch2a"
- top: "conv_stage2_block2_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block2_branch2a"
- type: "ReLU"
- bottom: "conv_stage2_block2_branch2a"
- top: "conv_stage2_block2_branch2a"
-}
-layer {
- name: "conv_stage2_block2_branch2b"
- type: "Convolution"
- bottom: "conv_stage2_block2_branch2a"
- top: "conv_stage2_block2_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block2_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage2_block2_branch2b"
- top: "conv_stage2_block2_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block2_branch2b"
- type: "Scale"
- bottom: "conv_stage2_block2_branch2b"
- top: "conv_stage2_block2_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block2_branch2b"
- type: "ReLU"
- bottom: "conv_stage2_block2_branch2b"
- top: "conv_stage2_block2_branch2b"
-}
-layer {
- name: "conv_stage2_block2_branch2c"
- type: "Convolution"
- bottom: "conv_stage2_block2_branch2b"
- top: "conv_stage2_block2_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block2_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage2_block2_branch2c"
- top: "conv_stage2_block2_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block2_branch2c"
- type: "Scale"
- bottom: "conv_stage2_block2_branch2c"
- top: "conv_stage2_block2_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage2_block2"
- type: "Eltwise"
- bottom: "eltwise_stage2_block1"
- bottom: "conv_stage2_block2_branch2c"
- top: "eltwise_stage2_block2"
-}
-layer {
- name: "relu_stage2_block2"
- type: "ReLU"
- bottom: "eltwise_stage2_block2"
- top: "eltwise_stage2_block2"
-}
-layer {
- name: "conv_stage2_block3_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage2_block2"
- top: "conv_stage2_block3_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block3_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage2_block3_branch2a"
- top: "conv_stage2_block3_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block3_branch2a"
- type: "Scale"
- bottom: "conv_stage2_block3_branch2a"
- top: "conv_stage2_block3_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block3_branch2a"
- type: "ReLU"
- bottom: "conv_stage2_block3_branch2a"
- top: "conv_stage2_block3_branch2a"
-}
-layer {
- name: "conv_stage2_block3_branch2b"
- type: "Convolution"
- bottom: "conv_stage2_block3_branch2a"
- top: "conv_stage2_block3_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block3_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage2_block3_branch2b"
- top: "conv_stage2_block3_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block3_branch2b"
- type: "Scale"
- bottom: "conv_stage2_block3_branch2b"
- top: "conv_stage2_block3_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block3_branch2b"
- type: "ReLU"
- bottom: "conv_stage2_block3_branch2b"
- top: "conv_stage2_block3_branch2b"
-}
-layer {
- name: "conv_stage2_block3_branch2c"
- type: "Convolution"
- bottom: "conv_stage2_block3_branch2b"
- top: "conv_stage2_block3_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block3_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage2_block3_branch2c"
- top: "conv_stage2_block3_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block3_branch2c"
- type: "Scale"
- bottom: "conv_stage2_block3_branch2c"
- top: "conv_stage2_block3_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage2_block3"
- type: "Eltwise"
- bottom: "eltwise_stage2_block2"
- bottom: "conv_stage2_block3_branch2c"
- top: "eltwise_stage2_block3"
-}
-layer {
- name: "relu_stage2_block3"
- type: "ReLU"
- bottom: "eltwise_stage2_block3"
- top: "eltwise_stage2_block3"
-}
-layer {
- name: "conv_stage2_block4_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage2_block3"
- top: "conv_stage2_block4_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block4_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage2_block4_branch2a"
- top: "conv_stage2_block4_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block4_branch2a"
- type: "Scale"
- bottom: "conv_stage2_block4_branch2a"
- top: "conv_stage2_block4_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block4_branch2a"
- type: "ReLU"
- bottom: "conv_stage2_block4_branch2a"
- top: "conv_stage2_block4_branch2a"
-}
-layer {
- name: "conv_stage2_block4_branch2b"
- type: "Convolution"
- bottom: "conv_stage2_block4_branch2a"
- top: "conv_stage2_block4_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block4_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage2_block4_branch2b"
- top: "conv_stage2_block4_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block4_branch2b"
- type: "Scale"
- bottom: "conv_stage2_block4_branch2b"
- top: "conv_stage2_block4_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block4_branch2b"
- type: "ReLU"
- bottom: "conv_stage2_block4_branch2b"
- top: "conv_stage2_block4_branch2b"
-}
-layer {
- name: "conv_stage2_block4_branch2c"
- type: "Convolution"
- bottom: "conv_stage2_block4_branch2b"
- top: "conv_stage2_block4_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block4_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage2_block4_branch2c"
- top: "conv_stage2_block4_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block4_branch2c"
- type: "Scale"
- bottom: "conv_stage2_block4_branch2c"
- top: "conv_stage2_block4_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage2_block4"
- type: "Eltwise"
- bottom: "eltwise_stage2_block3"
- bottom: "conv_stage2_block4_branch2c"
- top: "eltwise_stage2_block4"
-}
-layer {
- name: "relu_stage2_block4"
- type: "ReLU"
- bottom: "eltwise_stage2_block4"
- top: "eltwise_stage2_block4"
-}
-layer {
- name: "conv_stage2_block5_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage2_block4"
- top: "conv_stage2_block5_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block5_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage2_block5_branch2a"
- top: "conv_stage2_block5_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block5_branch2a"
- type: "Scale"
- bottom: "conv_stage2_block5_branch2a"
- top: "conv_stage2_block5_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block5_branch2a"
- type: "ReLU"
- bottom: "conv_stage2_block5_branch2a"
- top: "conv_stage2_block5_branch2a"
-}
-layer {
- name: "conv_stage2_block5_branch2b"
- type: "Convolution"
- bottom: "conv_stage2_block5_branch2a"
- top: "conv_stage2_block5_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block5_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage2_block5_branch2b"
- top: "conv_stage2_block5_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block5_branch2b"
- type: "Scale"
- bottom: "conv_stage2_block5_branch2b"
- top: "conv_stage2_block5_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage2_block5_branch2b"
- type: "ReLU"
- bottom: "conv_stage2_block5_branch2b"
- top: "conv_stage2_block5_branch2b"
-}
-layer {
- name: "conv_stage2_block5_branch2c"
- type: "Convolution"
- bottom: "conv_stage2_block5_branch2b"
- top: "conv_stage2_block5_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 512
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage2_block5_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage2_block5_branch2c"
- top: "conv_stage2_block5_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage2_block5_branch2c"
- type: "Scale"
- bottom: "conv_stage2_block5_branch2c"
- top: "conv_stage2_block5_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage2_block5"
- type: "Eltwise"
- bottom: "eltwise_stage2_block4"
- bottom: "conv_stage2_block5_branch2c"
- top: "eltwise_stage2_block5"
-}
-layer {
- name: "relu_stage2_block5"
- type: "ReLU"
- bottom: "eltwise_stage2_block5"
- top: "eltwise_stage2_block5"
-}
-layer {
- name: "conv_stage3_block0_proj_shortcut"
- type: "Convolution"
- bottom: "eltwise_stage2_block5"
- top: "conv_stage3_block0_proj_shortcut"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 1024
- pad: 0
- kernel_size: 1
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block0_proj_shortcut"
- type: "BatchNorm"
- bottom: "conv_stage3_block0_proj_shortcut"
- top: "conv_stage3_block0_proj_shortcut"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block0_proj_shortcut"
- type: "Scale"
- bottom: "conv_stage3_block0_proj_shortcut"
- top: "conv_stage3_block0_proj_shortcut"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "conv_stage3_block0_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage2_block5"
- top: "conv_stage3_block0_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 2
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block0_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage3_block0_branch2a"
- top: "conv_stage3_block0_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block0_branch2a"
- type: "Scale"
- bottom: "conv_stage3_block0_branch2a"
- top: "conv_stage3_block0_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage3_block0_branch2a"
- type: "ReLU"
- bottom: "conv_stage3_block0_branch2a"
- top: "conv_stage3_block0_branch2a"
-}
-layer {
- name: "conv_stage3_block0_branch2b"
- type: "Convolution"
- bottom: "conv_stage3_block0_branch2a"
- top: "conv_stage3_block0_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block0_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage3_block0_branch2b"
- top: "conv_stage3_block0_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block0_branch2b"
- type: "Scale"
- bottom: "conv_stage3_block0_branch2b"
- top: "conv_stage3_block0_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage3_block0_branch2b"
- type: "ReLU"
- bottom: "conv_stage3_block0_branch2b"
- top: "conv_stage3_block0_branch2b"
-}
-layer {
- name: "conv_stage3_block0_branch2c"
- type: "Convolution"
- bottom: "conv_stage3_block0_branch2b"
- top: "conv_stage3_block0_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 1024
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block0_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage3_block0_branch2c"
- top: "conv_stage3_block0_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block0_branch2c"
- type: "Scale"
- bottom: "conv_stage3_block0_branch2c"
- top: "conv_stage3_block0_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage3_block0"
- type: "Eltwise"
- bottom: "conv_stage3_block0_proj_shortcut"
- bottom: "conv_stage3_block0_branch2c"
- top: "eltwise_stage3_block0"
-}
-layer {
- name: "relu_stage3_block0"
- type: "ReLU"
- bottom: "eltwise_stage3_block0"
- top: "eltwise_stage3_block0"
-}
-layer {
- name: "conv_stage3_block1_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage3_block0"
- top: "conv_stage3_block1_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block1_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage3_block1_branch2a"
- top: "conv_stage3_block1_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block1_branch2a"
- type: "Scale"
- bottom: "conv_stage3_block1_branch2a"
- top: "conv_stage3_block1_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage3_block1_branch2a"
- type: "ReLU"
- bottom: "conv_stage3_block1_branch2a"
- top: "conv_stage3_block1_branch2a"
-}
-layer {
- name: "conv_stage3_block1_branch2b"
- type: "Convolution"
- bottom: "conv_stage3_block1_branch2a"
- top: "conv_stage3_block1_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block1_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage3_block1_branch2b"
- top: "conv_stage3_block1_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block1_branch2b"
- type: "Scale"
- bottom: "conv_stage3_block1_branch2b"
- top: "conv_stage3_block1_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage3_block1_branch2b"
- type: "ReLU"
- bottom: "conv_stage3_block1_branch2b"
- top: "conv_stage3_block1_branch2b"
-}
-layer {
- name: "conv_stage3_block1_branch2c"
- type: "Convolution"
- bottom: "conv_stage3_block1_branch2b"
- top: "conv_stage3_block1_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 1024
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block1_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage3_block1_branch2c"
- top: "conv_stage3_block1_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block1_branch2c"
- type: "Scale"
- bottom: "conv_stage3_block1_branch2c"
- top: "conv_stage3_block1_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage3_block1"
- type: "Eltwise"
- bottom: "eltwise_stage3_block0"
- bottom: "conv_stage3_block1_branch2c"
- top: "eltwise_stage3_block1"
-}
-layer {
- name: "relu_stage3_block1"
- type: "ReLU"
- bottom: "eltwise_stage3_block1"
- top: "eltwise_stage3_block1"
-}
-layer {
- name: "conv_stage3_block2_branch2a"
- type: "Convolution"
- bottom: "eltwise_stage3_block1"
- top: "conv_stage3_block2_branch2a"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block2_branch2a"
- type: "BatchNorm"
- bottom: "conv_stage3_block2_branch2a"
- top: "conv_stage3_block2_branch2a"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block2_branch2a"
- type: "Scale"
- bottom: "conv_stage3_block2_branch2a"
- top: "conv_stage3_block2_branch2a"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage3_block2_branch2a"
- type: "ReLU"
- bottom: "conv_stage3_block2_branch2a"
- top: "conv_stage3_block2_branch2a"
-}
-layer {
- name: "conv_stage3_block2_branch2b"
- type: "Convolution"
- bottom: "conv_stage3_block2_branch2a"
- top: "conv_stage3_block2_branch2b"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 1
- kernel_size: 3
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block2_branch2b"
- type: "BatchNorm"
- bottom: "conv_stage3_block2_branch2b"
- top: "conv_stage3_block2_branch2b"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block2_branch2b"
- type: "Scale"
- bottom: "conv_stage3_block2_branch2b"
- top: "conv_stage3_block2_branch2b"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "relu_stage3_block2_branch2b"
- type: "ReLU"
- bottom: "conv_stage3_block2_branch2b"
- top: "conv_stage3_block2_branch2b"
-}
-layer {
- name: "conv_stage3_block2_branch2c"
- type: "Convolution"
- bottom: "conv_stage3_block2_branch2b"
- top: "conv_stage3_block2_branch2c"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- convolution_param {
- num_output: 1024
- pad: 0
- kernel_size: 1
- stride: 1
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
-}
-layer {
- name: "bn_stage3_block2_branch2c"
- type: "BatchNorm"
- bottom: "conv_stage3_block2_branch2c"
- top: "conv_stage3_block2_branch2c"
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- param {
- lr_mult: 0
- decay_mult: 0
- }
- batch_norm_param {
- use_global_stats: true
- }
-}
-layer {
- name: "scale_stage3_block2_branch2c"
- type: "Scale"
- bottom: "conv_stage3_block2_branch2c"
- top: "conv_stage3_block2_branch2c"
- scale_param {
- bias_term: true
- }
-}
-layer {
- name: "eltwise_stage3_block2"
- type: "Eltwise"
- bottom: "eltwise_stage3_block1"
- bottom: "conv_stage3_block2_branch2c"
- top: "eltwise_stage3_block2"
-}
-layer {
- name: "relu_stage3_block2"
- type: "ReLU"
- bottom: "eltwise_stage3_block2"
- top: "eltwise_stage3_block2"
-}
-layer {
- name: "pool"
- type: "Pooling"
- bottom: "eltwise_stage3_block2"
- top: "pool"
- pooling_param {
- pool: AVE
- kernel_size: 7
- stride: 1
- }
-}
-layer {
- name: "fc_nsfw"
- type: "InnerProduct"
- bottom: "pool"
- top: "fc_nsfw"
- param {
- lr_mult: 5
- decay_mult: 1
- }
- param {
- lr_mult: 10
- decay_mult: 0
- }
- inner_product_param{
- num_output: 2
- weight_filler {
- type: "xavier"
- std: 0.01
- }
- bias_filler {
- type: "xavier"
- value: 0
- }
- }
-}
-layer {
- name: "prob"
- type: "Softmax"
- bottom: "fc_nsfw"
- top: "prob"
-}
-
diff --git a/nsfw_model/resnet_50_1by2_nsfw.caffemodel b/nsfw_model/resnet_50_1by2_nsfw.caffemodel
deleted file mode 100644
index c4f3105..0000000
--- a/nsfw_model/resnet_50_1by2_nsfw.caffemodel
+++ /dev/null
Binary files differ
diff --git a/requirements.txt b/requirements.txt
index b765697..5725839 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,7 +12,9 @@ python_magic
clamd
# nsfw detection
-numpy
+torch
+transformers
+pillow
# mod ui
av