├── .DS_Store ├── .gitignore ├── LICENSE ├── README.md ├── SRM.py └── assets ├── .DS_Store ├── compare.png ├── result_classification.png ├── result_transfer.png └── teaser.png /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taki0112/SRM-Tensorflow/649cbd02d1b3c06fb51e9bc071234c7ca3cbfd69/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Junho Kim (1993.01.12) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SRM-Tensorflow 2 | Simple Tensorflow implementation of ["SRM : A Style-based Recalibration Module for Convolutional Neural Networks"](https://arxiv.org/abs/1903.10829) 3 | 4 |
5 | 6 |
7 | 8 | ## Usage 9 | ```python 10 | from SRM import SRM_block 11 | 12 | x = SRM_block(x, channels, use_bias=False, is_training=is_training, scope='srm_block') 13 | 14 | ``` 15 | 16 | ## How to use in residual block 17 |
18 | 19 |
20 | 21 | 22 | ## Results 23 | ### Classification 24 | 25 | 26 | ### Style Transfer 27 | 28 | 29 | ### Reference 30 | * [SRMNet-Pytorch](https://github.com/EvgenyKashin/SRMnet) 31 | 32 | ## Author 33 | Junho Kim 34 | -------------------------------------------------------------------------------- /SRM.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | 3 | def SRM_block(x, channels, use_bias=False, is_training=True, scope='srm_block'): 4 | with tf.variable_scope(scope) : 5 | bs, h, w, c = x.get_shape().as_list() # c = channels 6 | 7 | x = tf.reshape(x, shape=[bs, -1, c]) # [bs, h*w, c] 8 | 9 | x_mean, x_var = tf.nn.moments(x, axes=1, keep_dims=True) # [bs, 1, c] 10 | x_std = tf.sqrt(x_var + 1e-5) 11 | 12 | t = tf.concat([x_mean, x_std], axis=1) # [bs, 2, c] 13 | 14 | z = tf.layers.conv1d(t, channels, kernel_size=2, strides=1, use_bias=use_bias) 15 | z = tf.layers.batch_normalization(z, momentum=0.9, epsilon=1e-05, center=True, scale=True, training=is_training, name=scope) 16 | # z = tf.contrib.layers.batch_norm(z, decay=0.9, epsilon=1e-05, center=True, scale=True, updates_collections=None, is_training=is_training, scope=scope) 17 | 18 | g = tf.sigmoid(z) 19 | 20 | x = tf.reshape(x * g, shape=[bs, h, w, c]) 21 | 22 | return x 23 | -------------------------------------------------------------------------------- /assets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taki0112/SRM-Tensorflow/649cbd02d1b3c06fb51e9bc071234c7ca3cbfd69/assets/.DS_Store -------------------------------------------------------------------------------- /assets/compare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taki0112/SRM-Tensorflow/649cbd02d1b3c06fb51e9bc071234c7ca3cbfd69/assets/compare.png -------------------------------------------------------------------------------- /assets/result_classification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taki0112/SRM-Tensorflow/649cbd02d1b3c06fb51e9bc071234c7ca3cbfd69/assets/result_classification.png -------------------------------------------------------------------------------- /assets/result_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taki0112/SRM-Tensorflow/649cbd02d1b3c06fb51e9bc071234c7ca3cbfd69/assets/result_transfer.png -------------------------------------------------------------------------------- /assets/teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taki0112/SRM-Tensorflow/649cbd02d1b3c06fb51e9bc071234c7ca3cbfd69/assets/teaser.png --------------------------------------------------------------------------------