[mirror of https://git.0x0.st/mia/0x0] No-bullshit file hosting and URL shortening service https://0x0.st

Replace NSFW detector implementation

+8 -5
README.rst
··· 95 95 NSFW Detection 96 96 -------------- 97 97 98 - 0x0 supports classification of NSFW content via Yahoo’s open_nsfw Caffe 99 - neural network model. This works for images and video files and requires 100 - the following: 98 + 0x0 supports classification of NSFW content via 99 + `a machine learning model <https://huggingface.co/giacomoarienti/nsfw-classifier>`_. 100 + This works for images and video files and requires the following 101 + Python modules: 101 102 102 - * Caffe Python module (built for Python 3) 103 - * `PyAV <https://github.com/PyAV-Org/PyAV>`_ 103 + * torch 104 + * transformers 105 + * pillow 106 + * `av <https://github.com/PyAV-Org/PyAV>`_ 104 107 105 108 106 109 Virus Scanning
+1 -1
fhost.py
··· 70 70 ], 71 71 FHOST_UPLOAD_BLACKLIST = None, 72 72 NSFW_DETECT = False, 73 - NSFW_THRESHOLD = 0.608, 73 + NSFW_THRESHOLD = 0.92, 74 74 VSCAN_SOCKET = None, 75 75 VSCAN_QUARANTINE_PATH = "quarantine", 76 76 VSCAN_IGNORE = [
+1 -1
instance/config.example.py
··· 176 176 # are marked as NSFW. 177 177 # 178 178 # If NSFW_DETECT is set to False, then this has no effect. 179 - NSFW_THRESHOLD = 0.608 179 + NSFW_THRESHOLD = 0.92 180 180 181 181 182 182 # If you want to scan files for viruses using ClamAV, specify the socket used
+8 -59
nsfw_detect.py
··· 1 1 #!/usr/bin/env python3 2 2 3 3 """ 4 - Copyright © 2020 Mia Herkt 4 + Copyright © 2024 Mia Herkt 5 5 Licensed under the EUPL, Version 1.2 or - as soon as approved 6 6 by the European Commission - subsequent versions of the EUPL 7 7 (the "License"); ··· 18 18 and limitations under the License. 19 19 """ 20 20 21 - import numpy as np 22 21 import os 23 22 import sys 24 - from io import BytesIO 25 23 from pathlib import Path 26 24 27 - os.environ["GLOG_minloglevel"] = "2" # seriously :| 28 - import caffe 29 25 import av 30 - av.logging.set_level(av.logging.PANIC) 26 + from transformers import pipeline 31 27 32 28 class NSFWDetector: 33 29 def __init__(self): 34 - npath = Path(__file__).parent / "nsfw_model" 35 - self.nsfw_net = caffe.Net( 36 - str(npath / "deploy.prototxt"), 37 - caffe.TEST, 38 - weights = str(npath / "resnet_50_1by2_nsfw.caffemodel") 39 - ) 40 - self.caffe_transformer = caffe.io.Transformer({ 41 - 'data': self.nsfw_net.blobs['data'].data.shape 42 - }) 43 - # move image channels to outermost 44 - self.caffe_transformer.set_transpose('data', (2, 0, 1)) 45 - # subtract the dataset-mean value in each channel 46 - self.caffe_transformer.set_mean('data', np.array([104, 117, 123])) 47 - # rescale from [0, 1] to [0, 255] 48 - self.caffe_transformer.set_raw_scale('data', 255) 49 - # swap channels from RGB to BGR 50 - self.caffe_transformer.set_channel_swap('data', (2, 1, 0)) 51 - 52 - def _compute(self, img): 53 - image = caffe.io.load_image(img) 54 - 55 - H, W, _ = image.shape 56 - _, _, h, w = self.nsfw_net.blobs["data"].data.shape 57 - h_off = int(max((H - h) / 2, 0)) 58 - w_off = int(max((W - w) / 2, 0)) 59 - crop = image[h_off:h_off + h, w_off:w_off + w, :] 60 - 61 - transformed_image = self.caffe_transformer.preprocess('data', crop) 62 - transformed_image.shape = (1,) + transformed_image.shape 63 - 64 - input_name = self.nsfw_net.inputs[0] 65 - output_layers = ["prob"] 66 - all_outputs = self.nsfw_net.forward_all( 67 - blobs=output_layers, **{input_name: transformed_image}) 68 - 69 - outputs = all_outputs[output_layers[0]][0].astype(float) 70 - 71 - return outputs 30 + self.classifier = pipeline("image-classification", model="giacomoarienti/nsfw-classifier") 72 31 73 32 def detect(self, fpath): 74 33 try: ··· 77 36 except: container.seek(0) 78 37 79 38 frame = next(container.decode(video=0)) 39 + img = frame.to_image() 40 + res = self.classifier(img) 80 41 81 - if frame.width >= frame.height: 82 - w = 256 83 - h = int(frame.height * (256 / frame.width)) 84 - else: 85 - w = int(frame.width * (256 / frame.height)) 86 - h = 256 87 - frame = frame.reformat(width=w, height=h, format="rgb24") 88 - img = BytesIO() 89 - frame.to_image().save(img, format="ppm") 42 + return max([x["score"] for x in res if x["label"] not in ["neutral", "drawings"]]) 43 + except: pass 90 44 91 - scores = self._compute(img) 92 - except: 93 - return -1.0 94 - 95 - return scores[1] 96 - 45 + return -1.0 97 46 98 47 if __name__ == "__main__": 99 48 n = NSFWDetector()
-11
nsfw_model/LICENSE.md
··· 1 - 2 - Copyright 2016, Yahoo Inc. 3 - 4 - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 - 6 - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 - 8 - 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. 9 - 10 - 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. 11 -
-3488
nsfw_model/deploy.prototxt
··· 1 - name: "ResNet_50_1by2_nsfw" 2 - layer { 3 - name: "data" 4 - type: "Input" 5 - top: "data" 6 - input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } } 7 - } 8 - layer { 9 - name: "conv_1" 10 - type: "Convolution" 11 - bottom: "data" 12 - top: "conv_1" 13 - param { 14 - lr_mult: 1 15 - decay_mult: 1 16 - } 17 - param { 18 - lr_mult: 2 19 - decay_mult: 0 20 - } 21 - convolution_param { 22 - num_output: 64 23 - pad: 3 24 - kernel_size: 7 25 - stride: 2 26 - weight_filler { 27 - type: "xavier" 28 - } 29 - bias_filler { 30 - type: "constant" 31 - value: 0 32 - } 33 - } 34 - } 35 - layer { 36 - name: "bn_1" 37 - type: "BatchNorm" 38 - bottom: "conv_1" 39 - top: "conv_1" 40 - param { 41 - lr_mult: 0 42 - decay_mult: 0 43 - } 44 - param { 45 - lr_mult: 0 46 - decay_mult: 0 47 - } 48 - param { 49 - lr_mult: 0 50 - decay_mult: 0 51 - } 52 - batch_norm_param { 53 - use_global_stats: true 54 - } 55 - } 56 - layer { 57 - name: "scale_1" 58 - type: "Scale" 59 - bottom: "conv_1" 60 - top: "conv_1" 61 - scale_param { 62 - bias_term: true 63 - } 64 - } 65 - layer { 66 - name: "relu_1" 67 - type: "ReLU" 68 - bottom: "conv_1" 69 - top: "conv_1" 70 - } 71 - layer { 72 - name: "pool1" 73 - type: "Pooling" 74 - bottom: "conv_1" 75 - top: "pool1" 76 - pooling_param { 77 - pool: MAX 78 - kernel_size: 3 79 - stride: 2 80 - } 81 - } 82 - layer { 83 - name: "conv_stage0_block0_proj_shortcut" 84 - type: "Convolution" 85 - bottom: "pool1" 86 - top: "conv_stage0_block0_proj_shortcut" 87 - param { 88 - lr_mult: 1 89 - decay_mult: 1 90 - } 91 - param { 92 - lr_mult: 2 93 - decay_mult: 0 94 - } 95 - convolution_param { 96 - num_output: 128 97 - pad: 0 98 - kernel_size: 1 99 - stride: 1 100 - weight_filler { 101 - type: "xavier" 102 - } 103 - bias_filler { 104 - type: "constant" 105 - value: 0 106 - } 107 - } 108 - } 109 - layer { 110 - name: "bn_stage0_block0_proj_shortcut" 111 - type: "BatchNorm" 112 - bottom: "conv_stage0_block0_proj_shortcut" 113 - top: "conv_stage0_block0_proj_shortcut" 114 - param { 115 - lr_mult: 0 116 - decay_mult: 0 117 - } 118 - param { 119 - lr_mult: 0 120 - decay_mult: 0 121 - } 122 - param { 123 - lr_mult: 0 124 - decay_mult: 0 125 - } 126 - batch_norm_param { 127 - use_global_stats: true 128 - } 129 - } 130 - layer { 131 - name: "scale_stage0_block0_proj_shortcut" 132 - type: "Scale" 133 - bottom: "conv_stage0_block0_proj_shortcut" 134 - top: "conv_stage0_block0_proj_shortcut" 135 - scale_param { 136 - bias_term: true 137 - } 138 - } 139 - layer { 140 - name: "conv_stage0_block0_branch2a" 141 - type: "Convolution" 142 - bottom: "pool1" 143 - top: "conv_stage0_block0_branch2a" 144 - param { 145 - lr_mult: 1 146 - decay_mult: 1 147 - } 148 - param { 149 - lr_mult: 2 150 - decay_mult: 0 151 - } 152 - convolution_param { 153 - num_output: 32 154 - pad: 0 155 - kernel_size: 1 156 - stride: 1 157 - weight_filler { 158 - type: "xavier" 159 - } 160 - bias_filler { 161 - type: "constant" 162 - value: 0 163 - } 164 - } 165 - } 166 - layer { 167 - name: "bn_stage0_block0_branch2a" 168 - type: "BatchNorm" 169 - bottom: "conv_stage0_block0_branch2a" 170 - top: "conv_stage0_block0_branch2a" 171 - param { 172 - lr_mult: 0 173 - decay_mult: 0 174 - } 175 - param { 176 - lr_mult: 0 177 - decay_mult: 0 178 - } 179 - param { 180 - lr_mult: 0 181 - decay_mult: 0 182 - } 183 - batch_norm_param { 184 - use_global_stats: true 185 - } 186 - } 187 - layer { 188 - name: "scale_stage0_block0_branch2a" 189 - type: "Scale" 190 - bottom: "conv_stage0_block0_branch2a" 191 - top: "conv_stage0_block0_branch2a" 192 - scale_param { 193 - bias_term: true 194 - } 195 - } 196 - layer { 197 - name: "relu_stage0_block0_branch2a" 198 - type: "ReLU" 199 - bottom: "conv_stage0_block0_branch2a" 200 - top: "conv_stage0_block0_branch2a" 201 - } 202 - layer { 203 - name: "conv_stage0_block0_branch2b" 204 - type: "Convolution" 205 - bottom: "conv_stage0_block0_branch2a" 206 - top: "conv_stage0_block0_branch2b" 207 - param { 208 - lr_mult: 1 209 - decay_mult: 1 210 - } 211 - param { 212 - lr_mult: 2 213 - decay_mult: 0 214 - } 215 - convolution_param { 216 - num_output: 32 217 - pad: 1 218 - kernel_size: 3 219 - stride: 1 220 - weight_filler { 221 - type: "xavier" 222 - } 223 - bias_filler { 224 - type: "constant" 225 - value: 0 226 - } 227 - } 228 - } 229 - layer { 230 - name: "bn_stage0_block0_branch2b" 231 - type: "BatchNorm" 232 - bottom: "conv_stage0_block0_branch2b" 233 - top: "conv_stage0_block0_branch2b" 234 - param { 235 - lr_mult: 0 236 - decay_mult: 0 237 - } 238 - param { 239 - lr_mult: 0 240 - decay_mult: 0 241 - } 242 - param { 243 - lr_mult: 0 244 - decay_mult: 0 245 - } 246 - batch_norm_param { 247 - use_global_stats: true 248 - } 249 - } 250 - layer { 251 - name: "scale_stage0_block0_branch2b" 252 - type: "Scale" 253 - bottom: "conv_stage0_block0_branch2b" 254 - top: "conv_stage0_block0_branch2b" 255 - scale_param { 256 - bias_term: true 257 - } 258 - } 259 - layer { 260 - name: "relu_stage0_block0_branch2b" 261 - type: "ReLU" 262 - bottom: "conv_stage0_block0_branch2b" 263 - top: "conv_stage0_block0_branch2b" 264 - } 265 - layer { 266 - name: "conv_stage0_block0_branch2c" 267 - type: "Convolution" 268 - bottom: "conv_stage0_block0_branch2b" 269 - top: "conv_stage0_block0_branch2c" 270 - param { 271 - lr_mult: 1 272 - decay_mult: 1 273 - } 274 - param { 275 - lr_mult: 2 276 - decay_mult: 0 277 - } 278 - convolution_param { 279 - num_output: 128 280 - pad: 0 281 - kernel_size: 1 282 - stride: 1 283 - weight_filler { 284 - type: "xavier" 285 - } 286 - bias_filler { 287 - type: "constant" 288 - value: 0 289 - } 290 - } 291 - } 292 - layer { 293 - name: "bn_stage0_block0_branch2c" 294 - type: "BatchNorm" 295 - bottom: "conv_stage0_block0_branch2c" 296 - top: "conv_stage0_block0_branch2c" 297 - param { 298 - lr_mult: 0 299 - decay_mult: 0 300 - } 301 - param { 302 - lr_mult: 0 303 - decay_mult: 0 304 - } 305 - param { 306 - lr_mult: 0 307 - decay_mult: 0 308 - } 309 - batch_norm_param { 310 - use_global_stats: true 311 - } 312 - } 313 - layer { 314 - name: "scale_stage0_block0_branch2c" 315 - type: "Scale" 316 - bottom: "conv_stage0_block0_branch2c" 317 - top: "conv_stage0_block0_branch2c" 318 - scale_param { 319 - bias_term: true 320 - } 321 - } 322 - layer { 323 - name: "eltwise_stage0_block0" 324 - type: "Eltwise" 325 - bottom: "conv_stage0_block0_proj_shortcut" 326 - bottom: "conv_stage0_block0_branch2c" 327 - top: "eltwise_stage0_block0" 328 - } 329 - layer { 330 - name: "relu_stage0_block0" 331 - type: "ReLU" 332 - bottom: "eltwise_stage0_block0" 333 - top: "eltwise_stage0_block0" 334 - } 335 - layer { 336 - name: "conv_stage0_block1_branch2a" 337 - type: "Convolution" 338 - bottom: "eltwise_stage0_block0" 339 - top: "conv_stage0_block1_branch2a" 340 - param { 341 - lr_mult: 1 342 - decay_mult: 1 343 - } 344 - param { 345 - lr_mult: 2 346 - decay_mult: 0 347 - } 348 - convolution_param { 349 - num_output: 32 350 - pad: 0 351 - kernel_size: 1 352 - stride: 1 353 - weight_filler { 354 - type: "xavier" 355 - } 356 - bias_filler { 357 - type: "constant" 358 - value: 0 359 - } 360 - } 361 - } 362 - layer { 363 - name: "bn_stage0_block1_branch2a" 364 - type: "BatchNorm" 365 - bottom: "conv_stage0_block1_branch2a" 366 - top: "conv_stage0_block1_branch2a" 367 - param { 368 - lr_mult: 0 369 - decay_mult: 0 370 - } 371 - param { 372 - lr_mult: 0 373 - decay_mult: 0 374 - } 375 - param { 376 - lr_mult: 0 377 - decay_mult: 0 378 - } 379 - batch_norm_param { 380 - use_global_stats: true 381 - } 382 - } 383 - layer { 384 - name: "scale_stage0_block1_branch2a" 385 - type: "Scale" 386 - bottom: "conv_stage0_block1_branch2a" 387 - top: "conv_stage0_block1_branch2a" 388 - scale_param { 389 - bias_term: true 390 - } 391 - } 392 - layer { 393 - name: "relu_stage0_block1_branch2a" 394 - type: "ReLU" 395 - bottom: "conv_stage0_block1_branch2a" 396 - top: "conv_stage0_block1_branch2a" 397 - } 398 - layer { 399 - name: "conv_stage0_block1_branch2b" 400 - type: "Convolution" 401 - bottom: "conv_stage0_block1_branch2a" 402 - top: "conv_stage0_block1_branch2b" 403 - param { 404 - lr_mult: 1 405 - decay_mult: 1 406 - } 407 - param { 408 - lr_mult: 2 409 - decay_mult: 0 410 - } 411 - convolution_param { 412 - num_output: 32 413 - pad: 1 414 - kernel_size: 3 415 - stride: 1 416 - weight_filler { 417 - type: "xavier" 418 - } 419 - bias_filler { 420 - type: "constant" 421 - value: 0 422 - } 423 - } 424 - } 425 - layer { 426 - name: "bn_stage0_block1_branch2b" 427 - type: "BatchNorm" 428 - bottom: "conv_stage0_block1_branch2b" 429 - top: "conv_stage0_block1_branch2b" 430 - param { 431 - lr_mult: 0 432 - decay_mult: 0 433 - } 434 - param { 435 - lr_mult: 0 436 - decay_mult: 0 437 - } 438 - param { 439 - lr_mult: 0 440 - decay_mult: 0 441 - } 442 - batch_norm_param { 443 - use_global_stats: true 444 - } 445 - } 446 - layer { 447 - name: "scale_stage0_block1_branch2b" 448 - type: "Scale" 449 - bottom: "conv_stage0_block1_branch2b" 450 - top: "conv_stage0_block1_branch2b" 451 - scale_param { 452 - bias_term: true 453 - } 454 - } 455 - layer { 456 - name: "relu_stage0_block1_branch2b" 457 - type: "ReLU" 458 - bottom: "conv_stage0_block1_branch2b" 459 - top: "conv_stage0_block1_branch2b" 460 - } 461 - layer { 462 - name: "conv_stage0_block1_branch2c" 463 - type: "Convolution" 464 - bottom: "conv_stage0_block1_branch2b" 465 - top: "conv_stage0_block1_branch2c" 466 - param { 467 - lr_mult: 1 468 - decay_mult: 1 469 - } 470 - param { 471 - lr_mult: 2 472 - decay_mult: 0 473 - } 474 - convolution_param { 475 - num_output: 128 476 - pad: 0 477 - kernel_size: 1 478 - stride: 1 479 - weight_filler { 480 - type: "xavier" 481 - } 482 - bias_filler { 483 - type: "constant" 484 - value: 0 485 - } 486 - } 487 - } 488 - layer { 489 - name: "bn_stage0_block1_branch2c" 490 - type: "BatchNorm" 491 - bottom: "conv_stage0_block1_branch2c" 492 - top: "conv_stage0_block1_branch2c" 493 - param { 494 - lr_mult: 0 495 - decay_mult: 0 496 - } 497 - param { 498 - lr_mult: 0 499 - decay_mult: 0 500 - } 501 - param { 502 - lr_mult: 0 503 - decay_mult: 0 504 - } 505 - batch_norm_param { 506 - use_global_stats: true 507 - } 508 - } 509 - layer { 510 - name: "scale_stage0_block1_branch2c" 511 - type: "Scale" 512 - bottom: "conv_stage0_block1_branch2c" 513 - top: "conv_stage0_block1_branch2c" 514 - scale_param { 515 - bias_term: true 516 - } 517 - } 518 - layer { 519 - name: "eltwise_stage0_block1" 520 - type: "Eltwise" 521 - bottom: "eltwise_stage0_block0" 522 - bottom: "conv_stage0_block1_branch2c" 523 - top: "eltwise_stage0_block1" 524 - } 525 - layer { 526 - name: "relu_stage0_block1" 527 - type: "ReLU" 528 - bottom: "eltwise_stage0_block1" 529 - top: "eltwise_stage0_block1" 530 - } 531 - layer { 532 - name: "conv_stage0_block2_branch2a" 533 - type: "Convolution" 534 - bottom: "eltwise_stage0_block1" 535 - top: "conv_stage0_block2_branch2a" 536 - param { 537 - lr_mult: 1 538 - decay_mult: 1 539 - } 540 - param { 541 - lr_mult: 2 542 - decay_mult: 0 543 - } 544 - convolution_param { 545 - num_output: 32 546 - pad: 0 547 - kernel_size: 1 548 - stride: 1 549 - weight_filler { 550 - type: "xavier" 551 - } 552 - bias_filler { 553 - type: "constant" 554 - value: 0 555 - } 556 - } 557 - } 558 - layer { 559 - name: "bn_stage0_block2_branch2a" 560 - type: "BatchNorm" 561 - bottom: "conv_stage0_block2_branch2a" 562 - top: "conv_stage0_block2_branch2a" 563 - param { 564 - lr_mult: 0 565 - decay_mult: 0 566 - } 567 - param { 568 - lr_mult: 0 569 - decay_mult: 0 570 - } 571 - param { 572 - lr_mult: 0 573 - decay_mult: 0 574 - } 575 - batch_norm_param { 576 - use_global_stats: true 577 - } 578 - } 579 - layer { 580 - name: "scale_stage0_block2_branch2a" 581 - type: "Scale" 582 - bottom: "conv_stage0_block2_branch2a" 583 - top: "conv_stage0_block2_branch2a" 584 - scale_param { 585 - bias_term: true 586 - } 587 - } 588 - layer { 589 - name: "relu_stage0_block2_branch2a" 590 - type: "ReLU" 591 - bottom: "conv_stage0_block2_branch2a" 592 - top: "conv_stage0_block2_branch2a" 593 - } 594 - layer { 595 - name: "conv_stage0_block2_branch2b" 596 - type: "Convolution" 597 - bottom: "conv_stage0_block2_branch2a" 598 - top: "conv_stage0_block2_branch2b" 599 - param { 600 - lr_mult: 1 601 - decay_mult: 1 602 - } 603 - param { 604 - lr_mult: 2 605 - decay_mult: 0 606 - } 607 - convolution_param { 608 - num_output: 32 609 - pad: 1 610 - kernel_size: 3 611 - stride: 1 612 - weight_filler { 613 - type: "xavier" 614 - } 615 - bias_filler { 616 - type: "constant" 617 - value: 0 618 - } 619 - } 620 - } 621 - layer { 622 - name: "bn_stage0_block2_branch2b" 623 - type: "BatchNorm" 624 - bottom: "conv_stage0_block2_branch2b" 625 - top: "conv_stage0_block2_branch2b" 626 - param { 627 - lr_mult: 0 628 - decay_mult: 0 629 - } 630 - param { 631 - lr_mult: 0 632 - decay_mult: 0 633 - } 634 - param { 635 - lr_mult: 0 636 - decay_mult: 0 637 - } 638 - batch_norm_param { 639 - use_global_stats: true 640 - } 641 - } 642 - layer { 643 - name: "scale_stage0_block2_branch2b" 644 - type: "Scale" 645 - bottom: "conv_stage0_block2_branch2b" 646 - top: "conv_stage0_block2_branch2b" 647 - scale_param { 648 - bias_term: true 649 - } 650 - } 651 - layer { 652 - name: "relu_stage0_block2_branch2b" 653 - type: "ReLU" 654 - bottom: "conv_stage0_block2_branch2b" 655 - top: "conv_stage0_block2_branch2b" 656 - } 657 - layer { 658 - name: "conv_stage0_block2_branch2c" 659 - type: "Convolution" 660 - bottom: "conv_stage0_block2_branch2b" 661 - top: "conv_stage0_block2_branch2c" 662 - param { 663 - lr_mult: 1 664 - decay_mult: 1 665 - } 666 - param { 667 - lr_mult: 2 668 - decay_mult: 0 669 - } 670 - convolution_param { 671 - num_output: 128 672 - pad: 0 673 - kernel_size: 1 674 - stride: 1 675 - weight_filler { 676 - type: "xavier" 677 - } 678 - bias_filler { 679 - type: "constant" 680 - value: 0 681 - } 682 - } 683 - } 684 - layer { 685 - name: "bn_stage0_block2_branch2c" 686 - type: "BatchNorm" 687 - bottom: "conv_stage0_block2_branch2c" 688 - top: "conv_stage0_block2_branch2c" 689 - param { 690 - lr_mult: 0 691 - decay_mult: 0 692 - } 693 - param { 694 - lr_mult: 0 695 - decay_mult: 0 696 - } 697 - param { 698 - lr_mult: 0 699 - decay_mult: 0 700 - } 701 - batch_norm_param { 702 - use_global_stats: true 703 - } 704 - } 705 - layer { 706 - name: "scale_stage0_block2_branch2c" 707 - type: "Scale" 708 - bottom: "conv_stage0_block2_branch2c" 709 - top: "conv_stage0_block2_branch2c" 710 - scale_param { 711 - bias_term: true 712 - } 713 - } 714 - layer { 715 - name: "eltwise_stage0_block2" 716 - type: "Eltwise" 717 - bottom: "eltwise_stage0_block1" 718 - bottom: "conv_stage0_block2_branch2c" 719 - top: "eltwise_stage0_block2" 720 - } 721 - layer { 722 - name: "relu_stage0_block2" 723 - type: "ReLU" 724 - bottom: "eltwise_stage0_block2" 725 - top: "eltwise_stage0_block2" 726 - } 727 - layer { 728 - name: "conv_stage1_block0_proj_shortcut" 729 - type: "Convolution" 730 - bottom: "eltwise_stage0_block2" 731 - top: "conv_stage1_block0_proj_shortcut" 732 - param { 733 - lr_mult: 1 734 - decay_mult: 1 735 - } 736 - param { 737 - lr_mult: 2 738 - decay_mult: 0 739 - } 740 - convolution_param { 741 - num_output: 256 742 - pad: 0 743 - kernel_size: 1 744 - stride: 2 745 - weight_filler { 746 - type: "xavier" 747 - } 748 - bias_filler { 749 - type: "constant" 750 - value: 0 751 - } 752 - } 753 - } 754 - layer { 755 - name: "bn_stage1_block0_proj_shortcut" 756 - type: "BatchNorm" 757 - bottom: "conv_stage1_block0_proj_shortcut" 758 - top: "conv_stage1_block0_proj_shortcut" 759 - param { 760 - lr_mult: 0 761 - decay_mult: 0 762 - } 763 - param { 764 - lr_mult: 0 765 - decay_mult: 0 766 - } 767 - param { 768 - lr_mult: 0 769 - decay_mult: 0 770 - } 771 - batch_norm_param { 772 - use_global_stats: true 773 - } 774 - } 775 - layer { 776 - name: "scale_stage1_block0_proj_shortcut" 777 - type: "Scale" 778 - bottom: "conv_stage1_block0_proj_shortcut" 779 - top: "conv_stage1_block0_proj_shortcut" 780 - scale_param { 781 - bias_term: true 782 - } 783 - } 784 - layer { 785 - name: "conv_stage1_block0_branch2a" 786 - type: "Convolution" 787 - bottom: "eltwise_stage0_block2" 788 - top: "conv_stage1_block0_branch2a" 789 - param { 790 - lr_mult: 1 791 - decay_mult: 1 792 - } 793 - param { 794 - lr_mult: 2 795 - decay_mult: 0 796 - } 797 - convolution_param { 798 - num_output: 64 799 - pad: 0 800 - kernel_size: 1 801 - stride: 2 802 - weight_filler { 803 - type: "xavier" 804 - } 805 - bias_filler { 806 - type: "constant" 807 - value: 0 808 - } 809 - } 810 - } 811 - layer { 812 - name: "bn_stage1_block0_branch2a" 813 - type: "BatchNorm" 814 - bottom: "conv_stage1_block0_branch2a" 815 - top: "conv_stage1_block0_branch2a" 816 - param { 817 - lr_mult: 0 818 - decay_mult: 0 819 - } 820 - param { 821 - lr_mult: 0 822 - decay_mult: 0 823 - } 824 - param { 825 - lr_mult: 0 826 - decay_mult: 0 827 - } 828 - batch_norm_param { 829 - use_global_stats: true 830 - } 831 - } 832 - layer { 833 - name: "scale_stage1_block0_branch2a" 834 - type: "Scale" 835 - bottom: "conv_stage1_block0_branch2a" 836 - top: "conv_stage1_block0_branch2a" 837 - scale_param { 838 - bias_term: true 839 - } 840 - } 841 - layer { 842 - name: "relu_stage1_block0_branch2a" 843 - type: "ReLU" 844 - bottom: "conv_stage1_block0_branch2a" 845 - top: "conv_stage1_block0_branch2a" 846 - } 847 - layer { 848 - name: "conv_stage1_block0_branch2b" 849 - type: "Convolution" 850 - bottom: "conv_stage1_block0_branch2a" 851 - top: "conv_stage1_block0_branch2b" 852 - param { 853 - lr_mult: 1 854 - decay_mult: 1 855 - } 856 - param { 857 - lr_mult: 2 858 - decay_mult: 0 859 - } 860 - convolution_param { 861 - num_output: 64 862 - pad: 1 863 - kernel_size: 3 864 - stride: 1 865 - weight_filler { 866 - type: "xavier" 867 - } 868 - bias_filler { 869 - type: "constant" 870 - value: 0 871 - } 872 - } 873 - } 874 - layer { 875 - name: "bn_stage1_block0_branch2b" 876 - type: "BatchNorm" 877 - bottom: "conv_stage1_block0_branch2b" 878 - top: "conv_stage1_block0_branch2b" 879 - param { 880 - lr_mult: 0 881 - decay_mult: 0 882 - } 883 - param { 884 - lr_mult: 0 885 - decay_mult: 0 886 - } 887 - param { 888 - lr_mult: 0 889 - decay_mult: 0 890 - } 891 - batch_norm_param { 892 - use_global_stats: true 893 - } 894 - } 895 - layer { 896 - name: "scale_stage1_block0_branch2b" 897 - type: "Scale" 898 - bottom: "conv_stage1_block0_branch2b" 899 - top: "conv_stage1_block0_branch2b" 900 - scale_param { 901 - bias_term: true 902 - } 903 - } 904 - layer { 905 - name: "relu_stage1_block0_branch2b" 906 - type: "ReLU" 907 - bottom: "conv_stage1_block0_branch2b" 908 - top: "conv_stage1_block0_branch2b" 909 - } 910 - layer { 911 - name: "conv_stage1_block0_branch2c" 912 - type: "Convolution" 913 - bottom: "conv_stage1_block0_branch2b" 914 - top: "conv_stage1_block0_branch2c" 915 - param { 916 - lr_mult: 1 917 - decay_mult: 1 918 - } 919 - param { 920 - lr_mult: 2 921 - decay_mult: 0 922 - } 923 - convolution_param { 924 - num_output: 256 925 - pad: 0 926 - kernel_size: 1 927 - stride: 1 928 - weight_filler { 929 - type: "xavier" 930 - } 931 - bias_filler { 932 - type: "constant" 933 - value: 0 934 - } 935 - } 936 - } 937 - layer { 938 - name: "bn_stage1_block0_branch2c" 939 - type: "BatchNorm" 940 - bottom: "conv_stage1_block0_branch2c" 941 - top: "conv_stage1_block0_branch2c" 942 - param { 943 - lr_mult: 0 944 - decay_mult: 0 945 - } 946 - param { 947 - lr_mult: 0 948 - decay_mult: 0 949 - } 950 - param { 951 - lr_mult: 0 952 - decay_mult: 0 953 - } 954 - batch_norm_param { 955 - use_global_stats: true 956 - } 957 - } 958 - layer { 959 - name: "scale_stage1_block0_branch2c" 960 - type: "Scale" 961 - bottom: "conv_stage1_block0_branch2c" 962 - top: "conv_stage1_block0_branch2c" 963 - scale_param { 964 - bias_term: true 965 - } 966 - } 967 - layer { 968 - name: "eltwise_stage1_block0" 969 - type: "Eltwise" 970 - bottom: "conv_stage1_block0_proj_shortcut" 971 - bottom: "conv_stage1_block0_branch2c" 972 - top: "eltwise_stage1_block0" 973 - } 974 - layer { 975 - name: "relu_stage1_block0" 976 - type: "ReLU" 977 - bottom: "eltwise_stage1_block0" 978 - top: "eltwise_stage1_block0" 979 - } 980 - layer { 981 - name: "conv_stage1_block1_branch2a" 982 - type: "Convolution" 983 - bottom: "eltwise_stage1_block0" 984 - top: "conv_stage1_block1_branch2a" 985 - param { 986 - lr_mult: 1 987 - decay_mult: 1 988 - } 989 - param { 990 - lr_mult: 2 991 - decay_mult: 0 992 - } 993 - convolution_param { 994 - num_output: 64 995 - pad: 0 996 - kernel_size: 1 997 - stride: 1 998 - weight_filler { 999 - type: "xavier" 1000 - } 1001 - bias_filler { 1002 - type: "constant" 1003 - value: 0 1004 - } 1005 - } 1006 - } 1007 - layer { 1008 - name: "bn_stage1_block1_branch2a" 1009 - type: "BatchNorm" 1010 - bottom: "conv_stage1_block1_branch2a" 1011 - top: "conv_stage1_block1_branch2a" 1012 - param { 1013 - lr_mult: 0 1014 - decay_mult: 0 1015 - } 1016 - param { 1017 - lr_mult: 0 1018 - decay_mult: 0 1019 - } 1020 - param { 1021 - lr_mult: 0 1022 - decay_mult: 0 1023 - } 1024 - batch_norm_param { 1025 - use_global_stats: true 1026 - } 1027 - } 1028 - layer { 1029 - name: "scale_stage1_block1_branch2a" 1030 - type: "Scale" 1031 - bottom: "conv_stage1_block1_branch2a" 1032 - top: "conv_stage1_block1_branch2a" 1033 - scale_param { 1034 - bias_term: true 1035 - } 1036 - } 1037 - layer { 1038 - name: "relu_stage1_block1_branch2a" 1039 - type: "ReLU" 1040 - bottom: "conv_stage1_block1_branch2a" 1041 - top: "conv_stage1_block1_branch2a" 1042 - } 1043 - layer { 1044 - name: "conv_stage1_block1_branch2b" 1045 - type: "Convolution" 1046 - bottom: "conv_stage1_block1_branch2a" 1047 - top: "conv_stage1_block1_branch2b" 1048 - param { 1049 - lr_mult: 1 1050 - decay_mult: 1 1051 - } 1052 - param { 1053 - lr_mult: 2 1054 - decay_mult: 0 1055 - } 1056 - convolution_param { 1057 - num_output: 64 1058 - pad: 1 1059 - kernel_size: 3 1060 - stride: 1 1061 - weight_filler { 1062 - type: "xavier" 1063 - } 1064 - bias_filler { 1065 - type: "constant" 1066 - value: 0 1067 - } 1068 - } 1069 - } 1070 - layer { 1071 - name: "bn_stage1_block1_branch2b" 1072 - type: "BatchNorm" 1073 - bottom: "conv_stage1_block1_branch2b" 1074 - top: "conv_stage1_block1_branch2b" 1075 - param { 1076 - lr_mult: 0 1077 - decay_mult: 0 1078 - } 1079 - param { 1080 - lr_mult: 0 1081 - decay_mult: 0 1082 - } 1083 - param { 1084 - lr_mult: 0 1085 - decay_mult: 0 1086 - } 1087 - batch_norm_param { 1088 - use_global_stats: true 1089 - } 1090 - } 1091 - layer { 1092 - name: "scale_stage1_block1_branch2b" 1093 - type: "Scale" 1094 - bottom: "conv_stage1_block1_branch2b" 1095 - top: "conv_stage1_block1_branch2b" 1096 - scale_param { 1097 - bias_term: true 1098 - } 1099 - } 1100 - layer { 1101 - name: "relu_stage1_block1_branch2b" 1102 - type: "ReLU" 1103 - bottom: "conv_stage1_block1_branch2b" 1104 - top: "conv_stage1_block1_branch2b" 1105 - } 1106 - layer { 1107 - name: "conv_stage1_block1_branch2c" 1108 - type: "Convolution" 1109 - bottom: "conv_stage1_block1_branch2b" 1110 - top: "conv_stage1_block1_branch2c" 1111 - param { 1112 - lr_mult: 1 1113 - decay_mult: 1 1114 - } 1115 - param { 1116 - lr_mult: 2 1117 - decay_mult: 0 1118 - } 1119 - convolution_param { 1120 - num_output: 256 1121 - pad: 0 1122 - kernel_size: 1 1123 - stride: 1 1124 - weight_filler { 1125 - type: "xavier" 1126 - } 1127 - bias_filler { 1128 - type: "constant" 1129 - value: 0 1130 - } 1131 - } 1132 - } 1133 - layer { 1134 - name: "bn_stage1_block1_branch2c" 1135 - type: "BatchNorm" 1136 - bottom: "conv_stage1_block1_branch2c" 1137 - top: "conv_stage1_block1_branch2c" 1138 - param { 1139 - lr_mult: 0 1140 - decay_mult: 0 1141 - } 1142 - param { 1143 - lr_mult: 0 1144 - decay_mult: 0 1145 - } 1146 - param { 1147 - lr_mult: 0 1148 - decay_mult: 0 1149 - } 1150 - batch_norm_param { 1151 - use_global_stats: true 1152 - } 1153 - } 1154 - layer { 1155 - name: "scale_stage1_block1_branch2c" 1156 - type: "Scale" 1157 - bottom: "conv_stage1_block1_branch2c" 1158 - top: "conv_stage1_block1_branch2c" 1159 - scale_param { 1160 - bias_term: true 1161 - } 1162 - } 1163 - layer { 1164 - name: "eltwise_stage1_block1" 1165 - type: "Eltwise" 1166 - bottom: "eltwise_stage1_block0" 1167 - bottom: "conv_stage1_block1_branch2c" 1168 - top: "eltwise_stage1_block1" 1169 - } 1170 - layer { 1171 - name: "relu_stage1_block1" 1172 - type: "ReLU" 1173 - bottom: "eltwise_stage1_block1" 1174 - top: "eltwise_stage1_block1" 1175 - } 1176 - layer { 1177 - name: "conv_stage1_block2_branch2a" 1178 - type: "Convolution" 1179 - bottom: "eltwise_stage1_block1" 1180 - top: "conv_stage1_block2_branch2a" 1181 - param { 1182 - lr_mult: 1 1183 - decay_mult: 1 1184 - } 1185 - param { 1186 - lr_mult: 2 1187 - decay_mult: 0 1188 - } 1189 - convolution_param { 1190 - num_output: 64 1191 - pad: 0 1192 - kernel_size: 1 1193 - stride: 1 1194 - weight_filler { 1195 - type: "xavier" 1196 - } 1197 - bias_filler { 1198 - type: "constant" 1199 - value: 0 1200 - } 1201 - } 1202 - } 1203 - layer { 1204 - name: "bn_stage1_block2_branch2a" 1205 - type: "BatchNorm" 1206 - bottom: "conv_stage1_block2_branch2a" 1207 - top: "conv_stage1_block2_branch2a" 1208 - param { 1209 - lr_mult: 0 1210 - decay_mult: 0 1211 - } 1212 - param { 1213 - lr_mult: 0 1214 - decay_mult: 0 1215 - } 1216 - param { 1217 - lr_mult: 0 1218 - decay_mult: 0 1219 - } 1220 - batch_norm_param { 1221 - use_global_stats: true 1222 - } 1223 - } 1224 - layer { 1225 - name: "scale_stage1_block2_branch2a" 1226 - type: "Scale" 1227 - bottom: "conv_stage1_block2_branch2a" 1228 - top: "conv_stage1_block2_branch2a" 1229 - scale_param { 1230 - bias_term: true 1231 - } 1232 - } 1233 - layer { 1234 - name: "relu_stage1_block2_branch2a" 1235 - type: "ReLU" 1236 - bottom: "conv_stage1_block2_branch2a" 1237 - top: "conv_stage1_block2_branch2a" 1238 - } 1239 - layer { 1240 - name: "conv_stage1_block2_branch2b" 1241 - type: "Convolution" 1242 - bottom: "conv_stage1_block2_branch2a" 1243 - top: "conv_stage1_block2_branch2b" 1244 - param { 1245 - lr_mult: 1 1246 - decay_mult: 1 1247 - } 1248 - param { 1249 - lr_mult: 2 1250 - decay_mult: 0 1251 - } 1252 - convolution_param { 1253 - num_output: 64 1254 - pad: 1 1255 - kernel_size: 3 1256 - stride: 1 1257 - weight_filler { 1258 - type: "xavier" 1259 - } 1260 - bias_filler { 1261 - type: "constant" 1262 - value: 0 1263 - } 1264 - } 1265 - } 1266 - layer { 1267 - name: "bn_stage1_block2_branch2b" 1268 - type: "BatchNorm" 1269 - bottom: "conv_stage1_block2_branch2b" 1270 - top: "conv_stage1_block2_branch2b" 1271 - param { 1272 - lr_mult: 0 1273 - decay_mult: 0 1274 - } 1275 - param { 1276 - lr_mult: 0 1277 - decay_mult: 0 1278 - } 1279 - param { 1280 - lr_mult: 0 1281 - decay_mult: 0 1282 - } 1283 - batch_norm_param { 1284 - use_global_stats: true 1285 - } 1286 - } 1287 - layer { 1288 - name: "scale_stage1_block2_branch2b" 1289 - type: "Scale" 1290 - bottom: "conv_stage1_block2_branch2b" 1291 - top: "conv_stage1_block2_branch2b" 1292 - scale_param { 1293 - bias_term: true 1294 - } 1295 - } 1296 - layer { 1297 - name: "relu_stage1_block2_branch2b" 1298 - type: "ReLU" 1299 - bottom: "conv_stage1_block2_branch2b" 1300 - top: "conv_stage1_block2_branch2b" 1301 - } 1302 - layer { 1303 - name: "conv_stage1_block2_branch2c" 1304 - type: "Convolution" 1305 - bottom: "conv_stage1_block2_branch2b" 1306 - top: "conv_stage1_block2_branch2c" 1307 - param { 1308 - lr_mult: 1 1309 - decay_mult: 1 1310 - } 1311 - param { 1312 - lr_mult: 2 1313 - decay_mult: 0 1314 - } 1315 - convolution_param { 1316 - num_output: 256 1317 - pad: 0 1318 - kernel_size: 1 1319 - stride: 1 1320 - weight_filler { 1321 - type: "xavier" 1322 - } 1323 - bias_filler { 1324 - type: "constant" 1325 - value: 0 1326 - } 1327 - } 1328 - } 1329 - layer { 1330 - name: "bn_stage1_block2_branch2c" 1331 - type: "BatchNorm" 1332 - bottom: "conv_stage1_block2_branch2c" 1333 - top: "conv_stage1_block2_branch2c" 1334 - param { 1335 - lr_mult: 0 1336 - decay_mult: 0 1337 - } 1338 - param { 1339 - lr_mult: 0 1340 - decay_mult: 0 1341 - } 1342 - param { 1343 - lr_mult: 0 1344 - decay_mult: 0 1345 - } 1346 - batch_norm_param { 1347 - use_global_stats: true 1348 - } 1349 - } 1350 - layer { 1351 - name: "scale_stage1_block2_branch2c" 1352 - type: "Scale" 1353 - bottom: "conv_stage1_block2_branch2c" 1354 - top: "conv_stage1_block2_branch2c" 1355 - scale_param { 1356 - bias_term: true 1357 - } 1358 - } 1359 - layer { 1360 - name: "eltwise_stage1_block2" 1361 - type: "Eltwise" 1362 - bottom: "eltwise_stage1_block1" 1363 - bottom: "conv_stage1_block2_branch2c" 1364 - top: "eltwise_stage1_block2" 1365 - } 1366 - layer { 1367 - name: "relu_stage1_block2" 1368 - type: "ReLU" 1369 - bottom: "eltwise_stage1_block2" 1370 - top: "eltwise_stage1_block2" 1371 - } 1372 - layer { 1373 - name: "conv_stage1_block3_branch2a" 1374 - type: "Convolution" 1375 - bottom: "eltwise_stage1_block2" 1376 - top: "conv_stage1_block3_branch2a" 1377 - param { 1378 - lr_mult: 1 1379 - decay_mult: 1 1380 - } 1381 - param { 1382 - lr_mult: 2 1383 - decay_mult: 0 1384 - } 1385 - convolution_param { 1386 - num_output: 64 1387 - pad: 0 1388 - kernel_size: 1 1389 - stride: 1 1390 - weight_filler { 1391 - type: "xavier" 1392 - } 1393 - bias_filler { 1394 - type: "constant" 1395 - value: 0 1396 - } 1397 - } 1398 - } 1399 - layer { 1400 - name: "bn_stage1_block3_branch2a" 1401 - type: "BatchNorm" 1402 - bottom: "conv_stage1_block3_branch2a" 1403 - top: "conv_stage1_block3_branch2a" 1404 - param { 1405 - lr_mult: 0 1406 - decay_mult: 0 1407 - } 1408 - param { 1409 - lr_mult: 0 1410 - decay_mult: 0 1411 - } 1412 - param { 1413 - lr_mult: 0 1414 - decay_mult: 0 1415 - } 1416 - batch_norm_param { 1417 - use_global_stats: true 1418 - } 1419 - } 1420 - layer { 1421 - name: "scale_stage1_block3_branch2a" 1422 - type: "Scale" 1423 - bottom: "conv_stage1_block3_branch2a" 1424 - top: "conv_stage1_block3_branch2a" 1425 - scale_param { 1426 - bias_term: true 1427 - } 1428 - } 1429 - layer { 1430 - name: "relu_stage1_block3_branch2a" 1431 - type: "ReLU" 1432 - bottom: "conv_stage1_block3_branch2a" 1433 - top: "conv_stage1_block3_branch2a" 1434 - } 1435 - layer { 1436 - name: "conv_stage1_block3_branch2b" 1437 - type: "Convolution" 1438 - bottom: "conv_stage1_block3_branch2a" 1439 - top: "conv_stage1_block3_branch2b" 1440 - param { 1441 - lr_mult: 1 1442 - decay_mult: 1 1443 - } 1444 - param { 1445 - lr_mult: 2 1446 - decay_mult: 0 1447 - } 1448 - convolution_param { 1449 - num_output: 64 1450 - pad: 1 1451 - kernel_size: 3 1452 - stride: 1 1453 - weight_filler { 1454 - type: "xavier" 1455 - } 1456 - bias_filler { 1457 - type: "constant" 1458 - value: 0 1459 - } 1460 - } 1461 - } 1462 - layer { 1463 - name: "bn_stage1_block3_branch2b" 1464 - type: "BatchNorm" 1465 - bottom: "conv_stage1_block3_branch2b" 1466 - top: "conv_stage1_block3_branch2b" 1467 - param { 1468 - lr_mult: 0 1469 - decay_mult: 0 1470 - } 1471 - param { 1472 - lr_mult: 0 1473 - decay_mult: 0 1474 - } 1475 - param { 1476 - lr_mult: 0 1477 - decay_mult: 0 1478 - } 1479 - batch_norm_param { 1480 - use_global_stats: true 1481 - } 1482 - } 1483 - layer { 1484 - name: "scale_stage1_block3_branch2b" 1485 - type: "Scale" 1486 - bottom: "conv_stage1_block3_branch2b" 1487 - top: "conv_stage1_block3_branch2b" 1488 - scale_param { 1489 - bias_term: true 1490 - } 1491 - } 1492 - layer { 1493 - name: "relu_stage1_block3_branch2b" 1494 - type: "ReLU" 1495 - bottom: "conv_stage1_block3_branch2b" 1496 - top: "conv_stage1_block3_branch2b" 1497 - } 1498 - layer { 1499 - name: "conv_stage1_block3_branch2c" 1500 - type: "Convolution" 1501 - bottom: "conv_stage1_block3_branch2b" 1502 - top: "conv_stage1_block3_branch2c" 1503 - param { 1504 - lr_mult: 1 1505 - decay_mult: 1 1506 - } 1507 - param { 1508 - lr_mult: 2 1509 - decay_mult: 0 1510 - } 1511 - convolution_param { 1512 - num_output: 256 1513 - pad: 0 1514 - kernel_size: 1 1515 - stride: 1 1516 - weight_filler { 1517 - type: "xavier" 1518 - } 1519 - bias_filler { 1520 - type: "constant" 1521 - value: 0 1522 - } 1523 - } 1524 - } 1525 - layer { 1526 - name: "bn_stage1_block3_branch2c" 1527 - type: "BatchNorm" 1528 - bottom: "conv_stage1_block3_branch2c" 1529 - top: "conv_stage1_block3_branch2c" 1530 - param { 1531 - lr_mult: 0 1532 - decay_mult: 0 1533 - } 1534 - param { 1535 - lr_mult: 0 1536 - decay_mult: 0 1537 - } 1538 - param { 1539 - lr_mult: 0 1540 - decay_mult: 0 1541 - } 1542 - batch_norm_param { 1543 - use_global_stats: true 1544 - } 1545 - } 1546 - layer { 1547 - name: "scale_stage1_block3_branch2c" 1548 - type: "Scale" 1549 - bottom: "conv_stage1_block3_branch2c" 1550 - top: "conv_stage1_block3_branch2c" 1551 - scale_param { 1552 - bias_term: true 1553 - } 1554 - } 1555 - layer { 1556 - name: "eltwise_stage1_block3" 1557 - type: "Eltwise" 1558 - bottom: "eltwise_stage1_block2" 1559 - bottom: "conv_stage1_block3_branch2c" 1560 - top: "eltwise_stage1_block3" 1561 - } 1562 - layer { 1563 - name: "relu_stage1_block3" 1564 - type: "ReLU" 1565 - bottom: "eltwise_stage1_block3" 1566 - top: "eltwise_stage1_block3" 1567 - } 1568 - layer { 1569 - name: "conv_stage2_block0_proj_shortcut" 1570 - type: "Convolution" 1571 - bottom: "eltwise_stage1_block3" 1572 - top: "conv_stage2_block0_proj_shortcut" 1573 - param { 1574 - lr_mult: 1 1575 - decay_mult: 1 1576 - } 1577 - param { 1578 - lr_mult: 2 1579 - decay_mult: 0 1580 - } 1581 - convolution_param { 1582 - num_output: 512 1583 - pad: 0 1584 - kernel_size: 1 1585 - stride: 2 1586 - weight_filler { 1587 - type: "xavier" 1588 - } 1589 - bias_filler { 1590 - type: "constant" 1591 - value: 0 1592 - } 1593 - } 1594 - } 1595 - layer { 1596 - name: "bn_stage2_block0_proj_shortcut" 1597 - type: "BatchNorm" 1598 - bottom: "conv_stage2_block0_proj_shortcut" 1599 - top: "conv_stage2_block0_proj_shortcut" 1600 - param { 1601 - lr_mult: 0 1602 - decay_mult: 0 1603 - } 1604 - param { 1605 - lr_mult: 0 1606 - decay_mult: 0 1607 - } 1608 - param { 1609 - lr_mult: 0 1610 - decay_mult: 0 1611 - } 1612 - batch_norm_param { 1613 - use_global_stats: true 1614 - } 1615 - } 1616 - layer { 1617 - name: "scale_stage2_block0_proj_shortcut" 1618 - type: "Scale" 1619 - bottom: "conv_stage2_block0_proj_shortcut" 1620 - top: "conv_stage2_block0_proj_shortcut" 1621 - scale_param { 1622 - bias_term: true 1623 - } 1624 - } 1625 - layer { 1626 - name: "conv_stage2_block0_branch2a" 1627 - type: "Convolution" 1628 - bottom: "eltwise_stage1_block3" 1629 - top: "conv_stage2_block0_branch2a" 1630 - param { 1631 - lr_mult: 1 1632 - decay_mult: 1 1633 - } 1634 - param { 1635 - lr_mult: 2 1636 - decay_mult: 0 1637 - } 1638 - convolution_param { 1639 - num_output: 128 1640 - pad: 0 1641 - kernel_size: 1 1642 - stride: 2 1643 - weight_filler { 1644 - type: "xavier" 1645 - } 1646 - bias_filler { 1647 - type: "constant" 1648 - value: 0 1649 - } 1650 - } 1651 - } 1652 - layer { 1653 - name: "bn_stage2_block0_branch2a" 1654 - type: "BatchNorm" 1655 - bottom: "conv_stage2_block0_branch2a" 1656 - top: "conv_stage2_block0_branch2a" 1657 - param { 1658 - lr_mult: 0 1659 - decay_mult: 0 1660 - } 1661 - param { 1662 - lr_mult: 0 1663 - decay_mult: 0 1664 - } 1665 - param { 1666 - lr_mult: 0 1667 - decay_mult: 0 1668 - } 1669 - batch_norm_param { 1670 - use_global_stats: true 1671 - } 1672 - } 1673 - layer { 1674 - name: "scale_stage2_block0_branch2a" 1675 - type: "Scale" 1676 - bottom: "conv_stage2_block0_branch2a" 1677 - top: "conv_stage2_block0_branch2a" 1678 - scale_param { 1679 - bias_term: true 1680 - } 1681 - } 1682 - layer { 1683 - name: "relu_stage2_block0_branch2a" 1684 - type: "ReLU" 1685 - bottom: "conv_stage2_block0_branch2a" 1686 - top: "conv_stage2_block0_branch2a" 1687 - } 1688 - layer { 1689 - name: "conv_stage2_block0_branch2b" 1690 - type: "Convolution" 1691 - bottom: "conv_stage2_block0_branch2a" 1692 - top: "conv_stage2_block0_branch2b" 1693 - param { 1694 - lr_mult: 1 1695 - decay_mult: 1 1696 - } 1697 - param { 1698 - lr_mult: 2 1699 - decay_mult: 0 1700 - } 1701 - convolution_param { 1702 - num_output: 128 1703 - pad: 1 1704 - kernel_size: 3 1705 - stride: 1 1706 - weight_filler { 1707 - type: "xavier" 1708 - } 1709 - bias_filler { 1710 - type: "constant" 1711 - value: 0 1712 - } 1713 - } 1714 - } 1715 - layer { 1716 - name: "bn_stage2_block0_branch2b" 1717 - type: "BatchNorm" 1718 - bottom: "conv_stage2_block0_branch2b" 1719 - top: "conv_stage2_block0_branch2b" 1720 - param { 1721 - lr_mult: 0 1722 - decay_mult: 0 1723 - } 1724 - param { 1725 - lr_mult: 0 1726 - decay_mult: 0 1727 - } 1728 - param { 1729 - lr_mult: 0 1730 - decay_mult: 0 1731 - } 1732 - batch_norm_param { 1733 - use_global_stats: true 1734 - } 1735 - } 1736 - layer { 1737 - name: "scale_stage2_block0_branch2b" 1738 - type: "Scale" 1739 - bottom: "conv_stage2_block0_branch2b" 1740 - top: "conv_stage2_block0_branch2b" 1741 - scale_param { 1742 - bias_term: true 1743 - } 1744 - } 1745 - layer { 1746 - name: "relu_stage2_block0_branch2b" 1747 - type: "ReLU" 1748 - bottom: "conv_stage2_block0_branch2b" 1749 - top: "conv_stage2_block0_branch2b" 1750 - } 1751 - layer { 1752 - name: "conv_stage2_block0_branch2c" 1753 - type: "Convolution" 1754 - bottom: "conv_stage2_block0_branch2b" 1755 - top: "conv_stage2_block0_branch2c" 1756 - param { 1757 - lr_mult: 1 1758 - decay_mult: 1 1759 - } 1760 - param { 1761 - lr_mult: 2 1762 - decay_mult: 0 1763 - } 1764 - convolution_param { 1765 - num_output: 512 1766 - pad: 0 1767 - kernel_size: 1 1768 - stride: 1 1769 - weight_filler { 1770 - type: "xavier" 1771 - } 1772 - bias_filler { 1773 - type: "constant" 1774 - value: 0 1775 - } 1776 - } 1777 - } 1778 - layer { 1779 - name: "bn_stage2_block0_branch2c" 1780 - type: "BatchNorm" 1781 - bottom: "conv_stage2_block0_branch2c" 1782 - top: "conv_stage2_block0_branch2c" 1783 - param { 1784 - lr_mult: 0 1785 - decay_mult: 0 1786 - } 1787 - param { 1788 - lr_mult: 0 1789 - decay_mult: 0 1790 - } 1791 - param { 1792 - lr_mult: 0 1793 - decay_mult: 0 1794 - } 1795 - batch_norm_param { 1796 - use_global_stats: true 1797 - } 1798 - } 1799 - layer { 1800 - name: "scale_stage2_block0_branch2c" 1801 - type: "Scale" 1802 - bottom: "conv_stage2_block0_branch2c" 1803 - top: "conv_stage2_block0_branch2c" 1804 - scale_param { 1805 - bias_term: true 1806 - } 1807 - } 1808 - layer { 1809 - name: "eltwise_stage2_block0" 1810 - type: "Eltwise" 1811 - bottom: "conv_stage2_block0_proj_shortcut" 1812 - bottom: "conv_stage2_block0_branch2c" 1813 - top: "eltwise_stage2_block0" 1814 - } 1815 - layer { 1816 - name: "relu_stage2_block0" 1817 - type: "ReLU" 1818 - bottom: "eltwise_stage2_block0" 1819 - top: "eltwise_stage2_block0" 1820 - } 1821 - layer { 1822 - name: "conv_stage2_block1_branch2a" 1823 - type: "Convolution" 1824 - bottom: "eltwise_stage2_block0" 1825 - top: "conv_stage2_block1_branch2a" 1826 - param { 1827 - lr_mult: 1 1828 - decay_mult: 1 1829 - } 1830 - param { 1831 - lr_mult: 2 1832 - decay_mult: 0 1833 - } 1834 - convolution_param { 1835 - num_output: 128 1836 - pad: 0 1837 - kernel_size: 1 1838 - stride: 1 1839 - weight_filler { 1840 - type: "xavier" 1841 - } 1842 - bias_filler { 1843 - type: "constant" 1844 - value: 0 1845 - } 1846 - } 1847 - } 1848 - layer { 1849 - name: "bn_stage2_block1_branch2a" 1850 - type: "BatchNorm" 1851 - bottom: "conv_stage2_block1_branch2a" 1852 - top: "conv_stage2_block1_branch2a" 1853 - param { 1854 - lr_mult: 0 1855 - decay_mult: 0 1856 - } 1857 - param { 1858 - lr_mult: 0 1859 - decay_mult: 0 1860 - } 1861 - param { 1862 - lr_mult: 0 1863 - decay_mult: 0 1864 - } 1865 - batch_norm_param { 1866 - use_global_stats: true 1867 - } 1868 - } 1869 - layer { 1870 - name: "scale_stage2_block1_branch2a" 1871 - type: "Scale" 1872 - bottom: "conv_stage2_block1_branch2a" 1873 - top: "conv_stage2_block1_branch2a" 1874 - scale_param { 1875 - bias_term: true 1876 - } 1877 - } 1878 - layer { 1879 - name: "relu_stage2_block1_branch2a" 1880 - type: "ReLU" 1881 - bottom: "conv_stage2_block1_branch2a" 1882 - top: "conv_stage2_block1_branch2a" 1883 - } 1884 - layer { 1885 - name: "conv_stage2_block1_branch2b" 1886 - type: "Convolution" 1887 - bottom: "conv_stage2_block1_branch2a" 1888 - top: "conv_stage2_block1_branch2b" 1889 - param { 1890 - lr_mult: 1 1891 - decay_mult: 1 1892 - } 1893 - param { 1894 - lr_mult: 2 1895 - decay_mult: 0 1896 - } 1897 - convolution_param { 1898 - num_output: 128 1899 - pad: 1 1900 - kernel_size: 3 1901 - stride: 1 1902 - weight_filler { 1903 - type: "xavier" 1904 - } 1905 - bias_filler { 1906 - type: "constant" 1907 - value: 0 1908 - } 1909 - } 1910 - } 1911 - layer { 1912 - name: "bn_stage2_block1_branch2b" 1913 - type: "BatchNorm" 1914 - bottom: "conv_stage2_block1_branch2b" 1915 - top: "conv_stage2_block1_branch2b" 1916 - param { 1917 - lr_mult: 0 1918 - decay_mult: 0 1919 - } 1920 - param { 1921 - lr_mult: 0 1922 - decay_mult: 0 1923 - } 1924 - param { 1925 - lr_mult: 0 1926 - decay_mult: 0 1927 - } 1928 - batch_norm_param { 1929 - use_global_stats: true 1930 - } 1931 - } 1932 - layer { 1933 - name: "scale_stage2_block1_branch2b" 1934 - type: "Scale" 1935 - bottom: "conv_stage2_block1_branch2b" 1936 - top: "conv_stage2_block1_branch2b" 1937 - scale_param { 1938 - bias_term: true 1939 - } 1940 - } 1941 - layer { 1942 - name: "relu_stage2_block1_branch2b" 1943 - type: "ReLU" 1944 - bottom: "conv_stage2_block1_branch2b" 1945 - top: "conv_stage2_block1_branch2b" 1946 - } 1947 - layer { 1948 - name: "conv_stage2_block1_branch2c" 1949 - type: "Convolution" 1950 - bottom: "conv_stage2_block1_branch2b" 1951 - top: "conv_stage2_block1_branch2c" 1952 - param { 1953 - lr_mult: 1 1954 - decay_mult: 1 1955 - } 1956 - param { 1957 - lr_mult: 2 1958 - decay_mult: 0 1959 - } 1960 - convolution_param { 1961 - num_output: 512 1962 - pad: 0 1963 - kernel_size: 1 1964 - stride: 1 1965 - weight_filler { 1966 - type: "xavier" 1967 - } 1968 - bias_filler { 1969 - type: "constant" 1970 - value: 0 1971 - } 1972 - } 1973 - } 1974 - layer { 1975 - name: "bn_stage2_block1_branch2c" 1976 - type: "BatchNorm" 1977 - bottom: "conv_stage2_block1_branch2c" 1978 - top: "conv_stage2_block1_branch2c" 1979 - param { 1980 - lr_mult: 0 1981 - decay_mult: 0 1982 - } 1983 - param { 1984 - lr_mult: 0 1985 - decay_mult: 0 1986 - } 1987 - param { 1988 - lr_mult: 0 1989 - decay_mult: 0 1990 - } 1991 - batch_norm_param { 1992 - use_global_stats: true 1993 - } 1994 - } 1995 - layer { 1996 - name: "scale_stage2_block1_branch2c" 1997 - type: "Scale" 1998 - bottom: "conv_stage2_block1_branch2c" 1999 - top: "conv_stage2_block1_branch2c" 2000 - scale_param { 2001 - bias_term: true 2002 - } 2003 - } 2004 - layer { 2005 - name: "eltwise_stage2_block1" 2006 - type: "Eltwise" 2007 - bottom: "eltwise_stage2_block0" 2008 - bottom: "conv_stage2_block1_branch2c" 2009 - top: "eltwise_stage2_block1" 2010 - } 2011 - layer { 2012 - name: "relu_stage2_block1" 2013 - type: "ReLU" 2014 - bottom: "eltwise_stage2_block1" 2015 - top: "eltwise_stage2_block1" 2016 - } 2017 - layer { 2018 - name: "conv_stage2_block2_branch2a" 2019 - type: "Convolution" 2020 - bottom: "eltwise_stage2_block1" 2021 - top: "conv_stage2_block2_branch2a" 2022 - param { 2023 - lr_mult: 1 2024 - decay_mult: 1 2025 - } 2026 - param { 2027 - lr_mult: 2 2028 - decay_mult: 0 2029 - } 2030 - convolution_param { 2031 - num_output: 128 2032 - pad: 0 2033 - kernel_size: 1 2034 - stride: 1 2035 - weight_filler { 2036 - type: "xavier" 2037 - } 2038 - bias_filler { 2039 - type: "constant" 2040 - value: 0 2041 - } 2042 - } 2043 - } 2044 - layer { 2045 - name: "bn_stage2_block2_branch2a" 2046 - type: "BatchNorm" 2047 - bottom: "conv_stage2_block2_branch2a" 2048 - top: "conv_stage2_block2_branch2a" 2049 - param { 2050 - lr_mult: 0 2051 - decay_mult: 0 2052 - } 2053 - param { 2054 - lr_mult: 0 2055 - decay_mult: 0 2056 - } 2057 - param { 2058 - lr_mult: 0 2059 - decay_mult: 0 2060 - } 2061 - batch_norm_param { 2062 - use_global_stats: true 2063 - } 2064 - } 2065 - layer { 2066 - name: "scale_stage2_block2_branch2a" 2067 - type: "Scale" 2068 - bottom: "conv_stage2_block2_branch2a" 2069 - top: "conv_stage2_block2_branch2a" 2070 - scale_param { 2071 - bias_term: true 2072 - } 2073 - } 2074 - layer { 2075 - name: "relu_stage2_block2_branch2a" 2076 - type: "ReLU" 2077 - bottom: "conv_stage2_block2_branch2a" 2078 - top: "conv_stage2_block2_branch2a" 2079 - } 2080 - layer { 2081 - name: "conv_stage2_block2_branch2b" 2082 - type: "Convolution" 2083 - bottom: "conv_stage2_block2_branch2a" 2084 - top: "conv_stage2_block2_branch2b" 2085 - param { 2086 - lr_mult: 1 2087 - decay_mult: 1 2088 - } 2089 - param { 2090 - lr_mult: 2 2091 - decay_mult: 0 2092 - } 2093 - convolution_param { 2094 - num_output: 128 2095 - pad: 1 2096 - kernel_size: 3 2097 - stride: 1 2098 - weight_filler { 2099 - type: "xavier" 2100 - } 2101 - bias_filler { 2102 - type: "constant" 2103 - value: 0 2104 - } 2105 - } 2106 - } 2107 - layer { 2108 - name: "bn_stage2_block2_branch2b" 2109 - type: "BatchNorm" 2110 - bottom: "conv_stage2_block2_branch2b" 2111 - top: "conv_stage2_block2_branch2b" 2112 - param { 2113 - lr_mult: 0 2114 - decay_mult: 0 2115 - } 2116 - param { 2117 - lr_mult: 0 2118 - decay_mult: 0 2119 - } 2120 - param { 2121 - lr_mult: 0 2122 - decay_mult: 0 2123 - } 2124 - batch_norm_param { 2125 - use_global_stats: true 2126 - } 2127 - } 2128 - layer { 2129 - name: "scale_stage2_block2_branch2b" 2130 - type: "Scale" 2131 - bottom: "conv_stage2_block2_branch2b" 2132 - top: "conv_stage2_block2_branch2b" 2133 - scale_param { 2134 - bias_term: true 2135 - } 2136 - } 2137 - layer { 2138 - name: "relu_stage2_block2_branch2b" 2139 - type: "ReLU" 2140 - bottom: "conv_stage2_block2_branch2b" 2141 - top: "conv_stage2_block2_branch2b" 2142 - } 2143 - layer { 2144 - name: "conv_stage2_block2_branch2c" 2145 - type: "Convolution" 2146 - bottom: "conv_stage2_block2_branch2b" 2147 - top: "conv_stage2_block2_branch2c" 2148 - param { 2149 - lr_mult: 1 2150 - decay_mult: 1 2151 - } 2152 - param { 2153 - lr_mult: 2 2154 - decay_mult: 0 2155 - } 2156 - convolution_param { 2157 - num_output: 512 2158 - pad: 0 2159 - kernel_size: 1 2160 - stride: 1 2161 - weight_filler { 2162 - type: "xavier" 2163 - } 2164 - bias_filler { 2165 - type: "constant" 2166 - value: 0 2167 - } 2168 - } 2169 - } 2170 - layer { 2171 - name: "bn_stage2_block2_branch2c" 2172 - type: "BatchNorm" 2173 - bottom: "conv_stage2_block2_branch2c" 2174 - top: "conv_stage2_block2_branch2c" 2175 - param { 2176 - lr_mult: 0 2177 - decay_mult: 0 2178 - } 2179 - param { 2180 - lr_mult: 0 2181 - decay_mult: 0 2182 - } 2183 - param { 2184 - lr_mult: 0 2185 - decay_mult: 0 2186 - } 2187 - batch_norm_param { 2188 - use_global_stats: true 2189 - } 2190 - } 2191 - layer { 2192 - name: "scale_stage2_block2_branch2c" 2193 - type: "Scale" 2194 - bottom: "conv_stage2_block2_branch2c" 2195 - top: "conv_stage2_block2_branch2c" 2196 - scale_param { 2197 - bias_term: true 2198 - } 2199 - } 2200 - layer { 2201 - name: "eltwise_stage2_block2" 2202 - type: "Eltwise" 2203 - bottom: "eltwise_stage2_block1" 2204 - bottom: "conv_stage2_block2_branch2c" 2205 - top: "eltwise_stage2_block2" 2206 - } 2207 - layer { 2208 - name: "relu_stage2_block2" 2209 - type: "ReLU" 2210 - bottom: "eltwise_stage2_block2" 2211 - top: "eltwise_stage2_block2" 2212 - } 2213 - layer { 2214 - name: "conv_stage2_block3_branch2a" 2215 - type: "Convolution" 2216 - bottom: "eltwise_stage2_block2" 2217 - top: "conv_stage2_block3_branch2a" 2218 - param { 2219 - lr_mult: 1 2220 - decay_mult: 1 2221 - } 2222 - param { 2223 - lr_mult: 2 2224 - decay_mult: 0 2225 - } 2226 - convolution_param { 2227 - num_output: 128 2228 - pad: 0 2229 - kernel_size: 1 2230 - stride: 1 2231 - weight_filler { 2232 - type: "xavier" 2233 - } 2234 - bias_filler { 2235 - type: "constant" 2236 - value: 0 2237 - } 2238 - } 2239 - } 2240 - layer { 2241 - name: "bn_stage2_block3_branch2a" 2242 - type: "BatchNorm" 2243 - bottom: "conv_stage2_block3_branch2a" 2244 - top: "conv_stage2_block3_branch2a" 2245 - param { 2246 - lr_mult: 0 2247 - decay_mult: 0 2248 - } 2249 - param { 2250 - lr_mult: 0 2251 - decay_mult: 0 2252 - } 2253 - param { 2254 - lr_mult: 0 2255 - decay_mult: 0 2256 - } 2257 - batch_norm_param { 2258 - use_global_stats: true 2259 - } 2260 - } 2261 - layer { 2262 - name: "scale_stage2_block3_branch2a" 2263 - type: "Scale" 2264 - bottom: "conv_stage2_block3_branch2a" 2265 - top: "conv_stage2_block3_branch2a" 2266 - scale_param { 2267 - bias_term: true 2268 - } 2269 - } 2270 - layer { 2271 - name: "relu_stage2_block3_branch2a" 2272 - type: "ReLU" 2273 - bottom: "conv_stage2_block3_branch2a" 2274 - top: "conv_stage2_block3_branch2a" 2275 - } 2276 - layer { 2277 - name: "conv_stage2_block3_branch2b" 2278 - type: "Convolution" 2279 - bottom: "conv_stage2_block3_branch2a" 2280 - top: "conv_stage2_block3_branch2b" 2281 - param { 2282 - lr_mult: 1 2283 - decay_mult: 1 2284 - } 2285 - param { 2286 - lr_mult: 2 2287 - decay_mult: 0 2288 - } 2289 - convolution_param { 2290 - num_output: 128 2291 - pad: 1 2292 - kernel_size: 3 2293 - stride: 1 2294 - weight_filler { 2295 - type: "xavier" 2296 - } 2297 - bias_filler { 2298 - type: "constant" 2299 - value: 0 2300 - } 2301 - } 2302 - } 2303 - layer { 2304 - name: "bn_stage2_block3_branch2b" 2305 - type: "BatchNorm" 2306 - bottom: "conv_stage2_block3_branch2b" 2307 - top: "conv_stage2_block3_branch2b" 2308 - param { 2309 - lr_mult: 0 2310 - decay_mult: 0 2311 - } 2312 - param { 2313 - lr_mult: 0 2314 - decay_mult: 0 2315 - } 2316 - param { 2317 - lr_mult: 0 2318 - decay_mult: 0 2319 - } 2320 - batch_norm_param { 2321 - use_global_stats: true 2322 - } 2323 - } 2324 - layer { 2325 - name: "scale_stage2_block3_branch2b" 2326 - type: "Scale" 2327 - bottom: "conv_stage2_block3_branch2b" 2328 - top: "conv_stage2_block3_branch2b" 2329 - scale_param { 2330 - bias_term: true 2331 - } 2332 - } 2333 - layer { 2334 - name: "relu_stage2_block3_branch2b" 2335 - type: "ReLU" 2336 - bottom: "conv_stage2_block3_branch2b" 2337 - top: "conv_stage2_block3_branch2b" 2338 - } 2339 - layer { 2340 - name: "conv_stage2_block3_branch2c" 2341 - type: "Convolution" 2342 - bottom: "conv_stage2_block3_branch2b" 2343 - top: "conv_stage2_block3_branch2c" 2344 - param { 2345 - lr_mult: 1 2346 - decay_mult: 1 2347 - } 2348 - param { 2349 - lr_mult: 2 2350 - decay_mult: 0 2351 - } 2352 - convolution_param { 2353 - num_output: 512 2354 - pad: 0 2355 - kernel_size: 1 2356 - stride: 1 2357 - weight_filler { 2358 - type: "xavier" 2359 - } 2360 - bias_filler { 2361 - type: "constant" 2362 - value: 0 2363 - } 2364 - } 2365 - } 2366 - layer { 2367 - name: "bn_stage2_block3_branch2c" 2368 - type: "BatchNorm" 2369 - bottom: "conv_stage2_block3_branch2c" 2370 - top: "conv_stage2_block3_branch2c" 2371 - param { 2372 - lr_mult: 0 2373 - decay_mult: 0 2374 - } 2375 - param { 2376 - lr_mult: 0 2377 - decay_mult: 0 2378 - } 2379 - param { 2380 - lr_mult: 0 2381 - decay_mult: 0 2382 - } 2383 - batch_norm_param { 2384 - use_global_stats: true 2385 - } 2386 - } 2387 - layer { 2388 - name: "scale_stage2_block3_branch2c" 2389 - type: "Scale" 2390 - bottom: "conv_stage2_block3_branch2c" 2391 - top: "conv_stage2_block3_branch2c" 2392 - scale_param { 2393 - bias_term: true 2394 - } 2395 - } 2396 - layer { 2397 - name: "eltwise_stage2_block3" 2398 - type: "Eltwise" 2399 - bottom: "eltwise_stage2_block2" 2400 - bottom: "conv_stage2_block3_branch2c" 2401 - top: "eltwise_stage2_block3" 2402 - } 2403 - layer { 2404 - name: "relu_stage2_block3" 2405 - type: "ReLU" 2406 - bottom: "eltwise_stage2_block3" 2407 - top: "eltwise_stage2_block3" 2408 - } 2409 - layer { 2410 - name: "conv_stage2_block4_branch2a" 2411 - type: "Convolution" 2412 - bottom: "eltwise_stage2_block3" 2413 - top: "conv_stage2_block4_branch2a" 2414 - param { 2415 - lr_mult: 1 2416 - decay_mult: 1 2417 - } 2418 - param { 2419 - lr_mult: 2 2420 - decay_mult: 0 2421 - } 2422 - convolution_param { 2423 - num_output: 128 2424 - pad: 0 2425 - kernel_size: 1 2426 - stride: 1 2427 - weight_filler { 2428 - type: "xavier" 2429 - } 2430 - bias_filler { 2431 - type: "constant" 2432 - value: 0 2433 - } 2434 - } 2435 - } 2436 - layer { 2437 - name: "bn_stage2_block4_branch2a" 2438 - type: "BatchNorm" 2439 - bottom: "conv_stage2_block4_branch2a" 2440 - top: "conv_stage2_block4_branch2a" 2441 - param { 2442 - lr_mult: 0 2443 - decay_mult: 0 2444 - } 2445 - param { 2446 - lr_mult: 0 2447 - decay_mult: 0 2448 - } 2449 - param { 2450 - lr_mult: 0 2451 - decay_mult: 0 2452 - } 2453 - batch_norm_param { 2454 - use_global_stats: true 2455 - } 2456 - } 2457 - layer { 2458 - name: "scale_stage2_block4_branch2a" 2459 - type: "Scale" 2460 - bottom: "conv_stage2_block4_branch2a" 2461 - top: "conv_stage2_block4_branch2a" 2462 - scale_param { 2463 - bias_term: true 2464 - } 2465 - } 2466 - layer { 2467 - name: "relu_stage2_block4_branch2a" 2468 - type: "ReLU" 2469 - bottom: "conv_stage2_block4_branch2a" 2470 - top: "conv_stage2_block4_branch2a" 2471 - } 2472 - layer { 2473 - name: "conv_stage2_block4_branch2b" 2474 - type: "Convolution" 2475 - bottom: "conv_stage2_block4_branch2a" 2476 - top: "conv_stage2_block4_branch2b" 2477 - param { 2478 - lr_mult: 1 2479 - decay_mult: 1 2480 - } 2481 - param { 2482 - lr_mult: 2 2483 - decay_mult: 0 2484 - } 2485 - convolution_param { 2486 - num_output: 128 2487 - pad: 1 2488 - kernel_size: 3 2489 - stride: 1 2490 - weight_filler { 2491 - type: "xavier" 2492 - } 2493 - bias_filler { 2494 - type: "constant" 2495 - value: 0 2496 - } 2497 - } 2498 - } 2499 - layer { 2500 - name: "bn_stage2_block4_branch2b" 2501 - type: "BatchNorm" 2502 - bottom: "conv_stage2_block4_branch2b" 2503 - top: "conv_stage2_block4_branch2b" 2504 - param { 2505 - lr_mult: 0 2506 - decay_mult: 0 2507 - } 2508 - param { 2509 - lr_mult: 0 2510 - decay_mult: 0 2511 - } 2512 - param { 2513 - lr_mult: 0 2514 - decay_mult: 0 2515 - } 2516 - batch_norm_param { 2517 - use_global_stats: true 2518 - } 2519 - } 2520 - layer { 2521 - name: "scale_stage2_block4_branch2b" 2522 - type: "Scale" 2523 - bottom: "conv_stage2_block4_branch2b" 2524 - top: "conv_stage2_block4_branch2b" 2525 - scale_param { 2526 - bias_term: true 2527 - } 2528 - } 2529 - layer { 2530 - name: "relu_stage2_block4_branch2b" 2531 - type: "ReLU" 2532 - bottom: "conv_stage2_block4_branch2b" 2533 - top: "conv_stage2_block4_branch2b" 2534 - } 2535 - layer { 2536 - name: "conv_stage2_block4_branch2c" 2537 - type: "Convolution" 2538 - bottom: "conv_stage2_block4_branch2b" 2539 - top: "conv_stage2_block4_branch2c" 2540 - param { 2541 - lr_mult: 1 2542 - decay_mult: 1 2543 - } 2544 - param { 2545 - lr_mult: 2 2546 - decay_mult: 0 2547 - } 2548 - convolution_param { 2549 - num_output: 512 2550 - pad: 0 2551 - kernel_size: 1 2552 - stride: 1 2553 - weight_filler { 2554 - type: "xavier" 2555 - } 2556 - bias_filler { 2557 - type: "constant" 2558 - value: 0 2559 - } 2560 - } 2561 - } 2562 - layer { 2563 - name: "bn_stage2_block4_branch2c" 2564 - type: "BatchNorm" 2565 - bottom: "conv_stage2_block4_branch2c" 2566 - top: "conv_stage2_block4_branch2c" 2567 - param { 2568 - lr_mult: 0 2569 - decay_mult: 0 2570 - } 2571 - param { 2572 - lr_mult: 0 2573 - decay_mult: 0 2574 - } 2575 - param { 2576 - lr_mult: 0 2577 - decay_mult: 0 2578 - } 2579 - batch_norm_param { 2580 - use_global_stats: true 2581 - } 2582 - } 2583 - layer { 2584 - name: "scale_stage2_block4_branch2c" 2585 - type: "Scale" 2586 - bottom: "conv_stage2_block4_branch2c" 2587 - top: "conv_stage2_block4_branch2c" 2588 - scale_param { 2589 - bias_term: true 2590 - } 2591 - } 2592 - layer { 2593 - name: "eltwise_stage2_block4" 2594 - type: "Eltwise" 2595 - bottom: "eltwise_stage2_block3" 2596 - bottom: "conv_stage2_block4_branch2c" 2597 - top: "eltwise_stage2_block4" 2598 - } 2599 - layer { 2600 - name: "relu_stage2_block4" 2601 - type: "ReLU" 2602 - bottom: "eltwise_stage2_block4" 2603 - top: "eltwise_stage2_block4" 2604 - } 2605 - layer { 2606 - name: "conv_stage2_block5_branch2a" 2607 - type: "Convolution" 2608 - bottom: "eltwise_stage2_block4" 2609 - top: "conv_stage2_block5_branch2a" 2610 - param { 2611 - lr_mult: 1 2612 - decay_mult: 1 2613 - } 2614 - param { 2615 - lr_mult: 2 2616 - decay_mult: 0 2617 - } 2618 - convolution_param { 2619 - num_output: 128 2620 - pad: 0 2621 - kernel_size: 1 2622 - stride: 1 2623 - weight_filler { 2624 - type: "xavier" 2625 - } 2626 - bias_filler { 2627 - type: "constant" 2628 - value: 0 2629 - } 2630 - } 2631 - } 2632 - layer { 2633 - name: "bn_stage2_block5_branch2a" 2634 - type: "BatchNorm" 2635 - bottom: "conv_stage2_block5_branch2a" 2636 - top: "conv_stage2_block5_branch2a" 2637 - param { 2638 - lr_mult: 0 2639 - decay_mult: 0 2640 - } 2641 - param { 2642 - lr_mult: 0 2643 - decay_mult: 0 2644 - } 2645 - param { 2646 - lr_mult: 0 2647 - decay_mult: 0 2648 - } 2649 - batch_norm_param { 2650 - use_global_stats: true 2651 - } 2652 - } 2653 - layer { 2654 - name: "scale_stage2_block5_branch2a" 2655 - type: "Scale" 2656 - bottom: "conv_stage2_block5_branch2a" 2657 - top: "conv_stage2_block5_branch2a" 2658 - scale_param { 2659 - bias_term: true 2660 - } 2661 - } 2662 - layer { 2663 - name: "relu_stage2_block5_branch2a" 2664 - type: "ReLU" 2665 - bottom: "conv_stage2_block5_branch2a" 2666 - top: "conv_stage2_block5_branch2a" 2667 - } 2668 - layer { 2669 - name: "conv_stage2_block5_branch2b" 2670 - type: "Convolution" 2671 - bottom: "conv_stage2_block5_branch2a" 2672 - top: "conv_stage2_block5_branch2b" 2673 - param { 2674 - lr_mult: 1 2675 - decay_mult: 1 2676 - } 2677 - param { 2678 - lr_mult: 2 2679 - decay_mult: 0 2680 - } 2681 - convolution_param { 2682 - num_output: 128 2683 - pad: 1 2684 - kernel_size: 3 2685 - stride: 1 2686 - weight_filler { 2687 - type: "xavier" 2688 - } 2689 - bias_filler { 2690 - type: "constant" 2691 - value: 0 2692 - } 2693 - } 2694 - } 2695 - layer { 2696 - name: "bn_stage2_block5_branch2b" 2697 - type: "BatchNorm" 2698 - bottom: "conv_stage2_block5_branch2b" 2699 - top: "conv_stage2_block5_branch2b" 2700 - param { 2701 - lr_mult: 0 2702 - decay_mult: 0 2703 - } 2704 - param { 2705 - lr_mult: 0 2706 - decay_mult: 0 2707 - } 2708 - param { 2709 - lr_mult: 0 2710 - decay_mult: 0 2711 - } 2712 - batch_norm_param { 2713 - use_global_stats: true 2714 - } 2715 - } 2716 - layer { 2717 - name: "scale_stage2_block5_branch2b" 2718 - type: "Scale" 2719 - bottom: "conv_stage2_block5_branch2b" 2720 - top: "conv_stage2_block5_branch2b" 2721 - scale_param { 2722 - bias_term: true 2723 - } 2724 - } 2725 - layer { 2726 - name: "relu_stage2_block5_branch2b" 2727 - type: "ReLU" 2728 - bottom: "conv_stage2_block5_branch2b" 2729 - top: "conv_stage2_block5_branch2b" 2730 - } 2731 - layer { 2732 - name: "conv_stage2_block5_branch2c" 2733 - type: "Convolution" 2734 - bottom: "conv_stage2_block5_branch2b" 2735 - top: "conv_stage2_block5_branch2c" 2736 - param { 2737 - lr_mult: 1 2738 - decay_mult: 1 2739 - } 2740 - param { 2741 - lr_mult: 2 2742 - decay_mult: 0 2743 - } 2744 - convolution_param { 2745 - num_output: 512 2746 - pad: 0 2747 - kernel_size: 1 2748 - stride: 1 2749 - weight_filler { 2750 - type: "xavier" 2751 - } 2752 - bias_filler { 2753 - type: "constant" 2754 - value: 0 2755 - } 2756 - } 2757 - } 2758 - layer { 2759 - name: "bn_stage2_block5_branch2c" 2760 - type: "BatchNorm" 2761 - bottom: "conv_stage2_block5_branch2c" 2762 - top: "conv_stage2_block5_branch2c" 2763 - param { 2764 - lr_mult: 0 2765 - decay_mult: 0 2766 - } 2767 - param { 2768 - lr_mult: 0 2769 - decay_mult: 0 2770 - } 2771 - param { 2772 - lr_mult: 0 2773 - decay_mult: 0 2774 - } 2775 - batch_norm_param { 2776 - use_global_stats: true 2777 - } 2778 - } 2779 - layer { 2780 - name: "scale_stage2_block5_branch2c" 2781 - type: "Scale" 2782 - bottom: "conv_stage2_block5_branch2c" 2783 - top: "conv_stage2_block5_branch2c" 2784 - scale_param { 2785 - bias_term: true 2786 - } 2787 - } 2788 - layer { 2789 - name: "eltwise_stage2_block5" 2790 - type: "Eltwise" 2791 - bottom: "eltwise_stage2_block4" 2792 - bottom: "conv_stage2_block5_branch2c" 2793 - top: "eltwise_stage2_block5" 2794 - } 2795 - layer { 2796 - name: "relu_stage2_block5" 2797 - type: "ReLU" 2798 - bottom: "eltwise_stage2_block5" 2799 - top: "eltwise_stage2_block5" 2800 - } 2801 - layer { 2802 - name: "conv_stage3_block0_proj_shortcut" 2803 - type: "Convolution" 2804 - bottom: "eltwise_stage2_block5" 2805 - top: "conv_stage3_block0_proj_shortcut" 2806 - param { 2807 - lr_mult: 1 2808 - decay_mult: 1 2809 - } 2810 - param { 2811 - lr_mult: 2 2812 - decay_mult: 0 2813 - } 2814 - convolution_param { 2815 - num_output: 1024 2816 - pad: 0 2817 - kernel_size: 1 2818 - stride: 2 2819 - weight_filler { 2820 - type: "xavier" 2821 - } 2822 - bias_filler { 2823 - type: "constant" 2824 - value: 0 2825 - } 2826 - } 2827 - } 2828 - layer { 2829 - name: "bn_stage3_block0_proj_shortcut" 2830 - type: "BatchNorm" 2831 - bottom: "conv_stage3_block0_proj_shortcut" 2832 - top: "conv_stage3_block0_proj_shortcut" 2833 - param { 2834 - lr_mult: 0 2835 - decay_mult: 0 2836 - } 2837 - param { 2838 - lr_mult: 0 2839 - decay_mult: 0 2840 - } 2841 - param { 2842 - lr_mult: 0 2843 - decay_mult: 0 2844 - } 2845 - batch_norm_param { 2846 - use_global_stats: true 2847 - } 2848 - } 2849 - layer { 2850 - name: "scale_stage3_block0_proj_shortcut" 2851 - type: "Scale" 2852 - bottom: "conv_stage3_block0_proj_shortcut" 2853 - top: "conv_stage3_block0_proj_shortcut" 2854 - scale_param { 2855 - bias_term: true 2856 - } 2857 - } 2858 - layer { 2859 - name: "conv_stage3_block0_branch2a" 2860 - type: "Convolution" 2861 - bottom: "eltwise_stage2_block5" 2862 - top: "conv_stage3_block0_branch2a" 2863 - param { 2864 - lr_mult: 1 2865 - decay_mult: 1 2866 - } 2867 - param { 2868 - lr_mult: 2 2869 - decay_mult: 0 2870 - } 2871 - convolution_param { 2872 - num_output: 256 2873 - pad: 0 2874 - kernel_size: 1 2875 - stride: 2 2876 - weight_filler { 2877 - type: "xavier" 2878 - } 2879 - bias_filler { 2880 - type: "constant" 2881 - value: 0 2882 - } 2883 - } 2884 - } 2885 - layer { 2886 - name: "bn_stage3_block0_branch2a" 2887 - type: "BatchNorm" 2888 - bottom: "conv_stage3_block0_branch2a" 2889 - top: "conv_stage3_block0_branch2a" 2890 - param { 2891 - lr_mult: 0 2892 - decay_mult: 0 2893 - } 2894 - param { 2895 - lr_mult: 0 2896 - decay_mult: 0 2897 - } 2898 - param { 2899 - lr_mult: 0 2900 - decay_mult: 0 2901 - } 2902 - batch_norm_param { 2903 - use_global_stats: true 2904 - } 2905 - } 2906 - layer { 2907 - name: "scale_stage3_block0_branch2a" 2908 - type: "Scale" 2909 - bottom: "conv_stage3_block0_branch2a" 2910 - top: "conv_stage3_block0_branch2a" 2911 - scale_param { 2912 - bias_term: true 2913 - } 2914 - } 2915 - layer { 2916 - name: "relu_stage3_block0_branch2a" 2917 - type: "ReLU" 2918 - bottom: "conv_stage3_block0_branch2a" 2919 - top: "conv_stage3_block0_branch2a" 2920 - } 2921 - layer { 2922 - name: "conv_stage3_block0_branch2b" 2923 - type: "Convolution" 2924 - bottom: "conv_stage3_block0_branch2a" 2925 - top: "conv_stage3_block0_branch2b" 2926 - param { 2927 - lr_mult: 1 2928 - decay_mult: 1 2929 - } 2930 - param { 2931 - lr_mult: 2 2932 - decay_mult: 0 2933 - } 2934 - convolution_param { 2935 - num_output: 256 2936 - pad: 1 2937 - kernel_size: 3 2938 - stride: 1 2939 - weight_filler { 2940 - type: "xavier" 2941 - } 2942 - bias_filler { 2943 - type: "constant" 2944 - value: 0 2945 - } 2946 - } 2947 - } 2948 - layer { 2949 - name: "bn_stage3_block0_branch2b" 2950 - type: "BatchNorm" 2951 - bottom: "conv_stage3_block0_branch2b" 2952 - top: "conv_stage3_block0_branch2b" 2953 - param { 2954 - lr_mult: 0 2955 - decay_mult: 0 2956 - } 2957 - param { 2958 - lr_mult: 0 2959 - decay_mult: 0 2960 - } 2961 - param { 2962 - lr_mult: 0 2963 - decay_mult: 0 2964 - } 2965 - batch_norm_param { 2966 - use_global_stats: true 2967 - } 2968 - } 2969 - layer { 2970 - name: "scale_stage3_block0_branch2b" 2971 - type: "Scale" 2972 - bottom: "conv_stage3_block0_branch2b" 2973 - top: "conv_stage3_block0_branch2b" 2974 - scale_param { 2975 - bias_term: true 2976 - } 2977 - } 2978 - layer { 2979 - name: "relu_stage3_block0_branch2b" 2980 - type: "ReLU" 2981 - bottom: "conv_stage3_block0_branch2b" 2982 - top: "conv_stage3_block0_branch2b" 2983 - } 2984 - layer { 2985 - name: "conv_stage3_block0_branch2c" 2986 - type: "Convolution" 2987 - bottom: "conv_stage3_block0_branch2b" 2988 - top: "conv_stage3_block0_branch2c" 2989 - param { 2990 - lr_mult: 1 2991 - decay_mult: 1 2992 - } 2993 - param { 2994 - lr_mult: 2 2995 - decay_mult: 0 2996 - } 2997 - convolution_param { 2998 - num_output: 1024 2999 - pad: 0 3000 - kernel_size: 1 3001 - stride: 1 3002 - weight_filler { 3003 - type: "xavier" 3004 - } 3005 - bias_filler { 3006 - type: "constant" 3007 - value: 0 3008 - } 3009 - } 3010 - } 3011 - layer { 3012 - name: "bn_stage3_block0_branch2c" 3013 - type: "BatchNorm" 3014 - bottom: "conv_stage3_block0_branch2c" 3015 - top: "conv_stage3_block0_branch2c" 3016 - param { 3017 - lr_mult: 0 3018 - decay_mult: 0 3019 - } 3020 - param { 3021 - lr_mult: 0 3022 - decay_mult: 0 3023 - } 3024 - param { 3025 - lr_mult: 0 3026 - decay_mult: 0 3027 - } 3028 - batch_norm_param { 3029 - use_global_stats: true 3030 - } 3031 - } 3032 - layer { 3033 - name: "scale_stage3_block0_branch2c" 3034 - type: "Scale" 3035 - bottom: "conv_stage3_block0_branch2c" 3036 - top: "conv_stage3_block0_branch2c" 3037 - scale_param { 3038 - bias_term: true 3039 - } 3040 - } 3041 - layer { 3042 - name: "eltwise_stage3_block0" 3043 - type: "Eltwise" 3044 - bottom: "conv_stage3_block0_proj_shortcut" 3045 - bottom: "conv_stage3_block0_branch2c" 3046 - top: "eltwise_stage3_block0" 3047 - } 3048 - layer { 3049 - name: "relu_stage3_block0" 3050 - type: "ReLU" 3051 - bottom: "eltwise_stage3_block0" 3052 - top: "eltwise_stage3_block0" 3053 - } 3054 - layer { 3055 - name: "conv_stage3_block1_branch2a" 3056 - type: "Convolution" 3057 - bottom: "eltwise_stage3_block0" 3058 - top: "conv_stage3_block1_branch2a" 3059 - param { 3060 - lr_mult: 1 3061 - decay_mult: 1 3062 - } 3063 - param { 3064 - lr_mult: 2 3065 - decay_mult: 0 3066 - } 3067 - convolution_param { 3068 - num_output: 256 3069 - pad: 0 3070 - kernel_size: 1 3071 - stride: 1 3072 - weight_filler { 3073 - type: "xavier" 3074 - } 3075 - bias_filler { 3076 - type: "constant" 3077 - value: 0 3078 - } 3079 - } 3080 - } 3081 - layer { 3082 - name: "bn_stage3_block1_branch2a" 3083 - type: "BatchNorm" 3084 - bottom: "conv_stage3_block1_branch2a" 3085 - top: "conv_stage3_block1_branch2a" 3086 - param { 3087 - lr_mult: 0 3088 - decay_mult: 0 3089 - } 3090 - param { 3091 - lr_mult: 0 3092 - decay_mult: 0 3093 - } 3094 - param { 3095 - lr_mult: 0 3096 - decay_mult: 0 3097 - } 3098 - batch_norm_param { 3099 - use_global_stats: true 3100 - } 3101 - } 3102 - layer { 3103 - name: "scale_stage3_block1_branch2a" 3104 - type: "Scale" 3105 - bottom: "conv_stage3_block1_branch2a" 3106 - top: "conv_stage3_block1_branch2a" 3107 - scale_param { 3108 - bias_term: true 3109 - } 3110 - } 3111 - layer { 3112 - name: "relu_stage3_block1_branch2a" 3113 - type: "ReLU" 3114 - bottom: "conv_stage3_block1_branch2a" 3115 - top: "conv_stage3_block1_branch2a" 3116 - } 3117 - layer { 3118 - name: "conv_stage3_block1_branch2b" 3119 - type: "Convolution" 3120 - bottom: "conv_stage3_block1_branch2a" 3121 - top: "conv_stage3_block1_branch2b" 3122 - param { 3123 - lr_mult: 1 3124 - decay_mult: 1 3125 - } 3126 - param { 3127 - lr_mult: 2 3128 - decay_mult: 0 3129 - } 3130 - convolution_param { 3131 - num_output: 256 3132 - pad: 1 3133 - kernel_size: 3 3134 - stride: 1 3135 - weight_filler { 3136 - type: "xavier" 3137 - } 3138 - bias_filler { 3139 - type: "constant" 3140 - value: 0 3141 - } 3142 - } 3143 - } 3144 - layer { 3145 - name: "bn_stage3_block1_branch2b" 3146 - type: "BatchNorm" 3147 - bottom: "conv_stage3_block1_branch2b" 3148 - top: "conv_stage3_block1_branch2b" 3149 - param { 3150 - lr_mult: 0 3151 - decay_mult: 0 3152 - } 3153 - param { 3154 - lr_mult: 0 3155 - decay_mult: 0 3156 - } 3157 - param { 3158 - lr_mult: 0 3159 - decay_mult: 0 3160 - } 3161 - batch_norm_param { 3162 - use_global_stats: true 3163 - } 3164 - } 3165 - layer { 3166 - name: "scale_stage3_block1_branch2b" 3167 - type: "Scale" 3168 - bottom: "conv_stage3_block1_branch2b" 3169 - top: "conv_stage3_block1_branch2b" 3170 - scale_param { 3171 - bias_term: true 3172 - } 3173 - } 3174 - layer { 3175 - name: "relu_stage3_block1_branch2b" 3176 - type: "ReLU" 3177 - bottom: "conv_stage3_block1_branch2b" 3178 - top: "conv_stage3_block1_branch2b" 3179 - } 3180 - layer { 3181 - name: "conv_stage3_block1_branch2c" 3182 - type: "Convolution" 3183 - bottom: "conv_stage3_block1_branch2b" 3184 - top: "conv_stage3_block1_branch2c" 3185 - param { 3186 - lr_mult: 1 3187 - decay_mult: 1 3188 - } 3189 - param { 3190 - lr_mult: 2 3191 - decay_mult: 0 3192 - } 3193 - convolution_param { 3194 - num_output: 1024 3195 - pad: 0 3196 - kernel_size: 1 3197 - stride: 1 3198 - weight_filler { 3199 - type: "xavier" 3200 - } 3201 - bias_filler { 3202 - type: "constant" 3203 - value: 0 3204 - } 3205 - } 3206 - } 3207 - layer { 3208 - name: "bn_stage3_block1_branch2c" 3209 - type: "BatchNorm" 3210 - bottom: "conv_stage3_block1_branch2c" 3211 - top: "conv_stage3_block1_branch2c" 3212 - param { 3213 - lr_mult: 0 3214 - decay_mult: 0 3215 - } 3216 - param { 3217 - lr_mult: 0 3218 - decay_mult: 0 3219 - } 3220 - param { 3221 - lr_mult: 0 3222 - decay_mult: 0 3223 - } 3224 - batch_norm_param { 3225 - use_global_stats: true 3226 - } 3227 - } 3228 - layer { 3229 - name: "scale_stage3_block1_branch2c" 3230 - type: "Scale" 3231 - bottom: "conv_stage3_block1_branch2c" 3232 - top: "conv_stage3_block1_branch2c" 3233 - scale_param { 3234 - bias_term: true 3235 - } 3236 - } 3237 - layer { 3238 - name: "eltwise_stage3_block1" 3239 - type: "Eltwise" 3240 - bottom: "eltwise_stage3_block0" 3241 - bottom: "conv_stage3_block1_branch2c" 3242 - top: "eltwise_stage3_block1" 3243 - } 3244 - layer { 3245 - name: "relu_stage3_block1" 3246 - type: "ReLU" 3247 - bottom: "eltwise_stage3_block1" 3248 - top: "eltwise_stage3_block1" 3249 - } 3250 - layer { 3251 - name: "conv_stage3_block2_branch2a" 3252 - type: "Convolution" 3253 - bottom: "eltwise_stage3_block1" 3254 - top: "conv_stage3_block2_branch2a" 3255 - param { 3256 - lr_mult: 1 3257 - decay_mult: 1 3258 - } 3259 - param { 3260 - lr_mult: 2 3261 - decay_mult: 0 3262 - } 3263 - convolution_param { 3264 - num_output: 256 3265 - pad: 0 3266 - kernel_size: 1 3267 - stride: 1 3268 - weight_filler { 3269 - type: "xavier" 3270 - } 3271 - bias_filler { 3272 - type: "constant" 3273 - value: 0 3274 - } 3275 - } 3276 - } 3277 - layer { 3278 - name: "bn_stage3_block2_branch2a" 3279 - type: "BatchNorm" 3280 - bottom: "conv_stage3_block2_branch2a" 3281 - top: "conv_stage3_block2_branch2a" 3282 - param { 3283 - lr_mult: 0 3284 - decay_mult: 0 3285 - } 3286 - param { 3287 - lr_mult: 0 3288 - decay_mult: 0 3289 - } 3290 - param { 3291 - lr_mult: 0 3292 - decay_mult: 0 3293 - } 3294 - batch_norm_param { 3295 - use_global_stats: true 3296 - } 3297 - } 3298 - layer { 3299 - name: "scale_stage3_block2_branch2a" 3300 - type: "Scale" 3301 - bottom: "conv_stage3_block2_branch2a" 3302 - top: "conv_stage3_block2_branch2a" 3303 - scale_param { 3304 - bias_term: true 3305 - } 3306 - } 3307 - layer { 3308 - name: "relu_stage3_block2_branch2a" 3309 - type: "ReLU" 3310 - bottom: "conv_stage3_block2_branch2a" 3311 - top: "conv_stage3_block2_branch2a" 3312 - } 3313 - layer { 3314 - name: "conv_stage3_block2_branch2b" 3315 - type: "Convolution" 3316 - bottom: "conv_stage3_block2_branch2a" 3317 - top: "conv_stage3_block2_branch2b" 3318 - param { 3319 - lr_mult: 1 3320 - decay_mult: 1 3321 - } 3322 - param { 3323 - lr_mult: 2 3324 - decay_mult: 0 3325 - } 3326 - convolution_param { 3327 - num_output: 256 3328 - pad: 1 3329 - kernel_size: 3 3330 - stride: 1 3331 - weight_filler { 3332 - type: "xavier" 3333 - } 3334 - bias_filler { 3335 - type: "constant" 3336 - value: 0 3337 - } 3338 - } 3339 - } 3340 - layer { 3341 - name: "bn_stage3_block2_branch2b" 3342 - type: "BatchNorm" 3343 - bottom: "conv_stage3_block2_branch2b" 3344 - top: "conv_stage3_block2_branch2b" 3345 - param { 3346 - lr_mult: 0 3347 - decay_mult: 0 3348 - } 3349 - param { 3350 - lr_mult: 0 3351 - decay_mult: 0 3352 - } 3353 - param { 3354 - lr_mult: 0 3355 - decay_mult: 0 3356 - } 3357 - batch_norm_param { 3358 - use_global_stats: true 3359 - } 3360 - } 3361 - layer { 3362 - name: "scale_stage3_block2_branch2b" 3363 - type: "Scale" 3364 - bottom: "conv_stage3_block2_branch2b" 3365 - top: "conv_stage3_block2_branch2b" 3366 - scale_param { 3367 - bias_term: true 3368 - } 3369 - } 3370 - layer { 3371 - name: "relu_stage3_block2_branch2b" 3372 - type: "ReLU" 3373 - bottom: "conv_stage3_block2_branch2b" 3374 - top: "conv_stage3_block2_branch2b" 3375 - } 3376 - layer { 3377 - name: "conv_stage3_block2_branch2c" 3378 - type: "Convolution" 3379 - bottom: "conv_stage3_block2_branch2b" 3380 - top: "conv_stage3_block2_branch2c" 3381 - param { 3382 - lr_mult: 1 3383 - decay_mult: 1 3384 - } 3385 - param { 3386 - lr_mult: 2 3387 - decay_mult: 0 3388 - } 3389 - convolution_param { 3390 - num_output: 1024 3391 - pad: 0 3392 - kernel_size: 1 3393 - stride: 1 3394 - weight_filler { 3395 - type: "xavier" 3396 - } 3397 - bias_filler { 3398 - type: "constant" 3399 - value: 0 3400 - } 3401 - } 3402 - } 3403 - layer { 3404 - name: "bn_stage3_block2_branch2c" 3405 - type: "BatchNorm" 3406 - bottom: "conv_stage3_block2_branch2c" 3407 - top: "conv_stage3_block2_branch2c" 3408 - param { 3409 - lr_mult: 0 3410 - decay_mult: 0 3411 - } 3412 - param { 3413 - lr_mult: 0 3414 - decay_mult: 0 3415 - } 3416 - param { 3417 - lr_mult: 0 3418 - decay_mult: 0 3419 - } 3420 - batch_norm_param { 3421 - use_global_stats: true 3422 - } 3423 - } 3424 - layer { 3425 - name: "scale_stage3_block2_branch2c" 3426 - type: "Scale" 3427 - bottom: "conv_stage3_block2_branch2c" 3428 - top: "conv_stage3_block2_branch2c" 3429 - scale_param { 3430 - bias_term: true 3431 - } 3432 - } 3433 - layer { 3434 - name: "eltwise_stage3_block2" 3435 - type: "Eltwise" 3436 - bottom: "eltwise_stage3_block1" 3437 - bottom: "conv_stage3_block2_branch2c" 3438 - top: "eltwise_stage3_block2" 3439 - } 3440 - layer { 3441 - name: "relu_stage3_block2" 3442 - type: "ReLU" 3443 - bottom: "eltwise_stage3_block2" 3444 - top: "eltwise_stage3_block2" 3445 - } 3446 - layer { 3447 - name: "pool" 3448 - type: "Pooling" 3449 - bottom: "eltwise_stage3_block2" 3450 - top: "pool" 3451 - pooling_param { 3452 - pool: AVE 3453 - kernel_size: 7 3454 - stride: 1 3455 - } 3456 - } 3457 - layer { 3458 - name: "fc_nsfw" 3459 - type: "InnerProduct" 3460 - bottom: "pool" 3461 - top: "fc_nsfw" 3462 - param { 3463 - lr_mult: 5 3464 - decay_mult: 1 3465 - } 3466 - param { 3467 - lr_mult: 10 3468 - decay_mult: 0 3469 - } 3470 - inner_product_param{ 3471 - num_output: 2 3472 - weight_filler { 3473 - type: "xavier" 3474 - std: 0.01 3475 - } 3476 - bias_filler { 3477 - type: "xavier" 3478 - value: 0 3479 - } 3480 - } 3481 - } 3482 - layer { 3483 - name: "prob" 3484 - type: "Softmax" 3485 - bottom: "fc_nsfw" 3486 - top: "prob" 3487 - } 3488 -
nsfw_model/resnet_50_1by2_nsfw.caffemodel

This is a binary file and will not be displayed.

+3 -1
requirements.txt
··· 12 12 clamd 13 13 14 14 # nsfw detection 15 - numpy 15 + torch 16 + transformers 17 + pillow 16 18 17 19 # mod ui 18 20 av