From cd00af4134c231c7e32cd7215d11fca6ccc5a6d9 Mon Sep 17 00:00:00 2001 From: gosha20777 Date: Sat, 6 Jul 2024 01:23:06 +0200 Subject: [PATCH] release 0.1.0 --- .gitignore | 9 +- README.md | 91 ++- environment.yml | 151 +++++ figures/main.png | Bin 0 -> 644872 bytes rawformer/__init__.py | 3 + rawformer/base/LICENSE | 59 ++ rawformer/base/__init__.py | 0 rawformer/base/image_pool.py | 61 ++ rawformer/base/losses.py | 181 ++++++ rawformer/base/networks.py | 416 ++++++++++++ rawformer/base/schedulers.py | 44 ++ rawformer/base/weight_init.py | 54 ++ rawformer/cgan/__init__.py | 30 + rawformer/cgan/autoencoder.py | 151 +++++ rawformer/cgan/checkpoint.py | 73 +++ rawformer/cgan/cyclegan.py | 231 +++++++ rawformer/cgan/funcs.py | 18 + rawformer/cgan/model_base.py | 176 ++++++ rawformer/cgan/named_dict.py | 48 ++ rawformer/cgan/pix2pix.py | 171 +++++ rawformer/cgan/rawformer.py | 454 ++++++++++++++ rawformer/cgan/simple_autoencoder.py | 93 +++ rawformer/cgan/uvcgan2.py | 453 ++++++++++++++ rawformer/config/__init__.py | 4 + rawformer/config/args.py | 99 +++ rawformer/config/config.py | 142 +++++ rawformer/config/config_base.py | 27 + rawformer/config/data_config.py | 212 +++++++ rawformer/config/funcs.py | 7 + rawformer/config/model_config.py | 31 + rawformer/config/transfer_config.py | 53 ++ rawformer/consts.py | 16 + rawformer/eval/__init__.py | 0 rawformer/eval/funcs.py | 108 ++++ rawformer/models/__init__.py | 0 rawformer/models/discriminator/__init__.py | 14 + rawformer/models/funcs.py | 13 + rawformer/models/generator/__init__.py | 37 ++ rawformer/models/generator/vit.py | 78 +++ rawformer/models/generator/vitmodnet.py | 60 ++ rawformer/models/generator/vitrawnet.py | 64 ++ rawformer/models/generator/vitunet.py | 51 ++ rawformer/presets.py | 87 +++ rawformer/torch/__init__.py | 0 rawformer/torch/funcs.py | 52 ++ rawformer/torch/gradient_penalty.py | 127 ++++ rawformer/torch/image_masking.py | 129 ++++ rawformer/torch/layers/__init__.py | 0 rawformer/torch/layers/batch_head.py | 242 +++++++ rawformer/torch/layers/cnn.py | 213 +++++++ rawformer/torch/layers/modnet.py | 414 ++++++++++++ rawformer/torch/layers/rawnet.py | 695 +++++++++++++++++++++ rawformer/torch/layers/rawnet_lsb.py | 474 ++++++++++++++ rawformer/torch/layers/transformer.py | 365 +++++++++++ rawformer/torch/layers/unet.py | 321 ++++++++++ rawformer/torch/losses.py | 138 ++++ rawformer/torch/queue.py | 81 +++ rawformer/torch/select.py | 87 +++ rawformer/torch/spectr_norm.py | 23 + rawformer/train/__init__.py | 0 rawformer/train/callbacks/__init__.py | 1 + rawformer/train/callbacks/history.py | 39 ++ rawformer/train/callbacks/save_images.py | 11 + rawformer/train/metrics/__init__.py | 2 + rawformer/train/metrics/loss_metrics.py | 24 + rawformer/train/transfer.py | 166 +++++ rawformer/utils/__init__.py | 0 rawformer/utils/funcs.py | 37 ++ rawformer/utils/log.py | 23 + rawformer/utils/parsers.py | 110 ++++ scripts/downsize_right.py | 101 +++ scripts/eval_fid.py | 121 ++++ scripts/eval_il2_scores.py | 170 +++++ scripts/image2image/.gitignore | 2 + scripts/image2image/predict.py | 95 +++ scripts/image2image/pretrain.py | 87 +++ scripts/image2image/train.py | 144 +++++ scripts/print_model.py | 25 + setup.py | 19 + tests/__init__.py | 0 tests/test_queues.py | 129 ++++ 81 files changed, 8734 insertions(+), 3 deletions(-) create mode 100644 environment.yml create mode 100644 figures/main.png create mode 100644 rawformer/__init__.py create mode 100644 rawformer/base/LICENSE create mode 100644 rawformer/base/__init__.py create mode 100644 rawformer/base/image_pool.py create mode 100644 rawformer/base/losses.py create mode 100644 rawformer/base/networks.py create mode 100644 rawformer/base/schedulers.py create mode 100644 rawformer/base/weight_init.py create mode 100644 rawformer/cgan/__init__.py create mode 100644 rawformer/cgan/autoencoder.py create mode 100644 rawformer/cgan/checkpoint.py create mode 100644 rawformer/cgan/cyclegan.py create mode 100644 rawformer/cgan/funcs.py create mode 100644 rawformer/cgan/model_base.py create mode 100644 rawformer/cgan/named_dict.py create mode 100644 rawformer/cgan/pix2pix.py create mode 100644 rawformer/cgan/rawformer.py create mode 100644 rawformer/cgan/simple_autoencoder.py create mode 100644 rawformer/cgan/uvcgan2.py create mode 100644 rawformer/config/__init__.py create mode 100644 rawformer/config/args.py create mode 100644 rawformer/config/config.py create mode 100644 rawformer/config/config_base.py create mode 100644 rawformer/config/data_config.py create mode 100644 rawformer/config/funcs.py create mode 100644 rawformer/config/model_config.py create mode 100644 rawformer/config/transfer_config.py create mode 100644 rawformer/consts.py create mode 100644 rawformer/eval/__init__.py create mode 100644 rawformer/eval/funcs.py create mode 100644 rawformer/models/__init__.py create mode 100644 rawformer/models/discriminator/__init__.py create mode 100644 rawformer/models/funcs.py create mode 100644 rawformer/models/generator/__init__.py create mode 100644 rawformer/models/generator/vit.py create mode 100644 rawformer/models/generator/vitmodnet.py create mode 100644 rawformer/models/generator/vitrawnet.py create mode 100644 rawformer/models/generator/vitunet.py create mode 100644 rawformer/presets.py create mode 100644 rawformer/torch/__init__.py create mode 100644 rawformer/torch/funcs.py create mode 100644 rawformer/torch/gradient_penalty.py create mode 100644 rawformer/torch/image_masking.py create mode 100644 rawformer/torch/layers/__init__.py create mode 100644 rawformer/torch/layers/batch_head.py create mode 100644 rawformer/torch/layers/cnn.py create mode 100644 rawformer/torch/layers/modnet.py create mode 100644 rawformer/torch/layers/rawnet.py create mode 100644 rawformer/torch/layers/rawnet_lsb.py create mode 100644 rawformer/torch/layers/transformer.py create mode 100644 rawformer/torch/layers/unet.py create mode 100644 rawformer/torch/losses.py create mode 100644 rawformer/torch/queue.py create mode 100644 rawformer/torch/select.py create mode 100644 rawformer/torch/spectr_norm.py create mode 100644 rawformer/train/__init__.py create mode 100644 rawformer/train/callbacks/__init__.py create mode 100644 rawformer/train/callbacks/history.py create mode 100644 rawformer/train/callbacks/save_images.py create mode 100644 rawformer/train/metrics/__init__.py create mode 100644 rawformer/train/metrics/loss_metrics.py create mode 100644 rawformer/train/transfer.py create mode 100644 rawformer/utils/__init__.py create mode 100644 rawformer/utils/funcs.py create mode 100644 rawformer/utils/log.py create mode 100644 rawformer/utils/parsers.py create mode 100644 scripts/downsize_right.py create mode 100644 scripts/eval_fid.py create mode 100644 scripts/eval_il2_scores.py create mode 100644 scripts/image2image/.gitignore create mode 100644 scripts/image2image/predict.py create mode 100644 scripts/image2image/pretrain.py create mode 100644 scripts/image2image/train.py create mode 100644 scripts/print_model.py create mode 100644 setup.py create mode 100644 tests/__init__.py create mode 100644 tests/test_queues.py diff --git a/.gitignore b/.gitignore index 82f9275..b9e8820 100644 --- a/.gitignore +++ b/.gitignore @@ -159,4 +159,11 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ + +data/ +outdir/ +predict.py +train.py +pretrain.py +test.ipynb \ No newline at end of file diff --git a/README.md b/README.md index 77a2a87..9aa2c92 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,89 @@ -# rawformer -Unpaired Raw-to-Raw Translation for Learnable Camera ISPs +# Rawformer: Unpaired Raw-to-Raw Translation for Learnable Camera ISPs + +🚀 The paper was accepted to the [ECCV 2024](https://eccv.ecva.net/Conferences/2024) conference. The preprint is available on [arXiv](https://arxiv.org/abs/2404.10700). 🚀 + +### Authors +Georgy Perevozchikov, Nancy Mehta, Mahmoud Afifi, Radu Timofte + +![Rawformer](figures/main.png) + +### Abstract +*Modern smartphone camera quality heavily relies on the image signal processor (ISP) to enhance captured raw images, utilizing carefully designed modules to produce final output images encoded in a standard color space (e.g., sRGB). Neural-based end-to-end learnable ISPs offer promising advancements, potentially replacing traditional ISPs with their ability to adapt without requiring extensive tuning for each new camera model, as is often the case for nearly every module in traditional ISPs. However, the key challenge with the recent learning-based ISPs is the urge to collect large paired datasets for each distinct camera model due to the influence of intrinsic camera characteristics on the formation of input raw images. This paper tackles this challenge by introducing a novel method for unpaired learning of raw-to-raw translation across diverse cameras. Specifically, we propose Rawformer, an unsupervised Transformer-based encoder-decoder method for raw-to-raw translation. It accurately maps raw images captured by a certain camera to the target camera, facilitating the generalization of learnable ISPs to new unseen cameras. Our method demonstrates superior performance on real camera datasets, achieving higher accuracy compared to previous state-of-the-art techniques, and preserving a more robust correlation between the original and translated raw images.* + +## To Do + +*It is the first version of the code (0.1.0). We are working on the following tasks:* + +- [x] Release Rawformer code +- [ ] Upload prepared datasets +- [ ] Upload the pre-trained models +- [ ] Rewrite the code to pytorch-lightning +- [ ] Add ONNX export scripts + + +## Datasets + +### Data Structure +``` +- data + - + - trainA + - img1.jpg, img2.jpg, ... + - trainB + - imgA.jpg, imgB.jpg, ... + - trainA + - img1.jpg, img2.jpg, ... + - trainB + - imgA.jpg, imgB.jpg, ... +``` + +### Dowload Datasets + +*Under construction* + + +## Pretained Models + +*Under construction* + + +## How To Use + +### Setup The Environment +```bash +git clone https://github.com/gosha20777/rawformer.git +cd rawformer +conda env create -n rawformer -f environment.yaml +conda activate rawformer +python setup.py install +``` + +### Train Rawformer + +#### Pretrain Generator +```bash +cd experiments/ +python pretrain.py --batch-size 8 +``` + +#### Train Rawformer +```bash +cd experiments/ +python train.py +``` + +#### Test Rawformer +```bash +cd experiments/ +python predict.py --split test +``` + +## Citation +```BibTeX +@article{perevozchikov2024rawformer, + title={Rawformer: Unpaired Raw-to-Raw Translation for Learnable Camera ISPs}, + author={Perevozchikov, Georgy and Mehta, Nancy and Afifi, Mahmoud and Timofte, Radu}, + journal={arXiv preprint arXiv:2404.10700}, + year={2024} +} +``` diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..9e53195 --- /dev/null +++ b/environment.yml @@ -0,0 +1,151 @@ +name: rawformer +channels: + - pytorch + - nvidia + - defaults +dependencies: + - _libgcc_mutex=0.1=main + - _openmp_mutex=5.1=1_gnu + - blas=1.0=mkl + - bottleneck=1.3.7=py312ha883a20_0 + - brotli=1.0.9=h5eee18b_8 + - brotli-bin=1.0.9=h5eee18b_8 + - brotli-python=1.0.9=py312h6a678d5_8 + - bzip2=1.0.8=h5eee18b_6 + - ca-certificates=2024.3.11=h06a4308_0 + - certifi=2024.6.2=py312h06a4308_0 + - charset-normalizer=2.0.4=pyhd3eb1b0_0 + - contourpy=1.2.0=py312hdb19cb5_0 + - cuda-cudart=12.1.105=0 + - cuda-cupti=12.1.105=0 + - cuda-libraries=12.1.0=0 + - cuda-nvrtc=12.1.105=0 + - cuda-nvtx=12.1.105=0 + - cuda-opencl=12.5.39=0 + - cuda-runtime=12.1.0=0 + - cuda-version=12.5=3 + - cycler=0.11.0=pyhd3eb1b0_0 + - cyrus-sasl=2.1.28=h52b45da_1 + - dbus=1.13.18=hb2f20db_0 + - expat=2.6.2=h6a678d5_0 + - ffmpeg=4.3=hf484d3e_0 + - filelock=3.13.1=py312h06a4308_0 + - fontconfig=2.14.1=h4c34cd2_2 + - fonttools=4.51.0=py312h5eee18b_0 + - freetype=2.12.1=h4a9f257_0 + - glib=2.78.4=h6a678d5_0 + - glib-tools=2.78.4=h6a678d5_0 + - gmp=6.2.1=h295c915_3 + - gnutls=3.6.15=he1e5248_0 + - gst-plugins-base=1.14.1=h6a678d5_1 + - gstreamer=1.14.1=h5eee18b_1 + - icu=73.1=h6a678d5_0 + - idna=3.7=py312h06a4308_0 + - intel-openmp=2023.1.0=hdb19cb5_46306 + - jinja2=3.1.4=py312h06a4308_0 + - jpeg=9e=h5eee18b_1 + - kiwisolver=1.4.4=py312h6a678d5_0 + - krb5=1.20.1=h143b758_1 + - lame=3.100=h7b6447c_0 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libbrotlicommon=1.0.9=h5eee18b_8 + - libbrotlidec=1.0.9=h5eee18b_8 + - libbrotlienc=1.0.9=h5eee18b_8 + - libclang=14.0.6=default_hc6dbbc7_1 + - libclang13=14.0.6=default_he11475f_1 + - libcublas=12.1.0.26=0 + - libcufft=11.0.2.4=0 + - libcufile=1.10.0.4=0 + - libcups=2.4.2=h2d74bed_1 + - libcurand=10.3.6.39=0 + - libcusolver=11.4.4.55=0 + - libcusparse=12.0.2.55=0 + - libdeflate=1.17=h5eee18b_1 + - libedit=3.1.20230828=h5eee18b_0 + - libffi=3.4.4=h6a678d5_1 + - libgcc-ng=11.2.0=h1234567_1 + - libglib=2.78.4=hdc74915_0 + - libgomp=11.2.0=h1234567_1 + - libiconv=1.16=h5eee18b_3 + - libidn2=2.3.4=h5eee18b_0 + - libjpeg-turbo=2.0.0=h9bf148f_0 + - libllvm14=14.0.6=hdb19cb5_3 + - libnpp=12.0.2.50=0 + - libnvjitlink=12.1.105=0 + - libnvjpeg=12.1.1.14=0 + - libpng=1.6.39=h5eee18b_0 + - libpq=12.17=hdbd6064_0 + - libstdcxx-ng=11.2.0=h1234567_1 + - libtasn1=4.19.0=h5eee18b_0 + - libtiff=4.5.1=h6a678d5_0 + - libunistring=0.9.10=h27cfd23_0 + - libuuid=1.41.5=h5eee18b_0 + - libwebp-base=1.3.2=h5eee18b_0 + - libxcb=1.15=h7f8727e_0 + - libxkbcommon=1.0.1=h5eee18b_1 + - libxml2=2.10.4=hfdd30dd_2 + - llvm-openmp=14.0.6=h9e868ea_0 + - lz4-c=1.9.4=h6a678d5_1 + - markupsafe=2.1.3=py312h5eee18b_0 + - matplotlib=3.8.4=py312h06a4308_0 + - matplotlib-base=3.8.4=py312h526ad5a_0 + - mkl=2023.1.0=h213fc3f_46344 + - mkl-service=2.4.0=py312h5eee18b_1 + - mkl_fft=1.3.8=py312h5eee18b_0 + - mkl_random=1.2.4=py312hdb19cb5_0 + - mpmath=1.3.0=py312h06a4308_0 + - mysql=5.7.24=h721c034_2 + - ncurses=6.4=h6a678d5_0 + - nettle=3.7.3=hbbd107a_1 + - networkx=3.2.1=py312h06a4308_0 + - numexpr=2.8.7=py312hf827012_0 + - numpy=1.26.4=py312hc5e2394_0 + - numpy-base=1.26.4=py312h0da6c21_0 + - openh264=2.1.1=h4ff587b_0 + - openjpeg=2.4.0=h3ad879b_0 + - openssl=3.0.14=h5eee18b_0 + - packaging=23.2=py312h06a4308_0 + - pandas=2.2.2=py312h526ad5a_0 + - pcre2=10.42=hebb0a14_1 + - pillow=10.3.0=py312h5eee18b_0 + - pip=24.0=py312h06a4308_0 + - ply=3.11=py312h06a4308_1 + - pyparsing=3.0.9=py312h06a4308_0 + - pyqt=5.15.10=py312h6a678d5_0 + - pyqt5-sip=12.13.0=py312h5eee18b_0 + - pysocks=1.7.1=py312h06a4308_0 + - python=3.12.4=h5148396_1 + - python-dateutil=2.9.0post0=py312h06a4308_2 + - python-tzdata=2023.3=pyhd3eb1b0_0 + - pytorch=2.3.1=py3.12_cuda12.1_cudnn8.9.2_0 + - pytorch-cuda=12.1=ha16c6d3_5 + - pytorch-mutex=1.0=cuda + - pytz=2024.1=py312h06a4308_0 + - pyyaml=6.0.1=py312h5eee18b_0 + - qt-main=5.15.2=h53bd1ea_10 + - readline=8.2=h5eee18b_0 + - requests=2.32.2=py312h06a4308_0 + - setuptools=69.5.1=py312h06a4308_0 + - sip=6.7.12=py312h6a678d5_0 + - six=1.16.0=pyhd3eb1b0_1 + - sqlite=3.45.3=h5eee18b_0 + - sympy=1.12=py312h06a4308_0 + - tbb=2021.8.0=hdb19cb5_0 + - tk=8.6.14=h39e8969_0 + - torchaudio=2.3.1=py312_cu121 + - torchvision=0.18.1=py312_cu121 + - tornado=6.4.1=py312h5eee18b_0 + - typing_extensions=4.11.0=py312h06a4308_0 + - tzdata=2024a=h04d1e81_0 + - unicodedata2=15.1.0=py312h5eee18b_0 + - urllib3=2.2.2=py312h06a4308_0 + - wheel=0.43.0=py312h06a4308_0 + - xz=5.4.6=h5eee18b_1 + - yaml=0.2.5=h7b6447c_0 + - zlib=1.2.13=h5eee18b_1 + - zstd=1.5.5=hc292b87_2 + - pip: + - tqdm==4.66.4 + - einops==0.8.0 diff --git a/figures/main.png b/figures/main.png new file mode 100644 index 0000000000000000000000000000000000000000..bac5e59b25fc8e2582dd66e5abba12d89149e5fc GIT binary patch literal 644872 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簮vxj@w!r;OP8F>KLT8+85#BnbqGZlh{{oe%Q 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

