From 8b54b493f48804958f4ed3caa9ec9a02e29f4ce1 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 17 Nov 2023 20:58:03 +0100 Subject: [PATCH 1/4] Add support for FBCNN --- src/spandrel/__helpers/main_registry.py | 13 + src/spandrel/architectures/FBCNN/__init__.py | 51 ++ .../architectures/FBCNN/arch/FBCNN.py | 588 ++++++++++++++++++ src/spandrel/architectures/FBCNN/arch/LICENSE | 201 ++++++ tests/__snapshots__/test_FBCNN.ambr | 27 + tests/test_FBCNN.py | 22 + 6 files changed, 902 insertions(+) create mode 100644 src/spandrel/architectures/FBCNN/__init__.py create mode 100644 src/spandrel/architectures/FBCNN/arch/FBCNN.py create mode 100644 src/spandrel/architectures/FBCNN/arch/LICENSE create mode 100644 tests/__snapshots__/test_FBCNN.ambr create mode 100644 tests/test_FBCNN.py diff --git a/src/spandrel/__helpers/main_registry.py b/src/spandrel/__helpers/main_registry.py index 992c32d4..7755389c 100644 --- a/src/spandrel/__helpers/main_registry.py +++ b/src/spandrel/__helpers/main_registry.py @@ -5,6 +5,7 @@ from ..architectures import ( DAT, ESRGAN, + FBCNN, GFPGAN, HAT, MAT, @@ -153,6 +154,18 @@ def _detect(state_dict: StateDict) -> bool: detect=_has_keys("m_head.0.weight", "m_tail.0.weight"), load=SCUNet.load, ), + ArchSupport( + id="FBCNN", + detect=_has_keys( + "m_head.weight", + "m_down1.0.res.0.weight", + "m_down2.0.res.0.weight", + "m_body_encoder.0.res.0.weight", + "m_tail.weight", + "qf_pred.0.res.0.weight", + ), + load=FBCNN.load, + ), ArchSupport( id="DAT", detect=_has_keys("layers.0.blocks.2.attn.attn_mask_0", "conv_first.weight"), diff --git a/src/spandrel/architectures/FBCNN/__init__.py b/src/spandrel/architectures/FBCNN/__init__.py new file mode 100644 index 00000000..72990b39 --- /dev/null +++ b/src/spandrel/architectures/FBCNN/__init__.py @@ -0,0 +1,51 @@ +from ...__helpers.model_descriptor import ( + RestorationModelDescriptor, + SizeRequirements, + StateDict, +) +from .arch.FBCNN import FBCNN + + +def load(state_dict: StateDict) -> RestorationModelDescriptor[FBCNN]: + in_nc = 3 + out_nc = 3 + nc = [64, 128, 256, 512] + nb = 4 + act_mode = "R" + downsample_mode = "strideconv" + upsample_mode = "convtranspose" + + in_nc = state_dict["m_head.weight"].shape[1] + out_nc = state_dict["m_tail.weight"].shape[0] + + for i in range(0, 20): + if f"m_down1.{i}.weight" in state_dict: + nb = i + break + + nc[0] = state_dict["m_head.weight"].shape[0] + nc[1] = state_dict[f"m_down1.{nb}.weight"].shape[0] + nc[2] = state_dict[f"m_down2.{nb}.weight"].shape[0] + nc[3] = state_dict[f"m_down3.{nb}.weight"].shape[0] + + model = FBCNN( + in_nc=in_nc, + out_nc=out_nc, + nc=nc, + nb=nb, + act_mode=act_mode, + downsample_mode=downsample_mode, + upsample_mode=upsample_mode, + ) + + return RestorationModelDescriptor( + model, + state_dict, + architecture="FBCNN", + tags=[], + supports_half=True, # TODO + supports_bfloat16=True, # TODO + input_channels=in_nc, + output_channels=out_nc, + size=SizeRequirements(minimum=16), # TODO + ) diff --git a/src/spandrel/architectures/FBCNN/arch/FBCNN.py b/src/spandrel/architectures/FBCNN/arch/FBCNN.py new file mode 100644 index 00000000..6dd74a02 --- /dev/null +++ b/src/spandrel/architectures/FBCNN/arch/FBCNN.py @@ -0,0 +1,588 @@ +from collections import OrderedDict + +import numpy as np +import torch +import torch.nn as nn + +""" +# -------------------------------------------- +# Advanced nn.Sequential +# https://github.com/xinntao/BasicSR +# -------------------------------------------- +""" + + +def sequential(*args): + """Advanced nn.Sequential. + + Args: + nn.Sequential, nn.Module + + Returns: + nn.Sequential + """ + if len(args) == 1: + if isinstance(args[0], OrderedDict): + raise NotImplementedError("sequential does not support OrderedDict input.") + return args[0] # No sequential is needed. + modules = [] + for module in args: + if isinstance(module, nn.Sequential): + for submodule in module.children(): + modules.append(submodule) + elif isinstance(module, nn.Module): + modules.append(module) + return nn.Sequential(*modules) + + +# -------------------------------------------- +# return nn.Sequantial of (Conv + BN + ReLU) +# -------------------------------------------- +def conv( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + bias=True, + mode="CBR", + negative_slope=0.2, +): + L = [] + for t in mode: + if t == "C": + L.append( + nn.Conv2d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + bias=bias, + ) + ) + elif t == "T": + L.append( + nn.ConvTranspose2d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + bias=bias, + ) + ) + elif t == "B": + L.append(nn.BatchNorm2d(out_channels, momentum=0.9, eps=1e-04, affine=True)) + elif t == "I": + L.append(nn.InstanceNorm2d(out_channels, affine=True)) + elif t == "R": + L.append(nn.ReLU(inplace=True)) + elif t == "r": + L.append(nn.ReLU(inplace=False)) + elif t == "L": + L.append(nn.LeakyReLU(negative_slope=negative_slope, inplace=True)) + elif t == "l": + L.append(nn.LeakyReLU(negative_slope=negative_slope, inplace=False)) + elif t == "2": + L.append(nn.PixelShuffle(upscale_factor=2)) + elif t == "3": + L.append(nn.PixelShuffle(upscale_factor=3)) + elif t == "4": + L.append(nn.PixelShuffle(upscale_factor=4)) + elif t == "U": + L.append(nn.Upsample(scale_factor=2, mode="nearest")) + elif t == "u": + L.append(nn.Upsample(scale_factor=3, mode="nearest")) + elif t == "v": + L.append(nn.Upsample(scale_factor=4, mode="nearest")) + elif t == "M": + L.append(nn.MaxPool2d(kernel_size=kernel_size, stride=stride, padding=0)) + elif t == "A": + L.append(nn.AvgPool2d(kernel_size=kernel_size, stride=stride, padding=0)) + else: + raise NotImplementedError("Undefined type: ".format()) + return sequential(*L) + + +# -------------------------------------------- +# Res Block: x + conv(relu(conv(x))) +# -------------------------------------------- +class ResBlock(nn.Module): + def __init__( + self, + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + bias=True, + mode="CRC", + negative_slope=0.2, + ): + super().__init__() + + assert in_channels == out_channels, "Only support in_channels==out_channels." + if mode[0] in ["R", "L"]: + mode = mode[0].lower() + mode[1:] + + self.res = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode, + negative_slope, + ) + + def forward(self, x): + res = self.res(x) + return x + res + + +# -------------------------------------------- +# conv + subp (+ relu) +# -------------------------------------------- +def upsample_pixelshuffle( + in_channels=64, + out_channels=3, + kernel_size=3, + stride=1, + padding=1, + bias=True, + mode="2R", + negative_slope=0.2, +): + assert len(mode) < 4 and mode[0] in [ + "2", + "3", + "4", + ], "mode examples: 2, 2R, 2BR, 3, ..., 4BR." + up1 = conv( + in_channels, + out_channels * (int(mode[0]) ** 2), + kernel_size, + stride, + padding, + bias, + mode="C" + mode, + negative_slope=negative_slope, + ) + return up1 + + +# -------------------------------------------- +# nearest_upsample + conv (+ R) +# -------------------------------------------- +def upsample_upconv( + in_channels=64, + out_channels=3, + kernel_size=3, + stride=1, + padding=1, + bias=True, + mode="2R", + negative_slope=0.2, +): + assert len(mode) < 4, "mode examples: 2, 2R, 2BR, 3, ..., 4BR" + if mode[0] == "2": + uc = "UC" + elif mode[0] == "3": + uc = "uC" + elif mode[0] == "4": + uc = "vC" + else: + raise ValueError(f"Wrong mode: {mode}. mode examples: 2, 2R, 2BR, 3, ..., 4BR") + mode = mode.replace(mode[0], uc) + up1 = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode=mode, + negative_slope=negative_slope, + ) + return up1 + + +# -------------------------------------------- +# convTranspose (+ relu) +# -------------------------------------------- +def upsample_convtranspose( + in_channels=64, + out_channels=3, + kernel_size=2, + stride=2, + padding=0, + bias=True, + mode="2R", + negative_slope=0.2, +): + assert len(mode) < 4 and mode[0] in [ + "2", + "3", + "4", + ], "mode examples: 2, 2R, 2BR, 3, ..., 4BR." + kernel_size = int(mode[0]) + stride = int(mode[0]) + mode = mode.replace(mode[0], "T") + up1 = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode, + negative_slope, + ) + return up1 + + +""" +# -------------------------------------------- +# Downsampler +# Kai Zhang, https://github.com/cszn/KAIR +# -------------------------------------------- +# downsample_strideconv +# downsample_maxpool +# downsample_avgpool +# -------------------------------------------- +""" + + +# -------------------------------------------- +# strideconv (+ relu) +# -------------------------------------------- +def downsample_strideconv( + in_channels=64, + out_channels=64, + kernel_size=2, + stride=2, + padding=0, + bias=True, + mode="2R", + negative_slope=0.2, +): + assert len(mode) < 4 and mode[0] in [ + "2", + "3", + "4", + ], "mode examples: 2, 2R, 2BR, 3, ..., 4BR." + kernel_size = int(mode[0]) + stride = int(mode[0]) + mode = mode.replace(mode[0], "C") + down1 = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode, + negative_slope, + ) + return down1 + + +# -------------------------------------------- +# maxpooling + conv (+ relu) +# -------------------------------------------- +def downsample_maxpool( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=0, + bias=True, + mode="2R", + negative_slope=0.2, +): + assert len(mode) < 4 and mode[0] in [ + "2", + "3", + ], "mode examples: 2, 2R, 2BR, 3, ..., 3BR." + kernel_size_pool = int(mode[0]) + stride_pool = int(mode[0]) + mode = mode.replace(mode[0], "MC") + pool = conv( + kernel_size=kernel_size_pool, + stride=stride_pool, + mode=mode[0], + negative_slope=negative_slope, + ) + pool_tail = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode=mode[1:], + negative_slope=negative_slope, + ) + return sequential(pool, pool_tail) + + +# -------------------------------------------- +# averagepooling + conv (+ relu) +# -------------------------------------------- +def downsample_avgpool( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + bias=True, + mode="2R", + negative_slope=0.2, +): + assert len(mode) < 4 and mode[0] in [ + "2", + "3", + ], "mode examples: 2, 2R, 2BR, 3, ..., 3BR." + kernel_size_pool = int(mode[0]) + stride_pool = int(mode[0]) + mode = mode.replace(mode[0], "AC") + pool = conv( + kernel_size=kernel_size_pool, + stride=stride_pool, + mode=mode[0], + negative_slope=negative_slope, + ) + pool_tail = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode=mode[1:], + negative_slope=negative_slope, + ) + return sequential(pool, pool_tail) + + +class QFAttention(nn.Module): + def __init__( + self, + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + bias=True, + mode="CRC", + negative_slope=0.2, + ): + super().__init__() + + assert in_channels == out_channels, "Only support in_channels==out_channels." + if mode[0] in ["R", "L"]: + mode = mode[0].lower() + mode[1:] + + self.res = conv( + in_channels, + out_channels, + kernel_size, + stride, + padding, + bias, + mode, + negative_slope, + ) + + def forward(self, x, gamma, beta): + gamma = gamma.unsqueeze(-1).unsqueeze(-1) + beta = beta.unsqueeze(-1).unsqueeze(-1) + res = (gamma) * self.res(x) + beta + return x + res + + +class FBCNN(nn.Module): + def __init__( + self, + in_nc=3, + out_nc=3, + nc=[64, 128, 256, 512], + nb=4, + act_mode="R", + downsample_mode="strideconv", + upsample_mode="convtranspose", + ): + super().__init__() + + self.m_head = conv(in_nc, nc[0], bias=True, mode="C") + self.nb = nb + self.nc = nc + # downsample + if downsample_mode == "avgpool": + downsample_block = downsample_avgpool + elif downsample_mode == "maxpool": + downsample_block = downsample_maxpool + elif downsample_mode == "strideconv": + downsample_block = downsample_strideconv + else: + raise NotImplementedError( + f"downsample mode [{downsample_mode:s}] is not found" + ) + + self.m_down1 = sequential( + *[ + ResBlock(nc[0], nc[0], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + downsample_block(nc[0], nc[1], bias=True, mode="2"), + ) + self.m_down2 = sequential( + *[ + ResBlock(nc[1], nc[1], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + downsample_block(nc[1], nc[2], bias=True, mode="2"), + ) + self.m_down3 = sequential( + *[ + ResBlock(nc[2], nc[2], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + downsample_block(nc[2], nc[3], bias=True, mode="2"), + ) + + self.m_body_encoder = sequential( + *[ + ResBlock(nc[3], nc[3], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ] + ) + + self.m_body_decoder = sequential( + *[ + ResBlock(nc[3], nc[3], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ] + ) + + # upsample + if upsample_mode == "upconv": + upsample_block = upsample_upconv + elif upsample_mode == "pixelshuffle": + upsample_block = upsample_pixelshuffle + elif upsample_mode == "convtranspose": + upsample_block = upsample_convtranspose + else: + raise NotImplementedError(f"upsample mode [{upsample_mode:s}] is not found") + + self.m_up3 = nn.ModuleList( + [ + upsample_block(nc[3], nc[2], bias=True, mode="2"), + *[ + QFAttention(nc[2], nc[2], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + ] + ) + + self.m_up2 = nn.ModuleList( + [ + upsample_block(nc[2], nc[1], bias=True, mode="2"), + *[ + QFAttention(nc[1], nc[1], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + ] + ) + + self.m_up1 = nn.ModuleList( + [ + upsample_block(nc[1], nc[0], bias=True, mode="2"), + *[ + QFAttention(nc[0], nc[0], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + ] + ) + + self.m_tail = conv(nc[0], out_nc, bias=True, mode="C") + + self.qf_pred = sequential( + *[ + ResBlock(nc[3], nc[3], bias=True, mode="C" + act_mode + "C") + for _ in range(nb) + ], + torch.nn.AdaptiveAvgPool2d((1, 1)), + torch.nn.Flatten(), + torch.nn.Linear(512, 512), + nn.ReLU(), + torch.nn.Linear(512, 512), + nn.ReLU(), + torch.nn.Linear(512, 1), + nn.Sigmoid(), + ) + + self.qf_embed = sequential( + torch.nn.Linear(1, 512), + nn.ReLU(), + torch.nn.Linear(512, 512), + nn.ReLU(), + torch.nn.Linear(512, 512), + nn.ReLU(), + ) + + self.to_gamma_3 = sequential(torch.nn.Linear(512, nc[2]), nn.Sigmoid()) + self.to_beta_3 = sequential(torch.nn.Linear(512, nc[2]), nn.Tanh()) + self.to_gamma_2 = sequential(torch.nn.Linear(512, nc[1]), nn.Sigmoid()) + self.to_beta_2 = sequential(torch.nn.Linear(512, nc[1]), nn.Tanh()) + self.to_gamma_1 = sequential(torch.nn.Linear(512, nc[0]), nn.Sigmoid()) + self.to_beta_1 = sequential(torch.nn.Linear(512, nc[0]), nn.Tanh()) + + def forward(self, x, qf_input=None): + h, w = x.size()[-2:] + paddingBottom = int(np.ceil(h / 8) * 8 - h) + paddingRight = int(np.ceil(w / 8) * 8 - w) + x = nn.ReplicationPad2d((0, paddingRight, 0, paddingBottom))(x) + + x1 = self.m_head(x) + x2 = self.m_down1(x1) + x3 = self.m_down2(x2) + x4 = self.m_down3(x3) + x = self.m_body_encoder(x4) + qf = self.qf_pred(x) + x = self.m_body_decoder(x) + qf_embedding = ( + self.qf_embed(qf_input) if qf_input is not None else self.qf_embed(qf) + ) + gamma_3 = self.to_gamma_3(qf_embedding) + beta_3 = self.to_beta_3(qf_embedding) + + gamma_2 = self.to_gamma_2(qf_embedding) + beta_2 = self.to_beta_2(qf_embedding) + + gamma_1 = self.to_gamma_1(qf_embedding) + beta_1 = self.to_beta_1(qf_embedding) + + x = x + x4 + x = self.m_up3[0](x) + for i in range(self.nb): + x = self.m_up3[i + 1](x, gamma_3, beta_3) + + x = x + x3 + + x = self.m_up2[0](x) + for i in range(self.nb): + x = self.m_up2[i + 1](x, gamma_2, beta_2) + x = x + x2 + + x = self.m_up1[0](x) + for i in range(self.nb): + x = self.m_up1[i + 1](x, gamma_1, beta_1) + + x = x + x1 + x = self.m_tail(x) + x = x[..., :h, :w] + + return x, qf diff --git a/src/spandrel/architectures/FBCNN/arch/LICENSE b/src/spandrel/architectures/FBCNN/arch/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/src/spandrel/architectures/FBCNN/arch/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tests/__snapshots__/test_FBCNN.ambr b/tests/__snapshots__/test_FBCNN.ambr new file mode 100644 index 00000000..06cfa4b1 --- /dev/null +++ b/tests/__snapshots__/test_FBCNN.ambr @@ -0,0 +1,27 @@ +# serializer version: 1 +# name: test_FBCNN_color + RestorationModelDescriptor( + architecture='FBCNN', + input_channels=3, + output_channels=3, + scale=1, + size=SizeRequirements(minimum=16, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + ]), + ) +# --- +# name: test_FBCNN_gray + RestorationModelDescriptor( + architecture='FBCNN', + input_channels=1, + output_channels=1, + scale=1, + size=SizeRequirements(minimum=16, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + ]), + ) +# --- diff --git a/tests/test_FBCNN.py b/tests/test_FBCNN.py new file mode 100644 index 00000000..f29e5ddd --- /dev/null +++ b/tests/test_FBCNN.py @@ -0,0 +1,22 @@ +from spandrel import ModelLoader +from spandrel.architectures.FBCNN import FBCNN + +from .util import ModelFile, disallowed_props + + +def test_FBCNN_color(snapshot): + file = ModelFile.from_url( + "https://github.com/jiaxi-jiang/FBCNN/releases/download/v1.0/fbcnn_color.pth" + ) + model = ModelLoader().load_from_file(file.path) + assert model == snapshot(exclude=disallowed_props) + assert isinstance(model.model, FBCNN) + + +def test_FBCNN_gray(snapshot): + file = ModelFile.from_url( + "https://github.com/jiaxi-jiang/FBCNN/releases/download/v1.0/fbcnn_gray.pth" + ) + model = ModelLoader().load_from_file(file.path) + assert model == snapshot(exclude=disallowed_props) + assert isinstance(model.model, FBCNN) From a7fc784d38b8d3878faf44188b07825e15da89bc Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 17 Nov 2023 21:01:04 +0100 Subject: [PATCH 2/4] Update readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e618b38a..79a0d2cc 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,10 @@ This has only been tested with the models that are linked here, and any unoffici - [SCUNet](https://github.com/cszn/SCUNet) | [GAN Model](https://github.com/cszn/KAIR/releases/download/v1.0/scunet_color_real_gan.pth) | [PSNR Model](https://github.com/cszn/KAIR/releases/download/v1.0/scunet_color_real_psnr.pth) +#### DeJPEG + +- [FBCNN](https://github.com/jiaxi-jiang/FBCNN) | [Models](https://github.com/jiaxi-jiang/FBCNN/releases/tag/v1.0) + ## Contributing From eebd130ed498ef9c18157ce5f1c86cbc488e040d Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 17 Nov 2023 21:44:13 +0100 Subject: [PATCH 3/4] Add image test --- .../architectures/FBCNN/arch/FBCNN.py | 3 +- tests/__snapshots__/test_ESRGAN.ambr | 105 ------------------ tests/images/inputs/jpeg-15.jpg | Bin 0 -> 6106 bytes tests/images/outputs/jpeg-15/fbcnn_color.png | Bin 0 -> 121484 bytes tests/test_FBCNN.py | 3 +- tests/util.py | 1 + 6 files changed, 5 insertions(+), 107 deletions(-) create mode 100644 tests/images/inputs/jpeg-15.jpg create mode 100644 tests/images/outputs/jpeg-15/fbcnn_color.png diff --git a/src/spandrel/architectures/FBCNN/arch/FBCNN.py b/src/spandrel/architectures/FBCNN/arch/FBCNN.py index 6dd74a02..55ba7573 100644 --- a/src/spandrel/architectures/FBCNN/arch/FBCNN.py +++ b/src/spandrel/architectures/FBCNN/arch/FBCNN.py @@ -585,4 +585,5 @@ def forward(self, x, qf_input=None): x = self.m_tail(x) x = x[..., :h, :w] - return x, qf + # return x, qf + return x diff --git a/tests/__snapshots__/test_ESRGAN.ambr b/tests/__snapshots__/test_ESRGAN.ambr index 2fd4799a..339543e1 100644 --- a/tests/__snapshots__/test_ESRGAN.ambr +++ b/tests/__snapshots__/test_ESRGAN.ambr @@ -14,21 +14,6 @@ ]), ) # --- -# name: test_BSRGAN_2x - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=2, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '23nb', - ]), - ) -# --- # name: test_ESRGAN_community SRModelDescriptor( architecture='ESRGAN', @@ -44,93 +29,3 @@ ]), ) # --- -# name: test_RealESRGAN_x2plus - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=2, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '23nb', - ]), - ) -# --- -# name: test_RealESRGAN_x4plus - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=4, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '23nb', - ]), - ) -# --- -# name: test_RealESRGAN_x4plus_anime_6B - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=4, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '6nb', - ]), - ) -# --- -# name: test_RealESRNet_x4plus - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=4, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '23nb', - ]), - ) -# --- -# name: test_RealSR_DPED - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=4, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '23nb', - ]), - ) -# --- -# name: test_RealSR_JPEG - SRModelDescriptor( - architecture='ESRGAN', - input_channels=3, - output_channels=3, - scale=4, - size=SizeRequirements(minimum=None, multiple_of=None, square=False), - supports_bfloat16=True, - supports_half=True, - tags=list([ - '64nf', - '23nb', - ]), - ) -# --- diff --git a/tests/images/inputs/jpeg-15.jpg b/tests/images/inputs/jpeg-15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fa1ec4ea432e7baedce33f20fe527f3cd737b0b GIT binary patch literal 6106 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 Cs-Nlr literal 0 HcmV?d00001 diff --git a/tests/images/outputs/jpeg-15/fbcnn_color.png b/tests/images/outputs/jpeg-15/fbcnn_color.png new file mode 100644 index 0000000000000000000000000000000000000000..b58afcb7a90052c4f9b1e270f839d084a77c6ce7 GIT binary patch literal 121484 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 Date: Fri, 17 Nov 2023 21:52:10 +0100 Subject: [PATCH 4/4] esrgan tests --- tests/__snapshots__/test_ESRGAN.ambr | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/tests/__snapshots__/test_ESRGAN.ambr b/tests/__snapshots__/test_ESRGAN.ambr index 339543e1..2fd4799a 100644 --- a/tests/__snapshots__/test_ESRGAN.ambr +++ b/tests/__snapshots__/test_ESRGAN.ambr @@ -14,6 +14,21 @@ ]), ) # --- +# name: test_BSRGAN_2x + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=2, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '23nb', + ]), + ) +# --- # name: test_ESRGAN_community SRModelDescriptor( architecture='ESRGAN', @@ -29,3 +44,93 @@ ]), ) # --- +# name: test_RealESRGAN_x2plus + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=2, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '23nb', + ]), + ) +# --- +# name: test_RealESRGAN_x4plus + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=4, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '23nb', + ]), + ) +# --- +# name: test_RealESRGAN_x4plus_anime_6B + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=4, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '6nb', + ]), + ) +# --- +# name: test_RealESRNet_x4plus + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=4, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '23nb', + ]), + ) +# --- +# name: test_RealSR_DPED + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=4, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '23nb', + ]), + ) +# --- +# name: test_RealSR_JPEG + SRModelDescriptor( + architecture='ESRGAN', + input_channels=3, + output_channels=3, + scale=4, + size=SizeRequirements(minimum=None, multiple_of=None, square=False), + supports_bfloat16=True, + supports_half=True, + tags=list([ + '64nf', + '23nb', + ]), + ) +# ---