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: +0x0 supports classification of NSFW content via +`a machine learning model `_. +This works for images and video files and requires the following +Python modules: -* Caffe Python module (built for Python 3) -* `PyAV `_ +* torch +* transformers +* pillow +* `av `_ 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 Binary files a/nsfw_model/resnet_50_1by2_nsfw.caffemodel and /dev/null 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