0~hlArj@pXTGk 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 z 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 z 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

  • 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�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

    *| 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

    (h>ly;zII@PjOGnZ$O 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 WR2v+0yv_XYN=^zWSuJiH{C@z=1Cs0j literal 0 HcmV?d00001 diff --git a/rawformer/__init__.py b/rawformer/__init__.py new file mode 100644 index 0000000..4a0fd09 --- /dev/null +++ b/rawformer/__init__.py @@ -0,0 +1,3 @@ +from .consts import CONFIG_NAME, ROOT_DATA, ROOT_OUTDIR +from .utils.funcs import join_dicts +from .train.train import train diff --git a/rawformer/base/LICENSE b/rawformer/base/LICENSE new file mode 100644 index 0000000..62bb1ca --- /dev/null +++ b/rawformer/base/LICENSE @@ -0,0 +1,59 @@ +Copyright (c) 2021-2023, The LS4GAN Project Developers +Copyright (c) 2017, Jun-Yan Zhu and Taesung Park +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* 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. + + +--------------------------- LICENSE FOR pix2pix -------------------------------- +BSD License + +For pix2pix software +Copyright (c) 2016, Phillip Isola and Jun-Yan Zhu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* 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. + +----------------------------- LICENSE FOR DCGAN -------------------------------- +BSD License + +For dcgan.torch software + +Copyright (c) 2015, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +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. + +Neither the name Facebook nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +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/rawformer/base/__init__.py b/rawformer/base/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/base/image_pool.py b/rawformer/base/image_pool.py new file mode 100644 index 0000000..af8cbfb --- /dev/null +++ b/rawformer/base/image_pool.py @@ -0,0 +1,61 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +# pylint: disable=line-too-long + +import random +import torch + + +class ImagePool(): + """This class implements an image buffer that stores previously generated images. + + This buffer enables us to update discriminators using a history of generated images + rather than the ones produced by the latest generators. + """ + + def __init__(self, pool_size): + """Initialize the ImagePool class + + Parameters: + pool_size (int) -- the size of image buffer, if pool_size=0, no buffer will be created + """ + self.pool_size = pool_size + if self.pool_size > 0: # create an empty pool + self.num_imgs = 0 + self.images = [] + + def query(self, images): + """Return an image from the pool. + + Parameters: + images: the latest generated images from the generator + + Returns images from the buffer. + + By 50/100, the buffer will return input images. + By 50/100, the buffer will return images previously stored in the buffer, + and insert the current images to the buffer. + """ + if self.pool_size == 0: # if the buffer size is 0, do nothing + return images + return_images = [] + for image in images: + image = torch.unsqueeze(image.data, 0) + if self.num_imgs < self.pool_size: # if the buffer is not full; keep inserting current images to the buffer + self.num_imgs = self.num_imgs + 1 + self.images.append(image) + return_images.append(image) + else: + p = random.uniform(0, 1) + if p > 0.5: # by 50% chance, the buffer will return a previously stored image, and insert the current image into the buffer + random_id = random.randint(0, self.pool_size - 1) # randint is inclusive + tmp = self.images[random_id].clone() + self.images[random_id] = image + return_images.append(tmp) + else: # by another 50% chance, the buffer will return the current image + return_images.append(image) + return_images = torch.cat(return_images, 0) # collect all the images and return + return return_images diff --git a/rawformer/base/losses.py b/rawformer/base/losses.py new file mode 100644 index 0000000..e48913f --- /dev/null +++ b/rawformer/base/losses.py @@ -0,0 +1,181 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +import torch +from torch import nn + +class GANLoss(nn.Module): + """Define different GAN objectives. + + The GANLoss class abstracts away the need to create the target label tensor + that has the same size as the input. + """ + + def __init__( + self, gan_mode, target_real_label = 1.0, target_fake_label = 0.0 + ): + """ Initialize the GANLoss class. + + Parameters: + gan_mode (str) -- the type of GAN objective. + Choices: vanilla, lsgan, and wgangp. + target_real_label (bool) -- label for a real image + target_fake_label (bool) -- label of a fake image + + Note: Do not use sigmoid as the last layer of Discriminator. + LSGAN needs no sigmoid. Vanilla GANs will handle it with + BCEWithLogitsLoss. + """ + super().__init__() + + # pylint: disable=not-callable + self.register_buffer('real_label', torch.tensor(target_real_label)) + self.register_buffer('fake_label', torch.tensor(target_fake_label)) + + self.gan_mode = gan_mode + + if gan_mode == 'lsgan': + self.loss = nn.MSELoss() + + elif gan_mode == 'vanilla': + self.loss = nn.BCEWithLogitsLoss() + + elif gan_mode == 'softplus': + self.loss = nn.Softplus() + + elif gan_mode == 'wgan': + self.loss = None + + else: + raise NotImplementedError('gan mode %s not implemented' % gan_mode) + + def get_target_tensor(self, prediction, target_is_real): + """Create label tensors with the same size as the input. + + Parameters: + prediction (tensor) -- tpyically the prediction from a + discriminator + target_is_real (bool) -- if the ground truth label is for real + images or fake images + + Returns: + A label tensor filled with ground truth label, and with the size of + the input + """ + + if target_is_real: + target_tensor = self.real_label + else: + target_tensor = self.fake_label + return target_tensor.expand_as(prediction) + + def forward(self, prediction, target_is_real): + """Calculate loss given Discriminator's output and grount truth labels. + + Parameters: + prediction (tensor) -- tpyically the prediction output from a + discriminator + target_is_real (bool) -- if the ground truth label is for real + images or fake images + + Returns: + the calculated loss. + """ + + if isinstance(prediction, (list, tuple)): + result = sum(self.forward(x, target_is_real) for x in prediction) + return result / len(prediction) + + if self.gan_mode == 'wgan': + if target_is_real: + return -prediction.mean() + else: + return prediction.mean() + + if self.gan_mode == 'softplus': + if target_is_real: + return self.loss(prediction).mean() + else: + return self.loss(-prediction).mean() + + target_tensor = self.get_target_tensor(prediction, target_is_real) + return self.loss(prediction, target_tensor) + +# pylint: disable=too-many-arguments +# pylint: disable=redefined-builtin +def cal_gradient_penalty( + netD, real_data, fake_data, device, + type = 'mixed', constant = 1.0, lambda_gp = 10.0 +): + """Calculate the gradient penalty loss, used in WGAN-GP + + source: https://arxiv.org/abs/1704.00028 + + Arguments: + netD (network) -- discriminator network + real_data (tensor array) -- real images + fake_data (tensor array) -- generated images from the generator + device (str) -- torch device + type (str) -- if we mix real and fake data or not + Choices: [real | fake | mixed]. + constant (float) -- the constant used in formula: + (||gradient||_2 - constant)^2 + lambda_gp (float) -- weight for this loss + + Returns the gradient penalty loss + """ + if lambda_gp == 0.0: + return 0.0, None + + if type == 'real': + interpolatesv = real_data + elif type == 'fake': + interpolatesv = fake_data + elif type == 'mixed': + alpha = torch.rand(real_data.shape[0], 1, device = device) + alpha = alpha.expand( + real_data.shape[0], real_data.nelement() // real_data.shape[0] + ).contiguous().view(*real_data.shape) + + interpolatesv = alpha * real_data + ((1 - alpha) * fake_data) + else: + raise NotImplementedError('{} not implemented'.format(type)) + + interpolatesv.requires_grad_(True) + disc_interpolates = netD(interpolatesv) + + gradients = torch.autograd.grad( + outputs=disc_interpolates, inputs=interpolatesv, + grad_outputs=torch.ones(disc_interpolates.size()).to(device), + create_graph=True, retain_graph=True, only_inputs=True + ) + + gradients = gradients[0].view(real_data.size(0), -1) + + gradient_penalty = ( + ((gradients + 1e-16).norm(2, dim=1) - constant) ** 2 + ).mean() * lambda_gp + + return gradient_penalty, gradients + +def calc_zero_gp(model, x, **model_kwargs): + x.requires_grad_(True) + y = model(x, **model_kwargs) + + grad = torch.autograd.grad( + outputs = y, + inputs = x, + grad_outputs = torch.ones(y.size()).to(y.device), + create_graph = True, + retain_graph = True, + only_inputs = True + ) + + grad = grad[0].view(x.shape[0], -1) + # NOTE: 1/2 for backward compatibility + gp = 1/2 * torch.sum(grad.square(), dim = 1).mean() + + return gp, grad + diff --git a/rawformer/base/networks.py b/rawformer/base/networks.py new file mode 100644 index 0000000..f9122b5 --- /dev/null +++ b/rawformer/base/networks.py @@ -0,0 +1,416 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +# pylint: disable=line-too-long +# pylint: disable=redefined-builtin +# pylint: disable=too-many-arguments +# pylint: disable=unidiomatic-typecheck +# pylint: disable=super-with-arguments + +import functools + +import torch +from torch import nn + +class Identity(nn.Module): + # pylint: disable=no-self-use + def forward(self, x): + return x + +def get_norm_layer(norm_type='instance'): + """Return a normalization layer + + Parameters: + norm_type (str) -- the name of the normalization layer: batch | instance | none + + For BatchNorm, we use learnable affine parameters and track running statistics (mean/stddev). + For InstanceNorm, we do not use learnable affine parameters. We do not track running statistics. + """ + if norm_type == 'batch': + norm_layer = functools.partial(nn.BatchNorm2d, affine=True, track_running_stats=True) + elif norm_type == 'instance': + norm_layer = functools.partial(nn.InstanceNorm2d, affine=False, track_running_stats=False) + elif norm_type == 'none': + norm_layer = lambda _features : Identity() + else: + raise NotImplementedError('normalization layer [%s] is not found' % norm_type) + + return norm_layer + +def join_args(a, b): + return { **a, **b } + +def select_base_generator(model, **kwargs): + default_args = dict(norm = 'instance', use_dropout = False, ngf = 64) + kwargs = join_args(default_args, kwargs) + + if model == 'resnet_9blocks': + return ResnetGenerator(n_blocks = 9, **kwargs) + + if model == 'resnet_6blocks': + return ResnetGenerator(n_blocks = 6, **kwargs) + + if model == 'unet_128': + return UnetGenerator(num_downs = 7, **kwargs) + + if model == 'unet_256': + return UnetGenerator(num_downs = 8, **kwargs) + + raise ValueError("Unknown generator: %s" % model) + +def select_base_discriminator(model, **kwargs): + default_args = dict(norm = 'instance', ndf = 64) + kwargs = join_args(default_args, kwargs) + + if model == 'basic': + return NLayerDiscriminator(n_layers = 3, **kwargs) + + if model == 'n_layers': + return NLayerDiscriminator(**kwargs) + + if model == 'pixel': + return PixelDiscriminator(**kwargs) + + raise ValueError("Unknown discriminator: %s" % model) + +class ResnetGenerator(nn.Module): + """Resnet-based generator that consists of Resnet blocks between a few downsampling/upsampling operations. + + We adapt Torch code and idea from Justin Johnson's neural style transfer project(https://github.com/jcjohnson/fast-neural-style) + """ + + def __init__(self, image_shape, ngf=64, norm = 'batch', use_dropout=False, n_blocks=6, padding_type='reflect'): + """Construct a Resnet-based generator + + Parameters: + input_nc (int) -- the number of channels in input images + output_nc (int) -- the number of channels in output images + ngf (int) -- the number of filters in the last conv layer + norm_layer -- normalization layer + use_dropout (bool) -- if use dropout layers + n_blocks (int) -- the number of ResNet blocks + padding_type (str) -- the name of padding layer in conv layers: reflect | replicate | zero + """ + + assert n_blocks >= 0 + super().__init__() + + norm_layer = get_norm_layer(norm_type = norm) + + if type(norm_layer) == functools.partial: + use_bias = norm_layer.func == nn.InstanceNorm2d + else: + use_bias = norm_layer == nn.InstanceNorm2d + + model = [nn.ReflectionPad2d(3), + nn.Conv2d(image_shape[0], ngf, kernel_size=7, padding=0, bias=use_bias), + norm_layer(ngf), + nn.ReLU(True)] + + n_downsampling = 2 + for i in range(n_downsampling): # add downsampling layers + mult = 2 ** i + model += [nn.Conv2d(ngf * mult, ngf * mult * 2, kernel_size=3, stride=2, padding=1, bias=use_bias), + norm_layer(ngf * mult * 2), + nn.ReLU(True)] + + mult = 2 ** n_downsampling + for i in range(n_blocks): # add ResNet blocks + + model += [ResnetBlock(ngf * mult, padding_type=padding_type, norm_layer=norm_layer, use_dropout=use_dropout, use_bias=use_bias)] + + for i in range(n_downsampling): # add upsampling layers + mult = 2 ** (n_downsampling - i) + model += [nn.ConvTranspose2d(ngf * mult, int(ngf * mult / 2), + kernel_size=3, stride=2, + padding=1, output_padding=1, + bias=use_bias), + norm_layer(int(ngf * mult / 2)), + nn.ReLU(True)] + model += [nn.ReflectionPad2d(3)] + model += [nn.Conv2d(ngf, image_shape[0], kernel_size=7, padding=0)] + + if image_shape[0] == 3: + model.append(nn.Sigmoid()) + + self.model = nn.Sequential(*model) + + def forward(self, input): + """Standard forward""" + return self.model(input) + + +class ResnetBlock(nn.Module): + """Define a Resnet block""" + + def __init__(self, dim, padding_type, norm_layer, use_dropout, use_bias): + """Initialize the Resnet block + + A resnet block is a conv block with skip connections + We construct a conv block with build_conv_block function, + and implement skip connections in function. + Original Resnet paper: https://arxiv.org/pdf/1512.03385.pdf + """ + super().__init__() + self.conv_block = self.build_conv_block(dim, padding_type, norm_layer, use_dropout, use_bias) + + # pylint: disable=no-self-use + def build_conv_block(self, dim, padding_type, norm_layer, use_dropout, use_bias): + """Construct a convolutional block. + + Parameters: + dim (int) -- the number of channels in the conv layer. + padding_type (str) -- the name of padding layer: reflect | replicate | zero + norm_layer -- normalization layer + use_dropout (bool) -- if use dropout layers. + use_bias (bool) -- if the conv layer uses bias or not + + Returns a conv block (with a conv layer, a normalization layer, and a non-linearity layer (ReLU)) + """ + conv_block = [] + p = 0 + if padding_type == 'reflect': + conv_block += [nn.ReflectionPad2d(1)] + elif padding_type == 'replicate': + conv_block += [nn.ReplicationPad2d(1)] + elif padding_type == 'zero': + p = 1 + else: + raise NotImplementedError('padding [%s] is not implemented' % padding_type) + + conv_block += [nn.Conv2d(dim, dim, kernel_size=3, padding=p, bias=use_bias), norm_layer(dim), nn.ReLU(True)] + if use_dropout: + conv_block += [nn.Dropout(0.5)] + + p = 0 + if padding_type == 'reflect': + conv_block += [nn.ReflectionPad2d(1)] + elif padding_type == 'replicate': + conv_block += [nn.ReplicationPad2d(1)] + elif padding_type == 'zero': + p = 1 + else: + raise NotImplementedError('padding [%s] is not implemented' % padding_type) + conv_block += [nn.Conv2d(dim, dim, kernel_size=3, padding=p, bias=use_bias), norm_layer(dim)] + + return nn.Sequential(*conv_block) + + def forward(self, x): + """Forward function (with skip connections)""" + out = x + self.conv_block(x) # add skip connections + return out + + +class UnetGenerator(nn.Module): + """Create a Unet-based generator""" + + def __init__(self, image_shape, num_downs, ngf=64, norm = 'batch', use_dropout=False): + """Construct a Unet generator + Parameters: + input_nc (int) -- the number of channels in input images + output_nc (int) -- the number of channels in output images + num_downs (int) -- the number of downsamplings in UNet. For example, # if |num_downs| == 7, + image of size 128x128 will become of size 1x1 # at the bottleneck + ngf (int) -- the number of filters in the last conv layer + norm_layer -- normalization layer + + We construct the U-Net from the innermost layer to the outermost layer. + It is a recursive process. + """ + super(UnetGenerator, self).__init__() + norm_layer = get_norm_layer(norm_type=norm) + + # construct unet structure + unet_block = UnetSkipConnectionBlock(ngf * 8, ngf * 8, input_nc=None, submodule=None, norm_layer=norm_layer, innermost=True) # add the innermost layer + for _i in range(num_downs - 5): # add intermediate layers with ngf * 8 filters + unet_block = UnetSkipConnectionBlock(ngf * 8, ngf * 8, input_nc=None, submodule=unet_block, norm_layer=norm_layer, use_dropout=use_dropout) + # gradually reduce the number of filters from ngf * 8 to ngf + unet_block = UnetSkipConnectionBlock(ngf * 4, ngf * 8, input_nc=None, submodule=unet_block, norm_layer=norm_layer) + unet_block = UnetSkipConnectionBlock(ngf * 2, ngf * 4, input_nc=None, submodule=unet_block, norm_layer=norm_layer) + unet_block = UnetSkipConnectionBlock(ngf, ngf * 2, input_nc=None, submodule=unet_block, norm_layer=norm_layer) + self.model = UnetSkipConnectionBlock(image_shape[0], ngf, input_nc=image_shape[0], submodule=unet_block, outermost=True, norm_layer=norm_layer) # add the outermost layer + + def forward(self, input): + """Standard forward""" + return self.model(input) + + +class UnetSkipConnectionBlock(nn.Module): + """Defines the Unet submodule with skip connection. + X -------------------identity---------------------- + |-- downsampling -- |submodule| -- upsampling --| + """ + + def __init__(self, outer_nc, inner_nc, input_nc=None, + submodule=None, outermost=False, innermost=False, norm_layer=nn.BatchNorm2d, use_dropout=False): + """Construct a Unet submodule with skip connections. + + Parameters: + outer_nc (int) -- the number of filters in the outer conv layer + inner_nc (int) -- the number of filters in the inner conv layer + input_nc (int) -- the number of channels in input images/features + submodule (UnetSkipConnectionBlock) -- previously defined submodules + outermost (bool) -- if this module is the outermost module + innermost (bool) -- if this module is the innermost module + norm_layer -- normalization layer + use_dropout (bool) -- if use dropout layers. + """ + # pylint: disable=too-many-locals + super().__init__() + self.outermost = outermost + if type(norm_layer) == functools.partial: + use_bias = norm_layer.func == nn.InstanceNorm2d + else: + use_bias = norm_layer == nn.InstanceNorm2d + if input_nc is None: + input_nc = outer_nc + downconv = nn.Conv2d(input_nc, inner_nc, kernel_size=4, + stride=2, padding=1, bias=use_bias) + downrelu = nn.LeakyReLU(0.2, True) + downnorm = norm_layer(inner_nc) + uprelu = nn.ReLU(True) + upnorm = norm_layer(outer_nc) + + if outermost: + upconv = nn.ConvTranspose2d(inner_nc * 2, outer_nc, + kernel_size=4, stride=2, + padding=1) + down = [downconv] + up = [uprelu, upconv ] + + if outer_nc == 3: + up.append(nn.Sigmoid()) + + model = down + [submodule] + up + elif innermost: + upconv = nn.ConvTranspose2d(inner_nc, outer_nc, + kernel_size=4, stride=2, + padding=1, bias=use_bias) + down = [downrelu, downconv] + up = [uprelu, upconv, upnorm] + model = down + up + else: + upconv = nn.ConvTranspose2d(inner_nc * 2, outer_nc, + kernel_size=4, stride=2, + padding=1, bias=use_bias) + down = [downrelu, downconv, downnorm] + up = [uprelu, upconv, upnorm] + + if use_dropout: + model = down + [submodule] + up + [nn.Dropout(0.5)] + else: + model = down + [submodule] + up + + self.model = nn.Sequential(*model) + + def forward(self, x): + if self.outermost: + return self.model(x) + else: # add skip connections + return torch.cat([x, self.model(x)], 1) + + +class NLayerDiscriminator(nn.Module): + """Defines a PatchGAN discriminator""" + + def __init__( + self, image_shape, ndf=64, n_layers=3, norm='batch', max_mult=8, + shrink_output = True, return_intermediate_activations = False + ): + # pylint: disable=too-many-locals + """Construct a PatchGAN discriminator + + Parameters: + input_nc (int) -- the number of channels in input images + ndf (int) -- the number of filters in the last conv layer + n_layers (int) -- the number of conv layers in the discriminator + norm_layer -- normalization layer + """ + super(NLayerDiscriminator, self).__init__() + + norm_layer = get_norm_layer(norm_type = norm) + + if type(norm_layer) == functools.partial: + use_bias = norm_layer.func == nn.InstanceNorm2d + else: + use_bias = norm_layer == nn.InstanceNorm2d + + kw = 4 + padw = 1 + sequence = [nn.Conv2d(image_shape[0], ndf, kernel_size=kw, stride=2, padding=padw), nn.LeakyReLU(0.2, True)] + nf_mult = 1 + nf_mult_prev = 1 + for n in range(1, n_layers): # gradually increase the number of filters + nf_mult_prev = nf_mult + nf_mult = min(2 ** n, max_mult) + sequence += [ + nn.Conv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=2, padding=padw, bias=use_bias), + norm_layer(ndf * nf_mult), + nn.LeakyReLU(0.2, True) + ] + + nf_mult_prev = nf_mult + nf_mult = min(2 ** n_layers, max_mult) + sequence += [ + nn.Conv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=1, padding=padw, bias=use_bias), + norm_layer(ndf * nf_mult), + nn.LeakyReLU(0.2, True) + ] + + self.model = nn.Sequential(*sequence) + self.shrink_conv = None + + if shrink_output: + self.shrink_conv = nn.Conv2d(ndf * nf_mult, 1, kernel_size=kw, stride=1, padding=padw) + + self._intermediate = return_intermediate_activations + + def forward(self, input): + """Standard forward.""" + z = self.model(input) + + if self.shrink_conv is None: + return z + + y = self.shrink_conv(z) + + if self._intermediate: + return (y, z) + + return y + +class PixelDiscriminator(nn.Module): + """Defines a 1x1 PatchGAN discriminator (pixelGAN)""" + + def __init__(self, image_shape, ndf=64, norm='batch'): + """Construct a 1x1 PatchGAN discriminator + + Parameters: + input_nc (int) -- the number of channels in input images + ndf (int) -- the number of filters in the last conv layer + norm_layer -- normalization layer + """ + super(PixelDiscriminator, self).__init__() + + norm_layer = get_norm_layer(norm_type=norm) + + if type(norm_layer) == functools.partial: # no need to use bias as BatchNorm2d has affine parameters + use_bias = norm_layer.func == nn.InstanceNorm2d + else: + use_bias = norm_layer == nn.InstanceNorm2d + + self.net = [ + nn.Conv2d(image_shape[0], ndf, kernel_size=1, stride=1, padding=0), + nn.LeakyReLU(0.2, True), + nn.Conv2d(ndf, ndf * 2, kernel_size=1, stride=1, padding=0, bias=use_bias), + norm_layer(ndf * 2), + nn.LeakyReLU(0.2, True), + nn.Conv2d(ndf * 2, 1, kernel_size=1, stride=1, padding=0, bias=use_bias)] + + self.net = nn.Sequential(*self.net) + + def forward(self, input): + """Standard forward.""" + return self.net(input) diff --git a/rawformer/base/schedulers.py b/rawformer/base/schedulers.py new file mode 100644 index 0000000..26df595 --- /dev/null +++ b/rawformer/base/schedulers.py @@ -0,0 +1,44 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +from torch.optim import lr_scheduler +from rawformer.torch.select import extract_name_kwargs + +def linear_scheduler(optimizer, epochs_warmup, epochs_anneal, verbose = True): + + def lambda_rule(epoch, epochs_warmup, epochs_anneal): + if epoch < epochs_warmup: + return 1.0 + + return 1.0 - (epoch - epochs_warmup) / (epochs_anneal + 1) + + lr_fn = lambda epoch : lambda_rule(epoch, epochs_warmup, epochs_anneal) + + return lr_scheduler.LambdaLR(optimizer, lr_fn, verbose = verbose) + +def get_scheduler(optimizer, scheduler): + if scheduler is None: + return None + + name, kwargs = extract_name_kwargs(scheduler) + kwargs['verbose'] = True + + if name == 'linear': + return linear_scheduler(optimizer, **kwargs) + + if name == 'step': + return lr_scheduler.StepLR(optimizer, **kwargs) + + if name == 'plateau': + return lr_scheduler.ReduceLROnPlateau(optimizer, **kwargs) + + if name == 'cosine': + return lr_scheduler.CosineAnnealingLR(optimizer, **kwargs) + + if name == 'CosineAnnealingWarmRestarts': + return lr_scheduler.CosineAnnealingWarmRestarts(optimizer, **kwargs) + + raise ValueError("Unknown scheduler '%s'" % name) + diff --git a/rawformer/base/weight_init.py b/rawformer/base/weight_init.py new file mode 100644 index 0000000..bf7a768 --- /dev/null +++ b/rawformer/base/weight_init.py @@ -0,0 +1,54 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +import logging +from torch.nn import init + +from rawformer.torch.select import extract_name_kwargs + +LOGGER = logging.getLogger('rawformer.base') + +def winit_func(m, init_type = 'normal', init_gain = 0.2): + classname = m.__class__.__name__ + + if ( + hasattr(m, 'weight') + and (classname.find('Conv') != -1 or classname.find('Linear') != -1) + ): + if init_type == 'normal': + init.normal_(m.weight.data, 0.0, init_gain) + + elif init_type == 'xavier': + init.xavier_normal_(m.weight.data, gain = init_gain) + + elif init_type == 'kaiming': + init.kaiming_normal_(m.weight.data, a = 0, mode = 'fan_in') + + elif init_type == 'orthogonal': + init.orthogonal_(m.weight.data, gain = init_gain) + + else: + raise NotImplementedError( + 'Initialization method [%s] is not implemented' % init_type + ) + + if hasattr(m, 'bias') and m.bias is not None: + init.constant_(m.bias.data, 0.0) + + elif classname.find('BatchNorm2d') != -1: + init.normal_(m.weight.data, 1.0, init_gain) + init.constant_(m.bias.data, 0.0) + +def init_weights(net, weight_init): + if weight_init is None: + return + + name, kwargs = extract_name_kwargs(weight_init) + + LOGGER.debug('Initializnig network with %s', name) + net.apply( + lambda m, name=name, kwargs=kwargs : winit_func(m, name, **kwargs) + ) + diff --git a/rawformer/cgan/__init__.py b/rawformer/cgan/__init__.py new file mode 100644 index 0000000..eb1a4b6 --- /dev/null +++ b/rawformer/cgan/__init__.py @@ -0,0 +1,30 @@ +from .cyclegan import CycleGANModel +from .pix2pix import Pix2PixModel +from .autoencoder import Autoencoder +from .simple_autoencoder import SimpleAutoencoder +from .uvcgan2 import UVCGAN2 +from .rawformer import RawFormerGan + +CGAN_MODELS = { + 'cyclegan' : CycleGANModel, + 'pix2pix' : Pix2PixModel, + 'autoencoder' : Autoencoder, + 'simple-autoencoder' : SimpleAutoencoder, + 'uvcgan2' : UVCGAN2, + 'rawformer' : RawFormerGan, +} + +def select_model(name, **kwargs): + if name not in CGAN_MODELS: + raise ValueError("Unknown model: %s" % name) + + return CGAN_MODELS[name](**kwargs) + +def construct_model(savedir, config, is_train, device): + model = select_model( + config.model, savedir = savedir, config = config, is_train = is_train, + device = device, **config.model_args + ) + + return model + diff --git a/rawformer/cgan/autoencoder.py b/rawformer/cgan/autoencoder.py new file mode 100644 index 0000000..8cb3c27 --- /dev/null +++ b/rawformer/cgan/autoencoder.py @@ -0,0 +1,151 @@ +# pylint: disable=not-callable +# NOTE: Mistaken lint: +# E1102: self.encoder is not callable (not-callable) +from rawformer.torch.select import select_optimizer, select_loss +from rawformer.torch.image_masking import select_masking +from rawformer.models.generator import construct_generator + +from .model_base import ModelBase +from .named_dict import NamedDict +from .funcs import set_two_domain_input + +class Autoencoder(ModelBase): + + def _setup_images(self, _config): + images = [ 'real_a', 'reco_a', 'real_b', 'reco_b', ] + + if self.masking is not None: + images += [ 'masked_a', 'masked_b' ] + + return NamedDict(*images) + + def _setup_models(self, config): + if self.joint: + image_shape = config.data.datasets[0].shape + + assert image_shape == config.data.datasets[1].shape, ( + "Joint autoencoder requires all datasets to have " + "the same image shape" + ) + + return NamedDict( + encoder = construct_generator( + config.generator, image_shape, image_shape, self.device + ) + ) + + models = NamedDict('encoder_a', 'encoder_b') + models.encoder_a = construct_generator( + config.generator, + config.data.datasets[0].shape, + config.data.datasets[0].shape, + self.device + ) + models.encoder_b = construct_generator( + config.generator, + config.data.datasets[1].shape, + config.data.datasets[1].shape, + self.device + ) + + return models + + def _setup_losses(self, config): + self.loss_fn = select_loss(config.loss).to(self.device) + + assert config.gradient_penalty is None, \ + "Autoencoder model does not support gradient penalty" + + return NamedDict('loss_a', 'loss_b') + + def _setup_optimizers(self, config): + if self.joint: + return NamedDict( + encoder = select_optimizer( + self.models.encoder.parameters(), + config.generator.optimizer + ) + ) + + optimizers = NamedDict('encoder_a', 'encoder_b') + + optimizers.encoder_a = select_optimizer( + self.models.encoder_a.parameters(), config.generator.optimizer + ) + optimizers.encoder_b = select_optimizer( + self.models.encoder_b.parameters(), config.generator.optimizer + ) + + return optimizers + + def __init__( + self, savedir, config, is_train, device, + joint = False, masking = None + ): + # pylint: disable=too-many-arguments + self.joint = joint + self.masking = select_masking(masking) + + assert len(config.data.datasets) == 2, \ + "Autoencoder expects a pair of datasets" + + super().__init__(savedir, config, is_train, device) + + assert config.discriminator is None, \ + "Autoencoder model does not use discriminator" + + def _set_input(self, inputs, domain): + set_two_domain_input(self.images, inputs, domain, self.device) + + def forward(self): + input_a = self.images.real_a + input_b = self.images.real_b + + if self.masking is not None: + if input_a is not None: + input_a = self.masking(input_a) + + if input_b is not None: + input_b = self.masking(input_b) + + self.images.masked_a = input_a + self.images.masked_b = input_b + + if input_a is not None: + if self.joint: + self.images.reco_a = self.models.encoder (input_a) + else: + self.images.reco_a = self.models.encoder_a(input_a) + + if input_b is not None: + if self.joint: + self.images.reco_b = self.models.encoder (input_b) + else: + self.images.reco_b = self.models.encoder_b(input_b) + + def backward_generator_base(self, real, reco): + loss = self.loss_fn(reco, real) + loss.backward() + + return loss + + def backward_generators(self): + self.losses.loss_b = self.backward_generator_base( + self.images.real_b, self.images.reco_b + ) + + self.losses.loss_a = self.backward_generator_base( + self.images.real_a, self.images.reco_a + ) + + def optimization_step(self): + self.forward() + + for optimizer in self.optimizers.values(): + optimizer.zero_grad() + + self.backward_generators() + + for optimizer in self.optimizers.values(): + optimizer.step() + diff --git a/rawformer/cgan/checkpoint.py b/rawformer/cgan/checkpoint.py new file mode 100644 index 0000000..70c6a77 --- /dev/null +++ b/rawformer/cgan/checkpoint.py @@ -0,0 +1,73 @@ +import os +import re +import torch + +CHECKPOINTS_DIR = 'checkpoints' + +def find_last_checkpoint_epoch(savedir, prefix = None): + root = os.path.join(savedir, CHECKPOINTS_DIR) + if not os.path.exists(root): + return -1 + + if prefix is None: + r = re.compile(r'(\d+)_.*') + else: + r = re.compile(r'(\d+)_' + re.escape(prefix) + '_.*') + + last_epoch = -1 + + for fname in os.listdir(root): + m = r.match(fname) + if m: + epoch = int(m.groups()[0]) + last_epoch = max(last_epoch, epoch) + + return last_epoch + +def get_save_path(savedir, name, epoch, mkdir = False): + if epoch is None: + fname = '%s.pth' % (name) + root = savedir + else: + fname = '%04d_%s.pth' % (epoch, name) + root = os.path.join(savedir, CHECKPOINTS_DIR) + + result = os.path.join(root, fname) + + if mkdir: + os.makedirs(root, exist_ok = True) + + return result + +def save(named_dict, savedir, prefix, epoch = None): + for (k,v) in named_dict.items(): + if v is None: + continue + + save_path = get_save_path( + savedir, prefix + '_' + k, epoch, mkdir = True + ) + + if isinstance(v, torch.nn.DataParallel): + torch.save(v.module.state_dict(), save_path) + else: + torch.save(v.state_dict(), save_path) + +def load(named_dict, savedir, prefix, epoch, device): + for (k,v) in named_dict.items(): + if v is None: + continue + + load_path = get_save_path( + savedir, prefix + '_' + k, epoch, mkdir = False + ) + + if isinstance(v, torch.nn.DataParallel): + v.module.load_state_dict( + torch.load(load_path, map_location = device) + ) + else: + v.load_state_dict( + torch.load(load_path, map_location = device) + ) + diff --git a/rawformer/cgan/cyclegan.py b/rawformer/cgan/cyclegan.py new file mode 100644 index 0000000..da358c7 --- /dev/null +++ b/rawformer/cgan/cyclegan.py @@ -0,0 +1,231 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +# pylint: disable=not-callable +# NOTE: Mistaken lint: +# E1102: self.criterion_gan is not callable (not-callable) + +import itertools +import torch + +from rawformer.torch.select import select_optimizer +from rawformer.base.image_pool import ImagePool +from rawformer.base.losses import GANLoss, cal_gradient_penalty +from rawformer.models.discriminator import construct_discriminator +from rawformer.models.generator import construct_generator + +from .model_base import ModelBase +from .named_dict import NamedDict +from .funcs import set_two_domain_input + +class CycleGANModel(ModelBase): + # pylint: disable=too-many-instance-attributes + + def _setup_images(self, _config): + images = [ 'real_a', 'fake_b', 'reco_a', 'real_b', 'fake_a', 'reco_b' ] + + if self.is_train and self.lambda_idt > 0: + images += [ 'idt_a', 'idt_b' ] + + return NamedDict(*images) + + def _setup_models(self, config): + models = {} + + models['gen_ab'] = construct_generator( + config.generator, + config.data.datasets[0].shape, + config.data.datasets[1].shape, + self.device + ) + models['gen_ba'] = construct_generator( + config.generator, + config.data.datasets[1].shape, + config.data.datasets[0].shape, + self.device + ) + + if self.is_train: + models['disc_a'] = construct_discriminator( + config.discriminator, + config.data.datasets[0].shape, + self.device + ) + models['disc_b'] = construct_discriminator( + config.discriminator, + config.data.datasets[1].shape, + self.device + ) + + return NamedDict(**models) + + def _setup_losses(self, config): + losses = [ + 'gen_ab', 'gen_ba', 'cycle_a', 'cycle_b', 'disc_a', 'disc_b' + ] + + if self.is_train and self.lambda_idt > 0: + losses += [ 'idt_a', 'idt_b' ] + + return NamedDict(*losses) + + def _setup_optimizers(self, config): + optimizers = NamedDict('gen', 'disc') + + optimizers.gen = select_optimizer( + itertools.chain( + self.models.gen_ab.parameters(), + self.models.gen_ba.parameters() + ), + config.generator.optimizer + ) + + optimizers.disc = select_optimizer( + itertools.chain( + self.models.disc_a.parameters(), + self.models.disc_b.parameters() + ), + config.discriminator.optimizer + ) + + return optimizers + + def __init__( + self, savedir, config, is_train, device, pool_size = 50, + lambda_a = 10.0, lambda_b = 10.0, lambda_idt = 0.5 + ): + # pylint: disable=too-many-arguments + self.lambda_a = lambda_a + self.lambda_b = lambda_b + self.lambda_idt = lambda_idt + + assert len(config.data.datasets) == 2, \ + "CycleGAN expects a pair of datasets" + + super().__init__(savedir, config, is_train, device) + + self.criterion_gan = GANLoss(config.loss).to(self.device) + self.gradient_penalty = config.gradient_penalty + self.criterion_cycle = torch.nn.L1Loss() + self.criterion_idt = torch.nn.L1Loss() + + if self.is_train: + self.pred_a_pool = ImagePool(pool_size) + self.pred_b_pool = ImagePool(pool_size) + + def _set_input(self, inputs, domain): + set_two_domain_input(self.images, inputs, domain, self.device) + + def forward(self): + def simple_fwd(batch, gen_fwd, gen_bkw): + if batch is None: + return (None, None) + + fake = gen_fwd(batch) + reco = gen_bkw(fake) + + return (fake, reco) + + self.images.fake_b, self.images.reco_a = simple_fwd( + self.images.real_a, self.models.gen_ab, self.models.gen_ba + ) + + self.images.fake_a, self.images.reco_b = simple_fwd( + self.images.real_b, self.models.gen_ba, self.models.gen_ab + ) + + def backward_discriminator_base(self, model, real, fake): + pred_real = model(real) + loss_real = self.criterion_gan(pred_real, True) + + # + # NOTE: + # This is a workaround to a pytorch 1.9.0 bug that manifests when + # cudnn is enabled. When the bug is solved remove no_grad block and + # replace `model(fake)` by `model(fake.detach())`. + # + # bug: https://github.com/pytorch/pytorch/issues/48439 + # + with torch.no_grad(): + fake = fake.contiguous() + + pred_fake = model(fake) + loss_fake = self.criterion_gan(pred_fake, False) + + loss = (loss_real + loss_fake) * 0.5 + + if self.gradient_penalty is not None: + loss += cal_gradient_penalty( + model, real, fake, real.device, **self.gradient_penalty + )[0] + + loss.backward() + return loss + + def backward_discriminators(self): + fake_a = self.pred_a_pool.query(self.images.fake_a) + fake_b = self.pred_b_pool.query(self.images.fake_b) + + self.losses.disc_b = self.backward_discriminator_base( + self.models.disc_b, self.images.real_b, fake_b + ) + + self.losses.disc_a = self.backward_discriminator_base( + self.models.disc_a, self.images.real_a, fake_a + ) + + def backward_generators(self): + lambda_idt = self.lambda_idt + lambda_a = self.lambda_a + lambda_b = self.lambda_b + + self.losses.gen_ab = self.criterion_gan( + self.models.disc_b(self.images.fake_b), True + ) + self.losses.gen_ba = self.criterion_gan( + self.models.disc_a(self.images.fake_a), True + ) + self.losses.cycle_a = lambda_a * self.criterion_cycle( + self.images.reco_a, self.images.real_a + ) + self.losses.cycle_b = lambda_b * self.criterion_cycle( + self.images.reco_b, self.images.real_b + ) + + loss = ( + self.losses.gen_ab + self.losses.gen_ba + + self.losses.cycle_a + self.losses.cycle_b + ) + + if lambda_idt > 0: + self.images.idt_b = self.models.gen_ab(self.images.real_b) + self.losses.idt_b = lambda_b * lambda_idt * self.criterion_idt( + self.images.idt_b, self.images.real_b + ) + + self.images.idt_a = self.models.gen_ba(self.images.real_a) + self.losses.idt_a = lambda_a * lambda_idt * self.criterion_idt( + self.images.idt_a, self.images.real_a + ) + + loss += (self.losses.idt_a + self.losses.idt_b) + + loss.backward() + + def optimization_step(self): + self.forward() + + # Generators + self.set_requires_grad([self.models.disc_a, self.models.disc_b], False) + self.optimizers.gen.zero_grad() + self.backward_generators() + self.optimizers.gen.step() + + # Discriminators + self.set_requires_grad([self.models.disc_a, self.models.disc_b], True) + self.optimizers.disc.zero_grad() + self.backward_discriminators() + self.optimizers.disc.step() + diff --git a/rawformer/cgan/funcs.py b/rawformer/cgan/funcs.py new file mode 100644 index 0000000..5d4f9e5 --- /dev/null +++ b/rawformer/cgan/funcs.py @@ -0,0 +1,18 @@ + +def set_two_domain_input(images, inputs, domain, device): + if (domain is None) or (domain == 'both'): + images.real_a = inputs[0].to(device, non_blocking = True) + images.real_b = inputs[1].to(device, non_blocking = True) + + elif domain in [ 'a', 0 ]: + images.real_a = inputs.to(device, non_blocking = True) + + elif domain in [ 'b', 1 ]: + images.real_b = inputs.to(device, non_blocking = True) + + else: + raise ValueError( + f"Unknown domain: '{domain}'." + " Supported domains: 'a' (alias 0), 'b' (alias 1), or 'both'" + ) + diff --git a/rawformer/cgan/model_base.py b/rawformer/cgan/model_base.py new file mode 100644 index 0000000..e5ed505 --- /dev/null +++ b/rawformer/cgan/model_base.py @@ -0,0 +1,176 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +import logging +import torch +from torch.optim.lr_scheduler import ReduceLROnPlateau + +from rawformer.base.schedulers import get_scheduler +from .named_dict import NamedDict +from .checkpoint import find_last_checkpoint_epoch, save, load + +PREFIX_MODEL = 'net' +PREFIX_OPT = 'opt' +PREFIX_SCHED = 'sched' + +LOGGER = logging.getLogger('rawformer.cgan') + +class ModelBase: + # pylint: disable=too-many-instance-attributes + + def __init__(self, savedir, config, is_train, device): + self.is_train = is_train + self.device = device + self.savedir = savedir + + self.models = self._setup_models(config) + self.images = self._setup_images(config) + self.losses = self._setup_losses(config) + self.metric = 0 + self.epoch = 0 + + self.optimizers = NamedDict() + self.schedulers = NamedDict() + + if is_train: + self.optimizers = self._setup_optimizers(config) + self.schedulers = self._setup_schedulers(config) + + def set_input(self, inputs, domain = None): + for key in self.images: + self.images[key] = None + + self._set_input(inputs, domain) + + def forward(self): + raise NotImplementedError + + def optimization_step(self): + raise NotImplementedError + + def _set_input(self, inputs, domain): + raise NotImplementedError + + def _setup_images(self, config): + raise NotImplementedError + + def _setup_models(self, config): + raise NotImplementedError + + def _setup_losses(self, config): + raise NotImplementedError + + def _setup_optimizers(self, config): + raise NotImplementedError + + def _setup_schedulers(self, config): + schedulers = { } + + for (name, opt) in self.optimizers.items(): + schedulers[name] = get_scheduler(opt, config.scheduler) + + return NamedDict(**schedulers) + + def _save_model_state(self, epoch): + pass + + def _load_model_state(self, epoch): + pass + + def _handle_epoch_end(self): + pass + + def eval(self): + self.is_train = False + + for model in self.models.values(): + model.eval() + + def train(self): + self.is_train = True + + for model in self.models.values(): + model.train() + + def forward_nograd(self): + with torch.no_grad(): + self.forward() + + def find_last_checkpoint_epoch(self): + return find_last_checkpoint_epoch(self.savedir, PREFIX_MODEL) + + def load(self, epoch): + if (epoch is not None) and (epoch <= 0): + return + + LOGGER.debug('Loading model from epoch %s', epoch) + + load(self.models, self.savedir, PREFIX_MODEL, epoch, self.device) + load(self.optimizers, self.savedir, PREFIX_OPT, epoch, self.device) + load(self.schedulers, self.savedir, PREFIX_SCHED, epoch, self.device) + + self.epoch = epoch + self._load_model_state(epoch) + self._handle_epoch_end() + + def save(self, epoch = None): + LOGGER.debug('Saving model at epoch %s', epoch) + + save(self.models, self.savedir, PREFIX_MODEL, epoch) + save(self.optimizers, self.savedir, PREFIX_OPT, epoch) + save(self.schedulers, self.savedir, PREFIX_SCHED, epoch) + + self._save_model_state(epoch) + + def end_epoch(self, epoch = None): + for scheduler in self.schedulers.values(): + if scheduler is None: + continue + + if isinstance(scheduler, ReduceLROnPlateau): + scheduler.step(self.metric) + else: + scheduler.step() + + self._handle_epoch_end() + + if epoch is None: + self.epoch = self.epoch + 1 + else: + self.epoch = epoch + + def pprint(self, verbose): + for name,model in self.models.items(): + num_params = 0 + + for param in model.parameters(): + num_params += param.numel() + + if verbose: + print(model) + + print( + '[Network %s] Total number of parameters : %.3f M' % ( + name, num_params / 1e6 + ) + ) + + def set_requires_grad(self, models, requires_grad = False): + # pylint: disable=no-self-use + if not isinstance(models, list): + models = [models, ] + + for model in models: + for param in model.parameters(): + param.requires_grad = requires_grad + + def get_current_losses(self): + result = {} + + for (k,v) in self.losses.items(): + result[k] = float(v) + + return result + diff --git a/rawformer/cgan/named_dict.py b/rawformer/cgan/named_dict.py new file mode 100644 index 0000000..02c0180 --- /dev/null +++ b/rawformer/cgan/named_dict.py @@ -0,0 +1,48 @@ +from collections.abc import Mapping + +class NamedDict(Mapping): + # pylint: disable=too-many-instance-attributes + + _fields = None + + def __init__(self, *args, **kwargs): + self._fields = {} + + for arg in args: + self._fields[arg] = None + + self._fields.update(**kwargs) + + def __contains__(self, key): + return (key in self._fields) + + def __getitem__(self, key): + return self._fields[key] + + def __setitem__(self, key, value): + self._fields[key] = value + + def __getattr__(self, key): + return self._fields[key] + + def __setattr__(self, key, value): + if (self._fields is not None) and (key in self._fields): + self._fields[key] = value + else: + super().__setattr__(key, value) + + def __iter__(self): + return iter(self._fields) + + def __len__(self): + return len(self._fields) + + def items(self): + return self._fields.items() + + def keys(self): + return self._fields.keys() + + def values(self): + return self._fields.values() + diff --git a/rawformer/cgan/pix2pix.py b/rawformer/cgan/pix2pix.py new file mode 100644 index 0000000..dc6edc8 --- /dev/null +++ b/rawformer/cgan/pix2pix.py @@ -0,0 +1,171 @@ +# LICENSE +# This file was extracted from +# https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix +# Please see `rawformer/base/LICENSE` for copyright attribution and LICENSE + +# pylint: disable=not-callable +# NOTE: Mistaken lint: +# E1102: self.criterion_gan is not callable (not-callable) + +import torch + +from rawformer.torch.select import select_optimizer +from rawformer.base.losses import GANLoss, cal_gradient_penalty +from rawformer.models.discriminator import construct_discriminator +from rawformer.models.generator import construct_generator + +from .model_base import ModelBase +from .named_dict import NamedDict +from .funcs import set_two_domain_input + +class Pix2PixModel(ModelBase): + + def _setup_images(self, _config): + return NamedDict('real_a', 'fake_b', 'real_b', 'fake_a') + + def _setup_models(self, config): + models = { } + + image_shape_a = config.data.datasets[0].shape + image_shape_b = config.data.datasets[1].shape + + assert image_shape_a[1:] == image_shape_b[1:], \ + "Pix2Pix needs images in both domains to have the same size" + + models['gen_ab'] = construct_generator( + config.generator, image_shape_a, image_shape_b, self.device + ) + models['gen_ba'] = construct_generator( + config.generator, image_shape_b, image_shape_a, self.device + ) + + if self.is_train: + extended_image_shape = ( + image_shape_a[0] + image_shape_b[0], *image_shape_a[1:] + ) + + for name in [ 'disc_a', 'disc_b' ]: + models[name] = construct_discriminator( + config.discriminator, extended_image_shape, self.device + ) + + return NamedDict(**models) + + def _setup_losses(self, config): + return NamedDict( + 'gen_ab', 'gen_ba', 'l1_ab', 'l1_ba', 'disc_a', 'disc_b' + ) + + def _setup_optimizers(self, config): + optimizers = NamedDict('gen_ab', 'gen_ba', 'disc_a', 'disc_b') + + optimizers.gen_ab = select_optimizer( + self.models.gen_ab.parameters(), config.generator.optimizer + ) + optimizers.gen_ba = select_optimizer( + self.models.gen_ba.parameters(), config.generator.optimizer + ) + + optimizers.disc_a = select_optimizer( + self.models.disc_a.parameters(), config.discriminator.optimizer + ) + optimizers.disc_b = select_optimizer( + self.models.disc_b.parameters(), config.discriminator.optimizer + ) + + return optimizers + + def __init__(self, savedir, config, is_train, device): + super().__init__(savedir, config, is_train, device) + + assert len(config.data.datasets) == 2, \ + "Pix2Pix expects a pair of datasets" + + self.criterion_gan = GANLoss(config.loss).to(self.device) + self.criterion_l1 = torch.nn.L1Loss() + self.gradient_penalty = config.gradient_penalty + + def _set_input(self, inputs, domain): + set_two_domain_input(self.images, inputs, domain, self.device) + + def forward(self): + if self.images.real_a is not None: + self.images.fake_b = self.models.gen_ab(self.images.real_a) + + if self.images.real_b is not None: + self.images.fake_a = self.models.gen_ba(self.images.real_b) + + def backward_discriminator_base(self, model, real, fake, preimage): + cond_real = torch.cat([real, preimage], dim = 1) + cond_fake = torch.cat([fake, preimage], dim = 1).detach() + + pred_real = model(cond_real) + loss_real = self.criterion_gan(pred_real, True) + + pred_fake = model(cond_fake) + loss_fake = self.criterion_gan(pred_fake, False) + + loss = (loss_real + loss_fake) * 0.5 + + if self.gradient_penalty is not None: + loss += cal_gradient_penalty( + model, cond_real, cond_fake, real.device, + **self.gradient_penalty + )[0] + + loss.backward() + return loss + + def backward_discriminators(self): + self.losses.disc_b = self.backward_discriminator_base( + self.models.disc_b, + self.images.real_b, self.images.fake_b, self.images.real_a + ) + + self.losses.disc_a = self.backward_discriminator_base( + self.models.disc_a, + self.images.real_a, self.images.fake_a, self.images.real_b + ) + + def backward_generator_base(self, disc, real, fake, preimage): + loss_gen = self.criterion_gan( + disc(torch.cat([fake, preimage], dim = 1)), True + ) + + loss_l1 = self.criterion_l1(fake, real) + + loss = loss_gen + loss_l1 + loss.backward() + + return (loss_gen, loss_l1) + + def backward_generators(self): + self.losses.gen_ab, self.losses.l1_ab = self.backward_generator_base( + self.models.disc_b, + self.images.real_b, self.images.fake_b, self.images.real_a + ) + + self.losses.gen_ba, self.losses.l1_ba = self.backward_generator_base( + self.models.disc_a, + self.images.real_a, self.images.fake_a, self.images.real_b + ) + + def optimization_step(self): + self.forward() + + # Generators + self.set_requires_grad([self.models.disc_a, self.models.disc_b], False) + self.optimizers.gen_ab.zero_grad() + self.optimizers.gen_ba.zero_grad() + self.backward_generators() + self.optimizers.gen_ab.step() + self.optimizers.gen_ba.step() + + # Discriminators + self.set_requires_grad([self.models.disc_a, self.models.disc_b], True) + self.optimizers.disc_a.zero_grad() + self.optimizers.disc_b.zero_grad() + self.backward_discriminators() + self.optimizers.disc_a.step() + self.optimizers.disc_b.step() + diff --git a/rawformer/cgan/rawformer.py b/rawformer/cgan/rawformer.py new file mode 100644 index 0000000..a9080db --- /dev/null +++ b/rawformer/cgan/rawformer.py @@ -0,0 +1,454 @@ +# pylint: disable=not-callable +# NOTE: Mistaken lint: +# E1102: self.criterion_gan is not callable (not-callable) + +import itertools +import torch + +from torchvision.transforms import GaussianBlur, Resize + +from rawformer.torch.select import ( + select_optimizer, extract_name_kwargs +) +from rawformer.torch.queue import FastQueue +from rawformer.torch.funcs import prepare_model, update_average_model +from rawformer.torch.layers.batch_head import BatchHeadWrapper, get_batch_head +from rawformer.base.losses import GANLoss +from rawformer.torch.losses import PixelWiseLoss +from rawformer.torch.gradient_penalty import GradientPenalty +from rawformer.models.discriminator import construct_discriminator +from rawformer.models.generator import construct_generator + +from .model_base import ModelBase +from .named_dict import NamedDict +from .funcs import set_two_domain_input + +def construct_consistency_model(consist, device): + name, kwargs = extract_name_kwargs(consist) + + if name == 'blur': + return GaussianBlur(**kwargs).to(device) + + if name == 'resize': + return Resize(**kwargs).to(device) + + raise ValueError(f'Unknown consistency type: {name}') + +def queued_forward(batch_head_model, input_image, queue, update_queue = True): + output, pred_body = batch_head_model.forward( + input_image, extra_bodies = queue.query(), return_body = True + ) + + if update_queue: + queue.push(pred_body) + + return output + +class RawFormerGan(ModelBase): + # pylint: disable=too-many-instance-attributes + + def _setup_images(self, _config): + images = [ + 'real_a', 'real_b', + 'fake_a', 'fake_b', + 'reco_a', 'reco_b', + 'consist_real_a', 'consist_real_b', + 'consist_fake_a', 'consist_fake_b', + ] + + if self.is_train and self.lambda_idt > 0: + images += [ 'idt_a', 'idt_b', ] + + return NamedDict(*images) + + def _construct_batch_head_disc(self, model_config, input_shape): + disc_body = construct_discriminator( + model_config, input_shape, self.device + ) + + disc_head = get_batch_head(self.head_config) + disc_head = prepare_model(disc_head, self.device) + + return BatchHeadWrapper(disc_body, disc_head) + + def _setup_models(self, config): + models = {} + + shape_a = config.data.datasets[0].shape + shape_b = config.data.datasets[1].shape + + models['gen_ab'] = construct_generator( + config.generator, shape_a, shape_b, self.device + ) + models['gen_ba'] = construct_generator( + config.generator, shape_b, shape_a, self.device + ) + + if self.avg_momentum is not None: + models['avg_gen_ab'] = construct_generator( + config.generator, shape_a, shape_b, self.device + ) + models['avg_gen_ba'] = construct_generator( + config.generator, shape_b, shape_a, self.device + ) + + models['avg_gen_ab'].load_state_dict(models['gen_ab'].state_dict()) + models['avg_gen_ba'].load_state_dict(models['gen_ba'].state_dict()) + + if self.is_train: + models['disc_a'] = self._construct_batch_head_disc( + config.discriminator, config.data.datasets[0].shape + ) + models['disc_b'] = self._construct_batch_head_disc( + config.discriminator, config.data.datasets[1].shape + ) + + return NamedDict(**models) + + def _setup_losses(self, config): + losses = [ + 'gen_ab', 'gen_ba', 'cycle_a', 'cycle_b', 'disc_a', 'disc_b' + ] + + if self.is_train and self.lambda_idt > 0: + losses += [ 'idt_a', 'idt_b' ] + + if self.is_train and config.gradient_penalty is not None: + losses += [ 'gp_a', 'gp_b' ] + + if self.consist_model is not None: + losses += [ 'consist_a', 'consist_b' ] + + return NamedDict(*losses) + + def _setup_optimizers(self, config): + optimizers = NamedDict('gen', 'disc') + + optimizers.gen = select_optimizer( + itertools.chain( + self.models.gen_ab.parameters(), + self.models.gen_ba.parameters() + ), + config.generator.optimizer + ) + + optimizers.disc = select_optimizer( + itertools.chain( + self.models.disc_a.parameters(), + self.models.disc_b.parameters() + ), + config.discriminator.optimizer + ) + + return optimizers + + def __init__( + self, savedir, config, is_train, device, head_config = None, + lambda_a = 10.0, + lambda_b = 10.0, + lambda_idt = 0.5, + lambda_consist = 0, + head_queue_size = 3, + avg_momentum = None, + consistency = None, + ): + # pylint: disable=too-many-arguments + # pylint: disable=too-many-locals + self.lambda_a = lambda_a + self.lambda_b = lambda_b + self.lambda_idt = lambda_idt + self.lambda_consist = lambda_consist + self.avg_momentum = avg_momentum + self.head_config = head_config or {} + self.consist_model = None + + if (lambda_consist > 0) and (consistency is not None): + self.consist_model \ + = construct_consistency_model(consistency, device) + + assert len(config.data.datasets) == 2, \ + "CycleGAN expects a pair of datasets" + + super().__init__(savedir, config, is_train, device) + + self.criterion_gan = GANLoss(config.loss).to(self.device) + self.criterion_cycle = PixelWiseLoss().to(self.device) + self.criterion_idt = torch.nn.L1Loss() + self.criterion_consist = torch.nn.L1Loss() + + if self.is_train: + self.queues = NamedDict(**{ + name : FastQueue(head_queue_size, device = device) + for name in [ 'real_a', 'real_b', 'fake_a', 'fake_b' ] + }) + + self.gp = None + + if config.gradient_penalty is not None: + self.gp = GradientPenalty(**config.gradient_penalty) + + def _set_input(self, inputs, domain): + set_two_domain_input(self.images, inputs, domain, self.device) + + if self.images.real_a is not None: + if self.consist_model is not None: + self.images.consist_real_a \ + = self.consist_model(self.images.real_a) + + if self.images.real_b is not None: + if self.consist_model is not None: + self.images.consist_real_b \ + = self.consist_model(self.images.real_b) + + def cycle_forward_image(self, real, gen_fwd, gen_bkw): + # pylint: disable=no-self-use + + # (N, C, H, W) + fake = gen_fwd(real) + reco = gen_bkw(fake) + + consist_fake = None + + if self.consist_model is not None: + consist_fake = self.consist_model(fake) + + return (fake, reco, consist_fake) + + def idt_forward_image(self, real, gen): + # pylint: disable=no-self-use + + # (N, C, H, W) + idt = gen(real) + return idt + + def forward_dispatch(self, direction): + if direction == 'ab': + ( + self.images.fake_b, self.images.reco_a, + self.images.consist_fake_b + ) = self.cycle_forward_image( + self.images.real_a, self.models.gen_ab, self.models.gen_ba + ) + + elif direction == 'ba': + ( + self.images.fake_a, self.images.reco_b, + self.images.consist_fake_a + ) = self.cycle_forward_image( + self.images.real_b, self.models.gen_ba, self.models.gen_ab + ) + + elif direction == 'aa': + self.images.idt_a = \ + self.idt_forward_image(self.images.real_a, self.models.gen_ba) + + elif direction == 'bb': + self.images.idt_b = \ + self.idt_forward_image(self.images.real_b, self.models.gen_ab) + + elif direction == 'avg-ab': + ( + self.images.fake_b, self.images.reco_a, + self.images.consist_fake_b + ) = self.cycle_forward_image( + self.images.real_a, + self.models.avg_gen_ab, self.models.avg_gen_ba + ) + + elif direction == 'avg-ba': + ( + self.images.fake_a, self.images.reco_b, + self.images.consist_fake_a + ) = self.cycle_forward_image( + self.images.real_b, + self.models.avg_gen_ba, self.models.avg_gen_ab + ) + + else: + raise ValueError(f"Unknown forward direction: '{direction}'") + + def forward(self): + if self.images.real_a is not None: + if self.avg_momentum is not None: + self.forward_dispatch(direction = 'avg-ab') + else: + self.forward_dispatch(direction = 'ab') + + if self.images.real_b is not None: + if self.avg_momentum is not None: + self.forward_dispatch(direction = 'avg-ba') + else: + self.forward_dispatch(direction = 'ba') + + def eval_consist_loss( + self, consist_real_0, consist_fake_1, lambda_cycle_0 + ): + return lambda_cycle_0 * self.lambda_consist * self.criterion_consist( + consist_fake_1, consist_real_0 + ) + + def eval_loss_of_cycle_forward( + self, disc_1, real_0, fake_1, reco_0, fake_queue_1, lambda_cycle_0 + ): + # pylint: disable=too-many-arguments + # NOTE: Queue is updated in discriminator backprop + disc_pred_fake_1 = queued_forward( + disc_1, fake_1, fake_queue_1, update_queue = False + ) + + loss_gen = self.criterion_gan(disc_pred_fake_1, True) + loss_cycle = lambda_cycle_0 * self.criterion_cycle(reco_0, real_0) + + loss = loss_gen + loss_cycle + + return (loss_gen, loss_cycle, loss) + + def eval_loss_of_idt_forward(self, real_0, idt_0, lambda_cycle_0): + loss_idt = ( + lambda_cycle_0 + * self.lambda_idt + * self.criterion_idt(idt_0, real_0) + ) + + loss = loss_idt + + return (loss_idt, loss) + + def backward_gen(self, direction): + if direction == 'ab': + (self.losses.gen_ab, self.losses.cycle_a, loss) \ + = self.eval_loss_of_cycle_forward( + self.models.disc_b, + self.images.real_a, self.images.fake_b, self.images.reco_a, + self.queues.fake_b, self.lambda_a + ) + + if self.consist_model is not None: + self.losses.consist_a = self.eval_consist_loss( + self.images.consist_real_a, self.images.consist_fake_b, + self.lambda_a + ) + + loss += self.losses.consist_a + + elif direction == 'ba': + (self.losses.gen_ba, self.losses.cycle_b, loss) \ + = self.eval_loss_of_cycle_forward( + self.models.disc_a, + self.images.real_b, self.images.fake_a, self.images.reco_b, + self.queues.fake_a, self.lambda_b + ) + + if self.consist_model is not None: + self.losses.consist_b = self.eval_consist_loss( + self.images.consist_real_b, self.images.consist_fake_a, + self.lambda_b + ) + + loss += self.losses.consist_b + + elif direction == 'aa': + (self.losses.idt_a, loss) \ + = self.eval_loss_of_idt_forward( + self.images.real_a, self.images.idt_a, self.lambda_a + ) + + elif direction == 'bb': + (self.losses.idt_b, loss) \ + = self.eval_loss_of_idt_forward( + self.images.real_b, self.images.idt_b, self.lambda_b + ) + else: + raise ValueError(f"Unknown forward direction: '{direction}'") + + + loss.backward() + + def backward_discriminator_base( + self, model, real, fake, queue_real, queue_fake + ): + # pylint: disable=too-many-arguments + loss_gp = None + + if self.gp is not None: + loss_gp = self.gp( + model, fake, real, + model_kwargs_fake = { 'extra_bodies' : queue_fake.query() }, + model_kwargs_real = { 'extra_bodies' : queue_real.query() }, + ) + loss_gp.backward() + + pred_real = queued_forward( + model, real, queue_real, update_queue = True + ) + loss_real = self.criterion_gan(pred_real, True) + + pred_fake = queued_forward( + model, fake, queue_fake, update_queue = True + ) + loss_fake = self.criterion_gan(pred_fake, False) + + loss = (loss_real + loss_fake) * 0.5 + loss.backward() + + return (loss_gp, loss) + + def backward_discriminators(self): + fake_a = self.images.fake_a.detach() + fake_b = self.images.fake_b.detach() + + loss_gp_b, self.losses.disc_b \ + = self.backward_discriminator_base( + self.models.disc_b, self.images.real_b, fake_b, + self.queues.real_b, self.queues.fake_b + ) + + if loss_gp_b is not None: + self.losses.gp_b = loss_gp_b + + loss_gp_a, self.losses.disc_a = \ + self.backward_discriminator_base( + self.models.disc_a, self.images.real_a, fake_a, + self.queues.real_a, self.queues.fake_a + ) + + if loss_gp_a is not None: + self.losses.gp_a = loss_gp_a + + def optimization_step_gen(self): + self.set_requires_grad([self.models.disc_a, self.models.disc_b], False) + self.optimizers.gen.zero_grad(set_to_none = True) + + dir_list = [ 'ab', 'ba' ] + if self.lambda_idt > 0: + dir_list += [ 'aa', 'bb' ] + + for direction in dir_list: + self.forward_dispatch(direction) + self.backward_gen(direction) + + self.optimizers.gen.step() + + def optimization_step_disc(self): + self.set_requires_grad([self.models.disc_a, self.models.disc_b], True) + self.optimizers.disc.zero_grad(set_to_none = True) + + self.backward_discriminators() + + self.optimizers.disc.step() + + def _accumulate_averages(self): + update_average_model( + self.models.avg_gen_ab, self.models.gen_ab, self.avg_momentum + ) + update_average_model( + self.models.avg_gen_ba, self.models.gen_ba, self.avg_momentum + ) + + def optimization_step(self): + self.optimization_step_gen() + self.optimization_step_disc() + + if self.avg_momentum is not None: + self._accumulate_averages() + diff --git a/rawformer/cgan/simple_autoencoder.py b/rawformer/cgan/simple_autoencoder.py new file mode 100644 index 0000000..4dda89a --- /dev/null +++ b/rawformer/cgan/simple_autoencoder.py @@ -0,0 +1,93 @@ +from rawformer.torch.select import select_optimizer, select_loss +from rawformer.torch.image_masking import select_masking +from rawformer.models.generator import construct_generator + +from .model_base import ModelBase +from .named_dict import NamedDict + +class SimpleAutoencoder(ModelBase): + """Model that tries to train an autoencoder (i.e. target == input). + + This autoencoder expects inputs to be either tuples of the form + `(features, target)` or the `features` itself. + """ + + def _setup_images(self, _config): + images = [ 'real', 'reco' ] + + if self.masking is not None: + images.append('masked') + + return NamedDict(*images) + + def _setup_models(self, config): + return NamedDict( + encoder = construct_generator( + config.generator, + config.data.datasets[0].shape, + config.data.datasets[0].shape, + self.device + ) + ) + + def _setup_losses(self, config): + self.loss_fn = select_loss(config.loss) + + assert config.gradient_penalty is None, \ + "Autoencoder model does not support gradient penalty" + + return NamedDict('loss') + + def _setup_optimizers(self, config): + return NamedDict( + encoder = select_optimizer( + self.models.encoder.parameters(), config.generator.optimizer + ) + ) + + def __init__( + self, savedir, config, is_train, device, masking = None + ): + # pylint: disable=too-many-arguments + self.masking = select_masking(masking) + assert len(config.data.datasets) == 1, \ + "Simple Autoencoder can work only with a single dataset" + + super().__init__(savedir, config, is_train, device) + + assert config.discriminator is None, \ + "Autoencoder model does not use discriminator" + + def _set_input(self, inputs, _domain): + # inputs : image or (image, label) + if isinstance(inputs, (list, tuple)): + self.images.real = inputs[0].to(self.device) + else: + self.images.real = inputs.to(self.device) + + def forward(self): + if self.masking is None: + input_img = self.images.real + else: + self.images.masked = self.masking(self.images.real) + input_img = self.images.masked + + self.images.reco = self.models.encoder(input_img) + + def backward(self): + loss = self.loss_fn(self.images.reco, self.images.real) + loss.backward() + + self.losses.loss = loss + + def optimization_step(self): + self.forward() + + for optimizer in self.optimizers.values(): + optimizer.zero_grad() + + self.backward() + + for optimizer in self.optimizers.values(): + optimizer.step() + diff --git a/rawformer/cgan/uvcgan2.py b/rawformer/cgan/uvcgan2.py new file mode 100644 index 0000000..48a05b3 --- /dev/null +++ b/rawformer/cgan/uvcgan2.py @@ -0,0 +1,453 @@ +# pylint: disable=not-callable +# NOTE: Mistaken lint: +# E1102: self.criterion_gan is not callable (not-callable) + +import itertools +import torch + +from torchvision.transforms import GaussianBlur, Resize + +from rawformer.torch.select import ( + select_optimizer, extract_name_kwargs +) +from rawformer.torch.queue import FastQueue +from rawformer.torch.funcs import prepare_model, update_average_model +from rawformer.torch.layers.batch_head import BatchHeadWrapper, get_batch_head +from rawformer.base.losses import GANLoss +from rawformer.torch.gradient_penalty import GradientPenalty +from rawformer.models.discriminator import construct_discriminator +from rawformer.models.generator import construct_generator + +from .model_base import ModelBase +from .named_dict import NamedDict +from .funcs import set_two_domain_input + +def construct_consistency_model(consist, device): + name, kwargs = extract_name_kwargs(consist) + + if name == 'blur': + return GaussianBlur(**kwargs).to(device) + + if name == 'resize': + return Resize(**kwargs).to(device) + + raise ValueError(f'Unknown consistency type: {name}') + +def queued_forward(batch_head_model, input_image, queue, update_queue = True): + output, pred_body = batch_head_model.forward( + input_image, extra_bodies = queue.query(), return_body = True + ) + + if update_queue: + queue.push(pred_body) + + return output + +class UVCGAN2(ModelBase): + # pylint: disable=too-many-instance-attributes + + def _setup_images(self, _config): + images = [ + 'real_a', 'real_b', + 'fake_a', 'fake_b', + 'reco_a', 'reco_b', + 'consist_real_a', 'consist_real_b', + 'consist_fake_a', 'consist_fake_b', + ] + + if self.is_train and self.lambda_idt > 0: + images += [ 'idt_a', 'idt_b', ] + + return NamedDict(*images) + + def _construct_batch_head_disc(self, model_config, input_shape): + disc_body = construct_discriminator( + model_config, input_shape, self.device + ) + + disc_head = get_batch_head(self.head_config) + disc_head = prepare_model(disc_head, self.device) + + return BatchHeadWrapper(disc_body, disc_head) + + def _setup_models(self, config): + models = {} + + shape_a = config.data.datasets[0].shape + shape_b = config.data.datasets[1].shape + + models['gen_ab'] = construct_generator( + config.generator, shape_a, shape_b, self.device + ) + models['gen_ba'] = construct_generator( + config.generator, shape_b, shape_a, self.device + ) + + if self.avg_momentum is not None: + models['avg_gen_ab'] = construct_generator( + config.generator, shape_a, shape_b, self.device + ) + models['avg_gen_ba'] = construct_generator( + config.generator, shape_b, shape_a, self.device + ) + + models['avg_gen_ab'].load_state_dict(models['gen_ab'].state_dict()) + models['avg_gen_ba'].load_state_dict(models['gen_ba'].state_dict()) + + if self.is_train: + models['disc_a'] = self._construct_batch_head_disc( + config.discriminator, config.data.datasets[0].shape + ) + models['disc_b'] = self._construct_batch_head_disc( + config.discriminator, config.data.datasets[1].shape + ) + + return NamedDict(**models) + + def _setup_losses(self, config): + losses = [ + 'gen_ab', 'gen_ba', 'cycle_a', 'cycle_b', 'disc_a', 'disc_b' + ] + + if self.is_train and self.lambda_idt > 0: + losses += [ 'idt_a', 'idt_b' ] + + if self.is_train and config.gradient_penalty is not None: + losses += [ 'gp_a', 'gp_b' ] + + if self.consist_model is not None: + losses += [ 'consist_a', 'consist_b' ] + + return NamedDict(*losses) + + def _setup_optimizers(self, config): + optimizers = NamedDict('gen', 'disc') + + optimizers.gen = select_optimizer( + itertools.chain( + self.models.gen_ab.parameters(), + self.models.gen_ba.parameters() + ), + config.generator.optimizer + ) + + optimizers.disc = select_optimizer( + itertools.chain( + self.models.disc_a.parameters(), + self.models.disc_b.parameters() + ), + config.discriminator.optimizer + ) + + return optimizers + + def __init__( + self, savedir, config, is_train, device, head_config = None, + lambda_a = 10.0, + lambda_b = 10.0, + lambda_idt = 0.5, + lambda_consist = 0, + head_queue_size = 3, + avg_momentum = None, + consistency = None, + ): + # pylint: disable=too-many-arguments + # pylint: disable=too-many-locals + self.lambda_a = lambda_a + self.lambda_b = lambda_b + self.lambda_idt = lambda_idt + self.lambda_consist = lambda_consist + self.avg_momentum = avg_momentum + self.head_config = head_config or {} + self.consist_model = None + + if (lambda_consist > 0) and (consistency is not None): + self.consist_model \ + = construct_consistency_model(consistency, device) + + assert len(config.data.datasets) == 2, \ + "CycleGAN expects a pair of datasets" + + super().__init__(savedir, config, is_train, device) + + self.criterion_gan = GANLoss(config.loss).to(self.device) + self.criterion_cycle = torch.nn.L1Loss() + self.criterion_idt = torch.nn.L1Loss() + self.criterion_consist = torch.nn.L1Loss() + + if self.is_train: + self.queues = NamedDict(**{ + name : FastQueue(head_queue_size, device = device) + for name in [ 'real_a', 'real_b', 'fake_a', 'fake_b' ] + }) + + self.gp = None + + if config.gradient_penalty is not None: + self.gp = GradientPenalty(**config.gradient_penalty) + + def _set_input(self, inputs, domain): + set_two_domain_input(self.images, inputs, domain, self.device) + + if self.images.real_a is not None: + if self.consist_model is not None: + self.images.consist_real_a \ + = self.consist_model(self.images.real_a) + + if self.images.real_b is not None: + if self.consist_model is not None: + self.images.consist_real_b \ + = self.consist_model(self.images.real_b) + + def cycle_forward_image(self, real, gen_fwd, gen_bkw): + # pylint: disable=no-self-use + + # (N, C, H, W) + fake = gen_fwd(real) + reco = gen_bkw(fake) + + consist_fake = None + + if self.consist_model is not None: + consist_fake = self.consist_model(fake) + + return (fake, reco, consist_fake) + + def idt_forward_image(self, real, gen): + # pylint: disable=no-self-use + + # (N, C, H, W) + idt = gen(real) + return idt + + def forward_dispatch(self, direction): + if direction == 'ab': + ( + self.images.fake_b, self.images.reco_a, + self.images.consist_fake_b + ) = self.cycle_forward_image( + self.images.real_a, self.models.gen_ab, self.models.gen_ba + ) + + elif direction == 'ba': + ( + self.images.fake_a, self.images.reco_b, + self.images.consist_fake_a + ) = self.cycle_forward_image( + self.images.real_b, self.models.gen_ba, self.models.gen_ab + ) + + elif direction == 'aa': + self.images.idt_a = \ + self.idt_forward_image(self.images.real_a, self.models.gen_ba) + + elif direction == 'bb': + self.images.idt_b = \ + self.idt_forward_image(self.images.real_b, self.models.gen_ab) + + elif direction == 'avg-ab': + ( + self.images.fake_b, self.images.reco_a, + self.images.consist_fake_b + ) = self.cycle_forward_image( + self.images.real_a, + self.models.avg_gen_ab, self.models.avg_gen_ba + ) + + elif direction == 'avg-ba': + ( + self.images.fake_a, self.images.reco_b, + self.images.consist_fake_a + ) = self.cycle_forward_image( + self.images.real_b, + self.models.avg_gen_ba, self.models.avg_gen_ab + ) + + else: + raise ValueError(f"Unknown forward direction: '{direction}'") + + def forward(self): + if self.images.real_a is not None: + if self.avg_momentum is not None: + self.forward_dispatch(direction = 'avg-ab') + else: + self.forward_dispatch(direction = 'ab') + + if self.images.real_b is not None: + if self.avg_momentum is not None: + self.forward_dispatch(direction = 'avg-ba') + else: + self.forward_dispatch(direction = 'ba') + + def eval_consist_loss( + self, consist_real_0, consist_fake_1, lambda_cycle_0 + ): + return lambda_cycle_0 * self.lambda_consist * self.criterion_consist( + consist_fake_1, consist_real_0 + ) + + def eval_loss_of_cycle_forward( + self, disc_1, real_0, fake_1, reco_0, fake_queue_1, lambda_cycle_0 + ): + # pylint: disable=too-many-arguments + # NOTE: Queue is updated in discriminator backprop + disc_pred_fake_1 = queued_forward( + disc_1, fake_1, fake_queue_1, update_queue = False + ) + + loss_gen = self.criterion_gan(disc_pred_fake_1, True) + loss_cycle = lambda_cycle_0 * self.criterion_cycle(reco_0, real_0) + + loss = loss_gen + loss_cycle + + return (loss_gen, loss_cycle, loss) + + def eval_loss_of_idt_forward(self, real_0, idt_0, lambda_cycle_0): + loss_idt = ( + lambda_cycle_0 + * self.lambda_idt + * self.criterion_idt(idt_0, real_0) + ) + + loss = loss_idt + + return (loss_idt, loss) + + def backward_gen(self, direction): + if direction == 'ab': + (self.losses.gen_ab, self.losses.cycle_a, loss) \ + = self.eval_loss_of_cycle_forward( + self.models.disc_b, + self.images.real_a, self.images.fake_b, self.images.reco_a, + self.queues.fake_b, self.lambda_a + ) + + if self.consist_model is not None: + self.losses.consist_a = self.eval_consist_loss( + self.images.consist_real_a, self.images.consist_fake_b, + self.lambda_a + ) + + loss += self.losses.consist_a + + elif direction == 'ba': + (self.losses.gen_ba, self.losses.cycle_b, loss) \ + = self.eval_loss_of_cycle_forward( + self.models.disc_a, + self.images.real_b, self.images.fake_a, self.images.reco_b, + self.queues.fake_a, self.lambda_b + ) + + if self.consist_model is not None: + self.losses.consist_b = self.eval_consist_loss( + self.images.consist_real_b, self.images.consist_fake_a, + self.lambda_b + ) + + loss += self.losses.consist_b + + elif direction == 'aa': + (self.losses.idt_a, loss) \ + = self.eval_loss_of_idt_forward( + self.images.real_a, self.images.idt_a, self.lambda_a + ) + + elif direction == 'bb': + (self.losses.idt_b, loss) \ + = self.eval_loss_of_idt_forward( + self.images.real_b, self.images.idt_b, self.lambda_b + ) + else: + raise ValueError(f"Unknown forward direction: '{direction}'") + + + loss.backward() + + def backward_discriminator_base( + self, model, real, fake, queue_real, queue_fake + ): + # pylint: disable=too-many-arguments + loss_gp = None + + if self.gp is not None: + loss_gp = self.gp( + model, fake, real, + model_kwargs_fake = { 'extra_bodies' : queue_fake.query() }, + model_kwargs_real = { 'extra_bodies' : queue_real.query() }, + ) + loss_gp.backward() + + pred_real = queued_forward( + model, real, queue_real, update_queue = True + ) + loss_real = self.criterion_gan(pred_real, True) + + pred_fake = queued_forward( + model, fake, queue_fake, update_queue = True + ) + loss_fake = self.criterion_gan(pred_fake, False) + + loss = (loss_real + loss_fake) * 0.5 + loss.backward() + + return (loss_gp, loss) + + def backward_discriminators(self): + fake_a = self.images.fake_a.detach() + fake_b = self.images.fake_b.detach() + + loss_gp_b, self.losses.disc_b \ + = self.backward_discriminator_base( + self.models.disc_b, self.images.real_b, fake_b, + self.queues.real_b, self.queues.fake_b + ) + + if loss_gp_b is not None: + self.losses.gp_b = loss_gp_b + + loss_gp_a, self.losses.disc_a = \ + self.backward_discriminator_base( + self.models.disc_a, self.images.real_a, fake_a, + self.queues.real_a, self.queues.fake_a + ) + + if loss_gp_a is not None: + self.losses.gp_a = loss_gp_a + + def optimization_step_gen(self): + self.set_requires_grad([self.models.disc_a, self.models.disc_b], False) + self.optimizers.gen.zero_grad(set_to_none = True) + + dir_list = [ 'ab', 'ba' ] + if self.lambda_idt > 0: + dir_list += [ 'aa', 'bb' ] + + for direction in dir_list: + self.forward_dispatch(direction) + self.backward_gen(direction) + + self.optimizers.gen.step() + + def optimization_step_disc(self): + self.set_requires_grad([self.models.disc_a, self.models.disc_b], True) + self.optimizers.disc.zero_grad(set_to_none = True) + + self.backward_discriminators() + + self.optimizers.disc.step() + + def _accumulate_averages(self): + update_average_model( + self.models.avg_gen_ab, self.models.gen_ab, self.avg_momentum + ) + update_average_model( + self.models.avg_gen_ba, self.models.gen_ba, self.avg_momentum + ) + + def optimization_step(self): + self.optimization_step_gen() + self.optimization_step_disc() + + if self.avg_momentum is not None: + self._accumulate_averages() + diff --git a/rawformer/config/__init__.py b/rawformer/config/__init__.py new file mode 100644 index 0000000..6c20b3e --- /dev/null +++ b/rawformer/config/__init__.py @@ -0,0 +1,4 @@ +from .args import Args +from .config import Config +from .model_config import ModelConfig + diff --git a/rawformer/config/args.py b/rawformer/config/args.py new file mode 100644 index 0000000..9fbdd51 --- /dev/null +++ b/rawformer/config/args.py @@ -0,0 +1,99 @@ +import difflib +import os +from .config import Config + +LABEL_FNAME = 'label' + +def get_config_difference(config_old, config_new): + diff_gen = difflib.unified_diff( + config_old.to_json(sort_keys = True, indent = 4).split('\n'), + config_new.to_json(sort_keys = True, indent = 4).split('\n'), + fromfile = 'Old Config', + tofile = 'New Config', + ) + + return "\n".join(diff_gen) + +class Args: + __slots__ = [ + 'config', + 'label', + 'savedir', + 'checkpoint', + 'log_level', + ] + + def __init__( + self, config, savedir, label, + log_level = 'INFO', + checkpoint = 100, + ): + # pylint: disable=too-many-arguments + self.config = config + self.label = label + self.savedir = savedir + self.checkpoint = checkpoint + self.log_level = log_level + + def __getattr__(self, attr): + return getattr(self.config, attr) + + def save(self): + self.config.save(self.savedir) + + if self.label is not None: + # pylint: disable=unspecified-encoding + with open(os.path.join(self.savedir, LABEL_FNAME), 'wt') as f: + f.write(self.label) + + def check_no_collision(self): + try: + old_config = Config.load(self.savedir) + except IOError: + return + + old = old_config.to_json(sort_keys = True) + new = self.config.to_json(sort_keys = True) + + if old != new: + diff = get_config_difference(old_config, self.config) + + raise RuntimeError( + ( + f"Config collision detected in '{self.savedir}'" + f" . Difference:\n{diff}" + ) + ) + + @staticmethod + def from_args_dict( + outdir, + label = None, + log_level = 'INFO', + checkpoint = 100, + **args_dict + ): + config = Config(**args_dict) + savedir = config.get_savedir(outdir, label) + + result = Args(config, savedir, label, log_level, checkpoint) + result.check_no_collision() + + result.save() + + return result + + @staticmethod + def load(savedir): + config = Config.load(savedir) + label = None + + label_path = os.path.join(savedir, LABEL_FNAME) + + if os.path.exists(label_path): + # pylint: disable=unspecified-encoding + with open(label_path, 'rt') as f: + label = f.read() + + return Args(config, savedir, label) + diff --git a/rawformer/config/config.py b/rawformer/config/config.py new file mode 100644 index 0000000..42fdbac --- /dev/null +++ b/rawformer/config/config.py @@ -0,0 +1,142 @@ +import json +import logging +import os + +from rawformer.consts import CONFIG_NAME + +from .config_base import ConfigBase +from .data_config import parse_data_config +from .model_config import ModelConfig +from .transfer_config import TransferConfig + +LOGGER = logging.getLogger('rawformer.config') + +class Config(ConfigBase): + # pylint: disable=too-many-instance-attributes + + __slots__ = [ + 'batch_size', + 'data', + 'epochs', + 'discriminator', + 'generator', + 'model', + 'model_args', + 'loss', + 'gradient_penalty', + 'seed', + 'scheduler', + 'steps_per_epoch', + 'transfer', + ] + + def __init__( + self, + batch_size = 32, + data = None, + data_args = None, + epochs = 100, + image_shape = None, + discriminator = None, + generator = None, + model = 'cyclegan', + model_args = None, + loss = 'lsgan', + gradient_penalty = None, + seed = 0, + scheduler = None, + steps_per_epoch = 250, + transfer = None, + workers = None, + ): + # pylint: disable=too-many-arguments + # pylint: disable=too-many-locals + self.data = parse_data_config(data, data_args, image_shape, workers) + + self.batch_size = batch_size + self.model = model + self.model_args = model_args or {} + self.seed = seed + self.loss = loss + self.epochs = epochs + self.scheduler = scheduler + self.steps_per_epoch = steps_per_epoch + + if discriminator is not None: + discriminator = ModelConfig(**discriminator) + + if generator is not None: + generator = ModelConfig(**generator) + + if gradient_penalty is True: + gradient_penalty = {} + + if transfer is not None: + if isinstance(transfer, list): + transfer = [ TransferConfig(**conf) for conf in transfer ] + else: + transfer = TransferConfig(**transfer) + + self.discriminator = discriminator + self.generator = generator + self.gradient_penalty = gradient_penalty + self.transfer = transfer + + Config._check_deprecated_args(image_shape, workers) + + if image_shape is not None: + self._validate_image_shape(image_shape) + + @staticmethod + def _check_deprecated_args(image_shape, workers): + if image_shape is not None: + LOGGER.warning( + "Deprecation Warning: Deprecated `image_shape` configuration " + "parameter detected." + ) + + if workers is not None: + LOGGER.warning( + "Deprecation Warning: Deprecated `workers` configuration " + "parameter detected." + ) + + def _validate_image_shape(self, image_shape): + assert all(d.shape == image_shape for d in self.data.datasets), ( + f"Value of the deprecated `image_shape` parameter {image_shape}" + f"does not match shapes of the datasets." + ) + + def get_savedir(self, outdir, label = None): + if label is None: + label = self.get_hash() + + discriminator = None + if self.discriminator is not None: + discriminator = self.discriminator.model + + generator = None + if self.generator is not None: + generator = self.generator.model + + savedir = 'model_m(%s)_d(%s)_g(%s)_%s' % ( + self.model, discriminator, generator, label + ) + + savedir = savedir.replace('/', ':') + path = os.path.join(outdir, savedir) + + os.makedirs(path, exist_ok = True) + return path + + def save(self, path): + # pylint: disable=unspecified-encoding + with open(os.path.join(path, CONFIG_NAME), 'wt') as f: + f.write(self.to_json(sort_keys = True, indent = ' ')) + + @staticmethod + def load(path): + # pylint: disable=unspecified-encoding + with open(os.path.join(path, CONFIG_NAME), 'rt') as f: + return Config(**json.load(f)) + diff --git a/rawformer/config/config_base.py b/rawformer/config/config_base.py new file mode 100644 index 0000000..813445a --- /dev/null +++ b/rawformer/config/config_base.py @@ -0,0 +1,27 @@ +import json +import hashlib + +class ConfigBase: + + __slots__ = [] + + def to_dict(self): + return { x : getattr(self, x) for x in self.__slots__ } + + def to_json(self, **kwargs): + return json.dumps(self, default = lambda x : x.to_dict(), **kwargs) + + def __getitem__(self, key): + return getattr(self, key) + + def __setitem__(self, key, value): + return setattr(self, key, value) + + def get_hash(self): + s = self.to_json(sort_keys = True) + + md5 = hashlib.md5() + md5.update(s.encode()) + + return md5.hexdigest() + diff --git a/rawformer/config/data_config.py b/rawformer/config/data_config.py new file mode 100644 index 0000000..a0c47f8 --- /dev/null +++ b/rawformer/config/data_config.py @@ -0,0 +1,212 @@ +import logging + +from rawformer.consts import MERGE_PAIRED, MERGE_UNPAIRED, MERGE_NONE +from rawformer.utils.funcs import check_value_in_range + +from .config_base import ConfigBase + +LOGGER = logging.getLogger('rawformer.config') +MERGE_TYPES = [ MERGE_PAIRED, MERGE_UNPAIRED, MERGE_NONE ] + +class DatasetConfig(ConfigBase): + """Dataset configuration. + + Parameters + ---------- + dataset : str or dict + Dataset specification. + shape : tuple of int + Shape of inputs. + transform_train : None or str or dict or list of those + Transformations to be applied to the training dataset. + If `transform_train` is None, then no transformations will be applied + to the training dataset. + If `transform_train` is str, then its value is interpreted as a name + of the transformation. + If `transform_train` is dict, then it is expected to be of the form + `{ 'name' : TRANFORM_NAME, **kwargs }`, where 'name' is the name of + the transformation, and `kwargs` dict will be passed to the + transformation constructor. + Otherwise, `transform_train` is expected to be a list of values above. + The corresponding transformations will be chained together in the + order that they are specified. + Default: None. + transform_val : None or str or dict or list of those + Transformations to be applied to the validation dataset. + C.f. `transform_train`. + Default: None. + """ + + __slots__ = [ + 'dataset', + 'shape', + 'transform_train', + 'transform_test', + ] + + def __init__( + self, dataset, shape, + transform_train = None, + transform_test = None, + ): + super().__init__() + + self.dataset = dataset + self.shape = shape + self.transform_train = transform_train + self.transform_test = transform_test + +class DataConfig(ConfigBase): + """Data configuration. + + Parameters + ---------- + datasets : list of dict + List of dataset specifications. + merge_type : str, optional + How to merge samples from datasets. + Choices: 'paired', 'unpaired', 'none'. + Default: 'unpaired' + workers : int, optional + Number of data workers. + Default: None + """ + + __slots__ = [ + 'datasets', + 'merge_type', + 'workers', + ] + + def __init__(self, datasets, merge_type = MERGE_UNPAIRED, workers = None): + super().__init__() + + check_value_in_range(merge_type, MERGE_TYPES, 'merge_type') + assert isinstance(datasets, list) + + self.datasets = [ DatasetConfig(**x) for x in datasets ] + self.merge_type = merge_type + self.workers = workers + +def parse_deprecated_data_config_v1_celeba( + dataset_args, image_shape, workers, transform_train, transform_val +): + attr = dataset_args.get('attr', None) + + if attr is None: + domains = [ None, ] + else: + domains = [ 'a', 'b' ] + + return DataConfig( + datasets = [ + { + 'dataset' : { + 'name' : 'celeba', + 'attr' : attr, + 'domain' : domain, + 'path' : dataset_args.get('path', None), + }, + 'shape' : image_shape, + 'transform_train' : transform_train, + 'transform_test' : transform_val, + } for domain in domains + ], + merge_type = 'unpaired', + workers = workers, + ) + +def parse_deprecated_data_config_v1_cyclegan( + dataset_args, image_shape, workers, transform_train, transform_val +): + return DataConfig( + datasets = [ + { + 'dataset' : { + 'name' : 'cyclegan', + 'domain' : domain, + 'path' : dataset_args.get('path', None), + }, + 'shape' : image_shape, + 'transform_train' : transform_train, + 'transform_test' : transform_val, + } for domain in ['a', 'b'] + ], + merge_type = 'unpaired', + workers = workers, + ) + +def parse_deprecated_data_config_v1_imagedir( + dataset_args, image_shape, workers, transform_train, transform_val +): + return DataConfig( + datasets = [ + { + 'dataset' : { + 'name' : 'imagedir', + 'path' : dataset_args.get('path', None), + }, + 'shape' : image_shape, + 'transform_train' : transform_train, + 'transform_test' : transform_val, + }, + ], + merge_type = 'none', + workers = workers, + ) + +def parse_deprecated_data_config_v1( + dataset, dataset_args, image_shape, workers, + transform_train = None, transform_val = None +): + # pylint: disable=too-many-arguments + if dataset == 'celeba': + return parse_deprecated_data_config_v1_celeba( + dataset_args, image_shape, workers, transform_train, transform_val + ) + + if dataset == 'cyclegan': + return parse_deprecated_data_config_v1_cyclegan( + dataset_args, image_shape, workers, transform_train, transform_val + ) + + if dataset == 'imagedir': + return parse_deprecated_data_config_v1_imagedir( + dataset_args, image_shape, workers, transform_train, transform_val + ) + + raise NotImplementedError( + f"Do not know how to parse deprecated '{dataset}'" + ) + +def parse_data_config(data, data_args, image_shape, workers): + if isinstance(data, str): + LOGGER.warning( + "Deprecation Warning: Old (v0) dataset configuration detected." + " Please modify your configuration and change `data` parameter" + " into a dictionary describing `DataConfig` structure." + ) + return parse_deprecated_data_config_v1( + data, data_args, image_shape, workers + ) + + assert data_args is None, \ + "Deprecated `data_args` argument detected with new data configuration" + + if ( + ('dataset' in data) + or ('dataset_args' in data) + or ('transform_train' in data) + or ('transform_val' in data) + ): + LOGGER.warning( + "Deprecation Warning: Old (v1) dataset configuration detected." + " Please modify your configuration and change `data` parameter" + " into a dictionary describing `DataConfig` structure." + ) + return parse_deprecated_data_config_v1( + **data, image_shape = image_shape, workers = workers + ) + + return DataConfig(**data) + diff --git a/rawformer/config/funcs.py b/rawformer/config/funcs.py new file mode 100644 index 0000000..ec599f4 --- /dev/null +++ b/rawformer/config/funcs.py @@ -0,0 +1,7 @@ +import os + +def create_evaldir(path, eval_name): + result = os.path.join(path, eval_name) + os.makedirs(result, exist_ok = True) + + return result diff --git a/rawformer/config/model_config.py b/rawformer/config/model_config.py new file mode 100644 index 0000000..77bf1cf --- /dev/null +++ b/rawformer/config/model_config.py @@ -0,0 +1,31 @@ + +class ModelConfig: + + __slots__ = [ + 'model', + 'model_args', + 'optimizer', + 'weight_init', + 'spectr_norm', + ] + + def __init__( + self, + model, + optimizer = None, + model_args = None, + weight_init = None, + spectr_norm = False, + ): + # pylint: disable=too-many-arguments + self.model = model + self.model_args = model_args or {} + self.optimizer = optimizer or { + 'name' : 'AdamW', 'betas' : (0.5, 0.999), 'weight_decay' : 1e-5, + } + self.weight_init = weight_init + self.spectr_norm = spectr_norm + + def to_dict(self): + return { x : getattr(self, x) for x in self.__slots__ } + diff --git a/rawformer/config/transfer_config.py b/rawformer/config/transfer_config.py new file mode 100644 index 0000000..cbb1a5a --- /dev/null +++ b/rawformer/config/transfer_config.py @@ -0,0 +1,53 @@ +from .config_base import ConfigBase + +class TransferConfig(ConfigBase): + """Model transfer configuration. + + Parameters + ---------- + base_model : str + Path to the model to transfer parameters from. If path is relative + then this path is interpreted relative to `ROOT_OUTDIR`. + transfer_map : dict or None + Mapping between networks names of the current model and the model to + transfer parameters from. For example, mapping of the form + `{ 'gen_ab' : 'gen' }` will initialize generator `gen_ab` of the + current model from the `gen` generator of the base model. + Default: None. + strict : bool + Value of the pytorch's strict parameter when loading parameters. + Default: True. + allow_partial : bool + Whether to allow transfer from the last checkpoint of a partially + trained base model. + Default: False. + fuzzy : str, optional + Allow fuzzy transfer. E.g. transfer parameters from a larger model to + a smaller one. + Choices: [ 'none', 'from-larger-model' ] + Default: None. + """ + + __slots__ = [ + 'base_model', + 'transfer_map', + 'strict', + 'allow_partial', + 'fuzzy', + ] + + def __init__( + self, + base_model, + transfer_map = None, + strict = True, + allow_partial = False, + fuzzy = None, + ): + # pylint: disable=too-many-arguments + self.base_model = base_model + self.transfer_map = transfer_map or {} + self.strict = strict + self.allow_partial = allow_partial + self.fuzzy = fuzzy + diff --git a/rawformer/consts.py b/rawformer/consts.py new file mode 100644 index 0000000..bcff034 --- /dev/null +++ b/rawformer/consts.py @@ -0,0 +1,16 @@ +import os + +CONFIG_NAME = 'config.json' +ROOT_DATA = os.environ.get('RAWFORMER_DATA', 'data') +ROOT_OUTDIR = os.environ.get('RAWFORMER_OUTDIR', 'outdir') + +SPLIT_TRAIN = 'train' +SPLIT_VAL = 'val' +SPLIT_TEST = 'test' + +MERGE_PAIRED = 'paired' +MERGE_UNPAIRED = 'unpaired' +MERGE_NONE = 'none' + +MODEL_STATE_TRAIN = 'train' +MODEL_STATE_EVAL = 'eval' diff --git a/rawformer/eval/__init__.py b/rawformer/eval/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/eval/funcs.py b/rawformer/eval/funcs.py new file mode 100644 index 0000000..4db37f5 --- /dev/null +++ b/rawformer/eval/funcs.py @@ -0,0 +1,108 @@ +import os +import math +from itertools import islice + +from rawformer.config import Args +from rawformer.consts import ( + MODEL_STATE_TRAIN, MODEL_STATE_EVAL, MERGE_NONE +) +from rawformer.data import construct_data_loaders +from rawformer.torch.funcs import get_torch_device_smart, seed_everything +from rawformer.cgan import construct_model + +def slice_data_loader(loader, batch_size, n_samples = None): + if n_samples is None: + return (loader, len(loader)) + + steps = min(math.ceil(n_samples / batch_size), len(loader)) + sliced_loader = islice(loader, steps) + + return (sliced_loader, steps) + +def tensor_to_image(tensor): + result = tensor.cpu().detach().numpy() + + if tensor.ndim == 4: + result = result.squeeze(0) + + result = result.transpose((1, 2, 0)) + return result + +def override_config(config, config_overrides): + if config_overrides is None: + return + + for (k,v) in config_overrides.items(): + config[k] = v + +def get_evaldir(root, epoch, mkdir = False): + if epoch is None: + result = os.path.join(root, 'evals', 'final') + else: + result = os.path.join(root, 'evals', 'epoch_%04d' % epoch) + + if mkdir: + os.makedirs(result, exist_ok = True) + + return result + +def set_model_state(model, state): + if state == MODEL_STATE_TRAIN: + model.train() + elif state == MODEL_STATE_EVAL: + model.eval() + else: + raise ValueError(f"Unknown model state '{state}'") + +def start_model_eval(path, epoch, model_state, merge_type, **config_overrides): + args = Args.load(path) + device = get_torch_device_smart() + + override_config(args.config, config_overrides) + args.config.data.merge_type = merge_type + + model = construct_model( + args.savedir, args.config, is_train = False, device = device + ) + + if epoch == -1: + epoch = max(model.find_last_checkpoint_epoch(), 0) + + print("Load checkpoint at epoch %s" % epoch) + + seed_everything(args.config.seed) + model.load(epoch) + + set_model_state(model, model_state) + evaldir = get_evaldir(path, epoch, mkdir = True) + + return (args, model, evaldir) + +def load_eval_model_dset_from_cmdargs( + cmdargs, merge_type = MERGE_NONE, **config_overrides +): + args, model, evaldir = start_model_eval( + cmdargs.model, cmdargs.epoch, cmdargs.model_state, + merge_type = merge_type, + batch_size = cmdargs.batch_size, **config_overrides + ) + + data_it = construct_data_loaders( + args.config.data, args.config.batch_size, split = cmdargs.split + ) + + return (args, model, data_it, evaldir) + +def get_eval_savedir(evaldir, prefix, model_state, split, mkdir = False): + result = os.path.join(evaldir, f'{prefix}_{model_state}-{split}') + + if mkdir: + os.makedirs(result, exist_ok = True) + + return result + +def make_image_subdirs(model, savedir): + for name in model.images: + path = os.path.join(savedir, name) + os.makedirs(path, exist_ok = True) + diff --git a/rawformer/models/__init__.py b/rawformer/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/models/discriminator/__init__.py b/rawformer/models/discriminator/__init__.py new file mode 100644 index 0000000..7338cc9 --- /dev/null +++ b/rawformer/models/discriminator/__init__.py @@ -0,0 +1,14 @@ +from rawformer.base.networks import select_base_discriminator +from rawformer.models.funcs import default_model_init + +def select_discriminator(name, **kwargs): + return select_base_discriminator(name, **kwargs) + +def construct_discriminator(model_config, image_shape, device): + model = select_discriminator( + model_config.model, image_shape = image_shape, + **model_config.model_args + ) + + return default_model_init(model, model_config, device) + diff --git a/rawformer/models/funcs.py b/rawformer/models/funcs.py new file mode 100644 index 0000000..18f95b6 --- /dev/null +++ b/rawformer/models/funcs.py @@ -0,0 +1,13 @@ +from rawformer.base.weight_init import init_weights +from rawformer.torch.funcs import prepare_model +from rawformer.torch.spectr_norm import apply_sn + +def default_model_init(model, model_config, device): + model = prepare_model(model, device) + init_weights(model, model_config.weight_init) + + if model_config.spectr_norm: + apply_sn(model) + + return model + diff --git a/rawformer/models/generator/__init__.py b/rawformer/models/generator/__init__.py new file mode 100644 index 0000000..1fb39ab --- /dev/null +++ b/rawformer/models/generator/__init__.py @@ -0,0 +1,37 @@ +from rawformer.base.networks import select_base_generator +from rawformer.models.funcs import default_model_init + +from .vit import ViTGenerator +from .vitunet import ViTUNetGenerator +from .vitmodnet import ViTModNetGenerator +from .vitrawnet import ViTRawNetGenerator + +def select_generator(name, **kwargs): + if name == 'vit-v0': + return ViTGenerator(**kwargs) + + if name == 'vit-unet': + return ViTUNetGenerator(**kwargs) + + if name == 'vit-modnet': + return ViTModNetGenerator(**kwargs) + + if name == 'vit-rawnet': + return ViTRawNetGenerator(**kwargs) + + input_shape = kwargs.pop('input_shape') + output_shape = kwargs.pop('output_shape') + + assert input_shape == output_shape + return select_base_generator(name, image_shape = input_shape, **kwargs) + +def construct_generator(model_config, input_shape, output_shape, device): + model = select_generator( + model_config.model, + input_shape = input_shape, + output_shape = output_shape, + **model_config.model_args + ) + + return default_model_init(model, model_config, device) + diff --git a/rawformer/models/generator/vit.py b/rawformer/models/generator/vit.py new file mode 100644 index 0000000..7a259e3 --- /dev/null +++ b/rawformer/models/generator/vit.py @@ -0,0 +1,78 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +import numpy as np +from torch import nn + +from rawformer.torch.layers.transformer import ( + calc_tokenized_size, ViTInput, TransformerEncoder, img_to_tokens, + img_from_tokens +) + +class ViTGenerator(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, input_shape, output_shape, token_size, + rescale = False, rezero = True, **kwargs + ): + super().__init__(**kwargs) + + assert input_shape == output_shape + image_shape = input_shape + + self.image_shape = image_shape + self.token_size = token_size + self.token_shape = (image_shape[0], *token_size) + self.token_features = np.prod([image_shape[0], *token_size]) + self.N_h, self.N_w = calc_tokenized_size(image_shape, token_size) + self.rescale = rescale + + self.gan_input = ViTInput( + self.token_features, embed_features, features, self.N_h, self.N_w + ) + + self.trans = TransformerEncoder( + features, ffn_features, n_heads, n_blocks, activ, norm, rezero + ) + + self.gan_output = nn.Linear(features, self.token_features) + + # pylint: disable=no-self-use + def calc_scale(self, x): + # x : (N, C, H, W) + return x.abs().mean(dim = (1, 2, 3), keepdim = True) + 1e-8 + + def forward(self, x): + # x : (N, C, H, W) + if self.rescale: + scale = self.calc_scale(x) + x = x / scale + + # itokens : (N, N_h, N_w, C, H_c, W_c) + itokens = img_to_tokens(x, self.token_shape[1:]) + + # itokens : (N, N_h, N_w, C, H_c, W_c) + # -> (N, N_h * N_w, C * H_c * W_c) + # = (N, L, in_features) + itokens = itokens.reshape((itokens.shape[0], self.N_h * self.N_w, -1)) + + # y : (N, L, features) + y = self.gan_input(itokens) + y = self.trans(y) + + # otokens : (N, L, in_features) + otokens = self.gan_output(y) + + # otokens : (N, L, in_features) + # -> (N, N_h, N_w, C, H_c, W_c) + otokens = otokens.reshape(( + otokens.shape[0], self.N_h, self.N_w, *self.token_shape + )) + + result = img_from_tokens(otokens) + if self.rescale: + result = result * scale + + return result + diff --git a/rawformer/models/generator/vitmodnet.py b/rawformer/models/generator/vitmodnet.py new file mode 100644 index 0000000..d17081c --- /dev/null +++ b/rawformer/models/generator/vitmodnet.py @@ -0,0 +1,60 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +from torch import nn + +from rawformer.torch.layers.transformer import ExtendedPixelwiseViT +from rawformer.torch.layers.modnet import ModNet +from rawformer.torch.select import get_activ_layer + +class ViTModNetGenerator(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, input_shape, output_shape, modnet_features_list, + modnet_activ, + modnet_norm = None, + modnet_downsample = 'conv', + modnet_upsample = 'upsample-conv', + modnet_rezero = False, + modnet_demod = True, + rezero = True, + activ_output = None, + style_rezero = True, + style_bias = True, + n_ext = 1, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + assert input_shape == output_shape + image_shape = input_shape + + self.image_shape = image_shape + + mod_features = features * n_ext + + self.net = ModNet( + modnet_features_list, modnet_activ, modnet_norm, image_shape, + modnet_downsample, modnet_upsample, mod_features, modnet_rezero, + modnet_demod, style_rezero, style_bias, return_mod = False + ) + + bottleneck = ExtendedPixelwiseViT( + features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, + image_shape = self.net.get_inner_shape(), + rezero = rezero, + n_ext = n_ext, + ) + + self.net.set_bottleneck(bottleneck) + + self.output = get_activ_layer(activ_output) + + def forward(self, x): + # x : (N, C, H, W) + result = self.net(x) + return self.output(result) + diff --git a/rawformer/models/generator/vitrawnet.py b/rawformer/models/generator/vitrawnet.py new file mode 100644 index 0000000..7559eef --- /dev/null +++ b/rawformer/models/generator/vitrawnet.py @@ -0,0 +1,64 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +from torch import nn + +from rawformer.torch.layers.transformer import ExtendedPixelwiseViT +#from rawformer.torch.layers.rawnet_basic import RawNet +from rawformer.torch.layers.rawnet import RawNet +from rawformer.torch.select import get_activ_layer + +class ViTRawNetGenerator(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, input_shape, output_shape, modnet_features_list, + modnet_activ, + modnet_norm = None, + modnet_downsample = 'conv', + modnet_upsample = 'upsample-conv', + modnet_rezero = False, + modnet_demod = True, + rezero = True, + activ_output = None, + style_rezero = True, + style_bias = True, + n_ext = 1, + rawnet_num_heads = 1, + rawnet_token_size = 4, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + assert input_shape == output_shape + image_shape = input_shape + + self.image_shape = image_shape + + mod_features = features * n_ext + + self.net = RawNet( + modnet_features_list, modnet_activ, modnet_norm, image_shape, + modnet_downsample, modnet_upsample, mod_features, modnet_rezero, + modnet_demod, style_rezero, style_bias, return_mod = False, + num_heads=rawnet_num_heads, token_size=rawnet_token_size, + ) + + bottleneck = ExtendedPixelwiseViT( + features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, + image_shape = self.net.get_inner_shape(), + rezero = rezero, + n_ext = n_ext, + ) + + self.net.set_bottleneck(bottleneck) + + self.output = get_activ_layer(activ_output) + + def forward(self, x): + # x : (N, C, H, W) + result = self.net(x) + return self.output(result) + diff --git a/rawformer/models/generator/vitunet.py b/rawformer/models/generator/vitunet.py new file mode 100644 index 0000000..b4ccc4a --- /dev/null +++ b/rawformer/models/generator/vitunet.py @@ -0,0 +1,51 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +from torch import nn + +from rawformer.torch.layers.transformer import PixelwiseViT +from rawformer.torch.layers.unet import UNet +from rawformer.torch.select import get_activ_layer + +class ViTUNetGenerator(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, input_shape, output_shape, + unet_features_list, unet_activ, unet_norm, + unet_downsample = 'conv', + unet_upsample = 'upsample-conv', + unet_rezero = False, + rezero = True, + activ_output = None, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + assert input_shape == output_shape + image_shape = input_shape + + self.image_shape = image_shape + + self.net = UNet( + unet_features_list, unet_activ, unet_norm, image_shape, + unet_downsample, unet_upsample, unet_rezero + ) + + bottleneck = PixelwiseViT( + features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, + image_shape = self.net.get_inner_shape(), + rezero = rezero + ) + + self.net.set_bottleneck(bottleneck) + + self.output = get_activ_layer(activ_output) + + def forward(self, x): + # x : (N, C, H, W) + result = self.net(x) + return self.output(result) + diff --git a/rawformer/presets.py b/rawformer/presets.py new file mode 100644 index 0000000..c10c5f1 --- /dev/null +++ b/rawformer/presets.py @@ -0,0 +1,87 @@ + + +GEN_PRESETS = { + 'resnet9' : { + 'model' : 'resnet_9blocks', + 'model_args' : None, + }, + 'unet' : { + 'model' : 'unet_256', + 'model_args' : None, + }, + 'uvcgan' : { + 'model' : 'vit-unet', + 'model_args' : { + 'features' : 384, + 'n_heads' : 6, + 'n_blocks' : 12, + 'ffn_features' : 1536, + 'embed_features' : 384, + 'activ' : 'gelu', + 'norm' : 'layer', + 'unet_features_list' : [48, 96, 192, 384], + 'unet_activ' : 'leakyrelu', + 'unet_norm' : 'instance', + 'unet_downsample' : 'conv', + 'unet_upsample' : 'upsample-conv', + 'rezero' : True, + 'activ_output' : 'sigmoid', + }, + }, + 'uvcgan2' : { + 'model' : 'vit-modnet', + 'model_args' : { + 'features' : 384, + 'n_heads' : 6, + 'n_blocks' : 12, + 'ffn_features' : 1536, + 'embed_features' : 384, + 'activ' : 'gelu', + 'norm' : 'layer', + 'modnet_features_list' : [48, 96, 192, 384], + 'modnet_activ' : 'leakyrelu', + 'modnet_norm' : None, + 'modnet_downsample' : 'conv', + 'modnet_upsample' : 'upsample-conv', + 'modnet_rezero' : False, + 'modnet_demod' : True, + 'rezero' : True, + 'activ_output' : 'sigmoid', + 'style_rezero' : True, + 'style_bias' : True, + 'n_ext' : 1, + }, + }, + 'rawformer' : { + 'model' : 'vit-rawnet', + 'model_args' : { + 'features' : 192, # 192 + 'n_heads' : 6, # 6 + 'n_blocks' : 12, # 12 + 'ffn_features' : 768, # 768 + 'embed_features' : 192, # 192 + 'activ' : 'gelu', + 'norm' : 'layer', + 'modnet_features_list' : [24, 48, 96, 192], + 'modnet_activ' : 'leakyrelu', + 'modnet_norm' : None, + 'modnet_downsample' : 'conv', # 'conv' + 'modnet_upsample' : 'upsample-conv', # 'upsample-conv' + 'modnet_rezero' : False, + 'modnet_demod' : True, + 'rezero' : True, + 'activ_output' : 'sigmoid', + 'style_rezero' : True, + 'style_bias' : True, + 'n_ext' : 1, + 'rawnet_num_heads' : 1, + 'rawnet_token_size' : 4, + }, + }, +} + +BH_PRESETS = { + 'bn' : 'batch-norm-2d', + 'bsd' : 'batch-stdev', +} + diff --git a/rawformer/torch/__init__.py b/rawformer/torch/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/torch/funcs.py b/rawformer/torch/funcs.py new file mode 100644 index 0000000..46a4ac6 --- /dev/null +++ b/rawformer/torch/funcs.py @@ -0,0 +1,52 @@ +import logging +import random +import torch +import numpy as np + +from torch import nn + +LOGGER = logging.getLogger('rawformer.torch') + +def seed_everything(seed): + torch.manual_seed(seed) + random.seed(seed) + np.random.seed(seed) + +def get_torch_device_smart(): + if torch.cuda.is_available(): + return 'cuda' + + return 'cpu' + +def prepare_model(model, device): + model = model.to(device) + + if torch.cuda.device_count() > 1: + LOGGER.warning( + "Multiple (%d) GPUs found. Using Data Parallelism", + torch.cuda.device_count() + ) + model = nn.DataParallel(model) + + return model + +@torch.no_grad() +def update_average_model(average_model, model, momentum): + # TODO: Maybe it is better to copy buffers, instead of + # averaging them. + # Think about this later. + online_params = dict(model.named_parameters()) + online_bufs = dict(model.named_buffers()) + + for (k, v) in average_model.named_parameters(): + if v.ndim == 0: + v.copy_(momentum * v + (1 - momentum) * online_params[k]) + else: + v.lerp_(online_params[k], (1 - momentum)) + + for (k, v) in average_model.named_buffers(): + if v.ndim == 0: + v.copy_(momentum * v + (1 - momentum) * online_bufs[k]) + else: + v.lerp_(online_bufs[k], (1 - momentum)) + diff --git a/rawformer/torch/gradient_penalty.py b/rawformer/torch/gradient_penalty.py new file mode 100644 index 0000000..bec979c --- /dev/null +++ b/rawformer/torch/gradient_penalty.py @@ -0,0 +1,127 @@ +import torch + +def mix_tensors(alpha, a, b): + return alpha * a + (1 - alpha) * b + +def recursively_mix_args(alpha, a, b): + if a is None: + assert b is None + return None + + if isinstance(a, (tuple, list)): + return type(a)( + recursively_mix_args(alpha, x, y) for (x, y) in zip(a, b) + ) + + if isinstance(a, dict): + return { + k : recursively_mix_args(alpha, a[k], b[k]) for k in a + } + + if isinstance(a, torch.Tensor): + return mix_tensors(alpha, a, b) + + assert a == b + return a + +def reduce_tensor(y, reduction, reduce_batch = False): + if isinstance(y, (list, tuple)): + return [ reduce_tensor(x, reduction) for x in y ] + + if (reduction is None) or (reduction == 'none'): + return y + + if reduction == 'mean': + if reduce_batch: + return y.mean() + else: + return y.mean(dim = tuple(i for i in range(1, y.dim()))) + + if reduction == 'sum': + if reduce_batch: + return y.sum() + else: + return y.sum(dim = tuple(i for i in range(1, y.dim()))) + + raise ValueError(f"Unknown reduction: '{reduction}'") + +class GradientPenalty: + + def __init__( + self, mix_type, center, lambda_gp, seed = 0, + reduction = 'mean', gp_reduction = 'mean' + ): + # pylint: disable=too-many-arguments + self._mix_type = mix_type + self._center = center + self._reduce = reduction + self._gp_reduce = gp_reduction + self._lambda = lambda_gp + + self._rng = torch.Generator() + self._rng.manual_seed(seed) + + def eval_at(self, model, x, **model_kwargs): + x.requires_grad_(True) + + y = model(x, **model_kwargs) + y = reduce_tensor(y, self._reduce, reduce_batch = False) + + if not isinstance(y, list): + y = [ y, ] + + grad = torch.autograd.grad( + outputs = y, + inputs = x, + grad_outputs = [ torch.ones(z.size()).to(z.device) for z in y ], + create_graph = True, + retain_graph = True, + ) + + grad_x = grad[0].reshape((x.shape[0], -1)) + result = torch.square( + torch.norm(grad_x, p = 2, dim = 1) - self._center + ) + + return self._lambda * result + + def mix_gp_args(self, a, b, model_kwargs_a, model_kwargs_b): + alpha = torch.rand(1, generator = self._rng).to(a.device) + result = mix_tensors(alpha, a, b) + + mixed_kwargs = recursively_mix_args( + alpha, model_kwargs_a, model_kwargs_b + ) + return (result, mixed_kwargs) + + def get_eval_point( + self, fake, real, model_kwargs_fake = None, model_kwargs_real = None + ): + if self._mix_type == 'real': + return (real.clone(), model_kwargs_real) + + if self._mix_type == 'fake': + return (fake.clone(), model_kwargs_fake) + + if self._mix_type == 'real-fake': + return self.mix_gp_args( + real, fake, model_kwargs_real, model_kwargs_fake + ) + + raise ValueError(f"Unknown mix type: {self._mix_type}") + + def __call__( + self, model, fake, real, + model_kwargs_fake = None, + model_kwargs_real = None, + ): + # pylint: disable=too-many-arguments + x, model_kwargs = self.get_eval_point( + fake, real, model_kwargs_fake, model_kwargs_real + ) + + model_kwargs = model_kwargs or {} + result = self.eval_at(model, x, **model_kwargs) + + return reduce_tensor(result, self._gp_reduce, reduce_batch = True) + diff --git a/rawformer/torch/image_masking.py b/rawformer/torch/image_masking.py new file mode 100644 index 0000000..cffc0c1 --- /dev/null +++ b/rawformer/torch/image_masking.py @@ -0,0 +1,129 @@ +import torch +from torch import nn + +from .select import extract_name_kwargs +from .layers.transformer import calc_tokenized_size + +class SequenceRandomMasking(nn.Module): + + def __init__(self, fraction = 0.4, seed = 0, **kwargs): + super().__init__(**kwargs) + self._fraction = fraction + + self._rng = torch.Generator() + self._rng.manual_seed(seed) + + def forward(self, sequence): + # sequence : (N, L, features) + mask = ( + torch.rand((*sequence.shape[:2], 1), generator = self._rng) + > self._fraction + ) + return mask.to(sequence.device) * sequence + +class ImagePatchRandomMasking(nn.Module): + + def __init__(self, patch_size, fraction = 0.4, seed = 0, **kwargs): + super().__init__(**kwargs) + + self._patch_size = patch_size + self._fraction = fraction + + self._rng = torch.Generator() + self._rng.manual_seed(seed) + + def forward(self, image): + # image : (N, C, H, W) + N_h, N_w = calc_tokenized_size(image.shape[1:], self._patch_size) + + # mask : (N, 1, N_h, N_w) + mask = ( + torch.rand((image.shape[0], 1, N_h, N_w), generator = self._rng) + > self._fraction + ) + + # mask : (N, 1, N_h, N_w) + # -> (N, 1, H, W) + mask = mask.repeat_interleave(self._patch_size[0], dim = 2) + mask = mask.repeat_interleave(self._patch_size[1], dim = 3) + + return mask.to(image.device) * image + +# pylint: disable=trailing-whitespace +# class BlockwiseMasking(ImageMaskingBase): +# # Algorithm 1 of arXiv:2106.08254 +# +# def __init__( +# self, +# mask_ratio = 0.4, +# min_block_size = 16, +# aspect_ratio = 0.3, +# seed = 0, +# ): +# self._mask_ratio = mask_ratio +# self._min_block_size = min_block_size +# self._aspect_ratio = aspect_ratio +# +# self._prg = np.random.default_rng(seed) +# +# def get_mask_region(self, image, h, w, masking_threshold, masked_patches): +# min_block_size = self._min_block_size +# max_block_size = \ +# max(min_block_size, masking_threshold - len(masked_patches)) +# +# block_size = self._prg.integers(min_block_size, max_block_size) +# aspect_ratio = self._prg.uniform( +# self._aspect_ratio, 1/self._aspect_ratio +# ) +# +# y_range = int(np.round(np.sqrt(block_size * aspect_ratio))) +# x_range = int(np.round(np.sqrt(block_size / aspect_ratio))) +# +# y_range = min(y_range, h) +# x_range = min(x_range, w) +# +# y0 = self._prg.integers(0, h - y_range) +# x0 = self._prg.integers(0, w - x_range) +# +# return (y0, x0, y_range, x_range) +# +# def mask(self, image): +# # image : (..., H, W) +# h = image.shape[-2] +# w = image.shape[-1] +# +# n_patches = h * w +# masked_patches = set() +# +# masking_threshold = self._mask_ratio * n_patches +# +# while len(masked_patches) < masking_threshold: +# (y0, x0, y_range, x_range) = self.get_mask_region( +# image, h, w, masking_threshold, masked_patches +# ) +# +# for y in range(y0, y0 + y_range): +# for x in range(x0, x0 + x_range): +# coord = (x, y) +# if coord in masked_patches: +# continue +# +# image[..., y, x] = 0 +# masked_patches.add(coord) +# +# return image + +def select_masking(masking): + if masking is None: + return None + + name, kwargs = extract_name_kwargs(masking) + + if name in [ 'transformer-random', 'sequence-random' ]: + return SequenceRandomMasking(**kwargs) + + if name == 'image-patch-random': + return ImagePatchRandomMasking(**kwargs) + + raise ValueError("Unknown masking: '%s'" % name) + diff --git a/rawformer/torch/layers/__init__.py b/rawformer/torch/layers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/torch/layers/batch_head.py b/rawformer/torch/layers/batch_head.py new file mode 100644 index 0000000..741375f --- /dev/null +++ b/rawformer/torch/layers/batch_head.py @@ -0,0 +1,242 @@ +import torch +from torch import nn + +from rawformer.torch.select import get_activ_layer, extract_name_kwargs + +# References: +# arXiv: 1912.0495 +# https://github.com/moono/stylegan2-tf-2.x/blob/master/stylegan2/discriminator.py +# https://github.com/NVlabs/stylegan2/blob/master/training/networks_stylegan2.py + +class BatchStdev(nn.Module): + + # pylint: disable=useless-super-delegation + def __init__(self, **kwargs): + """ arXiv: 1710.10196 """ + super().__init__(**kwargs) + + @staticmethod + def safe_stdev(x, dim = 0, eps = 1e-6): + var = torch.var(x, dim = dim, unbiased = False, keepdim = True) + stdev = torch.sqrt(var + eps) + + return stdev + + # pylint: disable=no-self-use + def forward(self, x): + """ + NOTE: Reference impl has fixed minibatch size. + + arXiv: 1710.10196 + + 1. We first compute the standard deviation for each feature in each + spatial location over the minibatch. + + 2. We then average these estimates over all features and spatial + locations to arrive at a single value. + + 3. We replicate the value and concatenate it to all spatial locations + and over the minibatch, yielding one additional (con-stant) feature + map. + """ + + # x : (N, C, H, W) + # x_stdev : (1, C, H, W) + x_stdev = BatchStdev.safe_stdev(x, dim = 0) + + # x_norm : (1, 1, 1, 1) + x_norm = torch.mean(x_stdev, dim = (1, 2, 3), keepdim = True) + + # x_norm : (N, 1, H, W) + x_norm = x_norm.expand((x.shape[0], 1, *x.shape[2:])) + + # y : (N, C + 1, H, W) + y = torch.cat((x, x_norm), dim = 1) + + return y + +class BatchHead1d(nn.Module): + + def __init__( + self, input_features, mid_features = None, output_features = None, + activ = 'relu', activ_output = None, **kwargs + ): + # pylint: disable=too-many-arguments + super().__init__(**kwargs) + + if mid_features is None: + mid_features = input_features + + if output_features is None: + output_features = mid_features + + self.net = nn.Sequential( + nn.Linear(input_features, mid_features), + nn.BatchNorm1d(mid_features), + get_activ_layer(activ), + + nn.Linear(mid_features, output_features), + get_activ_layer(activ_output), + ) + + def forward(self, x): + # x : (N, C) + return self.net(x) + +class BatchHead2d(nn.Module): + + def __init__( + self, input_features, mid_features = None, output_features = None, + activ = 'relu', activ_output = None, n_signal = None, **kwargs + ): + # pylint: disable=too-many-arguments + super().__init__(**kwargs) + + if mid_features is None: + mid_features = input_features + + if output_features is None: + output_features = mid_features + + self._n_signal = n_signal + + self.norm = nn.BatchNorm2d(input_features) + self.net = nn.Sequential( + nn.Conv2d( + input_features, mid_features, kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + + nn.Conv2d( + mid_features, output_features, kernel_size = 3, padding = 1 + ), + get_activ_layer(activ_output), + ) + + def forward(self, x): + # x : (N, C, H, W) + y = self.norm(x) + + if self._n_signal is not None: + # Drop queue tokens + y = y[:self._n_signal, ...] + + return self.net(y) + +class BatchStdevHead(nn.Module): + + def __init__( + self, input_features, mid_features = None, output_features = None, + activ = 'relu', activ_output = None, **kwargs + ): + # pylint: disable=too-many-arguments + super().__init__(**kwargs) + + if mid_features is None: + mid_features = input_features + + if output_features is None: + output_features = mid_features + + self.net = nn.Sequential( + BatchStdev(), + nn.Conv2d( + input_features + 1, mid_features, kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + + nn.Conv2d( + mid_features, output_features, kernel_size = 3, padding = 1 + ), + get_activ_layer(activ_output), + ) + + def forward(self, x): + # x : (N, C, H, W) + return self.net(x) + +class BatchAverageHead(nn.Module): + + def __init__( + self, input_features, reduce_channels = True, average_spacial = False, + activ_output = None, **kwargs + ): + # pylint: disable=too-many-arguments + super().__init__(**kwargs) + + layers = [] + + if reduce_channels: + layers.append( + nn.Conv2d(input_features, 1, kernel_size = 3, padding = 1) + ) + + if average_spacial: + layers.append(nn.AdaptiveAvgPool2d(1)) + + if activ_output is not None: + layers.append(get_activ_layer(activ_output)) + + self.net = nn.Sequential(*layers) + + def forward(self, x): + # x : (N, C, H, W) + return self.net(x) + +class BatchHeadWrapper(nn.Module): + + def __init__(self, body, head, **kwargs): + super().__init__(**kwargs) + self._body = body + self._head = head + + def forward_head(self, x_body): + return self._head(x_body) + + def forward_body(self, x): + return self._body(x) + + def forward(self, x, extra_bodies = None, return_body = False): + y_body = self._body(x) + + if isinstance(y_body, (list, tuple)): + y_body_main = list(y_body[:-1]) + y_body_last = y_body[-1] + else: + y_body_main = tuple() + y_body_last = y_body + + if extra_bodies is not None: + all_bodies = torch.cat((y_body_last, extra_bodies), dim = 0) + y_head = self._head(all_bodies) + else: + y_head = self._head(y_body_last) + + y_head = y_head[:y_body_last.shape[0]] + + if len(y_body_main) == 0: + result = y_head + else: + result = y_body_main + [ y_head, ] + + if return_body: + return (result, y_body_last) + + return result + +BATCH_HEADS = { + 'batch-norm-1d' : BatchHead1d, + 'batch-norm-2d' : BatchHead2d, + 'batch-stdev' : BatchStdevHead, + 'simple-average' : BatchAverageHead, + 'idt' : nn.Identity, +} + +def get_batch_head(batch_head): + name, kwargs = extract_name_kwargs(batch_head) + + if name not in BATCH_HEADS: + raise ValueError("Unknown Batch Head: '%s'" % name) + + return BATCH_HEADS[name](**kwargs) + diff --git a/rawformer/torch/layers/cnn.py b/rawformer/torch/layers/cnn.py new file mode 100644 index 0000000..0a9980b --- /dev/null +++ b/rawformer/torch/layers/cnn.py @@ -0,0 +1,213 @@ +from itertools import repeat +import torch +from torch import nn +from rawformer.torch.select import extract_name_kwargs + +def calc_conv1d_output_size(input_size, kernel_size, padding, stride): + return (input_size + 2 * padding - kernel_size) // stride + 1 + +def calc_conv_transpose1d_output_size( + input_size, kernel_size, padding, stride +): + return (input_size - 1) * stride - 2 * padding + kernel_size + +def calc_conv_output_size(input_size, kernel_size, padding, stride): + if isinstance(kernel_size, int): + kernel_size = repeat(kernel_size, len(input_size)) + + if isinstance(stride, int): + stride = repeat(stride, len(input_size)) + + if isinstance(padding, int): + padding = repeat(padding, len(input_size)) + + return tuple( + calc_conv1d_output_size(sz, ks, p, s) + for (sz, ks, p, s) in zip(input_size, kernel_size, padding, stride) + ) + +def calc_conv_transpose_output_size(input_size, kernel_size, padding, stride): + if isinstance(kernel_size, int): + kernel_size = repeat(kernel_size, len(input_size)) + + if isinstance(stride, int): + stride = repeat(stride, len(input_size)) + + if isinstance(padding, int): + padding = repeat(padding, len(input_size)) + + return tuple( + calc_conv_transpose1d_output_size(sz, ks, p, s) + for (sz, ks, p, s) in zip(input_size, kernel_size, padding, stride) + ) + + + +class CDown(nn.Module): + def __init__(self, features): + super().__init__() + in_features = features + out_features = 4 * features + + self.conv = nn.Conv2d( + in_features, out_features, kernel_size = 2, stride = 2 + ) + + self.pixel_unshuffle = nn.PixelUnshuffle(downscale_factor = 2) + self.out_conv = nn.Conv2d( + out_features, in_features, kernel_size = 3 + ) + + def forward(self, x): + x_c = self.conv(x) + x_s = self.pixel_unshuffle(x) + x = x_c + x_s + x = self.out_conv(x) + return x + + +class CUp(nn.Module): + def __init__(self, features): + super().__init__() + in_features = features + out_features = features // 4 + + self.conv = nn.ConvTranspose2d( + in_features, out_features, kernel_size = 2, stride = 2, + ) + + self.pixel_shuffle = nn.PixelShuffle(upscale_factor = 2) + self.out_conv = nn.Conv2d( + out_features, in_features, kernel_size = 3 + ) + + def forward(self, x): + x_c = self.conv(x) + x_s = self.pixel_shuffle(x) + x = x_c + x_s + x = self.out_conv(x) + return x + + +def get_downsample_x2_conv2_layer(features, **kwargs): + return ( + nn.Conv2d(features, features, kernel_size = 2, stride = 2, **kwargs), + features + ) + +def get_downsample_x2_conv3_layer(features, **kwargs): + return ( + nn.Conv2d( + features, features, kernel_size = 3, stride = 2, padding = 1, + **kwargs + ), + features + ) + +def get_downsample_x2_pixelshuffle_layer(features, **kwargs): + out_features = 4 * features + return (nn.PixelUnshuffle(downscale_factor = 2, **kwargs), out_features) + +def get_downsample_x2_pixelshuffle_conv_layer(features, **kwargs): + out_features = features * 4 + + layer = nn.Sequential( + nn.PixelUnshuffle(downscale_factor = 2, **kwargs), + nn.Conv2d( + out_features, out_features, kernel_size = 3, padding = 1 + ), + ) + + return (layer, out_features) + +def get_cdown_layer(features, **kwargs): + out_features = features + + layer = CDown(features) + + return (layer, out_features) + +def get_upsample_x2_deconv2_layer(features, **kwargs): + return ( + nn.ConvTranspose2d( + features, features, kernel_size = 2, stride = 2, **kwargs + ), + features + ) + +def get_upsample_x2_upconv_layer(features, **kwargs): + layer = nn.Sequential( + nn.Upsample(scale_factor = 2, **kwargs), + nn.Conv2d(features, features, kernel_size = 3, padding = 1), + ) + + return (layer, features) + +def get_upsample_x2_pixelshuffle_conv_layer(features, **kwargs): + out_features = features // 4 + + layer = nn.Sequential( + nn.PixelShuffle(upscale_factor = 2, **kwargs), + nn.Conv2d(out_features, out_features, kernel_size = 3, padding = 1), + ) + + return (layer, out_features) + + +def get_cup_layer(features, **kwargs): + out_features = features + + layer = CUp(features) + + return (layer, out_features) + + +def get_downsample_x2_layer(layer, features): + name, kwargs = extract_name_kwargs(layer) + + if name == 'conv': + return get_downsample_x2_conv2_layer(features, **kwargs) + + if name == 'conv3': + return get_downsample_x2_conv3_layer(features, **kwargs) + + if name == 'avgpool': + return (nn.AvgPool2d(kernel_size = 2, stride = 2, **kwargs), features) + + if name == 'maxpool': + return (nn.MaxPool2d(kernel_size = 2, stride = 2, **kwargs), features) + + if name == 'pixel-unshuffle': + return get_downsample_x2_pixelshuffle_layer(features, **kwargs) + + if name == 'pixel-unshuffle-conv': + return get_downsample_x2_pixelshuffle_conv_layer(features, **kwargs) + + if name == 'cdown': + return get_cdown_layer(features, **kwargs) + + raise ValueError("Unknown Downsample Layer: '%s'" % name) + +def get_upsample_x2_layer(layer, features): + name, kwargs = extract_name_kwargs(layer) + + if name == 'deconv': + return get_upsample_x2_deconv2_layer(features, **kwargs) + + if name == 'upsample': + return (nn.Upsample(scale_factor = 2, **kwargs), features) + + if name == 'upsample-conv': + return get_upsample_x2_upconv_layer(features, **kwargs) + + if name == 'pixel-shuffle': + return (nn.PixelShuffle(upscale_factor = 2, **kwargs), features // 4) + + if name == 'pixel-shuffle-conv': + return get_upsample_x2_pixelshuffle_conv_layer(features, **kwargs) + + if name == 'cup': + return get_cup_layer(features, **kwargs) + + raise ValueError("Unknown Upsample Layer: '%s'" % name) + diff --git a/rawformer/torch/layers/modnet.py b/rawformer/torch/layers/modnet.py new file mode 100644 index 0000000..85b4be2 --- /dev/null +++ b/rawformer/torch/layers/modnet.py @@ -0,0 +1,414 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +import torch +from torch import nn + +from rawformer.torch.select import get_activ_layer +from .cnn import get_upsample_x2_layer +from .unet import UNetEncBlock + +# Ref: https://arxiv.org/pdf/1912.04958.pdf + +def get_demod_scale(mod_scale, weights, eps = 1e-6): + # Ref: https://arxiv.org/pdf/1912.04958.pdf + # + # demod_scale[alpha] = 1 / sqrt(sigma[alpha]^2 + eps) + # + # sigma[alpha]^2 + # = sum_{beta i} (mod_scale[alpha] * weights[alpha, beta, i])^2 + # = sum_{beta} (mod_scale[alpha])^2 * sum_i (weights[alpha, beta, i])^2 + # + + # mod_scale : (N, C_in) + # weights : (C_out, C_in, h, w) + + # w_sq : (C_out, C_in) + w_sq = torch.sum(weights.square(), dim = (2, 3)) + + # w_sq : (C_out, C_in) -> (1, C_in, C_out) + w_sq = torch.swapaxes(w_sq, 0, 1).unsqueeze(0) + + # mod_scale_sq : (N, C_in, 1) + mod_scale_sq = mod_scale.square().unsqueeze(2) + + # sigma : (N, C_out) + sigma_sq = torch.sum(mod_scale_sq * w_sq, dim = 1) + + # result : (N, C_out) + return 1 / torch.sqrt(sigma_sq + eps) + +class ModulatedConv2d(nn.Module): + + def __init__( + self, in_channels, out_channels, kernel_size, + stride = 1, padding = 0, dilation = 1, groups = 1, eps = 1e-6, + demod = True, device = None, dtype = None, **kwargs + ): + super().__init__(**kwargs) + + self.conv = nn.Conv2d( + in_channels, out_channels, kernel_size, stride, padding, dilation, + groups, device = device, dtype = dtype + ) + + self._eps = eps + self._demod = demod + + def forward(self, x, s): + # x : (N, C_in, H_in, W_in) + # s : (N, C_in) + + # x_mod : (N, C_in, H_in, W_in) + x_mod = x * s.unsqueeze(2).unsqueeze(3) + + # y : (N, C_out, H_out, W_out) + y = self.conv(x_mod) + + if self._demod: + # s_demod : (N, C_out) + s_demod = get_demod_scale(s, self.conv.weight) + y_demod = y * s_demod.unsqueeze(2).unsqueeze(3) + + return y_demod + + return y + +class StyleBlock(nn.Module): + + def __init__( + self, mod_features, style_features, rezero = True, bias = True, + **kwargs + ): + super().__init__(**kwargs) + + self.affine_mod = nn.Linear(mod_features, style_features, bias = bias) + self.rezero = rezero + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + def forward(self, mod): + # mod : (N, mod_features) + # s : (N, style_features) + s = 1 + self.re_alpha * self.affine_mod(mod) + + return s + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + +class ModNetBasicBlock(nn.Module): + + def __init__( + self, in_features, out_features, activ, mod_features, + mid_features = None, + demod = True, + style_rezero = True, + style_bias = True, + **kwargs + ): + super().__init__(**kwargs) + + if mid_features is None: + mid_features = out_features + + self.style_block1 = StyleBlock( + mod_features, in_features, style_rezero, style_bias + ) + self.conv_block1 = ModulatedConv2d( + in_features, mid_features, kernel_size = 3, padding = 1, + demod = demod + ) + self.activ1 = get_activ_layer(activ) + + self.style_block2 = StyleBlock( + mod_features, mid_features, style_rezero, style_bias + ) + self.conv_block2 = ModulatedConv2d( + mid_features, out_features, kernel_size = 3, padding = 1, + demod = demod + ) + self.activ2 = get_activ_layer(activ) + + def forward(self, x, mod): + # x : (N, C_in, H_in, W_in) + # mod : (N, mod_features) + + # mod_scale1 : (N, C_out) + mod_scale1 = self.style_block1(mod) + + # y1 : (N, C_mid, H_mid, W_mid) + y1 = self.conv_block1(x, mod_scale1) + y1 = self.activ1(y1) + + # mod_scale2 : (N, C_out) + mod_scale2 = self.style_block2(mod) + + # result : (N, C_out, H_out, W_out) + result = self.conv_block2(y1, mod_scale2) + result = self.activ2(result) + + return result + +class ModNetDecBlock(nn.Module): + + def __init__( + self, input_shape, output_features, skip_features, mod_features, + activ, upsample, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + **kwargs + ): + super().__init__(**kwargs) + + (input_features, H, W) = input_shape + self.upsample, input_features = get_upsample_x2_layer( + upsample, input_features + ) + + self.block = ModNetBasicBlock( + skip_features + input_features, output_features, activ, + mod_features = mod_features, + mid_features = max(input_features, input_shape[0]), + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + ) + + self._output_shape = (output_features, 2 * H, 2 * W) + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x, r, mod): + # x : (N, C, H_in, W_in) + # r : (N, C, H_out, W_out) + # mod : (N, mod_features) + + # x : (N, C_up, H_out, W_out) + x = self.re_alpha * self.upsample(x) + + # y : (N, C + C_up, H_out, W_out) + y = torch.cat([x, r], dim = 1) + + # result : (N, C_out, H_out, W_out) + return self.block(y, mod) + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + +class ModNetBlock(nn.Module): + + def __init__( + self, features, activ, norm, image_shape, downsample, upsample, + mod_features, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + **kwargs + ): + super().__init__(**kwargs) + + self.conv = UNetEncBlock( + features, activ, norm, downsample, image_shape + ) + + self.inner_shape = self.conv.output_shape + self.inner_module = None + + self.deconv = ModNetDecBlock( + input_shape = self.inner_shape, + output_features = image_shape[0], + skip_features = self.inner_shape[0], + mod_features = mod_features, + activ = activ, + upsample = upsample, + rezero = rezero, + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + ) + + def get_inner_shape(self): + return self.inner_shape + + def set_inner_module(self, module): + self.inner_module = module + + def get_inner_module(self): + return self.inner_module + + def forward(self, x): + # x : (N, C, H, W) + + # y : (N, C_inner, H_inner, W_inner) + # r : (N, C_inner, H, W) + (y, r) = self.conv(x) + + # y : (N, C_inner, H_inner, W_inner) + # mod : (N, mod_features) + y, mod = self.inner_module(y) + + # y : (N, C, H, W) + y = self.deconv(y, r, mod) + + return (y, mod) + +class ModNetLinearDecoder(nn.Module): + + def __init__( + self, features_list, input_shape, output_shape, skip_shapes, + mod_features, activ, upsample, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.net = nn.ModuleList() + self._input_shape = input_shape + self._output_shape = output_shape + curr_shape = input_shape + + for features, skip_shape in zip( + features_list[::-1], skip_shapes[::-1] + ): + layer = ModNetDecBlock( + input_shape = curr_shape, + output_features = features, + skip_features = skip_shape[0], + mod_features = mod_features, + activ = activ, + upsample = upsample, + rezero = rezero, + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + ) + curr_shape = layer.output_shape + + self.net.append(layer) + + self.output = nn.Conv2d( + curr_shape[0], output_shape[0], kernel_size = 1 + ) + curr_shape = (output_shape[0], *curr_shape[1:]) + + assert tuple(output_shape) == tuple(curr_shape) + + @property + def input_shape(self): + return self._input_shape + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x, skip_list, mod): + # x : (N, C, H, W) + # mod : (N, mod_features) + # skip_list : List[(N, C_i, H_i, W_i)] + + y = x + + for layer, skip in zip(self.net, skip_list[::-1]): + y = layer(y, skip, mod) + + return self.output(y) + +class ModNet(nn.Module): + + def __init__( + self, features_list, activ, norm, image_shape, downsample, upsample, + mod_features, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + return_mod = False, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.features_list = features_list + self.image_shape = image_shape + self.return_mod = return_mod + + self._construct_input_layer(activ) + self._construct_output_layer() + + unet_layers = [] + curr_image_shape = (features_list[0], *image_shape[1:]) + + for features in features_list: + layer = ModNetBlock( + features, activ, norm, curr_image_shape, downsample, upsample, + mod_features, rezero, demod, style_rezero, style_bias + ) + curr_image_shape = layer.get_inner_shape() + unet_layers.append(layer) + + for idx in range(len(unet_layers)-1): + unet_layers[idx].set_inner_module(unet_layers[idx+1]) + + self.modnet = unet_layers[0] + + def _construct_input_layer(self, activ): + self.layer_input = nn.Sequential( + nn.Conv2d( + self.image_shape[0], self.features_list[0], + kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + ) + + def _construct_output_layer(self): + self.layer_output = nn.Conv2d( + self.features_list[0], self.image_shape[0], kernel_size = 1 + ) + + def get_innermost_block(self): + result = self.modnet + + for _ in range(len(self.features_list)-1): + result = result.get_inner_module() + + return result + + def set_bottleneck(self, module): + self.get_innermost_block().set_inner_module(module) + + def get_bottleneck(self): + return self.get_innermost_block().get_inner_module() + + def get_inner_shape(self): + return self.get_innermost_block().get_inner_shape() + + def forward(self, x): + # x : (N, C, H, W) + + y = self.layer_input(x) + y, mod = self.modnet(y) + y = self.layer_output(y) + + if self.return_mod: + return (y, mod) + + return y + diff --git a/rawformer/torch/layers/rawnet.py b/rawformer/torch/layers/rawnet.py new file mode 100644 index 0000000..08bf1df --- /dev/null +++ b/rawformer/torch/layers/rawnet.py @@ -0,0 +1,695 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +import torch +from torch import nn +import torch.nn.functional as F +from einops import rearrange + +from rawformer.torch.select import get_activ_layer, get_norm_layer +from .cnn import get_downsample_x2_layer, get_upsample_x2_layer + + +def get_demod_scale(mod_scale, weights, eps = 1e-6): + # Ref: https://arxiv.org/pdf/1912.04958.pdf + # + # demod_scale[alpha] = 1 / sqrt(sigma[alpha]^2 + eps) + # + # sigma[alpha]^2 + # = sum_{beta i} (mod_scale[alpha] * weights[alpha, beta, i])^2 + # = sum_{beta} (mod_scale[alpha])^2 * sum_i (weights[alpha, beta, i])^2 + # + + # mod_scale : (N, C_in) + # weights : (C_out, C_in, h, w) + + # w_sq : (C_out, C_in) + w_sq = torch.sum(weights.square(), dim = (2, 3)) + + # w_sq : (C_out, C_in) -> (1, C_in, C_out) + w_sq = torch.swapaxes(w_sq, 0, 1).unsqueeze(0) + + # mod_scale_sq : (N, C_in, 1) + mod_scale_sq = mod_scale.square().unsqueeze(2) + + # sigma : (N, C_out) + sigma_sq = torch.sum(mod_scale_sq * w_sq, dim = 1) + + # result : (N, C_out) + return 1 / torch.sqrt(sigma_sq + eps) + + +def calc_tokenized_size(image_shape, token_size): + # image_shape : (C, H, W) + # token_size : (H_t, W_t) + if image_shape[1] % token_size[0] != 0: + raise ValueError( + "Token width %d does not divide image width %d" % ( + token_size[0], image_shape[1] + ) + ) + + if image_shape[2] % token_size[1] != 0: + raise ValueError( + "Token height %d does not divide image height %d" % ( + token_size[1], image_shape[2] + ) + ) + + # result : (N_h, N_w) + return (image_shape[1] // token_size[0], image_shape[2] // token_size[1]) + +def img_to_tokens(image_batch, token_size): + # image_batch : (N, C, H, W) + # token_size : (H_t, W_t) + + # result : (N, C, N_h, H_t, W) + result = image_batch.view( + (*image_batch.shape[:2], -1, token_size[0], image_batch.shape[3]) + ) + + # result : (N, C, N_h, H_t, W ) + # -> (N, C, N_h, H_t, N_w, W_t) + result = result.view((*result.shape[:4], -1, token_size[1])) + + # result : (N, C, N_h, H_t, N_w, W_t) + # -> (N, N_h, N_w, C, H_t, W_t) + result = result.permute((0, 2, 4, 1, 3, 5)) + + return result + +def img_from_tokens(tokens): + # tokens : (N, N_h, N_w, C, H_t, W_t) + # result : (N, C, N_h, H_t, N_w, W_t) + result = tokens.permute((0, 3, 1, 4, 2, 5)) + + # result : (N, C, N_h, H_t, N_w, W_t) + # -> (N, C, N_h, H_t, N_w * W_t) + # = (N, C, N_h, H_t, W) + result = result.reshape((*result.shape[:4], -1)) + + # result : (N, C, N_h, H_t, W) + # -> (N, C, N_h * H_t, W) + # = (N, C, H, W) + result = result.reshape((*result.shape[:2], -1, result.shape[4])) + + return result + + +class SA(nn.Module): + def __init__(self, dim, num_heads, bias): + super(SA, self).__init__() + self.num_heads = num_heads + #self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1)) + self.temperature = 1 / torch.sqrt(torch.tensor(dim, dtype=torch.float32)) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + self.qkv_dwconv = nn.Conv2d(dim * 3, dim * 3, kernel_size=3, stride=1, padding=1, groups=dim * 3, bias=bias) + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + + def forward(self, x): + b, c, h, w = x.shape + + qkv = self.qkv_dwconv(self.qkv(x)) + q, k, v = qkv.chunk(3, dim=1) + + q = rearrange(q, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + k = rearrange(k, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + v = rearrange(v, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + + q = torch.nn.functional.normalize(q, dim=-1) + k = torch.nn.functional.normalize(k, dim=-1) + + # transposed self-attention with attention map of shape (C×C) + attn = torch.matmul(q, k.transpose(-2, -1)) * self.temperature + attn = attn.softmax(dim=-1) + + out = torch.matmul(attn, v) + + out = rearrange(out, 'b head c (h w) -> b (head c) h w', head=self.num_heads, h=h, w=w) + + out = self.project_out(out) + return out + + +class CQA(nn.Module): + def __init__(self, dim, num_heads, bias, token_size): + super(CQA, self).__init__() + self.num_heads = num_heads + #self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1)) + self.temperature = 1 / torch.sqrt(torch.tensor(dim, dtype=torch.float32)) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + self.q_pwconv = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + self.pool = nn.AvgPool2d(2, 2) + self.token_size = (token_size, token_size) + + def forward(self, x): + b, c, h, w = x.shape + + qkv = self.qkv(x) + q, k, v = qkv.chunk(3, dim=1) + q_reduced = self.q_pwconv(self.pool(q)) + b_r, c_r, h_r, w_r = q_reduced.shape + N_h, N_w = calc_tokenized_size((c, h, w), self.token_size) + N_h_r, N_w_r = calc_tokenized_size((c_r, h_r, w_r), self.token_size) + + + q = img_to_tokens(q, self.token_size) + k = img_to_tokens(k, self.token_size) + v = img_to_tokens(v, self.token_size) + q_reduced = img_to_tokens(q_reduced, self.token_size) + q = q.reshape((q.shape[0], N_h * N_w, -1)) + k = k.reshape((k.shape[0], N_h * N_w, -1)) + v = v.reshape((v.shape[0], N_h * N_w, -1)) + q_reduced = q_reduced.reshape((q_reduced.shape[0], N_h_r * N_w_r, -1)) + + + q = torch.nn.functional.normalize(q, dim=-1) + q_reduced = torch.nn.functional.normalize(q_reduced, dim=-1) + k = torch.nn.functional.normalize(k, dim=-1) + + + attn_h = torch.matmul(q_reduced, k.transpose(-1, -2)) * self.temperature + attn_h = attn_h.softmax(dim=-1) + attn_u = torch.matmul(q, q_reduced.transpose(-1, -2)) * self.temperature + attn_u = attn_u.softmax(dim=-1) + + out = torch.matmul(attn_h, v) + out = torch.matmul(attn_u, out) + out = out.reshape(( + out.shape[0], N_h, N_w, c, *self.token_size + )) + out = img_from_tokens(out) + out = self.project_out(out) + return out + + +class ModSA(nn.Module): + def __init__(self, dim, num_heads, bias, + eps = 1e-6, demod = True): + super(ModSA, self).__init__() + self.num_heads = num_heads + #self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1)) + self.temperature = 1 / torch.sqrt(torch.tensor(dim, dtype=torch.float32)) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + self.qkv_dwconv = nn.Conv2d(dim * 3, dim * 3, kernel_size=3, stride=1, padding=1, groups=dim * 3, bias=bias) + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + self._eps = eps + self._demod = demod + + def forward(self, x, s): + b, c, h, w = x.shape + x = x * s.unsqueeze(2).unsqueeze(3) + + qkv = self.qkv_dwconv(self.qkv(x)) + q, k, v = qkv.chunk(3, dim=1) + + q = rearrange(q, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + k = rearrange(k, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + v = rearrange(v, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + + q = torch.nn.functional.normalize(q, dim=-1) + k = torch.nn.functional.normalize(k, dim=-1) + + # transposed self-attention with attention map of shape (C×C) + attn = torch.matmul(q, k.transpose(-2, -1)) * self.temperature + attn = attn.softmax(dim=-1) + + out = torch.matmul(attn, v) + + out = rearrange(out, 'b head c (h w) -> b (head c) h w', head=self.num_heads, h=h, w=w) + + out = self.project_out(out) + + if self._demod: + # s_demod : (N, C_out) + s_demod = get_demod_scale(s, self.project_out.weight) + out_demod = out * s_demod.unsqueeze(2).unsqueeze(3) + return out_demod + + return out + + +class ModCQA(nn.Module): + def __init__(self, dim, num_heads, bias, token_size, + eps = 1e-6, demod = True): + super(ModCQA, self).__init__() + self.num_heads = num_heads + #self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1)) + self.temperature = 1 / torch.sqrt(torch.tensor(dim, dtype=torch.float32)) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + self.q_pwconv = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + self.pool = nn.AvgPool2d(2, 2) + self._eps = eps + self._demod = demod + self.token_size = (token_size, token_size) + + def forward(self, x, s): + b, c, h, w = x.shape + + qkv = self.qkv(x) + q, k, v = qkv.chunk(3, dim=1) + q_mod = q * s.unsqueeze(2).unsqueeze(3) + q_reduced = self.q_pwconv(self.pool(q_mod)) + b_r, c_r, h_r, w_r = q_reduced.shape + N_h, N_w = calc_tokenized_size((c, h, w), self.token_size) + N_h_r, N_w_r = calc_tokenized_size((c_r, h_r, w_r), self.token_size) + + + q_mod = img_to_tokens(q_mod, self.token_size) + k = img_to_tokens(k, self.token_size) + v = img_to_tokens(v, self.token_size) + q_reduced = img_to_tokens(q_reduced, self.token_size) + q_mod = q_mod.reshape((q_mod.shape[0], N_h * N_w, -1)) + k = k.reshape((k.shape[0], N_h * N_w, -1)) + v = v.reshape((v.shape[0], N_h * N_w, -1)) + q_reduced = q_reduced.reshape((q_reduced.shape[0], N_h_r * N_w_r, -1)) + + q_mod = torch.nn.functional.normalize(q_mod, dim=-1) + q_reduced = torch.nn.functional.normalize(q_reduced, dim=-1) + k = torch.nn.functional.normalize(k, dim=-1) + + attn_h = torch.matmul(q_reduced, k.transpose(-1, -2)) * self.temperature + attn_h = attn_h.softmax(dim=-1) + attn_u = torch.matmul(q_mod, q_reduced.transpose(-1, -2)) * self.temperature + attn_u = attn_u.softmax(dim=-1) + + out = torch.matmul(attn_h, v) + out = torch.matmul(attn_u, out) + out = out.reshape(( + out.shape[0], N_h, N_w, c, *self.token_size + )) + out = img_from_tokens(out) + out = self.project_out(out) + + if self._demod: + # s_demod : (N, C_out) + s_demod = get_demod_scale(s, self.project_out.weight) + out_demod = out * s_demod.unsqueeze(2).unsqueeze(3) + return out_demod + + return out + + +class FFN(nn.Module): + """ + Feed-forward Network with Depth-wise Convolution + """ + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.pointwise1 = torch.nn.Conv2d(in_features, hidden_features, kernel_size=1) + self.depthwise = torch.nn.Conv2d(hidden_features,hidden_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=hidden_features) + self.pointwise2 = torch.nn.Conv2d(hidden_features, out_features, kernel_size=1) + self.act_layer = act_layer() if act_layer is not None else nn.Identity() + def forward(self, x): + x = self.pointwise1(x) + x = self.depthwise(x) + x = self.act_layer(x) + x = self.pointwise2(x) + return x + + +class SPFN(nn.Module): + """ + SPFN + """ + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.ReLU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + + self.pointwise_3x3_1 = torch.nn.Conv2d(in_features, hidden_features, kernel_size=1) + self.depthwise_3x3 = torch.nn.Conv2d(hidden_features,hidden_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=hidden_features) + self.pointwise_3x3_2 = torch.nn.Conv2d(hidden_features*2, out_features, kernel_size=1) + + self.pointwise_5x5_1 = torch.nn.Conv2d(in_features, hidden_features, kernel_size=1) + self.depthwise_5x5 = torch.nn.Conv2d(hidden_features, hidden_features, kernel_size=5,stride=1, padding=2, dilation=1, groups=hidden_features) + self.pointwise_5x5_2 = torch.nn.Conv2d(hidden_features*2, out_features, kernel_size=1) + + self.act_layer = act_layer() if act_layer is not None else nn.Identity() + def forward(self, x): + x_3x3 = self.pointwise_3x3_1(x) + x_3x3 = self.depthwise_3x3(x_3x3) + x_3x3 = self.act_layer(x_3x3) + x_5x5 = self.pointwise_5x5_1(x) + x_5x5 = self.depthwise_5x5(x_5x5) + x_5x5 = self.act_layer(x_5x5) + + x_3x3_c = torch.cat([x_5x5, x_3x3], dim=1) + x_3x3_c = self.pointwise_3x3_2(x_3x3_c) + x_5x5_c = torch.cat([x_3x3, x_5x5], dim=1) + x_5x5_c = self.pointwise_5x5_2(x_5x5_c) + x = x_3x3_c + x_5x5_c + return x + + +class StyleBlock(nn.Module): + + def __init__( + self, mod_features, style_features, rezero = True, bias = True, + **kwargs + ): + super().__init__(**kwargs) + + self.affine_mod = nn.Linear(mod_features, style_features, bias = bias) + self.rezero = rezero + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + def forward(self, mod): + # mod : (N, mod_features) + # s : (N, style_features) + s = 1 + self.re_alpha * self.affine_mod(mod) + + return s + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + + +class RawFormerBlock(nn.Module): + def __init__( + self, in_features, out_features, activ, norm, mid_features = None, + num_heads = 1, token_size = 4, **kwargs + ): + super().__init__(**kwargs) + + if mid_features is None: + mid_features = out_features + + + self.norm1 = get_norm_layer(norm, in_features) + self.attn = CQA(in_features, num_heads, token_size=token_size, bias=True) + self.dw = torch.nn.Conv2d(in_features, in_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=in_features) + self.pw = torch.nn.Conv2d(in_features*2, in_features, kernel_size=1) + self.norm2 = get_norm_layer(norm, in_features) + self.ffn = SPFN(in_features, mid_features, in_features) + self.out_conv = nn.Conv2d( + in_features, out_features, kernel_size = 3, padding = 1 + ) + self.act = get_activ_layer(activ) + + def forward(self, x): + #x = x + self.attn(self.norm1(x)) + #x = x + self.ffn(self.norm2(x)) + x_norm = self.norm1(x) + x_atten = self.attn(x_norm) + x_dw = self.act(self.dw(x_norm)) + x_atten_dw = self.pw(torch.cat([x_atten, x_dw], dim=1)) + x = x + x_atten_dw + x = x + self.ffn(self.norm2(x)) + x = self.act(self.out_conv(x)) + return x + + +class ModRawFormerBlock(nn.Module): + def __init__( + self, in_features, out_features, activ, norm, mod_features, + mid_features = None, + demod = True, + style_rezero = True, + style_bias = True, + num_heads=1, + token_size = 4, + **kwargs + ): + super().__init__(**kwargs) + + if mid_features is None: + mid_features = out_features + + self.style_block = StyleBlock( + mod_features, in_features, style_rezero, style_bias + ) + self.norm1 = get_norm_layer(norm, in_features) + self.attn = ModCQA(in_features, num_heads, token_size=token_size, bias=True, demod=demod) + self.dw = torch.nn.Conv2d(in_features, in_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=in_features) + self.pw = torch.nn.Conv2d(in_features*2, in_features, kernel_size=1) + self.norm2 = get_norm_layer(norm, in_features) + self.ffn = SPFN(in_features, mid_features, in_features) + self.out_conv = nn.Conv2d( + in_features, out_features, kernel_size = 3, padding = 1 + ) + self.act = get_activ_layer(activ) + + def forward(self, x, mod): + # x : (N, C_in, H_in, W_in) + # mod : (N, mod_features) + + # mod_scale : (N, C_out) + mod_scale = self.style_block(mod) + + x_norm = self.norm1(x) + x_atten = self.attn(x_norm, mod_scale) + x_dw = self.act(self.dw(x_norm)) + x_atten_dw = self.pw(torch.cat([x_atten, x_dw], dim=1)) + x = x + x_atten_dw + x = x + self.ffn(self.norm2(x)) + x = self.act(self.out_conv(x)) + # result : (N, C_out, H_out, W_out) + return x + + +class DBlock(nn.Module): + def __init__( + self, features, activ, norm, downsample, input_shape, + num_heads = 1, + token_size = 4, + **kwargs + ): + super().__init__(**kwargs) + + self.downsample, output_features = \ + get_downsample_x2_layer(downsample, features) + + (C, H, W) = input_shape + self.block = RawFormerBlock(C, features, activ, norm, num_heads=num_heads, token_size=token_size) + + self._output_shape = (output_features, H//2, W//2) + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x): + r = self.block(x) + y = self.downsample(r) + return (y, r) + + +class UBlock(nn.Module): + def __init__( + self, input_shape, output_features, skip_features, mod_features, + activ, norm, upsample, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + num_heads = 1, + token_size = 4, + **kwargs + ): + super().__init__(**kwargs) + + (input_features, H, W) = input_shape + self.upsample, input_features = get_upsample_x2_layer( + upsample, input_features + ) + + self.block = ModRawFormerBlock( + skip_features + input_features, output_features, activ, + norm = norm, + mod_features = mod_features, + mid_features = max(input_features, input_shape[0]), + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + num_heads = num_heads, + token_size = token_size, + ) + + self._output_shape = (output_features, 2 * H, 2 * W) + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x, r, mod): + # x : (N, C, H_in, W_in) + # r : (N, C, H_out, W_out) + # mod : (N, mod_features) + + # x : (N, C_up, H_out, W_out) + x = self.re_alpha * self.upsample(x) + + # y : (N, C + C_up, H_out, W_out) + y = torch.cat([x, r], dim = 1) + + # result : (N, C_out, H_out, W_out) + return self.block(y, mod) + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + + +class RawNetBlock(nn.Module): + def __init__( + self, features, activ, norm, image_shape, downsample, upsample, + mod_features, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + num_heads = 1, + token_size = 4, + **kwargs + ): + super().__init__(**kwargs) + + self.conv = DBlock( + features, activ, norm, downsample, image_shape, + num_heads = num_heads, token_size = token_size + ) + + self.inner_shape = self.conv.output_shape + self.inner_module = None + + self.deconv = UBlock( + input_shape = self.inner_shape, + output_features = image_shape[0], + skip_features = self.inner_shape[0], + mod_features = mod_features, + activ = activ, + norm = norm, + upsample = upsample, + rezero = rezero, + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + num_heads = num_heads, + token_size = token_size, + ) + + def get_inner_shape(self): + return self.inner_shape + + def set_inner_module(self, module): + self.inner_module = module + + def get_inner_module(self): + return self.inner_module + + def forward(self, x): + # x : (N, C, H, W) + + # y : (N, C_inner, H_inner, W_inner) + # r : (N, C_inner, H, W) + (y, r) = self.conv(x) + + # y : (N, C_inner, H_inner, W_inner) + # mod : (N, mod_features) + y, mod = self.inner_module(y) + + # y : (N, C, H, W) + y = self.deconv(y, r, mod) + + return (y, mod) + +class RawNet(nn.Module): + + def __init__( + self, features_list, activ, norm, image_shape, downsample, upsample, + mod_features, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + return_mod = False, + num_heads = 1, + token_size = 4, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.features_list = features_list + self.image_shape = image_shape + self.return_mod = return_mod + + self._construct_input_layer(activ) + self._construct_output_layer() + + unet_layers = [] + curr_image_shape = (features_list[0], *image_shape[1:]) + + for features in features_list: + layer = RawNetBlock( + features, activ, norm, curr_image_shape, downsample, upsample, + mod_features, rezero, demod, style_rezero, style_bias, + num_heads = num_heads, token_size = token_size, + ) + curr_image_shape = layer.get_inner_shape() + unet_layers.append(layer) + + for idx in range(len(unet_layers)-1): + unet_layers[idx].set_inner_module(unet_layers[idx+1]) + + self.modnet = unet_layers[0] + + def _construct_input_layer(self, activ): + self.layer_input = nn.Sequential( + nn.Conv2d( + self.image_shape[0], self.features_list[0], + kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + ) + + def _construct_output_layer(self): + self.layer_output = nn.Conv2d( + self.features_list[0], self.image_shape[0], kernel_size = 1 + ) + + def get_innermost_block(self): + result = self.modnet + + for _ in range(len(self.features_list)-1): + result = result.get_inner_module() + + return result + + def set_bottleneck(self, module): + self.get_innermost_block().set_inner_module(module) + + def get_bottleneck(self): + return self.get_innermost_block().get_inner_module() + + def get_inner_shape(self): + return self.get_innermost_block().get_inner_shape() + + def forward(self, x): + # x : (N, C, H, W) + + y = self.layer_input(x) + y, mod = self.modnet(y) + y = self.layer_output(y) + + if self.return_mod: + return (y, mod) + + return y diff --git a/rawformer/torch/layers/rawnet_lsb.py b/rawformer/torch/layers/rawnet_lsb.py new file mode 100644 index 0000000..85b0f07 --- /dev/null +++ b/rawformer/torch/layers/rawnet_lsb.py @@ -0,0 +1,474 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +import torch +from torch import nn +import torch.nn.functional as F +from einops import rearrange + +from rawformer.torch.select import get_activ_layer, get_norm_layer +from .cnn import get_downsample_x2_layer, get_upsample_x2_layer + + +def get_demod_scale(mod_scale, weights, eps = 1e-6): + # Ref: https://arxiv.org/pdf/1912.04958.pdf + # + # demod_scale[alpha] = 1 / sqrt(sigma[alpha]^2 + eps) + # + # sigma[alpha]^2 + # = sum_{beta i} (mod_scale[alpha] * weights[alpha, beta, i])^2 + # = sum_{beta} (mod_scale[alpha])^2 * sum_i (weights[alpha, beta, i])^2 + # + + # mod_scale : (N, C_in) + # weights : (C_out, C_in, h, w) + + # w_sq : (C_out, C_in) + w_sq = torch.sum(weights.square(), dim = (2, 3)) + + # w_sq : (C_out, C_in) -> (1, C_in, C_out) + w_sq = torch.swapaxes(w_sq, 0, 1).unsqueeze(0) + + # mod_scale_sq : (N, C_in, 1) + mod_scale_sq = mod_scale.square().unsqueeze(2) + + # sigma : (N, C_out) + sigma_sq = torch.sum(mod_scale_sq * w_sq, dim = 1) + + # result : (N, C_out) + return 1 / torch.sqrt(sigma_sq + eps) + + +class SA(nn.Module): + def __init__(self, dim, num_heads, bias): + super(SA, self).__init__() + self.num_heads = num_heads + #self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1)) + self.temperature = 1 / torch.sqrt(torch.tensor(dim, dtype=torch.float32)) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + self.qkv_dwconv = nn.Conv2d(dim * 3, dim * 3, kernel_size=3, stride=1, padding=1, groups=dim * 3, bias=bias) + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + + def forward(self, x): + b, c, h, w = x.shape + + qkv = self.qkv_dwconv(self.qkv(x)) + q, k, v = qkv.chunk(3, dim=1) + + q = rearrange(q, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + k = rearrange(k, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + v = rearrange(v, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + + q = torch.nn.functional.normalize(q, dim=-1) + k = torch.nn.functional.normalize(k, dim=-1) + + # transposed self-attention with attention map of shape (C×C) + attn = (q @ k.transpose(-2, -1)) * self.temperature + attn = attn.softmax(dim=-1) + + out = (attn @ v) + + out = rearrange(out, 'b head c (h w) -> b (head c) h w', head=self.num_heads, h=h, w=w) + + out = self.project_out(out) + return out + + +class ModSA(nn.Module): + def __init__(self, dim, num_heads, bias, + eps = 1e-6, demod = True): + super(ModSA, self).__init__() + self.num_heads = num_heads + #self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1)) + self.temperature = 1 / torch.sqrt(torch.tensor(dim, dtype=torch.float32)) + + self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias) + self.qkv_dwconv = nn.Conv2d(dim * 3, dim * 3, kernel_size=3, stride=1, padding=1, groups=dim * 3, bias=bias) + self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias) + self._eps = eps + self._demod = demod + + def forward(self, x, s): + b, c, h, w = x.shape + x = x * s.unsqueeze(2).unsqueeze(3) + + qkv = self.qkv_dwconv(self.qkv(x)) + q, k, v = qkv.chunk(3, dim=1) + + q = rearrange(q, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + k = rearrange(k, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + v = rearrange(v, 'b (head c) h w -> b head c (h w)', head=self.num_heads) + + q = torch.nn.functional.normalize(q, dim=-1) + k = torch.nn.functional.normalize(k, dim=-1) + + # transposed self-attention with attention map of shape (C×C) + attn = (q @ k.transpose(-2, -1)) * self.temperature + attn = attn.softmax(dim=-1) + + out = (attn @ v) + + out = rearrange(out, 'b head c (h w) -> b (head c) h w', head=self.num_heads, h=h, w=w) + + out = self.project_out(out) + + if self._demod: + # s_demod : (N, C_out) + s_demod = get_demod_scale(s, self.project_out.weight) + out_demod = out * s_demod.unsqueeze(2).unsqueeze(3) + return out_demod + + return out + + +class FFN(nn.Module): + """ + Feed-forward Network with Depth-wise Convolution + """ + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.pointwise1 = torch.nn.Conv2d(in_features, hidden_features, kernel_size=1) + self.depthwise = torch.nn.Conv2d(hidden_features,hidden_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=hidden_features) + self.pointwise2 = torch.nn.Conv2d(hidden_features, out_features, kernel_size=1) + self.act_layer = act_layer() if act_layer is not None else nn.Identity() + def forward(self, x): + x = self.pointwise1(x) + x = self.depthwise(x) + x = self.act_layer(x) + x = self.pointwise2(x) + return x + + +class StyleBlock(nn.Module): + + def __init__( + self, mod_features, style_features, rezero = True, bias = True, + **kwargs + ): + super().__init__(**kwargs) + + self.affine_mod = nn.Linear(mod_features, style_features, bias = bias) + self.rezero = rezero + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + def forward(self, mod): + # mod : (N, mod_features) + # s : (N, style_features) + s = 1 + self.re_alpha * self.affine_mod(mod) + + return s + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + + +class RawFormerBlock(nn.Module): + def __init__( + self, in_features, out_features, activ, norm, mid_features = None, + num_heads = 1, **kwargs + ): + super().__init__(**kwargs) + + if mid_features is None: + mid_features = out_features + + + self.norm1 = get_norm_layer(norm, in_features) + self.attn = SA(in_features, num_heads, bias=True) + self.dw = torch.nn.Conv2d(in_features, in_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=in_features) + self.pw = torch.nn.Conv2d(in_features*2, in_features, kernel_size=1) + self.norm2 = get_norm_layer(norm, in_features) + self.ffn = FFN(in_features, mid_features, in_features) + self.out_conv = nn.Conv2d( + in_features, out_features, kernel_size = 3, padding = 1 + ) + self.act = get_activ_layer(activ) + + def forward(self, x): + #x = x + self.attn(self.norm1(x)) + #x = x + self.ffn(self.norm2(x)) + x_norm = self.norm1(x) + x_atten = self.attn(x_norm) + x_dw = self.act(self.dw(x_norm)) + x_atten_dw = self.pw(torch.cat([x_atten, x_dw], dim=1)) + x = x + x_atten_dw + x = x + self.ffn(self.norm2(x)) + x = self.act(self.out_conv(x)) + return x + + +class ModRawFormerBlock(nn.Module): + def __init__( + self, in_features, out_features, activ, norm, mod_features, + mid_features = None, + demod = True, + style_rezero = True, + style_bias = True, + num_heads=1, + **kwargs + ): + super().__init__(**kwargs) + + if mid_features is None: + mid_features = out_features + + self.style_block = StyleBlock( + mod_features, in_features, style_rezero, style_bias + ) + self.norm1 = get_norm_layer(norm, in_features) + self.attn = ModSA(in_features, num_heads, bias=True, demod=demod) + self.dw = torch.nn.Conv2d(in_features, in_features, kernel_size=3,stride=1,padding=1,dilation=1,groups=in_features) + self.pw = torch.nn.Conv2d(in_features*2, in_features, kernel_size=1) + self.norm2 = get_norm_layer(norm, in_features) + self.ffn = FFN(in_features, mid_features, in_features) + self.out_conv = nn.Conv2d( + in_features, out_features, kernel_size = 3, padding = 1 + ) + self.act = get_activ_layer(activ) + + def forward(self, x, mod): + # x : (N, C_in, H_in, W_in) + # mod : (N, mod_features) + + # mod_scale : (N, C_out) + mod_scale = self.style_block(mod) + + x_norm = self.norm1(x) + x_atten = self.attn(x_norm, mod_scale) + x_dw = self.act(self.dw(x_norm)) + x_atten_dw = self.pw(torch.cat([x_atten, x_dw], dim=1)) + x = x + x_atten_dw + x = x + self.ffn(self.norm2(x)) + x = self.act(self.out_conv(x)) + # result : (N, C_out, H_out, W_out) + return x + + +class DBlock(nn.Module): + def __init__( + self, features, activ, norm, downsample, input_shape, num_heads = 1, **kwargs + ): + super().__init__(**kwargs) + + self.downsample, output_features = \ + get_downsample_x2_layer(downsample, features) + + (C, H, W) = input_shape + self.block = RawFormerBlock(C, features, activ, norm, num_heads=num_heads) + + self._output_shape = (output_features, H//2, W//2) + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x): + r = self.block(x) + y = self.downsample(r) + return (y, r) + + +class UBlock(nn.Module): + def __init__( + self, input_shape, output_features, skip_features, mod_features, + activ, norm, upsample, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + num_heads = 1, + **kwargs + ): + super().__init__(**kwargs) + + (input_features, H, W) = input_shape + self.upsample, input_features = get_upsample_x2_layer( + upsample, input_features + ) + + self.block = ModRawFormerBlock( + skip_features + input_features, output_features, activ, + norm = norm, + mod_features = mod_features, + mid_features = max(input_features, input_shape[0]), + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + num_heads = num_heads, + ) + + self._output_shape = (output_features, 2 * H, 2 * W) + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x, r, mod): + # x : (N, C, H_in, W_in) + # r : (N, C, H_out, W_out) + # mod : (N, mod_features) + + # x : (N, C_up, H_out, W_out) + x = self.re_alpha * self.upsample(x) + + # y : (N, C + C_up, H_out, W_out) + y = torch.cat([x, r], dim = 1) + + # result : (N, C_out, H_out, W_out) + return self.block(y, mod) + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + + +class RawNetBlock(nn.Module): + def __init__( + self, features, activ, norm, image_shape, downsample, upsample, + mod_features, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + **kwargs + ): + super().__init__(**kwargs) + + self.conv = DBlock( + features, activ, norm, downsample, image_shape + ) + + self.inner_shape = self.conv.output_shape + self.inner_module = None + + self.deconv = UBlock( + input_shape = self.inner_shape, + output_features = image_shape[0], + skip_features = self.inner_shape[0], + mod_features = mod_features, + activ = activ, + norm = norm, + upsample = upsample, + rezero = rezero, + demod = demod, + style_rezero = style_rezero, + style_bias = style_bias, + ) + + def get_inner_shape(self): + return self.inner_shape + + def set_inner_module(self, module): + self.inner_module = module + + def get_inner_module(self): + return self.inner_module + + def forward(self, x): + # x : (N, C, H, W) + + # y : (N, C_inner, H_inner, W_inner) + # r : (N, C_inner, H, W) + (y, r) = self.conv(x) + + # y : (N, C_inner, H_inner, W_inner) + # mod : (N, mod_features) + y, mod = self.inner_module(y) + + # y : (N, C, H, W) + y = self.deconv(y, r, mod) + + return (y, mod) + +class RawNet(nn.Module): + + def __init__( + self, features_list, activ, norm, image_shape, downsample, upsample, + mod_features, + rezero = True, + demod = True, + style_rezero = True, + style_bias = True, + return_mod = False, + **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.features_list = features_list + self.image_shape = image_shape + self.return_mod = return_mod + + self._construct_input_layer(activ) + self._construct_output_layer() + + unet_layers = [] + curr_image_shape = (features_list[0], *image_shape[1:]) + + for features in features_list: + layer = RawNetBlock( + features, activ, norm, curr_image_shape, downsample, upsample, + mod_features, rezero, demod, style_rezero, style_bias + ) + curr_image_shape = layer.get_inner_shape() + unet_layers.append(layer) + + for idx in range(len(unet_layers)-1): + unet_layers[idx].set_inner_module(unet_layers[idx+1]) + + self.modnet = unet_layers[0] + + def _construct_input_layer(self, activ): + self.layer_input = nn.Sequential( + nn.Conv2d( + self.image_shape[0], self.features_list[0], + kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + ) + + def _construct_output_layer(self): + self.layer_output = nn.Conv2d( + self.features_list[0], self.image_shape[0], kernel_size = 1 + ) + + def get_innermost_block(self): + result = self.modnet + + for _ in range(len(self.features_list)-1): + result = result.get_inner_module() + + return result + + def set_bottleneck(self, module): + self.get_innermost_block().set_inner_module(module) + + def get_bottleneck(self): + return self.get_innermost_block().get_inner_module() + + def get_inner_shape(self): + return self.get_innermost_block().get_inner_shape() + + def forward(self, x): + # x : (N, C, H, W) + + y = self.layer_input(x) + y, mod = self.modnet(y) + y = self.layer_output(y) + + if self.return_mod: + return (y, mod) + + return y + diff --git a/rawformer/torch/layers/transformer.py b/rawformer/torch/layers/transformer.py new file mode 100644 index 0000000..72e8b31 --- /dev/null +++ b/rawformer/torch/layers/transformer.py @@ -0,0 +1,365 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +import torch +from torch import nn + +from rawformer.torch.select import get_norm_layer, get_activ_layer + +def calc_tokenized_size(image_shape, token_size): + # image_shape : (C, H, W) + # token_size : (H_t, W_t) + if image_shape[1] % token_size[0] != 0: + raise ValueError( + "Token width %d does not divide image width %d" % ( + token_size[0], image_shape[1] + ) + ) + + if image_shape[2] % token_size[1] != 0: + raise ValueError( + "Token height %d does not divide image height %d" % ( + token_size[1], image_shape[2] + ) + ) + + # result : (N_h, N_w) + return (image_shape[1] // token_size[0], image_shape[2] // token_size[1]) + +def img_to_tokens(image_batch, token_size): + # image_batch : (N, C, H, W) + # token_size : (H_t, W_t) + + # result : (N, C, N_h, H_t, W) + result = image_batch.view( + (*image_batch.shape[:2], -1, token_size[0], image_batch.shape[3]) + ) + + # result : (N, C, N_h, H_t, W ) + # -> (N, C, N_h, H_t, N_w, W_t) + result = result.view((*result.shape[:4], -1, token_size[1])) + + # result : (N, C, N_h, H_t, N_w, W_t) + # -> (N, N_h, N_w, C, H_t, W_t) + result = result.permute((0, 2, 4, 1, 3, 5)) + + return result + +def img_from_tokens(tokens): + # tokens : (N, N_h, N_w, C, H_t, W_t) + # result : (N, C, N_h, H_t, N_w, W_t) + result = tokens.permute((0, 3, 1, 4, 2, 5)) + + # result : (N, C, N_h, H_t, N_w, W_t) + # -> (N, C, N_h, H_t, N_w * W_t) + # = (N, C, N_h, H_t, W) + result = result.reshape((*result.shape[:4], -1)) + + # result : (N, C, N_h, H_t, W) + # -> (N, C, N_h * H_t, W) + # = (N, C, H, W) + result = result.reshape((*result.shape[:2], -1, result.shape[4])) + + return result + +def img_to_pixelwise_tokens(image): + # image : (N, C, H, W) + + # result : (N, C, H * W) + result = image.view(*image.shape[:2], -1) + + # result : (N, C, H * W) + # -> (N, H * W, C ) + # = (N, L, C) + result = result.permute((0, 2, 1)) + + # (N, L, C) + return result + +def img_from_pixelwise_tokens(tokens, image_shape): + # tokens : (N, L, C) + # image_shape : (3, ) + + # tokens : (N, L, C) + # -> (N, C, L) + # = (N, C, H * W) + tokens = tokens.permute((0, 2, 1)) + + # (N, C, H, W) + return tokens.view(*tokens.shape[:2], *image_shape[1:]) + +class PositionWiseFFN(nn.Module): + + def __init__(self, features, ffn_features, activ = 'gelu', **kwargs): + super().__init__(**kwargs) + + self.net = nn.Sequential( + nn.Linear(features, ffn_features), + get_activ_layer(activ), + nn.Linear(ffn_features, features), + ) + + def forward(self, x): + return self.net(x) + +class TransformerBlock(nn.Module): + + def __init__( + self, features, ffn_features, n_heads, activ = 'gelu', norm = None, + rezero = True, **kwargs + ): + super().__init__(**kwargs) + + self.norm1 = get_norm_layer(norm, features) + self.atten = nn.MultiheadAttention(features, n_heads) + + self.norm2 = get_norm_layer(norm, features) + self.ffn = PositionWiseFFN(features, ffn_features, activ) + + self.rezero = rezero + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + def forward(self, x): + # x: (L, N, features) + + # Step 1: Multi-Head Self Attention + y1 = self.norm1(x) + y1, _atten_weights = self.atten(y1, y1, y1) + + y = x + self.re_alpha * y1 + + # Step 2: PositionWise Feed Forward Network + y2 = self.norm2(y) + y2 = self.ffn(y2) + + y = y + self.re_alpha * y2 + + return y + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + +class TransformerEncoder(nn.Module): + + def __init__( + self, features, ffn_features, n_heads, n_blocks, activ, norm, + rezero = True, **kwargs + ): + super().__init__(**kwargs) + + self.encoder = nn.Sequential(*[ + TransformerBlock( + features, ffn_features, n_heads, activ, norm, rezero + ) for _ in range(n_blocks) + ]) + + def forward(self, x): + # x : (N, L, features) + + # y : (L, N, features) + y = x.permute((1, 0, 2)) + y = self.encoder(y) + + # result : (N, L, features) + result = y.permute((1, 0, 2)) + + return result + +class FourierEmbedding(nn.Module): + # arXiv: 2011.13775 + + def __init__(self, features, height, width, **kwargs): + super().__init__(**kwargs) + self.projector = nn.Linear(2, features) + self._height = height + self._width = width + + def forward(self, y, x): + # x : (N, L) + # y : (N, L) + x_norm = 2 * x / (self._width - 1) - 1 + y_norm = 2 * y / (self._height - 1) - 1 + + # z : (N, L, 2) + z = torch.cat((x_norm.unsqueeze(2), y_norm.unsqueeze(2)), dim = 2) + + return torch.sin(self.projector(z)) + +class ViTInput(nn.Module): + + def __init__( + self, input_features, embed_features, features, height, width, + **kwargs + ): + super().__init__(**kwargs) + self._height = height + self._width = width + + x = torch.arange(width).to(torch.float32) + y = torch.arange(height).to(torch.float32) + + x, y = torch.meshgrid(x, y) + self.x = x.reshape((1, -1)) + self.y = y.reshape((1, -1)) + + self.register_buffer('x_const', self.x) + self.register_buffer('y_const', self.y) + + self.embed = FourierEmbedding(embed_features, height, width) + self.output = nn.Linear(embed_features + input_features, features) + + def forward(self, x): + # x : (N, L, input_features) + # embed : (1, height * width, embed_features) + # = (1, L, embed_features) + embed = self.embed(self.y_const, self.x_const) + + # embed : (1, L, embed_features) + # -> (N, L, embed_features) + embed = embed.expand((x.shape[0], *embed.shape[1:])) + + # result : (N, L, embed_features + input_features) + result = torch.cat([embed, x], dim = 2) + + # (N, L, features) + return self.output(result) + +class PixelwiseViT(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, image_shape, rezero = True, **kwargs + ): + super().__init__(**kwargs) + + self.image_shape = image_shape + + self.trans_input = ViTInput( + image_shape[0], embed_features, features, + image_shape[1], image_shape[2], + ) + + self.encoder = TransformerEncoder( + features, ffn_features, n_heads, n_blocks, activ, norm, rezero + ) + + self.trans_output = nn.Linear(features, image_shape[0]) + + def forward(self, x): + # x : (N, C, H, W) + + # itokens : (N, C, H * W) + itokens = x.view(*x.shape[:2], -1) + + # itokens : (N, C, H * W) + # -> (N, H * W, C ) + # = (N, L, C) + itokens = itokens.permute((0, 2, 1)) + + # y : (N, L, features) + y = self.trans_input(itokens) + y = self.encoder(y) + + # otokens : (N, L, C) + otokens = self.trans_output(y) + + # otokens : (N, L, C) + # -> (N, C, L) + # = (N, C, H * W) + otokens = otokens.permute((0, 2, 1)) + + # result : (N, C, H, W) + result = otokens.view(*otokens.shape[:2], *self.image_shape[1:]) + + return result + +class ExtendedTransformerEncoder(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, activ, norm, + rezero = True, n_ext = 1, **kwargs + ): + super().__init__(**kwargs) + + self.encoder = TransformerEncoder( + features, ffn_features, n_heads, n_blocks, activ, norm, rezero + ) + + self.extra_tokens = nn.Parameter(torch.empty((1, n_ext, features))) + torch.nn.init.normal_(self.extra_tokens) + + def forward(self, x): + # x : (N, L, C) + N, L, _C = x.shape + + # i_extra_tokens : (N, n_extra, C) + i_extra_tokens = self.extra_tokens.tile(N, 1, 1) + + # y : (N, L + n_extra, C) + y = torch.cat([ x, i_extra_tokens ], dim = 1) + y = self.encoder(y) + + # o_extra_tokens : (N, n_extra, features) + o_extra_tokens = y[:, L:, :] + + # result : (N, L, C) + result = y[:, :L, :] + + return (result, o_extra_tokens.reshape(N, -1)) + +class ExtendedPixelwiseViT(nn.Module): + + def __init__( + self, features, n_heads, n_blocks, ffn_features, embed_features, + activ, norm, image_shape, rezero = True, n_ext = 1, **kwargs + ): + super().__init__(**kwargs) + + self.image_shape = image_shape + + self.trans_input = ViTInput( + image_shape[0], embed_features, features, + image_shape[1], image_shape[2], + ) + + self.encoder = TransformerEncoder( + features, ffn_features, n_heads, n_blocks, activ, norm, rezero + ) + + self.extra_tokens = nn.Parameter(torch.empty((1, n_ext, features))) + torch.nn.init.normal_(self.extra_tokens) + + self.trans_output = nn.Linear(features, image_shape[0]) + + def forward(self, x): + # x : (N, C, H, W) + + # itokens : (N, L, C) + itokens = img_to_pixelwise_tokens(x) + (N, L, _C) = itokens.shape + + # i_extra_tokens : (N, n_extra, C) + i_extra_tokens = self.extra_tokens.tile(itokens.shape[0], 1, 1) + + # y : (N, L, features) + y = self.trans_input(itokens) + + # y : (N, L + n_extra, C) + y = torch.cat([ y, i_extra_tokens ], dim = 1) + y = self.encoder(y) + + # o_extra_tokens : (N, n_extra, features) + o_extra_tokens = y[:, L:, :] + + # otokens : (N, L, C) + otokens = self.trans_output(y[:, :L, :]) + + # result : (N, C, H, W) + result = img_from_pixelwise_tokens(otokens, self.image_shape) + + return (result, o_extra_tokens.reshape(N, -1)) + diff --git a/rawformer/torch/layers/unet.py b/rawformer/torch/layers/unet.py new file mode 100644 index 0000000..c8f076b --- /dev/null +++ b/rawformer/torch/layers/unet.py @@ -0,0 +1,321 @@ +# pylint: disable=too-many-arguments +# pylint: disable=too-many-instance-attributes + +import torch +from torch import nn + +from rawformer.torch.select import get_norm_layer, get_activ_layer + +from .cnn import get_downsample_x2_layer, get_upsample_x2_layer + +class UnetBasicBlock(nn.Module): + + def __init__( + self, in_features, out_features, activ, norm, mid_features = None, + **kwargs + ): + super().__init__(**kwargs) + + if mid_features is None: + mid_features = out_features + + self.block = nn.Sequential( + get_norm_layer(norm, in_features), + nn.Conv2d(in_features, mid_features, kernel_size = 3, padding = 1), + get_activ_layer(activ), + + get_norm_layer(norm, mid_features), + nn.Conv2d( + mid_features, out_features, kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + ) + + def forward(self, x): + return self.block(x) + +class UNetEncBlock(nn.Module): + + def __init__( + self, features, activ, norm, downsample, input_shape, **kwargs + ): + super().__init__(**kwargs) + + self.downsample, output_features = \ + get_downsample_x2_layer(downsample, features) + + (C, H, W) = input_shape + self.block = UnetBasicBlock(C, features, activ, norm) + + self._output_shape = (output_features, H//2, W//2) + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x): + r = self.block(x) + y = self.downsample(r) + return (y, r) + +class UNetDecBlock(nn.Module): + + def __init__( + self, input_shape, output_features, skip_features, activ, norm, + upsample, rezero = False, **kwargs + ): + super().__init__(**kwargs) + + (input_features, H, W) = input_shape + self.upsample, input_features = get_upsample_x2_layer( + upsample, input_features + ) + + self.block = UnetBasicBlock( + input_features + skip_features, output_features, activ, norm, + mid_features = max(skip_features, input_features, output_features) + ) + + self._output_shape = (output_features, 2 * H, 2 * W) + + if rezero: + self.re_alpha = nn.Parameter(torch.zeros((1, ))) + else: + self.re_alpha = 1 + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x, r): + # x : (N, C, H_in, W_in) + # r : (N, C_skip, H_out, W_out) + + # x : (N, C_up, H_out, W_out) + x = self.re_alpha * self.upsample(x) + + # y : (N, C_skip + C_up, H_out, W_out) + y = torch.cat([x, r], dim = 1) + + # result : (N, C_out, H_out, W_out) + return self.block(y) + + def extra_repr(self): + return 're_alpha = %e' % (self.re_alpha, ) + +class UNetBlock(nn.Module): + + def __init__( + self, features, activ, norm, image_shape, downsample, upsample, + rezero = True, **kwargs + ): + super().__init__(**kwargs) + + self.conv = UNetEncBlock( + features, activ, norm, downsample, image_shape + ) + + self.inner_shape = self.conv.output_shape + self.inner_module = None + + self.deconv = UNetDecBlock( + self.inner_shape, image_shape[0], self.inner_shape[0], + activ, norm, upsample, rezero + ) + + def get_inner_shape(self): + return self.inner_shape + + def set_inner_module(self, module): + self.inner_module = module + + def get_inner_module(self): + return self.inner_module + + def forward(self, x): + # x : (N, C, H, W) + + # y : (N, C_inner, H_inner, W_inner) + # r : (N, C_inner, H, W) + (y, r) = self.conv(x) + + # y : (N, C_inner, H_inner, W_inner) + y = self.inner_module(y) + + # y : (N, C, H, W) + y = self.deconv(y, r) + + return y + +class UNetLinearEncoder(nn.Module): + + def __init__( + self, features_list, image_shape, activ, norm, downsample, **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.features_list = features_list + self.image_shape = image_shape + self._skip_shapes = [] + + self.net = nn.ModuleList() + curr_shape = image_shape + + for features in features_list: + layer = UNetEncBlock(features, activ, norm, downsample, curr_shape) + self.net.append(layer) + + curr_shape = layer.output_shape + self._skip_shapes.append(curr_shape) + + self._output_shape = curr_shape + + @property + def output_shape(self): + return self._output_shape + + @property + def skip_shapes(self): + return self._skip_shapes + + def forward(self, x, return_skips = True): + # x : (N, C, H, W) + + skips = [ ] + y = x + + for layer in self.net: + y, r = layer(y) + if return_skips: + skips.append(r) + + if return_skips: + return y, skips + else: + return y + +class UNetLinearDecoder(nn.Module): + + def __init__( + self, features_list, input_shape, output_shape, skip_shapes, + activ, norm, upsample, **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.net = nn.ModuleList() + self._input_shape = input_shape + self._output_shape = output_shape + curr_shape = input_shape + + for features, skip_shape in zip( + features_list[::-1], skip_shapes[::-1] + ): + layer = UNetDecBlock( + curr_shape, features, skip_shape[0], activ, norm, upsample + ) + curr_shape = layer.output_shape + + self.net.append(layer) + + if output_shape[0] == curr_shape[0]: + self.output = nn.Identity() + else: + self.output = nn.Conv2d( + curr_shape[0], output_shape[0], kernel_size = 1 + ) + + curr_shape = (output_shape[0], *curr_shape[1:]) + assert tuple(output_shape) == tuple(curr_shape) + + @property + def input_shape(self): + return self._input_shape + + @property + def output_shape(self): + return self._output_shape + + def forward(self, x, skip_list): + # x : (N, C, H, W) + # skip_list : List[(N, C_i, H_i, W_i)] + + y = x + + for layer, skip in zip(self.net, skip_list[::-1]): + y = layer(y, skip) + + return self.output(y) + +class UNet(nn.Module): + + def __init__( + self, features_list, activ, norm, image_shape, downsample, upsample, + rezero = True, **kwargs + ): + # pylint: disable = too-many-locals + super().__init__(**kwargs) + + self.features_list = features_list + self.image_shape = image_shape + + self._construct_input_layer(activ) + self._construct_output_layer() + + unet_layers = [] + curr_image_shape = (features_list[0], *image_shape[1:]) + + for features in features_list: + layer = UNetBlock( + features, activ, norm, curr_image_shape, downsample, upsample, + rezero + ) + curr_image_shape = layer.get_inner_shape() + unet_layers.append(layer) + + for idx in range(len(unet_layers)-1): + unet_layers[idx].set_inner_module(unet_layers[idx+1]) + + self.unet = unet_layers[0] + + def _construct_input_layer(self, activ): + self.layer_input = nn.Sequential( + nn.Conv2d( + self.image_shape[0], self.features_list[0], + kernel_size = 3, padding = 1 + ), + get_activ_layer(activ), + ) + + def _construct_output_layer(self): + self.layer_output = nn.Conv2d( + self.features_list[0], self.image_shape[0], kernel_size = 1 + ) + + def get_innermost_block(self): + result = self.unet + + for _ in range(len(self.features_list)-1): + result = result.get_inner_module() + + return result + + def set_bottleneck(self, module): + self.get_innermost_block().set_inner_module(module) + + def get_bottleneck(self): + return self.get_innermost_block().get_inner_module() + + def get_inner_shape(self): + return self.get_innermost_block().get_inner_shape() + + def forward(self, x): + # x : (N, C, H, W) + + y = self.layer_input(x) + y = self.unet(y) + y = self.layer_output(y) + + return y + diff --git a/rawformer/torch/losses.py b/rawformer/torch/losses.py new file mode 100644 index 0000000..d96ca46 --- /dev/null +++ b/rawformer/torch/losses.py @@ -0,0 +1,138 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision +from torch.autograd import Variable +from math import exp + +def gaussian(window_size, sigma): + gauss = torch.Tensor([exp( + -(x - window_size // 2) ** 2 / float(2 * sigma ** 2)) \ + for x in range(window_size)]) + return gauss / gauss.sum() + +def create_window(window_size, channel): + _1D_window = gaussian(window_size, 1.5).unsqueeze(1) + _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0) + window = Variable(_2D_window.expand( + channel, 1, window_size, window_size).contiguous()) + return window + +def _ssim(img1, img2, window, window_size, channel, size_average=True): + mu1 = F.conv2d(img1, window, padding=window_size // 2, groups=channel) + mu2 = F.conv2d(img2, window, padding=window_size // 2, groups=channel) + + mu1_sq = mu1.pow(2) + mu2_sq = mu2.pow(2) + mu1_mu2 = mu1 * mu2 + + sigma1_sq = F.conv2d( + img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq + sigma2_sq = F.conv2d( + img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq + sigma12 = F.conv2d( + img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2 + + C1 = 0.01 ** 2 + C2 = 0.03 ** 2 + + ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / \ + ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2)) + + if size_average: + return ssim_map.mean() + else: + return ssim_map.mean(1).mean(1).mean(1) + +def ssim(img1, img2, window_size=11, size_average=True): + (_, channel, _, _) = img1.size() + window = create_window(window_size, channel) + + if img1.is_cuda: + window = window.cuda(img1.get_device()) + window = window.type_as(img1) + + return _ssim(img1, img2, window, window_size, channel, size_average) + +class MSSSIM(torch.nn.Module): + def __init__(self, window_size=11, size_average=True): + super(MSSSIM, self).__init__() + self.window_size = window_size + self.size_average = size_average + self.channel = 1 + self.window = create_window(window_size, self.channel) + + def forward(self, img1, img2): + (_, channel, _, _) = img1.size() + + if channel == self.channel and \ + self.window.data.type() == img1.data.type(): + window = self.window + else: + window = create_window(self.window_size, channel) + + if img1.is_cuda: + window = window.cuda(img1.get_device()) + window = window.type_as(img1) + + self.window = window + self.channel = channel + + return _ssim(img1, img2, window, self.window_size, + channel, self.size_average) + + +class VggLoss(nn.Module): + """VGG/Perceptual Loss + + Parameters + ---------- + conv_index : str + Convolutional layer in VGG model to use as perceptual output + + """ + def __init__(self, conv_index: str = '22'): + super(VggLoss, self).__init__() + vgg_features = torchvision.models.vgg19(pretrained=True).features + modules = [m for m in vgg_features] + self.training = False + self.train(False) + + if conv_index == '22': + self.vgg = nn.Sequential(*modules[:8]).eval() + elif conv_index == '54': + self.vgg = nn.Sequential(*modules[:35]).eval() + + @torch.no_grad() + def forward(self, pred: torch.Tensor, y: torch.Tensor) -> torch.Tensor: + """Compute VGG/Perceptual loss between Super-Resolved and High-Resolution + + Parameters + ---------- + sr : torch.Tensor + Super-Resolved model output tensor + hr : torch.Tensor + High-Resolution image tensor + + Returns + ------- + loss : torch.Tensor + Perceptual VGG loss between sr and hr + + """ + vgg_sr = self.vgg(pred) + vgg_hr = self.vgg(y) + return F.mse_loss(vgg_sr, vgg_hr) + +class PixelWiseLoss(nn.Module): + def __init__(self): + super(PixelWiseLoss, self).__init__() + self.vgg = VggLoss() + self.msssim = MSSSIM() + self.l1 = nn.L1Loss() + + def forward(self, pred: torch.Tensor, y: torch.Tensor) -> torch.Tensor: + l1 = self.l1(pred, y) + vgg = self.vgg(pred, y) + ssim = 1 - self.msssim(pred, y) + return l1 + vgg + ssim * 0.15 \ No newline at end of file diff --git a/rawformer/torch/queue.py b/rawformer/torch/queue.py new file mode 100644 index 0000000..0434dba --- /dev/null +++ b/rawformer/torch/queue.py @@ -0,0 +1,81 @@ +from collections import deque +import torch + +class Queue: + + def __init__(self, size): + self._queue = deque(maxlen = size) + + def __len__(self): + return len(self._queue) + + def push(self, x): + self._queue.append(x.detach()) + + def query(self): + return tuple(self._queue) + +# NOTE: FastQueue differs from Queue +# Queue size means the number of objects to store +# FastQueue size means the full length of the queue tensor + +class FastQueue: + + def __init__(self, size, device): + self._queue = None + self._size = size + self._device = device + self._curr_idx = 0 + self._full = False + + def __len__(self): + if self._full: + return self._size + + return self._curr_idx + + def lazy_init_queue(self, x): + if self._queue is not None: + return + + self._queue = torch.empty( + (self._size, *x.shape[1:]), dtype = x.dtype, device = self._device + ) + + def push(self, x): + self.lazy_init_queue(x) + + n = x.shape[0] + n_avail_to_end = self._size - self._curr_idx + + if n > self._size: + x = x[-self._size:, ...] + n = self._size + + if n_avail_to_end <= n: + self._queue[self._curr_idx:self._size, ...] \ + = x[:n_avail_to_end, ...].detach().to( + self._device, non_blocking = True + ) + + self._curr_idx = 0 + self._full = True + + if n_avail_to_end < n: + self.push(x[n_avail_to_end:, ...]) + + else: + self._queue[self._curr_idx:self._curr_idx + n, ...] \ + = x.detach().to(self._device) + + self._curr_idx += n + + def query(self): + if self._queue is None: + return None + + if self._full: + return self._queue + + return self._queue[:self._curr_idx, ...] + diff --git a/rawformer/torch/select.py b/rawformer/torch/select.py new file mode 100644 index 0000000..e663f8c --- /dev/null +++ b/rawformer/torch/select.py @@ -0,0 +1,87 @@ +import copy +import torch +from torch import nn +from rawformer.torch.losses import PixelWiseLoss + +def extract_name_kwargs(obj): + if isinstance(obj, dict): + obj = copy.copy(obj) + name = obj.pop('name') + kwargs = obj + else: + name = obj + kwargs = {} + + return (name, kwargs) + +def get_norm_layer(norm, features): + name, kwargs = extract_name_kwargs(norm) + + if name is None: + return nn.Identity(**kwargs) + + if name == 'layer': + return nn.LayerNorm((features,), **kwargs) + + if name == 'batch': + return nn.BatchNorm2d(features, **kwargs) + + if name == 'instance': + return nn.InstanceNorm2d(features, **kwargs) + + raise ValueError("Unknown Layer: '%s'" % name) + +def get_norm_layer_fn(norm): + return lambda features : get_norm_layer(norm, features) + +def get_activ_layer(activ): + name, kwargs = extract_name_kwargs(activ) + + if (name is None) or (name == 'linear'): + return nn.Identity() + + if name == 'gelu': + return nn.GELU(**kwargs) + + if name == 'relu': + return nn.ReLU(inplace = True, **kwargs) + + if name == 'leakyrelu': + return nn.LeakyReLU(inplace = True, **kwargs) + + if name == 'tanh': + return nn.Tanh() + + if name == 'sigmoid': + return nn.Sigmoid() + + raise ValueError("Unknown activation: '%s'" % name) + +def select_activation(activation): + return get_activ_layer(activation) + +def select_optimizer(parameters, optimizer): + name, kwargs = extract_name_kwargs(optimizer) + + if name == 'AdamW': + return torch.optim.AdamW(parameters, **kwargs) + + if name == 'Adam': + return torch.optim.Adam(parameters, **kwargs) + + raise ValueError("Unknown optimizer: '%s'" % name) + +def select_loss(loss): + name, kwargs = extract_name_kwargs(loss) + + if name.lower() in [ 'l1', 'mae' ]: + return nn.L1Loss(**kwargs) + + if name.lower() in [ 'l2', 'mse' ]: + return nn.MSELoss(**kwargs) + + if name.lower() in [ 'pixwise' ]: + return PixelWiseLoss(**kwargs) + + raise ValueError("Unknown loss: '%s'" % name) + diff --git a/rawformer/torch/spectr_norm.py b/rawformer/torch/spectr_norm.py new file mode 100644 index 0000000..f714204 --- /dev/null +++ b/rawformer/torch/spectr_norm.py @@ -0,0 +1,23 @@ +import torch +from torch.nn.utils.parametrizations import spectral_norm + +def apply_sn_to_module(module, name, n_power_iterations = 1): + if isinstance(module, torch.nn.utils.parametrize.ParametrizationList): + return + + if not hasattr(module, name): + return + + w = getattr(module, name) + + if (w is None) or len(w.shape) < 2: + return + + spectral_norm(module, name, n_power_iterations) + +def apply_sn(module, tensor_name = 'weight', n_power_iterations = 1): + submodule_list = list(module.modules()) + + for m in submodule_list: + apply_sn_to_module(m, tensor_name, n_power_iterations) + diff --git a/rawformer/train/__init__.py b/rawformer/train/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/train/callbacks/__init__.py b/rawformer/train/callbacks/__init__.py new file mode 100644 index 0000000..92e5104 --- /dev/null +++ b/rawformer/train/callbacks/__init__.py @@ -0,0 +1 @@ +from .history import TrainingHistory diff --git a/rawformer/train/callbacks/history.py b/rawformer/train/callbacks/history.py new file mode 100644 index 0000000..90d0921 --- /dev/null +++ b/rawformer/train/callbacks/history.py @@ -0,0 +1,39 @@ +import os +import pandas as pd + +HISTORY_NAME = 'history.csv' + +class TrainingHistory: + + def __init__(self, savedir): + self._history = None + self._savedir = savedir + + def end_epoch(self, epoch, metrics): + values = metrics.values + values['epoch'] = epoch + values['time'] = pd.Timestamp.utcnow() + + if self._history is None: + self._history = pd.DataFrame([ values, ]) + else: + self._history = pd.concat([ self._history, pd.DataFrame([ values, ]) ]) + + self.save() + + def save(self): + self._history.to_csv( + os.path.join(self._savedir, HISTORY_NAME), index = False + ) + + def load(self): + path = os.path.join(self._savedir, HISTORY_NAME) + + if os.path.exists(path): + self._history = pd.read_csv(path, parse_dates = [ 'time', ]) + + @property + def history(self): + return self._history + + diff --git a/rawformer/train/callbacks/save_images.py b/rawformer/train/callbacks/save_images.py new file mode 100644 index 0000000..a3a06a1 --- /dev/null +++ b/rawformer/train/callbacks/save_images.py @@ -0,0 +1,11 @@ +import os +import torch +import torchvision + + +def save_results(images: torch.Tensor, gt: torch.Tensor, savedir, save_name = 'prediction.png'): + vis = torch.cat([images, gt], dim = 0) + grid = torchvision.utils.make_grid(vis, nrow=16, normalize=True) + grid = grid.mul(255).add_(0.5).clamp_(0, 255).to(torch.uint8).cpu() + os.makedirs(savedir, exist_ok = True) + torchvision.io.write_png(grid, os.path.join(savedir, save_name)) \ No newline at end of file diff --git a/rawformer/train/metrics/__init__.py b/rawformer/train/metrics/__init__.py new file mode 100644 index 0000000..f6a8572 --- /dev/null +++ b/rawformer/train/metrics/__init__.py @@ -0,0 +1,2 @@ +from .loss_metrics import LossMetrics + diff --git a/rawformer/train/metrics/loss_metrics.py b/rawformer/train/metrics/loss_metrics.py new file mode 100644 index 0000000..b8ecdc9 --- /dev/null +++ b/rawformer/train/metrics/loss_metrics.py @@ -0,0 +1,24 @@ +import copy + +class LossMetrics: + + def __init__(self): + self._values = None + self._n = 0 + + @property + def values(self): + if self._values is None: + return None + + return { k : v / self._n for (k,v) in self._values.items() } + + def update(self, values): + if self._values is None: + self._values = copy.deepcopy(values) + else: + for k,v in values.items(): + self._values[k] += v + + self._n += 1 + diff --git a/rawformer/train/transfer.py b/rawformer/train/transfer.py new file mode 100644 index 0000000..0243fca --- /dev/null +++ b/rawformer/train/transfer.py @@ -0,0 +1,166 @@ +import os +import logging + +import torch + +from rawformer.consts import ROOT_OUTDIR +from rawformer.config import Args +from rawformer.cgan import construct_model + +LOGGER = logging.getLogger('rawformer.train') + +def load_base_model(model, transfer_config): + try: + model.load(epoch = None) + return + + except IOError as e: + if not transfer_config.allow_partial: + raise IOError( + "Failed to find fully trained model in '%s' for transfer: %s"\ + % (model.savedir, e) + ) from e + + LOGGER.warning( + ( + "Failed to find fully trained model in '%s' for transfer." + " Trying to load from a checkpoint..." + ), model.savedir + ) + + epoch = model.find_last_checkpoint_epoch() + + if epoch > 0: + LOGGER.warning("Load transfer model from a checkpoint '%d'", epoch) + else: + raise RuntimeError("Failed to find transfer model checkpoints.") + + model.load(epoch) + +def get_base_model(transfer_config, device): + base_path = os.path.join(ROOT_OUTDIR, transfer_config.base_model) + base_args = Args.load(base_path) + + model = construct_model( + base_args.savedir, base_args.config, is_train = True, device = device + ) + + load_base_model(model, transfer_config) + + return model + +def transfer_from_larger_model(module, state_dict, strict): + source_keys = set(state_dict.keys()) + target_keys = set(k for (k, _p) in module.named_parameters()) + + matching_dict = { k : state_dict[k] for k in target_keys } + module.load_state_dict(matching_dict, strict = strict) + + LOGGER.warning( + "Transfer from a large model. Transferred %d / %d parameters", + len(target_keys), len(source_keys) + ) + +def collect_keys_for_transfer_to_wider_model(module, state_dict, strict): + source_keys = set(state_dict.keys()) + target_keys = set() + matching_keys = set() + wider_keys = set() + + for (k, p_target) in module.state_dict().items(): + target_keys.add(k) + + if strict: + assert k in source_keys + + p_source = state_dict[k] + + shape_source = p_source.shape + shape_target = p_target.shape + + if (shape_target is None) or (shape_target == shape_source): + matching_keys.add(k) + + elif ( + (len(shape_target) == len(shape_source)) + and all(t >= s for (t, s) in zip(shape_target, shape_source)) + ): + LOGGER.warning( + "Transfer to wide model. Found wider parameter: '%s'." + "%s vs %s", + k, shape_target, shape_source + ) + + wider_keys.add(k) + + else: + raise ValueError( + "Transfer to wide model. " + f"Cannot transfer parameter '{k}' due to mismatching" + f"shapes {shape_target} vs {shape_source}" + ) + + if strict and (source_keys != target_keys): + keys_diff = source_keys.symmetric_difference(target_keys) + + raise RuntimeError( + "Transfer to wide model. Strict transfer failed due to" + f" mismatching keys {keys_diff}" + ) + + return matching_keys, wider_keys + +def transfer_to_wider_model(module, state_dict, strict): + matching_keys, wider_keys = \ + collect_keys_for_transfer_to_wider_model(module, state_dict, strict) + + matching_dict = { k : state_dict[k] for k in matching_keys } + module.load_state_dict(matching_dict, strict = False) + + for k, p in module.named_parameters(): + if k not in wider_keys: + continue + + source_tensor = state_dict[k] + target_slice = tuple(slice(0, s) for s in source_tensor.shape) + + with torch.no_grad(): + p[target_slice] = source_tensor + +def transfer_state_dict(module, state_dict, fuzzy, strict): + if (fuzzy is None) or (fuzzy == 'none'): + module.load_state_dict(state_dict, strict = strict) + + elif fuzzy == 'from-larger-model': + transfer_from_larger_model(module, state_dict, strict) + + elif fuzzy == 'to-wider-model': + transfer_to_wider_model(module, state_dict, strict) + + else: + raise ValueError(f"Unknown fuzzy transfer type: {fuzzy}") + +def transfer_parameters(model, base_model, transfer_config): + for (dst, src) in transfer_config.transfer_map.items(): + transfer_state_dict( + model.models[dst], base_model.models[src].state_dict(), + transfer_config.fuzzy, transfer_config.strict + ) + +def transfer(model, transfer_config): + if transfer_config is None: + return + + if isinstance(transfer_config, list): + for conf in transfer_config: + transfer(model, conf) + return + + LOGGER.info( + "Initiating parameter transfer : '%s'", transfer_config.to_dict() + ) + + base_model = get_base_model(transfer_config, model.device) + transfer_parameters(model, base_model, transfer_config) + + diff --git a/rawformer/utils/__init__.py b/rawformer/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rawformer/utils/funcs.py b/rawformer/utils/funcs.py new file mode 100644 index 0000000..ed50273 --- /dev/null +++ b/rawformer/utils/funcs.py @@ -0,0 +1,37 @@ +import copy + +def recursive_update_dict(base_dict, new_dict): + if new_dict is None: + return + + for k,v in new_dict.items(): + if ( + isinstance(v, dict) + and k in base_dict + and isinstance(base_dict[k], dict) + ): + recursive_update_dict(base_dict[k], v) + else: + base_dict[k] = copy.deepcopy(v) + +def join_dicts(*dicts_list): + base_dict = {} + + for d in dicts_list: + recursive_update_dict(base_dict, d) + + return base_dict + +def check_value_in_range(value, value_range, hint = None): + if value in value_range: + return + + msg = '' + + if hint is not None: + msg = hint + ' ' + + msg += f"value '{value}' is not range {value_range}" + + raise ValueError(msg) + diff --git a/rawformer/utils/log.py b/rawformer/utils/log.py new file mode 100644 index 0000000..c03f80c --- /dev/null +++ b/rawformer/utils/log.py @@ -0,0 +1,23 @@ +import logging + +def reduce_pil_verbosity(level): + """A hack to stop PIL dumping large amounts of useless DEBUG info""" + logger = logging.getLogger('PIL') + logger.setLevel(max(logging.WARNING, level)) + +def setup_logging(level = logging.DEBUG): + """Setup logging.""" + logger = logging.getLogger() + + formatter = logging.Formatter( + '[%(asctime)s] [%(name)s]: %(levelname)s %(message)s' + ) + + logger.setLevel(level) + + handler = logging.StreamHandler() + handler.setFormatter(formatter) + + logger.addHandler(handler) + + reduce_pil_verbosity(logger.level) diff --git a/rawformer/utils/parsers.py b/rawformer/utils/parsers.py new file mode 100644 index 0000000..d3aac49 --- /dev/null +++ b/rawformer/utils/parsers.py @@ -0,0 +1,110 @@ +from rawformer.consts import ( + MODEL_STATE_TRAIN, MODEL_STATE_EVAL, SPLIT_TRAIN, SPLIT_TEST, SPLIT_VAL +) + +def add_model_state_parser(parser): + parser.add_argument( + '--model-state', + choices = [ MODEL_STATE_TRAIN, MODEL_STATE_EVAL ], + default = 'eval', + dest = 'model_state', + help = "evaluate model in 'train' or 'eval' states", + type = str, + ) + +def add_plot_extension_parser(parser, default = ( 'png', )): + parser.add_argument( + '-e', '--ext', + default = None if default is None else list(default), + dest = 'ext', + help = 'plot extensions', + type = str, + nargs = '+', + ) + +def add_batch_size_parser(parser, default = 1): + parser.add_argument( + '--batch-size', + default = default, + dest = 'batch_size', + help = 'batch size to use for evaluation', + type = int, + ) + +def add_n_eval_samples_parser(parser, default = None): + parser.add_argument( + '-n', + default = default, + dest = 'n_eval', + help = 'number of samples to use for evaluation', + type = int, + ) + +def add_eval_type_parser(parser, default = 'transfer'): + parser.add_argument( + '--type', + choices = [ 'transfer', 'reco', 'masked', 'simple-reco' ], + default = default, + dest = 'eval_type', + help = 'type of evaluation', + type = str, + ) + +def add_split_parser(parser, default = SPLIT_TEST): + parser.add_argument( + '--split', + choices = [ SPLIT_TRAIN, SPLIT_TEST, SPLIT_VAL ], + default = default, + dest = 'split', + help = 'data split', + type = str, + ) + +def add_eval_epoch_parser(parser, default = None): + parser.add_argument( + '--epoch', + default = default, + dest = 'epoch', + help = ( + 'checkpoint epoch to evaluate.' + ' If not specified, then the evaluation will be performed for' + ' the final model. If epoch is -1, then the evaluation will' + ' be performed for the last checkpoint.' + ), + type = int, + ) + +def add_model_directory_parser(parser): + parser.add_argument( + 'model', + help = 'directory containing model to evaluate', + metavar = 'MODEL', + type = str, + ) + +def add_preset_name_parser( + parser, name, presets, default = None, help_msg = None, +): + parser.add_argument( + f'--{name}', + default = default, + dest = name, + choices = list(presets), + help = help_msg or name, + type = str, + ) + +def add_standard_eval_parsers( + parser, + default_batch_size = 1, + default_epoch = None, + default_n_eval = None, +): + add_model_directory_parser(parser) + add_model_state_parser(parser) + add_split_parser(parser) + + add_batch_size_parser(parser, default_batch_size) + add_eval_epoch_parser(parser, default_epoch) + add_n_eval_samples_parser(parser, default_n_eval) + diff --git a/scripts/downsize_right.py b/scripts/downsize_right.py new file mode 100644 index 0000000..5d68042 --- /dev/null +++ b/scripts/downsize_right.py @@ -0,0 +1,101 @@ +import argparse +import os +import tqdm +from PIL import Image + +def downscale(image, out_shape, interpolation): + if interpolation == 'bilinear': + resample = Image.BILINEAR + elif interpolation == 'bicubic': + resample = Image.BICUBIC + elif interpolation == 'lanczos': + resample = Image.LANCZOS + else: + raise ValueError(f'Unknown interpolation method: {interpolation}') + + return image.resize(out_shape, resample = resample) + +def parse_cmdargs(): + parser = argparse.ArgumentParser(description = 'Resize Images with PIL') + + parser.add_argument( + 'source', + help = 'source directory', + metavar = 'SOURCE', + type = str, + ) + + parser.add_argument( + 'target', + help = 'target directory', + metavar = 'TARGET', + type = str, + ) + + parser.add_argument( + '-s', '--shape', + dest = 'shape', + help = 'output shape', + type = int, + required = True, + nargs = 2, + ) + + parser.add_argument( + '-i', + choices = [ 'bilinear', 'bicubic', 'lanczos' ], + default = 'lanczos', + dest = 'interpolation', + help = 'interpolation', + type = str, + ) + + return parser.parse_args() + +def collect_images(root): + result = [] + + for curr_root, _dirs, files in os.walk(root): + rel_path = os.path.relpath(curr_root, root) + + for fname in files: + result.append((rel_path, fname)) + + return result + +def load_image(path): + result = Image.open(path) + return result + +def save_image(image, path): + if not path.endswith('.png'): + path = path + '.png' + + image.save(path) + +def downscale_images(source, images, target, shape, interpolation): + for (subdir, fname) in tqdm.tqdm(images, total = len(images)): + path_src = os.path.join(source, subdir, fname) + + root_dst = os.path.join(target, subdir) + path_dst = os.path.join(root_dst, fname) + + os.makedirs(root_dst, exist_ok = True) + + image_src = load_image(path_src) + image_dst = downscale(image_src, shape, interpolation) + + save_image(image_dst, path_dst) + +def main(): + cmdargs = parse_cmdargs() + images = collect_images(cmdargs.source) + + downscale_images( + cmdargs.source, images, cmdargs.target, cmdargs.shape, + cmdargs.interpolation + ) + +if __name__ == '__main__': + main() + diff --git a/scripts/eval_fid.py b/scripts/eval_fid.py new file mode 100644 index 0000000..3775c45 --- /dev/null +++ b/scripts/eval_fid.py @@ -0,0 +1,121 @@ +import argparse +import os +import pandas as pd + +import torch_fidelity + +def parse_cmdargs(): + parser = argparse.ArgumentParser( + description = 'Evaluate Perceptual Metrics' + ) + + parser.add_argument( + 'root', + help = 'directory with images', + metavar = 'ROOT', + type = str, + ) + + parser.add_argument( + '--kid-size', + default = 100, + dest = 'kid_size', + help = 'size of the KID subsets', + type = int, + ) + + return parser.parse_args() + +def get_subdirs(root): + result = list(sorted( + x for x in os.listdir(root) + if os.path.isdir(os.path.join(root, x)) + )) + + result = [ x for x in result if (x.find('_hc_') == -1) ] + result = [ x for x in result if (x.find('_mask_') == -1) ] + + return result + +def get_ref_subdirs(subdirs): + result = [] + REF_PREFIX = [ 'real' ] + + for s in subdirs: + for p in REF_PREFIX: + if s.startswith(p): + result.append(s) + break + + return result + +def get_test_subdirs(subdirs): + result = [] + TEST_PREFIX = [ 'fake', 'reco' ] + + for s in subdirs: + for p in TEST_PREFIX: + if s.startswith(p): + result.append(s) + break + + return result + +def evaluate_metrics(path1, path2, kid_size): + return torch_fidelity.calculate_metrics( + input1 = path1, + input2 = path2, + cuda = True, + isc = False, + fid = True, + kid = True, + verbose = False, + kid_subset_size = kid_size, + ) + +def get_suffix(s): + tokens = s.split('_') + if len(tokens) < 2: + return '' + + return tokens[-1] + +def match_suffix(a, b): + suff_a = get_suffix(a) + suff_b = get_suffix(b) + + return (suff_a == suff_b) + +def evaluate_metrics_matrix(root, subdirs, kid_size): + result = [] + + for a in get_ref_subdirs(subdirs): + for b in get_test_subdirs(subdirs): + if not match_suffix(a, b): + continue + + print(f"Calculating metrics: {a} <-> {b}") + metrics = evaluate_metrics( + os.path.join(root, a), os.path.join(root, b), kid_size + ) + metrics['dir_a'] = a + metrics['dir_b'] = b + + result.append(metrics) + + return pd.DataFrame(result) + +def save_metrics(root, metrics): + metrics.to_csv(os.path.join(root, 'fid_metrics.csv'), index = False) + +def main(): + cmdargs = parse_cmdargs() + + subdirs = get_subdirs(cmdargs.root) + metrics = evaluate_metrics_matrix(cmdargs.root, subdirs, cmdargs.kid_size) + + save_metrics(cmdargs.root, metrics) + +if __name__ == '__main__': + main() + diff --git a/scripts/eval_il2_scores.py b/scripts/eval_il2_scores.py new file mode 100644 index 0000000..033457b --- /dev/null +++ b/scripts/eval_il2_scores.py @@ -0,0 +1,170 @@ +import argparse +import itertools +import os + +import torch +import torch.nn.functional as F + +from torch import nn +from torchvision.models import inception_v3, Inception_V3_Weights +from torchvision.datasets.folder import default_loader + +import torchvision.transforms as T + +import pandas as pd +import tqdm + +class InceptionV3(nn.Module): + + def __init__(self, drop_last_layer = True, **kwargs): + super().__init__() + + self.net = inception_v3( + weights = Inception_V3_Weights.DEFAULT, **kwargs + ) + + if drop_last_layer: + self.net.fc = nn.Identity() + + def forward(self, x): + return self.net(x) + +def parse_cmdargs(): + parser = argparse.ArgumentParser( + description = 'Eval inception v3 consistency metrics' + ) + + parser.add_argument( + 'root', + help = 'image directory', + metavar = 'SOURCE', + type = str, + ) + + parser.add_argument( + '-d', '--device', + help = 'device', + default = 'cuda', + dest = 'device', + type = str, + ) + + return parser.parse_args() + +@torch.no_grad() +def load_image(path, transforms, device): + result = default_loader(path) + result = transforms(result) + return result.to(device).unsqueeze(0) + +@torch.no_grad() +def calc_consistency_metrics(model, path_a, path_b, transforms, device): + image_a = load_image(path_a, transforms, device) + image_b = load_image(path_b, transforms, device) + + features_a = model(image_a) + features_b = model(image_b) + + il1 = F.l1_loss(features_a, features_b).mean().item() + il2 = torch.norm(features_a - features_b, p = 2).mean().item() + icos = F.cosine_similarity(features_a, features_b).mean().item() + + return { + 'i-l1' : il1, + 'i-l2' : il2, + 'i-cos' : icos, + } + +def get_subdirs(root): + result = [] + + for subdir in os.listdir(root): + full_path = os.path.join(root, subdir) + if os.path.isdir(full_path): + result.append(subdir) + + return result + +def collect_images(root): + return sorted(os.listdir(root)) + +def collect_subdir_pairs(subdirs): + subdirs = [ subdir for subdir in subdirs if subdir.find('_hc_') == -1 ] + + source = [ subdir for subdir in subdirs if subdir.startswith('real_') ] + target = [ subdir for subdir in subdirs if subdir.startswith('fake_') ] + + pairs = [ + (a, b) for (a, b) in itertools.product(source, target) + if a[-2:] != b[-2:] + ] + + return pairs + +def save_metrics(root, label, metrics): + metrics.to_csv( + os.path.join(root, f'consist_metrics_inception_{label}.csv'), + index = False + ) + +def save_avg_metrics(root, metrics): + metrics.to_csv( + os.path.join(root, 'consist_metrics_inception.csv'), index = False + ) + +def get_default_torch_transform(): + # NOTE: this can be found in the torch docs + return T.Compose([ + T.Resize((299, 299)), + T.ToTensor(), + T.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), + ]) + +def eval_consistency_metrics(root, device): + # pylint: disable=too-many-locals + result = [] + subdirs = get_subdirs(root) + dir_pairs = collect_subdir_pairs(subdirs) + transforms = get_default_torch_transform() + + model = InceptionV3().to(device) + model.eval() + + for (source_dir, target_dir) in dir_pairs: + metrics = [] + root_source = os.path.join(root, source_dir) + root_target = os.path.join(root, target_dir) + + images = collect_images(root_source) + title = f'Eval: {source_dir} vs {target_dir}' + + for fname in tqdm.tqdm(images, total = len(images), desc = title): + path_source = os.path.join(root_source, fname) + path_target = os.path.join(root_target, fname) + + curr_metrics = calc_consistency_metrics( + model, path_source, path_target, transforms, device + ) + curr_metrics['fname'] = fname + metrics.append(curr_metrics) + + metrics = pd.DataFrame(metrics) + save_metrics(root, f'{source_dir}_{target_dir}', metrics) + + avg_metrics = metrics.mean() + avg_metrics['dir_a'] = source_dir + avg_metrics['dir_b'] = target_dir + + result.append(avg_metrics.to_dict()) + + return pd.DataFrame(result) + +def main(): + cmdargs = parse_cmdargs() + metrics = eval_consistency_metrics(cmdargs.root, cmdargs.device) + + save_avg_metrics(cmdargs.root, metrics) + +if __name__ == '__main__': + main() + diff --git a/scripts/image2image/.gitignore b/scripts/image2image/.gitignore new file mode 100644 index 0000000..1c5a093 --- /dev/null +++ b/scripts/image2image/.gitignore @@ -0,0 +1,2 @@ +data/ +outdir/ diff --git a/scripts/image2image/predict.py b/scripts/image2image/predict.py new file mode 100644 index 0000000..eb0ba19 --- /dev/null +++ b/scripts/image2image/predict.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +import argparse +import collections +import os + +import tqdm +import numpy as np +from PIL import Image + +from rawformer.consts import MERGE_NONE +from rawformer.eval.funcs import ( + load_eval_model_dset_from_cmdargs, tensor_to_image, slice_data_loader, + get_eval_savedir, make_image_subdirs +) +from rawformer.utils.parsers import ( + add_standard_eval_parsers, add_plot_extension_parser +) + +def parse_cmdargs(): + parser = argparse.ArgumentParser( + description = 'Save model predictions as images' + ) + add_standard_eval_parsers(parser) + add_plot_extension_parser(parser) + + return parser.parse_args() + +def save_images(model, savedir, sample_counter, ext): + for (name, torch_image) in model.images.items(): + if torch_image is None: + continue + + for index in range(torch_image.shape[0]): + sample_index = sample_counter[name] + + image = tensor_to_image(torch_image[index]) + image = np.round(255 * image).astype(np.uint8) + image = Image.fromarray(image) + + path = os.path.join(savedir, name, f'sample_{sample_index}') + for e in ext: + image.save(path + '.' + e) + + sample_counter[name] += 1 + +def dump_single_domain_images( + model, data_it, domain, n_eval, batch_size, savedir, sample_counter, ext +): + # pylint: disable=too-many-arguments + data_it, steps = slice_data_loader(data_it, batch_size, n_eval) + desc = f'Translating domain {domain}' + + for batch in tqdm.tqdm(data_it, desc = desc, total = steps): + model.set_input(batch, domain = domain) + model.forward_nograd() + + save_images(model, savedir, sample_counter, ext) + +def dump_images(model, data_list, n_eval, batch_size, savedir, ext): + # pylint: disable=too-many-arguments + make_image_subdirs(model, savedir) + + sample_counter = collections.defaultdict(int) + if isinstance(ext, str): + ext = [ ext, ] + + for domain, data_it in enumerate(data_list): + dump_single_domain_images( + model, data_it, domain, n_eval, batch_size, savedir, + sample_counter, ext + ) + +def main(): + cmdargs = parse_cmdargs() + + args, model, data_list, evaldir = load_eval_model_dset_from_cmdargs( + cmdargs, merge_type = MERGE_NONE + ) + + if not isinstance(data_list, (list, tuple)): + data_list = [ data_list, ] + + savedir = get_eval_savedir( + evaldir, 'images', cmdargs.model_state, cmdargs.split + ) + + dump_images( + model, data_list, cmdargs.n_eval, args.batch_size, savedir, + cmdargs.ext + ) + +if __name__ == '__main__': + main() + diff --git a/scripts/image2image/pretrain.py b/scripts/image2image/pretrain.py new file mode 100644 index 0000000..27c2ad0 --- /dev/null +++ b/scripts/image2image/pretrain.py @@ -0,0 +1,87 @@ +import argparse +import os + +from rawformer import ROOT_OUTDIR, train +from rawformer.presets import GEN_PRESETS +from rawformer.utils.parsers import add_preset_name_parser, add_batch_size_parser + +def parse_cmdargs(): + parser = argparse.ArgumentParser( + description = 'Pretrain Image2Image generators' + ) + add_preset_name_parser(parser, 'gen', GEN_PRESETS, 'rawformer') + add_batch_size_parser(parser, default = 32) + return parser.parse_args() + +cmdargs = parse_cmdargs() +args_dict = { + 'batch_size' : cmdargs.batch_size, + 'data' : { + 'datasets' : [ + { + 'dataset' : { + 'name' : 'cyclegan', + 'domain' : domain, + 'path' : 'image2image', + }, + 'shape' : (3, 256, 256), + 'transform_train' : [ + { 'name' : 'resize', 'size' : 286, }, + { 'name' : 'random-rotation', 'degrees' : 10, }, + { 'name' : 'random-crop', 'size' : 256, }, + 'random-flip-horizontal', + { + 'name' : 'color-jitter', + 'brightness' : 0.2, + 'contrast' : 0.2, + 'saturation' : 0.2, + 'hue' : 0.2, + }, + ], + 'transform_test' : None, + } for domain in [ 'a', 'b' ] + ], + 'merge_type' : 'unpaired', + 'workers' : 1, + }, + 'epochs' : 5, # 2500 epochs + 'discriminator' : None, + 'generator' : { + **GEN_PRESETS[cmdargs.gen], + 'optimizer' : { + 'name' : 'AdamW', + 'lr' : cmdargs.batch_size * 5e-3 / 512, + 'betas' : (0.9, 0.99), + 'weight_decay' : 0.05, + }, + 'weight_init' : { + 'name' : 'normal', + 'init_gain' : 0.02, + } + }, + 'model' : 'autoencoder', + 'model_args' : { + 'joint' : True, + 'masking' : { + 'name' : 'image-patch-random', + 'patch_size' : (32, 32), + 'fraction' : 0.4, + }, + }, + 'scheduler' : { + 'name' : 'CosineAnnealingWarmRestarts', + 'T_0' : 500, + 'T_mult' : 1, + 'eta_min' : cmdargs.batch_size * 5e-8 / 512, + }, + 'loss' : 'pixwise', + 'gradient_penalty' : None, + 'steps_per_epoch' : 32 * 1024 // cmdargs.batch_size, +# args + 'label' : f'pretrain-{cmdargs.gen}', + 'outdir' : os.path.join(ROOT_OUTDIR, 'image2image'), + 'log_level' : 'DEBUG', + 'checkpoint' : 100, +} + +train(args_dict) diff --git a/scripts/image2image/train.py b/scripts/image2image/train.py new file mode 100644 index 0000000..bd66457 --- /dev/null +++ b/scripts/image2image/train.py @@ -0,0 +1,144 @@ +import argparse +import os + +from rawformer import ROOT_OUTDIR, train +from rawformer.presets import GEN_PRESETS, BH_PRESETS +from rawformer.utils.parsers import add_preset_name_parser + +def parse_cmdargs(): + parser = argparse.ArgumentParser( + description = 'Train Image2Image I2I model' + ) + + add_preset_name_parser(parser, 'gen', GEN_PRESETS, 'rawformer') + add_preset_name_parser(parser, 'head', BH_PRESETS, 'bn', 'batch head') + + parser.add_argument( + '--no-pretrain', dest = 'no_pretrain', action = 'store_true', + help = 'disable uasge of the pre-trained generator' + ) + + parser.add_argument( + '--lambda-gp', dest = 'lambda_gp', type = float, + default = 0.01, help = 'magnitude of the gradient penalty' + ) + + parser.add_argument( + '--lambda-cycle', dest = 'lambda_cyc', type = float, + default = 10.0, help = 'magnitude of the cycle-consisntecy loss' + ) + + parser.add_argument( + '--lr-gen', dest = 'lr_gen', type = float, + default = 5e-5, help = 'learning rate of the generator' + ) + + return parser.parse_args() + +def get_transfer_preset(cmdargs): + if cmdargs.no_pretrain: + return None + + base_model = ( + 'image2image/' + 'model_m(autoencoder)_d(None)' + f"_g({GEN_PRESETS[cmdargs.gen]['model']})_pretrain-{cmdargs.gen}" + ) + + return { + 'base_model' : base_model, + 'transfer_map' : { + 'gen_ab' : 'encoder', + 'gen_ba' : 'encoder', + }, + 'strict' : True, + 'allow_partial' : False, + 'fuzzy' : None, + } + +cmdargs = parse_cmdargs() +args_dict = { + 'batch_size' : 1, + 'data' : { + 'datasets' : [ + { + 'dataset' : { + 'name' : 'cyclegan', + 'domain' : domain, + 'path' : 'image2image', + }, + 'shape' : (3, 256, 256), + 'transform_train' : [ + { 'name' : 'resize', 'size' : 286, }, + { 'name' : 'random-crop', 'size' : 256, }, + 'random-flip-horizontal', + ], + 'transform_test' : None, + } for domain in [ 'a', 'b' ] + ], + 'merge_type' : 'unpaired', + 'workers' : 1, + }, + 'epochs' : 5, # 500 epochs + 'discriminator' : { + 'model' : 'basic', + 'model_args' : { 'shrink_output' : False, }, + 'optimizer' : { + 'name' : 'Adam', + 'lr' : 1e-4, + 'betas' : (0.5, 0.99), + }, + 'weight_init' : { + 'name' : 'normal', + 'init_gain' : 0.02, + }, + 'spectr_norm' : True, + }, + 'generator' : { + **GEN_PRESETS[cmdargs.gen], + 'optimizer' : { + 'name' : 'Adam', + 'lr' : cmdargs.lr_gen, + 'betas' : (0.5, 0.99), + }, + 'weight_init' : { + 'name' : 'normal', + 'init_gain' : 0.02, + }, + }, + 'model' : 'rawformer', + 'model_args' : { + 'lambda_a' : cmdargs.lambda_cyc, + 'lambda_b' : cmdargs.lambda_cyc, + 'lambda_idt' : 0.5, + 'avg_momentum' : 0.9999, + 'head_queue_size' : 3, + 'head_config' : { + 'name' : BH_PRESETS[cmdargs.head], + 'input_features' : 512, + 'output_features' : 1, + 'activ' : 'leakyrelu', + }, + }, + 'gradient_penalty' : { + 'center' : 0, + 'lambda_gp' : cmdargs.lambda_gp, + 'mix_type' : 'real-fake', + 'reduction' : 'mean', + }, + 'scheduler' : None, + 'loss' : 'lsgan', + 'steps_per_epoch' : 2000, + 'transfer' : get_transfer_preset(cmdargs), +# args + 'label' : ( + f'{cmdargs.gen}-{cmdargs.head}_({cmdargs.no_pretrain}' + f':{cmdargs.lambda_cyc}:{cmdargs.lambda_gp}:{cmdargs.lr_gen})' + ), + 'outdir' : os.path.join(ROOT_OUTDIR, 'image2image', 'image2image'), + 'log_level' : 'DEBUG', + 'checkpoint' : 50, +} + +train(args_dict) + diff --git a/scripts/print_model.py b/scripts/print_model.py new file mode 100644 index 0000000..2c996ae --- /dev/null +++ b/scripts/print_model.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import sys + +from rawformer.config import Args +from rawformer.torch.funcs import get_torch_device_smart +from rawformer.cgan import construct_model + +def main(path): + args = Args.load(path) + device = get_torch_device_smart() + model = construct_model( + args.savedir, args.config, is_train = True, device = device + ) + + epoch = max(model.find_last_checkpoint_epoch(), 0) + print("Load checkpoint at epoch %s" % epoch) + + model.load(epoch) + + print(model.pprint(verbose = True)) + +if __name__ == '__main__': + main(sys.argv[1]) + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..42dfb42 --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +import setuptools + +setuptools.setup( + name = 'Rawformer', + version = '0.1.0', + author = 'Georgy Perevozchikov', + author_email = 'gosha20777@live.ru', + classifiers = [ + 'Programming Language :: Python :: 3 :: Only', + ], + description = "Unpaired Raw-to-Raw Translation for Learnable Camera ISPs", + packages = setuptools.find_packages( + include = [ 'rawformer', 'rawformer.*' ] + ), + install_requires = [ 'numpy', 'pandas', 'tqdm', 'Pillow' ], +) + diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_queues.py b/tests/test_queues.py new file mode 100644 index 0000000..b9a724c --- /dev/null +++ b/tests/test_queues.py @@ -0,0 +1,129 @@ +import unittest + +import torch +from rawformer.torch.queue import Queue, FastQueue + +class TestQueues(unittest.TestCase): + + # pylint: disable=protected-access + def _compare_fast_queue_to_sequence(self, fast_queue, sequence): + self.assertEqual(sum(len(x) for x in sequence), len(fast_queue)) + + if len(sequence) == 0: + return + + fast_queue_tensor = fast_queue.query() + + if len(fast_queue) != fast_queue._size: + fast_queue_idx = 0 + else: + fast_queue_idx = fast_queue._curr_idx + + for item in sequence: + for item_idx in range(len(item)): + fast_queue_idx = fast_queue_idx % len(fast_queue) + fast_item \ + = fast_queue_tensor[fast_queue_idx:fast_queue_idx+1, ...] + + self.assertTrue( + (fast_item == item[item_idx:item_idx+1, ...]).all() + ) + + fast_queue_idx += 1 + + def _compare_queue_to_sequence(self, queue, sequence): + self.assertEqual(len(sequence), len(queue)) + + if len(queue) == 0: + return + + queue_seq = queue.query() + + for (s1, s2) in zip(sequence, queue_seq): + self.assertTrue((s1 == s2).all()) + + def _compare_queues(self, queue, fast_queue): + self.assertEqual(len(queue), len(fast_queue)) + + if len(queue) == 0: + return + + self._compare_fast_queue_to_sequence(fast_queue, queue.query()) + + def test_queue_simple(self): + sequence = [ torch.randn((1, 2, 3, 4)) for _ in range(10) ] + queue = Queue(len(sequence)) + + for item in sequence: + queue.push(item) + + self._compare_queue_to_sequence(queue, sequence) + + def test_fast_queue_simple(self): + sequence = [ torch.randn((1, 2, 3, 4)) for _ in range(10) ] + queue = FastQueue(len(sequence), 'cpu') + + for item in sequence: + queue.push(item) + + self._compare_fast_queue_to_sequence(queue, sequence) + + def test_queue_wrap(self): + sequence = [ torch.randn((1, 2, 3, 4)) for _ in range(10) ] + queue = Queue(5) + + for item in sequence: + queue.push(item) + + self._compare_queue_to_sequence(queue, sequence[5:]) + + def test_fast_queue_wrap(self): + sequence = [ torch.randn((1, 2, 3, 4)) for _ in range(10) ] + queue = FastQueue(5, 'cpu') + + for item in sequence: + queue.push(item) + + self._compare_fast_queue_to_sequence(queue, sequence[5:]) + + def test_queue_wrap_and_diff_lenghts(self): + sequence = [ torch.randn((i, 2, 3, 4)) for i in range(10) ] + queue = Queue(5) + + for item in sequence: + queue.push(item) + + self._compare_queue_to_sequence(queue, sequence[5:]) + + def test_fast_queue_wrap_and_diff_lenghts(self): + sequence = [ torch.randn((i, 2, 3, 4)) for i in range(10) ] + queue_size = sum(len(x) for x in sequence[5:]) + + queue = FastQueue(queue_size, 'cpu') + + for item in sequence: + queue.push(item) + + self._compare_fast_queue_to_sequence(queue, sequence[5:]) + + def test_queue_large_wrap_and_diff_lenghts(self): + sequence = [ torch.randn((i, 2, 3, 4)) for i in range(100) ] + queue = Queue(3) + + for item in sequence: + queue.push(item) + + self._compare_queue_to_sequence(queue, sequence[-3:]) + + def test_large_queue_large_wrap_and_diff_lenghts(self): + sequence = [ torch.randn((i, 2, 3, 4)) for i in range(100) ] + queue = FastQueue(3, 'cpu') + + for item in sequence: + queue.push(item) + + self._compare_fast_queue_to_sequence(queue, (sequence[-1][-3:,...],)) + +if __name__ == '__main__': + unittest.main() +