From a9bc0857695c908e42a04c4fddf8b238c379f28f Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Sat, 13 Jul 2024 19:28:51 +0200 Subject: [PATCH] Add support for SeemoRe --- README.md | 1 + .../spandrel/__helpers/main_registry.py | 2 + .../architectures/SeemoRe/__arch/LICENSE | 201 ++++++++ .../architectures/SeemoRe/__arch/__init__.py | 0 .../SeemoRe/__arch/seemore_arch.py | 460 ++++++++++++++++++ .../architectures/SeemoRe/__init__.py | 171 +++++++ tests/__snapshots__/test_SeemoRe.ambr | 45 ++ tests/images/outputs/16x16/SeemoRe_T_X2.png | Bin 0 -> 2707 bytes tests/images/outputs/16x16/SeemoRe_T_X4.png | Bin 0 -> 8938 bytes tests/images/outputs/32x32/SeemoRe_T_X2.png | Bin 0 -> 8863 bytes tests/images/outputs/32x32/SeemoRe_T_X4.png | Bin 0 -> 29308 bytes tests/images/outputs/64x64/SeemoRe_T_X2.png | Bin 0 -> 24115 bytes tests/images/outputs/64x64/SeemoRe_T_X4.png | Bin 0 -> 74313 bytes tests/test_SeemoRe.py | 105 ++++ 14 files changed, 985 insertions(+) create mode 100644 libs/spandrel/spandrel/architectures/SeemoRe/__arch/LICENSE create mode 100644 libs/spandrel/spandrel/architectures/SeemoRe/__arch/__init__.py create mode 100644 libs/spandrel/spandrel/architectures/SeemoRe/__arch/seemore_arch.py create mode 100644 libs/spandrel/spandrel/architectures/SeemoRe/__init__.py create mode 100644 tests/__snapshots__/test_SeemoRe.ambr create mode 100644 tests/images/outputs/16x16/SeemoRe_T_X2.png create mode 100644 tests/images/outputs/16x16/SeemoRe_T_X4.png create mode 100644 tests/images/outputs/32x32/SeemoRe_T_X2.png create mode 100644 tests/images/outputs/32x32/SeemoRe_T_X4.png create mode 100644 tests/images/outputs/64x64/SeemoRe_T_X2.png create mode 100644 tests/images/outputs/64x64/SeemoRe_T_X4.png create mode 100644 tests/test_SeemoRe.py diff --git a/README.md b/README.md index 26115c59..290d17b7 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ Spandrel currently supports a limited amount of network architectures. If the ar - [AdaCode](https://github.com/kechunl/AdaCode) | [Models](https://github.com/kechunl/AdaCode/releases/tag/v0-pretrain_models) - [DRCT](https://github.com/ming053l/DRCT) - [PLKSR](https://github.com/dslisleedh/PLKSR) and [RealPLKSR](https://github.com/muslll/neosr/blob/master/neosr/archs/realplksr_arch.py) | [Models](https://drive.google.com/drive/u/1/folders/1lIkZ00y9cRQpLU9qmCIB2XtS-2ZoqKq8) +- [SeemoRe](https://github.com/eduardzamfir/seemoredetails) | [Models](https://drive.google.com/drive/folders/15jtvcS4jL_6QqEwaRodEN8FBrqVPrO2u?usp=share_link) #### Face Restoration diff --git a/libs/spandrel/spandrel/__helpers/main_registry.py b/libs/spandrel/spandrel/__helpers/main_registry.py index fccbd8c9..190562df 100644 --- a/libs/spandrel/spandrel/__helpers/main_registry.py +++ b/libs/spandrel/spandrel/__helpers/main_registry.py @@ -33,6 +33,7 @@ RestoreFormer, RetinexFormer, SCUNet, + SeemoRe, SwiftSRGAN, Swin2SR, SwinIR, @@ -84,4 +85,5 @@ ArchSupport.from_architecture(PLKSR.PLKSRArch()), ArchSupport.from_architecture(RetinexFormer.RetinexFormerArch()), ArchSupport.from_architecture(HVICIDNet.HVICIDNetArch()), + ArchSupport.from_architecture(SeemoRe.SeemoReArch()), ) diff --git a/libs/spandrel/spandrel/architectures/SeemoRe/__arch/LICENSE b/libs/spandrel/spandrel/architectures/SeemoRe/__arch/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/libs/spandrel/spandrel/architectures/SeemoRe/__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/libs/spandrel/spandrel/architectures/SeemoRe/__arch/__init__.py b/libs/spandrel/spandrel/architectures/SeemoRe/__arch/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/libs/spandrel/spandrel/architectures/SeemoRe/__arch/seemore_arch.py b/libs/spandrel/spandrel/architectures/SeemoRe/__arch/seemore_arch.py new file mode 100644 index 00000000..0ab5b57e --- /dev/null +++ b/libs/spandrel/spandrel/architectures/SeemoRe/__arch/seemore_arch.py @@ -0,0 +1,460 @@ +from __future__ import annotations + +from typing import Literal + +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops.layers.torch import Rearrange + +from spandrel.util import store_hyperparameters + + +###################### +# Meta Architecture +###################### +@store_hyperparameters() +class SeemoRe(nn.Module): + hyperparameters = {} + + def __init__( + self, + *, + scale: int = 4, + in_chans: int = 3, + num_experts: int = 6, + num_layers: int = 6, + embedding_dim: int = 64, + img_range: float = 1.0, + use_shuffle: bool = True, + global_kernel_size: int = 11, + recursive: int = 2, + lr_space: LRSpace = "linear", + topk: int = 1, + ): + super().__init__() + self.scale = scale + self.num_in_channels = in_chans + self.num_out_channels = in_chans + self.img_range = img_range + + rgb_mean = (0.4488, 0.4371, 0.4040) + self.mean = torch.Tensor(rgb_mean).view(1, 3, 1, 1) + + # -- SHALLOW FEATURES -- + self.conv_1 = nn.Conv2d( + self.num_in_channels, embedding_dim, kernel_size=3, padding=1 + ) + + # -- DEEP FEATURES -- + self.body = nn.ModuleList( + [ + ResGroup( + in_ch=embedding_dim, + num_experts=num_experts, + use_shuffle=use_shuffle, + topk=topk, + lr_space=lr_space, + recursive=recursive, + global_kernel_size=global_kernel_size, + ) + for _ in range(num_layers) + ] + ) + + # -- UPSCALE -- + self.norm = LayerNorm(embedding_dim, data_format="channels_first") + self.conv_2 = nn.Conv2d(embedding_dim, embedding_dim, kernel_size=3, padding=1) + self.upsampler = nn.Sequential( + nn.Conv2d( + embedding_dim, + (scale**2) * self.num_out_channels, + kernel_size=3, + padding=1, + ), + nn.PixelShuffle(scale), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + self.mean = self.mean.type_as(x) + x = (x - self.mean) * self.img_range + + # -- SHALLOW FEATURES -- + x = self.conv_1(x) + res = x + + # -- DEEP FEATURES -- + for layer in self.body: + x = layer(x) + + x = self.norm(x) + + # -- HR IMAGE RECONSTRUCTION -- + x = self.conv_2(x) + res + x = self.upsampler(x) + + x = x / self.img_range + self.mean + return x + + +############################# +# Components +############################# +class ResGroup(nn.Module): + def __init__( + self, + in_ch: int, + num_experts: int, + global_kernel_size: int = 11, + lr_space: LRSpace = "linear", + topk: int = 2, + recursive: int = 2, + use_shuffle: bool = False, + ): + super().__init__() + + self.local_block = RME( + in_ch=in_ch, + num_experts=num_experts, + use_shuffle=use_shuffle, + lr_space=lr_space, + topk=topk, + recursive=recursive, + ) + self.global_block = SME(in_ch=in_ch, kernel_size=global_kernel_size) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.local_block(x) + x = self.global_block(x) + return x + + +############################# +# Global Block +############################# +class SME(nn.Module): + def __init__(self, in_ch: int, kernel_size: int = 11): + super().__init__() + + self.norm_1 = LayerNorm(in_ch, data_format="channels_first") + self.block = StripedConvFormer(in_ch=in_ch, kernel_size=kernel_size) + + self.norm_2 = LayerNorm(in_ch, data_format="channels_first") + self.ffn = GatedFFN(in_ch, mlp_ratio=2, kernel_size=3, act_layer=nn.GELU()) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.block(self.norm_1(x)) + x + x = self.ffn(self.norm_2(x)) + x + return x + + +class StripedConvFormer(nn.Module): + def __init__(self, in_ch: int, kernel_size: int): + super().__init__() + self.in_ch = in_ch + self.kernel_size = kernel_size + self.padding = kernel_size // 2 + + self.proj = nn.Conv2d(in_ch, in_ch, kernel_size=1, padding=0) + self.to_qv = nn.Sequential( + nn.Conv2d(in_ch, in_ch * 2, kernel_size=1, padding=0), + nn.GELU(), + ) + + self.attn = StripedConv2d(in_ch, kernel_size=kernel_size, depthwise=True) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + q, v = self.to_qv(x).chunk(2, dim=1) + q = self.attn(q) + x = self.proj(q * v) + return x + + +############################# +# Local Blocks +############################# +class RME(nn.Module): + def __init__( + self, + in_ch: int, + num_experts: int, + topk: int, + lr_space: LRSpace = "linear", + recursive: int = 2, + use_shuffle: bool = False, + ): + super().__init__() + + self.norm_1 = LayerNorm(in_ch, data_format="channels_first") + self.block = MoEBlock( + in_ch=in_ch, + num_experts=num_experts, + topk=topk, + use_shuffle=use_shuffle, + recursive=recursive, + lr_space=lr_space, # type: ignore + ) + + self.norm_2 = LayerNorm(in_ch, data_format="channels_first") + self.ffn = GatedFFN(in_ch, mlp_ratio=2, kernel_size=3, act_layer=nn.GELU()) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.block(self.norm_1(x)) + x + x = self.ffn(self.norm_2(x)) + x + return x + + +LRSpace = Literal["linear", "exp", "double"] + + +################# +# MoE Layer +################# +class MoEBlock(nn.Module): + def __init__( + self, + in_ch: int, + num_experts: int, + topk: int, + use_shuffle: bool = False, + lr_space: LRSpace = "linear", + recursive: int = 2, + ): + super().__init__() + self.use_shuffle = use_shuffle + self.recursive = recursive + + self.conv_1 = nn.Sequential( + nn.Conv2d(in_ch, in_ch, kernel_size=3, padding=1), + nn.GELU(), + nn.Conv2d(in_ch, 2 * in_ch, kernel_size=1, padding=0), + ) + + self.agg_conv = nn.Sequential( + nn.Conv2d(in_ch, in_ch, kernel_size=4, stride=4, groups=in_ch), nn.GELU() + ) + + self.conv = nn.Sequential( + nn.Conv2d(in_ch, in_ch, kernel_size=3, stride=1, padding=1, groups=in_ch), + nn.Conv2d(in_ch, in_ch, kernel_size=1, padding=0), + ) + + self.conv_2 = nn.Sequential( + StripedConv2d(in_ch, kernel_size=3, depthwise=True), nn.GELU() + ) + + if lr_space == "linear": + grow_func = lambda i: i + 2 # noqa: E731 + elif lr_space == "exp": + grow_func = lambda i: 2 ** (i + 1) # noqa: E731 + elif lr_space == "double": + grow_func = lambda i: 2 * i + 2 # noqa: E731 + else: + raise NotImplementedError(f"lr_space {lr_space} not implemented") + + self.moe_layer = MoELayer( + experts=[ + Expert(in_ch=in_ch, low_dim=grow_func(i)) for i in range(num_experts) + ], # add here multiple of 2 as low_dim + gate=Router(in_ch=in_ch, num_experts=num_experts), + num_expert=topk, + ) + + self.proj = nn.Conv2d(in_ch, in_ch, kernel_size=1, padding=0) + + def calibrate(self, x: torch.Tensor) -> torch.Tensor: + _b, _c, h, w = x.shape + res = x + + for _ in range(self.recursive): + x = self.agg_conv(x) + x = self.conv(x) + x = F.interpolate(x, size=(h, w), mode="bilinear", align_corners=False) + return res + x + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.conv_1(x) + + if self.use_shuffle: + x = channel_shuffle(x, groups=2) + x, k = torch.chunk(x, chunks=2, dim=1) + + x = self.conv_2(x) + k = self.calibrate(k) + + x = self.moe_layer(x, k) + x = self.proj(x) + return x + + +class MoELayer(nn.Module): + def __init__(self, experts: list[nn.Module], gate: nn.Module, num_expert: int = 1): + super().__init__() + assert len(experts) > 0 + self.experts = nn.ModuleList(experts) + self.gate = gate + self.num_expert = num_expert + + def forward(self, inputs: torch.Tensor, k: torch.Tensor): + out = self.gate(inputs) + weights = F.softmax(out, dim=1, dtype=torch.float).to(inputs.dtype) # type: ignore + topk_weights, topk_experts = torch.topk(weights, self.num_expert) + out = inputs.clone() + + if self.training: + exp_weights = torch.zeros_like(weights) + exp_weights.scatter_(1, topk_experts, weights.gather(1, topk_experts)) + for i, expert in enumerate(self.experts): + out += expert(inputs, k) * exp_weights[:, i : i + 1, None, None] + else: + selected_experts = [self.experts[i] for i in topk_experts.squeeze(dim=0)] # type: ignore + for i, expert in enumerate(selected_experts): + out += expert(inputs, k) * topk_weights[:, i : i + 1, None, None] + + return out + + +class Expert(nn.Module): + def __init__( + self, + in_ch: int, + low_dim: int, + ): + super().__init__() + self.conv_1 = nn.Conv2d(in_ch, low_dim, kernel_size=1, padding=0) + self.conv_2 = nn.Conv2d(in_ch, low_dim, kernel_size=1, padding=0) + self.conv_3 = nn.Conv2d(low_dim, in_ch, kernel_size=1, padding=0) + + def forward(self, x: torch.Tensor, k: torch.Tensor) -> torch.Tensor: + x = self.conv_1(x) + x = self.conv_2(k) * x # here no more sigmoid + x = self.conv_3(x) + return x + + +class Router(nn.Module): + def __init__(self, in_ch: int, num_experts: int): + super().__init__() + + self.body = nn.Sequential( + nn.AdaptiveAvgPool2d(1), + Rearrange("b c 1 1 -> b c"), + nn.Linear(in_ch, num_experts, bias=False), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.body(x) + + +################# +# Utilities +################# +class StripedConv2d(nn.Module): + def __init__(self, in_ch: int, kernel_size: int, depthwise: bool = False): + super().__init__() + self.in_ch = in_ch + self.kernel_size = kernel_size + self.padding = kernel_size // 2 + + self.conv = nn.Sequential( + nn.Conv2d( + in_ch, + in_ch, + kernel_size=(1, self.kernel_size), + padding=(0, self.padding), + groups=in_ch if depthwise else 1, + ), + nn.Conv2d( + in_ch, + in_ch, + kernel_size=(self.kernel_size, 1), + padding=(self.padding, 0), + groups=in_ch if depthwise else 1, + ), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.conv(x) + + +def channel_shuffle(x, groups=2): + bat_size, channels, w, h = x.shape + group_c = channels // groups + x = x.view(bat_size, groups, group_c, w, h) + x = torch.transpose(x, 1, 2).contiguous() + x = x.view(bat_size, -1, w, h) + return x + + +class GatedFFN(nn.Module): + def __init__( + self, + in_ch, + mlp_ratio, + kernel_size, + act_layer, + ): + super().__init__() + mlp_ch = in_ch * mlp_ratio + + self.fn_1 = nn.Sequential( + nn.Conv2d(in_ch, mlp_ch, kernel_size=1, padding=0), + act_layer, + ) + self.fn_2 = nn.Sequential( + nn.Conv2d(in_ch, in_ch, kernel_size=1, padding=0), + act_layer, + ) + + self.gate = nn.Conv2d( + mlp_ch // 2, + mlp_ch // 2, + kernel_size=kernel_size, + padding=kernel_size // 2, + groups=mlp_ch // 2, + ) + + def feat_decompose(self, x): + s = x - self.gate(x) + x = x + self.sigma * s + return x + + def forward(self, x: torch.Tensor): + x = self.fn_1(x) + x, gate = torch.chunk(x, 2, dim=1) + + gate = self.gate(gate) + x = x * gate + + x = self.fn_2(x) + return x + + +class LayerNorm(nn.Module): + r"""LayerNorm that supports two data formats: channels_last (default) or channels_first. + The ordering of the dimensions in the inputs. channels_last corresponds to inputs with + shape (batch_size, height, width, channels) while channels_first corresponds to inputs + with shape (batch_size, channels, height, width). + """ + + def __init__(self, normalized_shape, eps=1e-6, data_format="channels_last"): + super().__init__() + self.weight = nn.Parameter(torch.ones(normalized_shape)) # type: ignore + self.bias = nn.Parameter(torch.zeros(normalized_shape)) # type: ignore + self.eps = eps + self.data_format = data_format + if self.data_format not in ["channels_last", "channels_first"]: + raise NotImplementedError + self.normalized_shape = (normalized_shape,) + + def forward(self, x): + if self.data_format == "channels_last": + return F.layer_norm( + x, self.normalized_shape, self.weight, self.bias, self.eps + ) + elif self.data_format == "channels_first": + u = x.mean(1, keepdim=True) + s = (x - u).pow(2).mean(1, keepdim=True) + x = (x - u) / torch.sqrt(s + self.eps) + x = self.weight[:, None, None] * x + self.bias[:, None, None] + return x diff --git a/libs/spandrel/spandrel/architectures/SeemoRe/__init__.py b/libs/spandrel/spandrel/architectures/SeemoRe/__init__.py new file mode 100644 index 00000000..63f01628 --- /dev/null +++ b/libs/spandrel/spandrel/architectures/SeemoRe/__init__.py @@ -0,0 +1,171 @@ +import math + +from typing_extensions import override + +from spandrel.util import KeyCondition, get_seq_len + +from ...__helpers.model_descriptor import ( + Architecture, + ImageModelDescriptor, + SizeRequirements, + StateDict, +) +from .__arch.seemore_arch import LRSpace, SeemoRe + + +def _get_lr_space(state_dict: StateDict) -> LRSpace: + # This is done by detecting the low_dim of the experts and deducing the lr_space + # from it. This can be done, because the low_dim is determined by the lr_space. + # + # The following LR spaces will produce the following low_dim in the first few experts: + # - linear: 2, 3, 4, 5, ... + # - double: 2, 4, 6, 8, ... + # - exp: 2, 4, 8, 16, ... + + # check the 3rd expert first + low_dim_2_key = "body.0.local_block.block.moe_layer.experts.2.conv_1.weight" + if low_dim_2_key in state_dict: + low_dim_2 = state_dict[low_dim_2_key].shape[0] + if low_dim_2 == 4: + return "linear" + elif low_dim_2 == 6: + return "double" + elif low_dim_2 == 8: + return "exp" + else: + raise ValueError(f"Unknown low_dim_2: {low_dim_2}") + + # if there is no 3rd expert, check the 2nd expert + low_dim_1_key = "body.0.local_block.block.moe_layer.experts.1.conv_1.weight" + if low_dim_1_key in state_dict: + low_dim_1 = state_dict[low_dim_1_key].shape[0] + if low_dim_1 == 3: + return "linear" + elif low_dim_1 == 4: + return "double" # or "exp" + else: + raise ValueError(f"Unknown low_dim_1: {low_dim_1}") + + # there's only one expert, so the growth rate doesn't matter + return "linear" + + +class SeemoReArch(Architecture[SeemoRe]): + def __init__(self) -> None: + super().__init__( + id="SeemoRe", + detect=KeyCondition.has_all( + "conv_1.weight", + "conv_1.bias", + "norm.weight", + "norm.bias", + "conv_2.weight", + "conv_2.bias", + "upsampler.0.weight", + "upsampler.0.bias", + "body.0.local_block.norm_1.weight", + "body.0.local_block.norm_1.bias", + "body.0.local_block.block.conv_1.0.weight", + "body.0.local_block.block.conv_1.2.weight", + "body.0.local_block.block.agg_conv.0.weight", + "body.0.local_block.block.conv.0.weight", + "body.0.local_block.block.conv.1.weight", + "body.0.local_block.block.conv_2.0.conv.0.weight", + "body.0.local_block.block.conv_2.0.conv.1.weight", + "body.0.local_block.block.moe_layer.experts.0.conv_1.weight", + "body.0.local_block.block.moe_layer.experts.0.conv_2.weight", + "body.0.local_block.block.moe_layer.experts.0.conv_3.weight", + "body.0.local_block.block.proj.weight", + "body.0.local_block.norm_2.weight", + "body.0.local_block.ffn.gate.weight", + "body.0.global_block.norm_1.weight", + "body.0.global_block.block.proj.weight", + "body.0.global_block.block.attn.conv.0.weight", + "body.0.global_block.ffn.fn_2.0.weight", + "body.0.global_block.ffn.gate.weight", + ), + ) + + @override + def load(self, state_dict: StateDict) -> ImageModelDescriptor[SeemoRe]: + # default values + # scale: int = 4 + # in_chans: int = 3 + # num_experts: int = 6 + # num_layers: int = 6 + # embedding_dim: int = 64 + img_range: float = 1.0 # undetectable + use_shuffle: bool = True # undetectable + # global_kernel_size: int = 11 + recursive: int = 2 # undetectable + lr_space: LRSpace = "linear" + topk: int = 1 # undetectable + + # detect + in_chans = state_dict["conv_1.weight"].shape[1] + embedding_dim = state_dict["conv_1.weight"].shape[0] + num_layers = get_seq_len(state_dict, "body") + + num_experts = get_seq_len( + state_dict, "body.0.local_block.block.moe_layer.experts" + ) + lr_space = _get_lr_space(state_dict) + + scale = math.isqrt(state_dict["upsampler.0.weight"].shape[0] // in_chans) + + global_kernel_size = state_dict[ + "body.0.global_block.block.attn.conv.0.weight" + ].shape[3] + + extra_tags = [] + if num_layers == 6 and embedding_dim == 36: + extra_tags = ["Tiny"] + use_shuffle = True + topk = 1 + recursive = 2 + elif num_layers == 8 and embedding_dim == 48: + extra_tags = ["Big"] + use_shuffle = True + topk = 1 + recursive = 2 + elif num_layers == 16 and embedding_dim == 48: + extra_tags = ["Large"] + use_shuffle = False + topk = 1 + recursive = 1 + + model = SeemoRe( + scale=scale, + in_chans=in_chans, + num_experts=num_experts, + num_layers=num_layers, + embedding_dim=embedding_dim, + img_range=img_range, + use_shuffle=use_shuffle, + global_kernel_size=global_kernel_size, + recursive=recursive, + lr_space=lr_space, + topk=topk, + ) + + return ImageModelDescriptor( + model, + state_dict, + architecture=self, + purpose="Restoration" if scale == 1 else "SR", + tags=[ + *extra_tags, + f"{embedding_dim}dim", + f"{num_experts}ne", + f"{num_layers}nl", + ], + supports_half=False, # TODO: verify + supports_bfloat16=True, + scale=scale, + input_channels=in_chans, + output_channels=in_chans, + size_requirements=SizeRequirements(minimum=16), + ) + + +__all__ = ["SeemoReArch", "SeemoRe"] diff --git a/tests/__snapshots__/test_SeemoRe.ambr b/tests/__snapshots__/test_SeemoRe.ambr new file mode 100644 index 00000000..3838036e --- /dev/null +++ b/tests/__snapshots__/test_SeemoRe.ambr @@ -0,0 +1,45 @@ +# serializer version: 1 +# name: test_SeemoRe_T_X2 + ImageModelDescriptor( + architecture=SeemoReArch( + id='SeemoRe', + name='SeemoRe', + ), + input_channels=3, + output_channels=3, + purpose='SR', + scale=2, + size_requirements=SizeRequirements(minimum=16, multiple_of=1, square=False), + supports_bfloat16=True, + supports_half=False, + tags=list([ + 'Tiny', + '36dim', + '3ne', + '6nl', + ]), + tiling=, + ) +# --- +# name: test_SeemoRe_T_X4 + ImageModelDescriptor( + architecture=SeemoReArch( + id='SeemoRe', + name='SeemoRe', + ), + input_channels=3, + output_channels=3, + purpose='SR', + scale=4, + size_requirements=SizeRequirements(minimum=16, multiple_of=1, square=False), + supports_bfloat16=True, + supports_half=False, + tags=list([ + 'Tiny', + '36dim', + '3ne', + '6nl', + ]), + tiling=, + ) +# --- diff --git a/tests/images/outputs/16x16/SeemoRe_T_X2.png b/tests/images/outputs/16x16/SeemoRe_T_X2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3b4372f0a1f47d39f1e191374ba0766c185cad GIT binary patch literal 2707 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�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 Ef|_J#r2qf` literal 0 HcmV?d00001 diff --git a/tests/images/outputs/32x32/SeemoRe_T_X2.png b/tests/images/outputs/32x32/SeemoRe_T_X2.png new file mode 100644 index 0000000000000000000000000000000000000000..55d47de4953fe81098f9fbb1ca4e0e65da70cc55 GIT binary patch literal 8863 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 literal 0 HcmV?d00001 diff --git a/tests/images/outputs/32x32/SeemoRe_T_X4.png b/tests/images/outputs/32x32/SeemoRe_T_X4.png new file mode 100644 index 0000000000000000000000000000000000000000..909b885441e86d8774afa68ae4c8e4f98a52c262 GIT binary patch literal 29308 zcmXtfcRbZ!{Qq@bToIQPA}+3#O;+~G3?Z_!%g(;m6$)9`&Q=+jH-wB!WMn5H>muXY z7uV+Uy`S&z_vOL+9}m3GIj`62xlWv+zUIvvcW(dyfScM{>PEz8#D8C4Ao07N)o~sG z00n5PtC$3lv~^Patv0jf*~OZ>p>Z_}O&#IE2DBVVWhj&{@-O7JcLL2rlWarsVt$C~ ziw}Gnv3%gj$W>JhiuX^_OTQ=3&_qLw4D`Khy;|FG79H4*lm1SDCrm2)hy}kS9%UI_ z042C9Fu4dCDlj4kPV#0b=B!n$U9MF+S8usIw)9HWkaqOL$T2#m0_@d+-|Jx{@>D=D z4M`U`2C&2m1cHI|yBexo(aKuRAMq2U6vxtTOSDRdB!5e}+DNr1TvYXVs3}i0l~1L) zpm`cy`+_7$ZyJ&%TPUS6{cbW0pbY?n7l4$wJnpg1C!lvA)6&9I34;>U{Hv|%J8~m~ zvYNr#O!Ocv@(33akTRqj3HZlK(j7*5%^Cx^sRHGGA18Jec5!TAkVF`xz>xZ>7JYJr zvZAFqc+$8-lOYUmqv=wS>JJB^ub&rab)nnT#7}3o9l{TJ>#N|GKk4GFv1F;?`#A17bzK|8a!`Dq>ct9o9Bc}rP}Nnye%T069v2A^x|By6M@N?qdJ!89 zqCXLjWBLf{hvjjPgCE6mP)5KKVlgGr@~FgQY0rz9YwL&bCI@Yt(Sz?K#c4x(>(Yg_c!g0j!scLxS3;j9~Ef4Pcj&re;nwj+|s^)(3DevP@5`^Y34H=PILBum);MF6^>kI77mj zEKEvDQC4d51_u&)PYVnKJ=4idEnzZFaC*rX2_B z>!jL924&SQbHAh!-8=D~fxaHU*#GpE9ou+MCn;Re&ciRV6!EWEs-mHkNi>)zs>e#I6WGt?7AVjJ}FEgh5Gk z_~};$?P5Wo*U_S?#A5^jfs~=d-O<8YfiW(2KWWJxYCeQu;14x9 zON^WqqvtP15PLt^(AQlQ?lnT!le3th!Rsqs>`=%v0sq;fCg=M;WU}8E;0`T8ci{pe$*~odn4VDo>~dGfUHl9LZy$;D1*z>J+9_ zts5@dFcoDc4ge4eRgR<_k;VN$o^UvJULc*|;Mb0bU&&(GD^~4p3vY<44zHZJ{8x6} zM_iizx~3I0Y1lhTs6w1$Ke3ERyF0Q-RkB6XNzx*sbcIFmP^=nSOt#76%kb?7J+x z>dyn65{v%&Ik;_ltrFir9p8DBASyA@ATcrdHesaPfx;|Hf3Rvn#E#60bdrLq2&NKL zAB|v-jM%&G<(~wbDKOk-G^)xb z58!6u$bM^I&OicI>w<`>)2T&AU)*YEfsy^Bj(7{z1cDaZM)5i}<&GSV<}{4t8e;1w zLYe$M;&<~=(wp!*MuPQ%>~4<@hTPRm&n`r+<_DHgj@fzj3>u=Pd~>vv5fQLCS~1Q! z#u(U=ty%*3MANa8!a$oqG8(e?$<~KpNt1`zR|;LKFT5y3gkSDi^GI5z^*=ifsa@|e zfk|kmgCHM4$`K=+Di9aS1z3cPCKJaa;`tGS0f2EKlu$4@LN5}KI-W#G-maE6e39)1y@w@pHn=ityR8BLF{Zi(HF8i~w* zbHND><&8yfrA8uGWvxoqXZvH8kz?T`^ zCe-kgaIPvNkzf^Kvjm^eU&V>4CV&UJy!mGn zHvpw3HogwDajBJQW~7rJ&^o_CoE0H+$%K`OAr&eGjMg7&2zalCI#BQ4e%c-_OeBXF_vBZh`C>Vd2*cT4%k#(YTNNeEgF_szjK zED>-okBdX|hUhIZ7&vmzOGWt`qjnybvNKQy^ze5GZ@(Nbr}=;?lix*of?H)J9Q{yC z;kN2-{)u9QpuOLSlewaptP0kk@L{vJvtqAFb+Xc7MT{-srzWd>&{Ut|`B>-72UiEd zJJ!07M9qow>{N<41)-O|m>Bu*PtfhuN2F#~zit&Cj^|doT=f+amM-IdG`M=W`;>V1jr^y1^l95w0iVzMAzA*!NNMn z)5ustbc%`Z{vsv(;MJNvuwh z>|y7=1xjLK`;6>_Ws$Helma=&U@xx=PboH-&^dEpWPW(JVKL&p`a^A`HUOpqQ4Sq_ z`BTpu^M>Og_FjJ0A69lb_`g5D`^ODVH+U6sGcHP-W67UQE^R{(M7%sT+DB(7Rrz7DVj~pQaBvzIMp59Ik}KV?^NSY=C;H968M?( z)1Es6NS5T3Lm9Qe$_=SUxSh|*^yhKGB2(?O)W}sJAmk}qN;Dlkfcv#)Y$qA}CFJ#)1YYBb{K?rUd{w~a;dIpz zIb~;)T)xuvUqr{!gqM8S+R#vAb6XBP=x#hGcXR(nIbK*slVVl3Dpy&3Fdh%Lny?Z*+CMJstVwG{S$fr{3zN>~_IzCcjNb zt2Rv-xIX_^o>o?IRJ+p}@OV@&qo-)x#@5ohmMK55m{A!RnVk|5jk^bgk|~Q*(rZP6 z+5!Qgd(`H7A z-CR>2!31y_?!f`aUGXCN|MHs_+Wpr2Iu;Djn2F?z+QQI-v`jNo#lx!wbNS0;^M;xS zT22Rw#SCw7;Qjm}s!l8$jq3^5+_oCqNw=o_=981TaQs5p=JNbeN!-Tty^zt|`4%)2 zwLY8N49*i02ioAi!4(OmpbWAUrdZ0_c4p;?h{ z>*BxW;j`6S0(ipi+S=y98`|&{$ultE^(ZP=?tBYF(!2?TjUe}*!+i^p2Afuq_!1+O&>z1uG#!1txsYb8- zY}@y?HkP=P^VOmkkM*sB`pFRZjnVd9e=p46ZD%-lk9e<&*m_1S2>mQOd;Zlvsqj%j z;M{RTi3G3I)YQdJCmFF*$Bzbk+LX6r?{x&MOm=W*z;*l8%j);8)rrko{`8}sa`^t! zWdb!3sFfGd=E9?ML)Q-bo<(>u?xI zwF@b#t{MTu<_9W{;*n&)TE5XCk>a|b=|NjRg1^YZ+ey{6WGyt)R4=d zu7HnLH?QJ;R?|WNaeA4xBe*Wjl&DN7bB{7BiFWcB z*QG1`G9mGvoX^U-0)<>|Zg~fMDT?iE#Vx$imH}~?lAPDRg{yac{1W2eL+wlnX}|ez z78*r6VhlP@F?ZN)(`B#oJ-J$y;H8=0pZM5;$;q2*zxaN*ecX`I;Gnsia=UX`PzNN& zNeKm{GSNrV0io@ZB#;pfK5EJZ^#o)(G#jMFiT1^WXmJF!80uumD~0`24{_Q*^7^*a zVup72s9$$?*J+&I@N2yn?_|@DZSsJNoRiR+gS9AzbtNKw-$agth5)6m9t4`cwzfEI%qk zgGAIENW{@fYV`E&Wam1&q+=V5ReDNSW#LyT$!ALvyav~+h1dK0QMO)>|1{z-txnkX zjMcaF6=i(>;RumQi)CzS2#`^w$6ga}M8x;Y#nGHai-vK`qAFWR}DVM%8 zl4qV*h}e%Wyms?~&#$dL_kZc+>f>(r@@4gWziNbe{a9Xh{>!8(%vn-k$6?R)&F_s0 zjPF%TQq|Vfh~PwAH&d`jMvGrZkSk|-oYBTdyHYY>d%d$~oYyont0gx|m;K(#vKrF7Ikv6?2~ zYrH%z;ndx=0Y@>krE*I|fg-qQB47ZJGVs3=BR-+8L`eQ0BvOO@x0@g65`NLqgPJ*T zk+j0mi+L1TS$E`ih8f%Tno;l_f6*$z8q>%^C0}vXwYC$E6U-PK+soVMg+AI63GIyc zYCjVIH`K-vq0UQOm^pQwVBp9P!CtLC&O1)##p(8O?|-p+-IKw64{~#Na@shITc#?* zUgQ#}P?znt!MhEbv!zt}TG6tuvCY4aRnj7qSCHuAe=iPJdR3f>vEuR*4 z@*V~k^93I{`x@Ta+N#v(U}UAt20`cnsYLD^35$Sg0f;053T55^LDYb;A=*WxVw|Ml zR46ne^6gN9nm01eVPW&vwu4$bx$m*7Jg27lYqsaNi;nPS@9t1m{(idsIt#rkl(9C%t8|Q|=-6L99_U}3&U>Hp ze(ql$?j$&OtCIg_9%(ekYmf>M`Zk(F)j88$3n&9L0z&Q8iS(4X$9@rDuo`USBLGMb zAOUW)5vSgw){414t}^kwmP^wNJ9^o~sCY7k33fm+N>56ami1+2F=l0&<>NDSN@Nu? z$=DtEIZBuYQ;QsEBK51|YWMe@o4zc-7bq64jsx>$LIZt$8YN|yVj|1l4+(PXikUy) zejU~R)NPs3HekBD`?Ryw(=tb?vAu2%mrfh9eXH=2YLqy4I`B!-tgVE2b)bsOO_fug ze^;!FaYlfg(ctNuw1}Z(0!}1+1AmP-m|~=f`Cc{iBH?kShB@{59V&j3NDv8383H1? zneu?2o0M7gvq^<{f!xCgu8|ZZ$Qz6t0??3%GLLXR7monII@N(NXg~BUrOKj`UOxO^ zP@uz(hDgit`BpgD_e~#Z-`&HF<(=>{J=Z^*%MK14D~i72J#~QFX(i$%@AX9aD_0sG zIbbLGfws*@Be@ttfx%VJ_4@6eXKwP9ju^6c{2Kjw{KTJh)=ME)8tye=#Np~NE^*?` zYEQ;_cTM59HFGnC%O&=!oxsqudc+NC)jj%Q7G zB6$v(PR=^o&U6dvbF}EdVpj9?8lqIlksRt?JuMGk+5Oo1q%BQF6iB@a8|EXN&9B zrqyqd3-H+;DqaJt>jB&Fqe>gAyOUaO_>P`lLUOV+nhI1e=*Z!V(G`t% z5_G5w@8Ap8Xj%}lPjOKkmB5A8kIglNxa^(gcAQ;O+3eNbD$_R@e*6acIzg;okG{x} zTmq6=WyDgLGiy}2Iv9`N+M1ug5NSDlO?&#!Mah43s$&s7Do)GsD4zdcZtTSe+RhMq z@i#iYMBu>oKvArr?yKRkT&GycpRLBhkF;QDK1D1Y2@o8Sq*Kl}5LcdEo;}TJ@q_`H zk`9fd&%gB+6j9_&LrDSwM??VV)r{&usUu`qFgdPXN1r{^292$Wa*KDdIr!&hd%c+z z(DKT|sbRuZSWqyppiuh9Gq*qrxz(qCD93_2&0xGdz!!QDi+6S)=%9OS*mE|ze`901S(b9bRZ$VcdU#X) zWlA&`UeK{XrgA}G$}Efcp<2Kg^=F5Mb?mO&`QqK><=MuO&^<21`G9Shf9w2oqpxKO zy`FfQqq7kRB&yM3m|c+lGD-3=6GQFTXAzM+nb4CRjlf|zHh(~TNf8WzjPzTV=(o6X z)584&21n3XYs2)_jWpiDk5t**^-RO`&`>H)>x4K(_k~)n!O9)|sZ=L(QHj(pb9yZ; zBFgnuhb+K;>H)MKJ_Hb7F{+H}$!Ev2+8;6GJ4a3JM-8KwB1$gbe;+)m7Ymr$X)2Tn zuEKn7;Ni7QOADdhzM-tNIWmj8+A;{cD)1of&ESRV^_WsiK<`0u z^mv^HjQb>ugR{6U0pr{>Yi(|`D<}da71ufC?GF1Q9yXm}=8`cpGw?3(#h@fNI1Y-kM6 z#lex_VBEcX<&d`ZMfvYsCv)}fUxSF;1wMgl{~Y_w+Cp20C3k0>*T7P5d|ZNKG+=v1 zYT9+~GEokJx5k~F_9@nW`FaC9LPE)5h~#EsNvzcjTX;Gex@KH>kX{J<^5xr%=gGtT zk+roJ!G_Y(T!-b>fRTCl)Q7^$xI!W+`GWmk5RUrteuy5LrriZ5iS*|1de9rXhxY7C zee5-@*y?|>xj8U=jm4c;^1h~DP><;BrzSt$oNEw)ukPZ7&w8ty*xGj7sCbiu?|xSi z6OFHfv5-V_kPzij8BOs|wDp#a*ook#Sv*FChjJ0}-_8^3csCiKMH!(DRQ^pnma=DF zL}hLx8*ut_=Aet}de+x7Xd+$?{jKhc{A5*rjuQIIH>+~fva&J>#(*6R8&K&$6LH)k zeK|8vfg6!fl9b3wyngvpbMIuDnk*8gwqVaMZZ}$p31{^?v+n&l~+F zW48yn!~2AbKo_4!Zb})a03)AC|ZZqoFdb@ZrzuTY2`>r8vG`tfvce*wub>D7vD0B=bEG(SW zZ&7WU>BMOB?fO^TxYFr*pOBCUZn|l7$lS=BX5bkQC6rQ=0tgMuG`pXzSvH@aH%<7< zds(I{67s!}(0Orv@CgTmL}u}4i-9PZqhBz!Y*(;{5h2T;+E0BQ`x6}oQNxf>o%@5o zjb4gpzlMJ2h=nL40gs{3S`4e(cF>Z4o7#Ii>Q=N;CAZkMZN*I*+5x9UXn+%s1 z_>tCpH&4!I^uvBIaq6NjHVRKuRK7MG1xTXi{AYJ`@pxm2wB@v0^_EQ|dP(esw!!0D z3+GoSVSK2G0NetjYeritFX>Hw9&MhK5%@!zW)%c-HQdgwePP4qBF_cAHX+h~FX^6Q zOH1Q4^PvE|AoX}>L0V4X>YZ8p`LI{ZtEqOXT!%F0y9^rU4CHiN#iZ)=!rzcjD>-hD zVXG_I38(j31FkmMLl<`(Ls^IV5c90`D>5ZMS&>mREML`xL{vy1i~q4QJE zguhlCH2xYwgE2myk+!-%U{u60&#P=U$cgp5=~?YLgBwUo$jM2G)rMfVH!>2lIu0|~ z&lW@OCwfqfbQH--*?3Kc?P-{ozBhWHs~rtf9cd;uvrMg)WYc; z_7Xepl9|k|#C#xFvTptU#pB(DrlZ9VTxJS~Pn_yJ&CP=W;?Zp7CL4nDhM zlu9K2NnD&Dq<3nbFHiPgCa=f(qj$ByAP{A$cM>!K$wUW;l+mRB&VeKvZtS5A7Sb)P zxNogZ&Bt?C1^lW=h~3y$;G|Se;%2`@88$1^ZDMn!+Yvqax4})AL?q~Ts_pd%Hnla}`%I!#CB%WSW!v0Cf@)s6trRkBJhLvc2jq>Q~X zrxzlZkG*za3O?+4L@fA|NHOw9U43Uy3K0FI6dKKSUyDpE1RVs8-_?OgIKOj14xz=c zpKp-k5+(FB#>U38f!mu|{5eGX6pU2=XCodVqf7r*>qdmADm@P=h{JLE@84%-<8r|( zf1e2^tdERi?Swx%1-EQ?7piZFuSMiwRV?1A1bnCB)3M z`tf6ZOS(aOB+R#Nj8DCkoXl zJ!=kL9*(P>RR6?m6S6Gl`R(dxw$ZEFq>`tXfrN{L6bfLC{6ti4eofr17Mcw>4Blz= zyq?+o&EE~AhkpN?H!Zy$K*Z9~wfk|+9&*G1IPmeWm2L7Xq&>6ogLveNXp%#pXk(w~ zMQXMhqjK5g-{g)n;t~xZC%XY6N4lMG>^dj{Kt=*B;)sAkDI=i}q%zS7X664PDVv`f zww!4hh%%;GNCqZe3IAUfK)QX& z!wWIn8fG&ccm+>1t;Dd#_dm?_C}A*8)$1~UI0)79@lzwG>Xhr#DX6Zl5fTz4WZ8aO zTNMej3G}U>-H1j${>r0j`tkwZAbhjl;BudLbZF$y-N(OjxsCmbwIOeVl1P=Yyrs^( zWiG+zIm7X0#%+Z&C89 zn)nEYJz7)jl`j#*!_h`XV9YUYt|bt=n{m_`JjH44odf}m*=Z4pdt`(tj1r^*P67?V z-_@9UA(z~2&s>E9y~4&T*{`FLpILADNzH0E)-|>_w$Zn_HSo9%pBE5XO(&%mPTw}Q zVM|YjhemdlaBa2wrVW#P4%>b+Vm;3?`I%K7>Ht96NOvtBl}OTiQM3)NPx>*{PaAuxX|l$4zpAXPLzMiSd17BArFoF+F>i+OHl5 z0LxO+tG#4StE6cee>&ospVZ*qur7J`Y?YDiFWL!PdrP3qEQDL0)lQtG2&@$Wh=h&M zEyi+0ipx@9(I}J3hPC1A(~OVx$1^N8!NX~V-seLHYctNDY;3pOtGpTo;P08(M?>2~ zMkm8xqQZw0aqSyn%f|nK$>DleH+N2rt&?CU!6EwuZJ;)>D@Vaz{M1WT;UwuxhlIX( za5sh)gWrp>x}rdwUa53+)O}4|onBENOlhzPnEJp)`)!3I!=gb_meN}*f{PRslXsX0_cyeWEJJX^%=U)V)?O9OaDu5{G%GSf;SBneutA%-8A%_CN7TnclJS-VssUda2a+Xisq$!ut=aupCw6t5d zmJ=UF*dk^_Jlpnnj{5tBS_7ixiRWb?TrbL~?!AtRcy=5N`l1`AtOgjOrsq$IkahrH z{fSGdngz~q0FBd72dSoT|YRp!)8f&7IMuqBFwDvkLk&H zm_WcTq!zFU+6ALe^26kokFhERto;3*ZHz)Mm0WL>g$LQaeC6-Y6}{QJ8GL`B>Mqfr zm&N>Tc3^qk)Uk~A3LBJL>MFn=yBt|mKQS;u&2xQDmsxqivtIa~cp`3+`~m|g4@UYx zX?NB}x91*SoEcohy*(YmxIkERvQtiW{&rsw(elW97`E0GKSKJgc1%hFm;Z=p_G$Ie zX*ur=@5jaU^Jf!-0E2aWI)IVaSnK034x%Zq2*Q#^*R7v~67Sjd}!J!~toV47< z@5Pkm49y`ak^FL8Ue%ykN8_LCAF~GG9KDGf`(apI`{gAe`%H~DGqaVyS@7H9V^JnP z3N6SZR$*DBQYD*OyfIx85s@+pS5CM+OTWM+1^%=u@+i zX1T^hA~R^u>>xN;7m)xG`F1(R0m4O{biNrfx=)S{N8O?bD}iORBIP<;kFMTy8R$>3 zE16HTfRZH(=iB5@D}QWV|6&syksK%wolR<{unu}cJO~Bvy|P3L<$mdkG65(kk>FoX zxS)&ci_q_~xO*I|vZ3yt&Iby(@a3c(%OrLM^XjJ*M1ywAX~axzSM6`DiwoP{abU;w z`BYm!1%hbX#Z)~M6U%r5F@BOB^-<6`fkB(XDAG}!QdFX!sHv|DLO|-A+yakNs|AG; zo(kBW|FeB;@HLY$lk9EV430Lyz0hLzZ`;3jn$=#OBOdug9#NM7i~*z(Pf=vCZ?t3o zqN<{-f+b4YKEcVn)MS8@(&liH-5V2v4f~l#%ikN0l2{L{=6lcie5}?lDe9}Q;Z@nr zxIw|^?cF0Ox&0&~+uh^qQ41V$V&+!0r^0dAn7fq74C3m~GdDQAI;&goMA48(f{q@h z!o)$e)t`egDV!hq2l2bk*u8lQ6ajU;I)lCJ8u(`<=+HFlkKs0#9Ca>rwn)3>q{n{w zOVj51yvdLJ)yb8@k#qe-&VjIRwE6atT>sEVbMfCKzhbo^M1SLv9zBSX_%8!~Mt{_c zyrW+@)9iGNQaW-OPpf`otP8}uR`b29w&cCKx(+>~V8=(h){Dt1JSFB%K)+K`Nq#|; ziODo^74UL(-2P;A^he@E)FF>0cE)FcnJ3x!4+&8=W!BW^e4h;HwBGoZ4C3{1n|dPO zUTpoSUa;H^ga1HOxY#ygmi+&J3xRmhXVyc9g#M}oI-d8bplnboF=~j+)^_gY5Dmh~=d0C6;PX%#OqkI=-PPFs z{_ga>S>h0{o?=;Eu68ZCTk??zXPwAD=-qLMhSd`TS*)*$wQeA9z62Nh3ga>G-*R9~ zOk%_EEzP8>E}{yNYTMpuTKQFaHgWBln|)pCI0>p_|1lAGKfYx=Zf<&$gZS=R*{~=8 zQJzobB+>eLu=!`m%BK7{1kFTsGkgD^06Ug7A5ZL%YN)A=Kq+EX3}wGI1#OMjy2#BC z*b6GIe(v^%(_OD5r4>HIiRep-KJ|LjX43*m`#_CJl(aBjuGe@;Fv&?9LIPBxpMb!s zIt+PS>lW%GlKy#EEs5ZNONknr7+?o*ek7E4mReIx>2>bKSC*Q|93( z7edP_`pPq)G1E-Qf^INTZ{#IlB&{3KCzqviPI&@{dqIBR-Gn3?3sSYKDRj;XYVmrnAu z82rl5Av|n#a-!i=-294Fb_u8Z!&&z_*2+ni>W$!dXHph*^&F}qf|T6!cO_)!F8 zaXsv(nrZ*~T={Yt+j$X1=z8EnL*0X~d8-+Yru{x~L{pIHb!?$R2wqo{IDL=&LD$6n zT2t;p)@Ri3R1nY0k%E;g=B7dpphY!P1~ST2Wb{Rf`hXlR53l$OuDn|G%+|W&d@}|U zw0zXsq<^`5jfOjfd4#%$+S|8Gv$C^zN#5NxvxWb##2h4*Z)971T2jlj=a211Mk7>- z>p=24!tJqsvVq>6s1NOqYHg*#O{L1cAn6K2cJlAh)-9d^r@@;{GG%!A~*C?dxP6hnH@J;g{>Ro+w&P3Szi`V;h6s8AlMZSr$&W`t%D6 zrrQ-v+~B5h8g`{0wW2&bwwvNVf-~Aoy-p!UI`EQzZNAW0Iu33YPRidZnDLuu5LG9` zbWHseX0F!%SW>#}fQ}aaee)4+Wq+Cf4q89Z$ER^3hbCiS$Zu6c1U}rl;6I*O?VDkd zIKmj!m97Pb#$G@vy}{9xM~~c`1B843;!cK)#Fu-_6h~wqVk1Yv4bsvVXnmcM=KvCV zKN^}x;&*?s4K>ImXIIIe{Sz`9cDA8&Td#4J_B!nNo88g;tWZSlHGe~+UuoY|rBCP7 zkVLcUh^kMGpV*nW(^%UOC2(CL+OXOzIO=M1;J}NpHp>>=vsz|Q@Xon}`MX5{yUdr9 zy$@=mh+PrH@^Ms}W#gaT-Z~x0Od`V(9{jsOgWRsu6?vbZ-;CWG6G5C+t`^O;B1TWU zzfl!9>O6`x5=?^u{DeW8KSM;$UmS8A%I!3iys-`49BtctDw61AWo$c~OsU?X?^tk9g@*hM|7&8V85qm)pQ#7st~K(wMEG@5eDg3f7hc3& z^u713u?Y|<%S!kCO~q}}(+zm11=c7gqiJZ@?(~#O3yJd347~z z+W6?M(~;yX)3vo6Ng`(JLSKJ07)SBr^@+^{{wuz~F@Y}SyT#{#*=iZKph7u5Ws(iM z+p0&V)?k6&uXX3Wi_c$ExNf|@fBf|BY$bkTP3B#H3g$pTmnD$(9%d?jH+eID!pM|A z`a^@%&+au~pSqQ^54+0e0+Tm45|krFUj#nP(AmG$G%t_&j1m?K;XJy(vJ&Lr8L%nT zaY7+Y==T^dpI+-$|6ur_mxdzBG{o1*iF*)VW^-O_Ml`u>y_cpz?FY2i0R)zXaBTib zUhoWmkL#G6OE)AUI7<$D58zOZU1xJSxqw-u|8lUk$1>%3SvVXgJ>~%d7*xu?ks?YM)Je9@aK;HN%sz5bz^4Ysn zI&2zDs@vS9AfUg;AaqV6nZfBH6V2N&OTNFN6_b@2t{bCDcm(F6;6xZDIF-Bnqx(%G zL?fkQv~DPb!W$HEUl{`ZPvxVpfZWm_9bt9|A+(?9PvF0kF{Uxlxg`YFjC(r0+z!#;Ig{LpdvLb|p+J#%a1@2jPn{y0^!jk1``DVl2G zrkHsl%ovq>&s?Dg zS#|_$E)NhFQ(kQH*f~Kn2fa)uoBUdnBhJacs(Fr+I;aLQNmHT?A`*O1!dRxAT2j+6 zt^GDiQ1{)cYORUTl-sN`kB$Gt1pC!@ie6`DqL_-_g;I05b<5%|??ghcC{h6=NRy}U z@^i9pM!pbbmBIRC{kKHM>RN6IgY^Ne87^_b27qq0KWYlfu@NTsslgdT;*xurhEeTJ zgsKOudK4S&6|ydE@UfAdvd4b};8Z(3nBcOBNhY3@;*uH{7M9La=j!%J!KSL6qu<{q z0y{iOAx*g_~j1T%fYrm+7lUYN4$U_>FrCo2TYz;+00%Ngoq zl4JF&|8`yKhHCjIU6@gPM$CvbEsXkL>+*i>*NV~3H~NPE!YS;OXA#zq<#?Q(+hPVK zfH3sQh`<#>3jiv*L4O13?BmKK$Pn}6LkPs6W6_?OqgqUO)FPKf*x+dfKwDYigUv)# zL<9u#z$P(4US+6q#024zK(P zVmNSMzo?hCy>9$sC2VpZzKe%FIlA!_Wpn#l2?qFQ#~>~y`&7{EJnBQ>NF{cI(Mm9# z&W+n3Ex_%^YI6lWl(Hg*`1vjpK&JDd>{T&^y5yeXo=%V^ZQ88zO-a+)S0(ztwcg4J z$h(F6XrgNfS6|TdIyOJ^-D`C3U`vb?6$__$+Qi~sDOp?OAr3VDSiZ?1TeXC zZ=^m;xvJC#5gNP{0@l})@Y@7oeAP zQ$d-3^8Q4vYtDs@K!33L9LwFoedp!vaec()8%9=nkA>|a$FYmkJ<^!=E0Mr3f?Fk( zfJFVQZc3t#&%%MKqJ;0nur#;vZ01b97Cv$?ACB=hYZmFfDrc;MRDW@%V7y{AtRTR}l6ps_ga+ zJ2qNU7Fn-Jv&qzvHLs4-=FyN5iOu1PT9uBe3%~fLV@T-Bqu;RI zua+1raUJMsjrbTM?5S?Ult0@?gDCm(In78D3?4W)jaJ;8nOA9=!ogk&oG8TLM>-Za z7vR$xj0Ja@A$+9U7dXUjJ;G<+vhTG-p#CGzU%O2)N9QQ?zEB39Ezqz2)*9iik81I= zigc>$QJsu zBx*m5A;?kntp6UYIi2zfJ2@OTP`N|JL|d=owMPtE?L3~cdP==L=AbD@@Jw~8_^R^Z z&kLCs^)}frCKZoUW@|$5>@;~i5=w;5rQ>SRR9J=X5|Y+RvR!Y~o3kFz5#;%(=Qsd&`9 z!dxpRY=ia(dDxGNS79!b0xP7nj&`qn0)m$)7S84@7fNYar=_ImG6ox;u>XCbaMU+7 ziSSwfRWcejX^FYUFj<+Ke|*t2k+__W+~1!`%AZxdXu1yV(XF}bm6Rww@QO8%VjmM0 zqPSPEp!6l=WTxu?%ItplFk7?yS^3mmoj)wAwXXZ4SKAV1w!UFXfyT2~im31>FlgAW zPnrHbz|#m-dn%HiA1Q#?7zikD>XAd0tm5>>%{9_%s0m zVz{A9^7)?&7!qNY3ZUdGg8cgYXKUEiAwh*Bq01a-uhiA*6jmobR42;OD)P86B%2Chx{1Y<+q@g&%G7O<550Kd%4cWbR8kV|l37 zaEg~pUSXHx4pB?$wM@6)HJaG&92qZ@D_XD97WhxN74B6HN>4PUy*8*Xo-LvH(0Ys$ zw>$lay*fT=zrq=(Ih0G*-W-*|ZEx9LSDXbq{Bk||=P5my7}r}dtn-0ML+ag%+x4Z$ zlugKw+Kl1-9XxZ`bB~8i(9sDwY}*ta0Hk&QiV;S__g%}Y;eFk9Om zJyNyS^uHzXsyO-IGJ5hEgT==L78}4o)*dv>V$vMn{@F-BC`j5zYA~ru{S|Ur~pWOlv z>2ivIZsO){{_NFdDe*qeTcwO<7%gg}wb{SQnWDrB*AJ>Xgm%1FZq7#Q~z z!^Befe*2glULco+PoNSZ(d@R+Ubbs(_^|o(Hees}wC6gWiQ}ot{i0}a*Y`&~t~FBr z;bH!(V~hm^Okjuqb&d5ageVaT5bRKl0_K8bB@wHt4;sQQk`dm0ZZ!nLMG|}RfJPZH z()`3kDPWMIfbcb*_TIykLkbM`3CI1X@8G+oJf+-&3;su2h`o~0{0;|8u8OxRosc2& z)Z^p=c@DV%h1Hu=`c|i(Jy|JUQoo_Pp$HD}%2hny@tWVe%o@oUG!8itMDnIyUiMiX z&N0e&h|9LmS!YFZvSdOS^v)dE3EhSB$NS%=m@6equ>l$rwZj1+POIt#G$v?X`9*Cq za2M$fdamwKzE~k0NCc1pxu@@zNQ|WRdwMPY?@S_Nj0bA~xn7F9dw70+$jA2R>Hak* zCD~IIzRy61?%22+PNUBq>e1~jmjes%{@I0aYjLgfotp1hMcp(L6$et?p;5htNlUYi zrMDf|O*lRGTsr{MoxutAFx)XIh5q$GmZCL7N9ZL?A#c!a)xOy(@@AU919!O(S5PsEjPy`iy zDevx4Q~6(0p?&f+flpbU^#e2=`0G0p2c=L}Wrl?sUwwVrXxIqKHfRZMGB#JDz2N3a zP1Te7_lrq|V1d=;Vxn}|_N0LU4r5*MwCd?yA%^(MT(rXp>(w|huL94y-W-Tat4`D} zxUgrq9iNie^?9u74^`pC3ggvb^7Z?u-Nuc5*Jkl~rb5A|&K0Xy-b^Dyiu(tH?$wH{ zG{5E59G}FlIhQuKpAGOTc-Z@&(Om@UFx2#H%*W8`HedZMBb;OUW*!__>I)0LTdMYHHG%*mftE5_MLkT&|9&Fs1Gc7lS!hX>nNx65!6#ArGh7y_UqYwPP?@hh>|I;OzLqLL^?+CTt)mFL!(o}M)q^2U7o zwkEe})!d&bKhU`0ez-Z+p~ufBvHu7CTYD^ z!s}7-!egPiv*d4!URN7i9saA5jfSi&D7iPEw8cBTxBsRgmOkbx5$}fmJP)453N!qI zTk>sVn(!5j?Uxs}m)pxHJMV>_R;h99rpE|L#NuI1Z-JD0wa+~5+ooUM(MR@KdfLH* zzNN9&dVZ>+Z>i8k-W^s~zbWyA0=2oJ<+Vs=_?=V-!tmd!lmkqhLS0*)37$}>;S~P- z#~Xd)L9dU57p!c3;Wzk*`h@b+eQ%KR=SYx=M)zOC8dkTa|H}gOsM~$1ZEN!)io1vn z35jvzt;%~@J=La_O0n@JJ`JXl>1#m};Nc6*#fKBbqBCV=Tz2-H1a-pgeqRv=hXkfv z>~4V^F1w&=;h>gQes_#fu%<=`lBS?Tu#@rgb# zURzp6>c$3i;F*?3iAjaNS%b~)dDs5L;jE_g)yrzUTA|DGgif_lm1Zj@ zB5a31vZ8ksPXORXKFWw9=EC>yZuDF||4b~Y*Laaq;>DXUd!D`yLb|t&Qcok0^m@>$6QTz=HF4H_TD73SpVzTN+_aIg1=4Fd9Jsc{ES{B!dgVY|Mz zr%?;nT$X&MIgce(8Zdgxe_N?545L+wo~Js)bMj?^SH5=|dj|baO=lg|)c^nSF@}tR zG8zS8NJ=9}#~2}@gfLQC=}?dwHA;~Zk#0l<28c9BDJfDSB{90BMvvxqKi_kHoc+T& zI|uH)@B4n$^Z9sh5G)VY9ta8vJG58N{woy}t~JM3q&IZdjMZH(zK)^Po^g2NyK!-e zX{>6g^clOvvtO+Rlyp9~D@b;5W)Ors;6DgpuJBkUX~`ju38{5#u^i5>#D8fOlgnP~#|yF5bd$1T)nuEch2G)02l`N#C!1td$&l{}g)o7v-uS ziP{y%A)t>tm{lBe9Q?OeYTbIPUOt;&^2)u4O>NoylZ7c#11Al3IQT(*B89+RmW#`eZyitrDKS-_cB&hCf&%PW zhvni~WgF@PUAcp;#hdJ~0qH)x+GYZ0e{G`e>6 z(Eshn!4zD|E~IuJ@srFqFnZK*r2@`lU6@`&Co?D4zTlP*xkFaaiXGcNv}ZV|(Kp9y zTjp>j;(D8WFY;9=y1(_L-=mcfBsKeDym{Db%K7k{UKj!^+UrGV_8JHfu~k*gx1~bz zlY}g+>0^8+p6P~M?&o>|DdXwxmhbtIw$(nK5ZG?ir7L%lgsGuXd&l3jzR>pP&n{ia z-n_3x@JV^Lbi?19fRl)>JW@0(EBjY|>iM5xx$MjH+7sy>*5VHl80yyurV^v%ybQ#^ zFU`j~uOeUS>5zN<%>C-M_eZ=gxqxHgdiCCn{c^XJO{F`5R3zE4%a7n>*{*0KKU*RGwmU4IwZYOcQEBq8|fb+Zktx=qzk zQHo2K$>GfEN&Xpiw*TA+paCvO_Wbwv&8NN-LG9wGHf!Q#_Us9fU>Q6S@3ii{2aQ}OqX!FE)pkecQ zQ*L!ly(DB&Lb74G259&lKq>SzV@10=HD|Z9w`GTko#bn6<&bj?Cfp{cvB*R)Mayf- zerl^9Q0c~99mR!|>&6bNN1}#4-OS=lmm@C%>j94K`6yW{J_cpLUEOJ0F?AaVR)TRQ z%P12l8l=V%TN<%Wa>(N1qNx3)bvq-q<$w&B^Z_a+Q^kemaogg0ms!AQx6#Ei>$QK= zA^TZ-;{H1Nz3ZA+VFQ1u0jGL%zg?R_N6BtFvG|j7pR0mzNj9I8ZhloNCi*U$qlC{u z>V}-luE|9}Oj&E={&DtQOpRyhz>@QbpB{x?GORP|kD*JyS#$bl&74mN!(zv69VotrsEi9rx00L63{y$uYI&n2qzHYh}r&$gPSC?lu z2y$D7tDOSxCA|Gt_Nlb^NI3Eq6q-^0&~ta4!6c%7`tN_8I95B&f}z~8_8V!WdFpI&O2$_@r;$ajSg2$v550G7`nX_F>(dlAb;qiB^l?L`Z|hUcum8 z*~8LrD1=3XZqB;_`OrTRMSCZwAZg~CT`y=&%sobY2pLy@j4$WaL;@#{vVn0d@9XwW zjy&0NPDn%q4wcUjQh-RL*mnL!s{WC8AvSK+EA{=6ABc63iT&*9Ym*~igCk$*-WFe> zd#!WH_eww#!Z@Rn#=@VE)0;#%$LqebN$RK|%4m@J?S#c>f*_CJuk>c!JgCkTipVK| zHB5#CIx(y?sB}5*cU&)A+%ACiehG|w8Z%k8J8#9#3pMWUN67lS_}9kiA~3mgBDg3JL}3*Z{K4ICb!%b_iqkf{KHdk%K5!=K$gE_ zaEaYl^cwJ|j?`0?2BSNnfI|$(2_tR$qx2k0xo>8GY%3+U4l!j%pN)NYMHDW7rM9e9 z2L+h9Wa5nqhn-YR_){r6|KwQgU+rG7E1sl^2#jSk>MGpVG)P@GB%2!%sD&o$0k;%I z5{aeP4~+&x^=avrfJVlaLZG=P+dglM9_3#daQW&O}1(NVUE z)l+8XTVK4NN`KUuT%UMxd~6ha_hNhDdzKin{mq+=%dPmSfB|~2b~#dbA#b4MI_&V& zulPw%r9|)JLpI1=`RA7+U>K~^jE*-%odTJF=1pfo1i5Skg)YM|?=kUSh zS+InX!q5g)HYR$hp=6A|TUYoA=AXFjYUU!HurHUIV+UUzh$0`@`@_s5?z9QP(2>Tm z5Xq=8q-q>PB$Yw#D&~AmfA?SJm!Lxi5ls9_u)kBo@IRjPa2!oav>KF1nDRfvQ$IP1 zon`&JJ!k6h=K6>n4J{%r8qSZCl z3!D?V(N_2X({eL@&`|f`L%fgcqR6(~#9Np$JuT1crHF8hnhBp&CY=rQXU)XbVq;wp zm#z|#f{Wo!ml+E)=ge7fo%mV}S|KA&Mh4(IQ7%=4P`+rO zhcViALCqSnXOO$4+QrkgFX%P%1~AAK!(bHgpt%rEE_Hgn$fyWqYc-(HhR~>-9%hsC z4D<>*@h)%Jiz{!gRQj2sE8HNzL3Jwe*^vL5aze+y;=(Pl4nouVr0&%T6LpT)zH+O$9#k-Y~J;tfMT9DYO&Y4kBFcBPQiF?5@EaBt-Sr5rDch^B_h?x|6 zy=(&IDZS=9mAUQ(RAz7h8x;*zPa5#IdunIL32WngKq#Vb^Kn6_H=PRh@bGLOExbE7&yYtB zY@m5SAi{+Kw(mCV2eZ2q#cvXaq*-oM*;H27d!GNLl_YnFI686Inl%0qq^)h$;_59N%$nrtTNL9WF{v^#r?6-yqeufy|+5LiDb)oI+WzVvnHeWsuY-*@&d9lkq2-RBF zDof#dg9B^PfY#?n-`_#y&ojnKAL>EXI+!_?9piqRxIC1OqI2p0^X7f{Ko`r*&bsmW z(Z1K=hD%w0+`t<<-Z&etCd(3ZINzkA)b%+9so;Ykso)|p#TH_ULM3x z!UqBaqsK^a4h#nhg;h4`i^=&&zRi_>d6mzZt+Vj>FtgcBG31hSFu1L_v6Z+e*K)iV z&@vU*IQor|6IU1UTUs}P9-ScR8vlqvds#X@C`X2@;}%Oq==`wN%lp=6&6jzz|A?|P zGMrq2<-<2`U~rbr|4kV<>1k;7&>foVBQ=teU>8E;)zOv#UHGMFZz7j>xU`F;i)oJ1 z#dvOOHNcq2iC$!02h8*QO+=hlG&GKxMjtsEfWHIOZ2I(X^2NZvM0>neQ<)eW%i_i@ z4*$4(@h4*_(H7V;a`ASf>j1nI%|^WzijrbRIC_tke`9qsI|J%oo3Z-?ub2-l6`G6_ zW&#eiV3EhVTtJIzEt;4KvcRXk5;k+4A&@AM;B^e|l{FgZJ{+J}k1*>&y7Y z(KiKjgpKue@{8c|sU!dGpf5N*EHj511enVt+OxGxIXS#IZ6*X=G>KDJn_tKe-dk;K zRxUHcNePU%{M*XCj1eIyZH?Hlt~xQkBDsrOZ#G8L-b1O-=CujX!^CJKZLCRM;+Wqo zKI{a#gn*!?Y3~W_r*Hi46-}#BXK%Ng&rAwMWf+o1G{A%M+(?=P9K;E7ho?xgtI&Q`Hv8z;!mdqu zHrI=ckI!55piZhy#Au;NTRZ!+nc{}q11|ELt4@i9n)0#DvNT{rK0^|2n>cTO9Zsjj z(lXbki!G@qXQ#8KrtXw78m}%c5swztt7@y8&L>OCTQ_FNb>#fM@mqWuo19+0^I<@s zmQOwDW0cq(8#pANBkncTs|t>>lvM4=xs37Vy@}K-SZGcE_OHFu+e(+3#qh1^s;bGN zw{dUBwdOGnJ2^_hSKaO>PfdggGp&V&cUkPRA7ng*K(X{3NDzdcQ|rH(7?-*{2*t-J zamU8drC+PDs={xf{=PC?wcWk3=37&BwLRr%9z3yuMpk5iPLBhLMMRpr*2vti3mQLN z-+LDj@`q4r|4(n9bq5Q?AM|}~@l~YU;215DW?fthEftxC^@nMgFzegqN* z8|$(tBv&u~O?x-sb=AIHFITK;nY?vyD$07})vl<~TF27yc{UCl+N>FHM?Y?G z1;1au*^DzzfZ-PuBGorFm`!N9(ph*Kh+k&6sARK^n>IT=npTz}V<}RMDXEMpDQZvM z?Q17ktCU3*&`K@U!GK&bc*-p|W4899T6{1HM#j0|nfkGqxZaFXhEb8|RYW49gkXt& z&`!Yn;D;_pXeU1|vlNCTcJB5p^2W0&{#maE-b`p7L}85q#+PLN{WY>#t45}3btD|1 zizuBRwLWdXe~Te1zb#<$JNAIHf&43RPHk0wucG^{NU1QZfZD+f@vL3&k!sRMW4~3j zf*Q)Do$o{1^vPm(Ji2YplFBM`BNx2ZK~p8Zo&Zx&MlG6bx1cZ#|;GVsm3mFM3cYk zh(hIqG*Bcs@XmS@alnA;r+t;AjFFQ6!Ou4ZuK|S%lU+D`U1&ZFm`>yL^pLk`+)48M z<0m_&{oe*|ex1FX8VtF&E&K=6NnBM}f5S9;GAy@!x*I}I>fkEM z%(eSf7YDbT&o(}!zt$BWMbVK_KPz|i{h~ai9SyYOGAA>eeM%OyZk&dTLfb^s(lgVU zOM*@WuJ#6er|WAc*m84rehX?A!7Fe%TzL@3Sc3$rQq9Hs@r{z+K_xiJkq&d%|J zmy(N-oDYl`-;#Ge_vwz`E$-QMCZoo5vp20$&+g6?yY0&n35Up(v-;ek{l6cgX(AKb zXk7K>qw-MsdPV%|Q8Z`}E}AAkZMs49Yv_-*Ar;M5mWUK(J|2*&#f`&gnnS(cKf|G5 z!@~hPPxnExwtV)&i?&Znfb+HGWY8*q zgAt~maiScOm+>BC*i6Jh%Aj|ZnWM#aCi2g=Gjns#rpkj)zF%G_HSa5?p6S#X3#%X6 z$9+FudJ1PyJn3omTa}xwo7e`r_L+A~Ga_x$qZA&hZkN= zzPG|GGpy!%ecPAz-#p%pe4njTZd$JU=wY(f=vR2$+tjzLR+z1gnVn@|)G#7Gm^D#b zHg$U~%6L^FZ^j?ZY^Mx@Ve=MNp;*1na1GlS9B?c05EOc$d{h=Wg4xm;9YH|Hm6S$> z1`Fiowh>$!(FrKAF~}Xk6oKLWfFm|(->Cr$rOUVFA=_ir9J8Y8BmUF?d6$5$=!|!h zd*0>$mfx74_wDUT5j>mu! zK_PJMY0k5D8*-FgJ1U<(vevTvwf@1xVDQP9xsum-5cL6oFzpQ!HKfUhgqqj^cAXq9 zz-Vt!9yC0<$~rxM``a=duQ^LeN#+Kf!TbIF{ZFWL%k}<+JSD&lV|<=F80-@aNTPJ{ zpI37$x0_6@xz%=sTNodC7i3O?6=icnczXKAvj0KpZHpKy6{$-`|K#!Czkts4k}hYb zej5ON2!z;TKopc(Xmac!h!U2|o1TA_+d=PhkJk|JBxQ59vBD*ean zu5boeCm(;pLh}Z3vMjE~vM~AJ8}i0eKjsCSQltX?&i9VK?Vj|lJeu|{6N8Q~g2LtH zU%op?CXnAGQ)ZT<<$2*M#H1_ScEaLbza7^afUc8b2I#f}*52N?ZM8a!OrjSgibtL4 z78g4`#fUJ(qeN-VCo5=$;;~8ff*}HR^Eg-k_VGUp76Ac3i1ps!{U>KPPy2iKq#M5N zj?D&~xzz<@e9mgq-KJh?x|X5|RU@V>$Ygq0Gp2~v5PhDtpp0YYFeKqqMuTAdcX4`= znCtC%Cj1BA$^fR6M10x(G1q)3lI&$i09qFr0k;b;GAT~hLbIr@4{f=Yma!7*jH~Ji zl^xJ*v-fb$IlCE*i5kSiY}-c(u{?% zAZ$OqcNmcRU+bEAxqoJPaK2hSiMM;81A15)YY6RRR(TVa_gIJ_x>FQNDv;+#zRJ3m zpYimjCg;)b`F8CXf%kO%>Hq$DRxETr)G^fg;@Skz5RW$tl^Th$RXQ@yG38Qym3`0r zGdkec*IKSo;@(;gGItcZ^gu za3}^G%nuz&M0EVk(-TbLkF;$t#J!IE(>3{r)b~pCW~qS}Nt1D^Tw!!BCtJKaRb++( zEGl2h|VY!ngnQCMWBkgK#A%Rii3^#vB_VL$alUWmA_7;k(1@_j4&yl+)TZ? zm44~hyLGlSFc(ELQ=i5 zd(+d!iE^CcoOw|%Zt4pRb*OR{nK0ZRQ#VkHdsbszX}hJBG5YdZ&6uNIfpRAgzvjA- zt@EhZhc!LJ1v0pOeV?ef!$4ow*@)xIt9*Tu;Er?|n!> z1&dtcRK5iQh>Oqf`g`i4O&QdNwqAb2OU{`}i2wOuDtZl+s4W}{`2oM9(pSma<>OMp zFE>-)@pXh<>tZWquJAtvd9KAp$Nea=I}`P2U61%?X+C0gu;`C3CF;B%G|4O z<5ov5BK6Sks1orP3r~lH=F$3$p&a%nJ3saM3QR%ioqeeK!;~q4eBkOz9Lrc-x!a8! z64%Hdkh^s2JhJlcL|<*#v0JpdxBt3tm;I}kUr1OOvnLpX)%e!S4OR!!SE%YyV>F7W z5fqLTNKVX?1W5go=NqanI6$6N7suLP)61ErLp=H_NCbgs+5bBuAWWin-`>md>C0tY z!^FP=U-rkN_jp}%NX%nWWRE#Jpu?R;~2SeKUKGt^|GQ7YoN79UVJ6 zzfX5}fBcwt*Do^@m-WY-mZi2{7=!@OznVze(1%^8`(_dhp?7@a-@p68rlB zI7}O)aZvwT1&XDFXu#>W7jqIR5&bC9#A}IppfJSJww5QkHKR*h{_dlxuCY=X3~^qi z?ouVdMzVx@Tj9!d@aj-IlT;=5eC>7c&fy@*vncG6X4rG31?4D35~!F#t@CP2q0*{9 zlec-5)#-U5PdvVCDeAE5D5vUbdVj^f5NNQ>ZT1zL3Gv?SbM{y0f{L1n+C4^lj5)s8 z>sTtb>mDng-Ko^JI?otyS>Fsg)5(#?TW+SMHT|mm?KoE1bYrz|WaOU#T}hWweA&&a zgm$;(U!guy%_omiLzW8InN9C2wm2q?IGjt<1PLKU5KCUVGDfGe?d${`Qtn%yskH zt%(r#8Rj(L?mw74I~v)Q%a^183!h6b%rnC|qhX*rLcoeh>+u3^FSF&Of2!q*x-8PP z%XRSbLbq}5ydhnj+~asYoX=Y>yuw+8V+-i8@Z<9@`sMuYd zyuI4tPJIF0mqkssW{l#Duw3{Xq#kGdE;9NL%7u>Mq8K7LC$y-+&VCE&&% zbl15HKRH~no>&*m^LYqYvnL>oso8^m@%P<^HTf`YD3lr{ z&kBb0C9sCMO`jw&HJ?{LGOuMnUSKM}`s1zUz%#bzCg*e2CZ1a%J$w3#sZ~DcbYxDC zvwXG2jLlBsS}H1qqA2!nGZWW3NB?G{ z^5u$&pEpr<&mFgL?*erD&u7qt)1RXuk`ki#T3$45zu1Y*P0^{rmD{aVj;?(Sv8;3ZPZNiDxNwh9UmQv z`9&S}PxhMU{Lpj`f;$j2}#6P3;*IDT`rZzw?#=0nu8u!vHJ3-g|b| zl2~jZSC^|OGnA2=nUg)ZuU;jiSMJcif-Ib}kZWwG67 zjR8IJ&qwno{=H)tn;>0q)(%27cLxLpM?F9)z)3W*jvO7QYrpQZNV={2Ox4ZqUGywI zz`6U5%P>7T>Z*HXa`iL!vL~Mq9C;w`fWsv{@$>7@rDu-ak*8Fn(6t$!v1&S~>`nMK z9<)9=72@Z`PZ<%|JD@P=w<3~)AE*N`F9*eM%!GPv8C9Z8-R(b;CH$~uw2i`lkoGzq z>05$W6D}`&Tes>$1m4OAFU{!G{n}U0S!E>sE|fV&QhzRF+;kPvv!Ed>V&WQbQ#pBe-8O@)}1DONx09!M5YC&&bL z&$HtzMa7$gr@mNSrIz2i&2qJAb=6PpaSR)ZzNuEPeOI%sog?^G7xSm+r)V0DsUxMc zL~W~^cIT4-0Vz9NDoL%kr+>=F;y8=aoYITD^{~u$$bHbjfHXrp30?(fwE?;+es15w z&L8vdDk?_tohOYqZf9hAcudwVlC_?GFzHpgtZ*5a-nYQ|>v7A(9@kaV0FmQJ2YUR%tMZ_WnSgEFxLvbpZ>7l~ z%OQrd!*NJmU7ffovysJ1cyGKvJZxuIBISXXzbF5scRy6!&e2hN>148|iiOXDKXivA< zii^6LgI9%$%RT$z;s`-i$`{soGJjo-lFLo&Fh1@_dv#5Vldb1FYrn3uNO|xJ@RsrQ z`ZPW&n6|igEz$4JJJnne91KS>R+{~EuIc*zeJ;;@eSF)A4k zi}ZF;Cuv%YE}7Z4y5f^m&#fkG>WtqtQk&R%iKN&T27P>|j`Ryl=(vDDt)XJ}H3_4y z9vH{Q#}7PwgbyHE6!P#I#m8Oz>J-6$3m`Blo}Fa29LQL649-Q!HEH=lq8>zxT_eJ< zawMCw1b>mBP63v<(?hG1U)MvfM%^7qIAT5izPuz`HTd^Mjv7cu&_0w$5T5c%X8S^i zSfAzAkZzXX#Y)3Z?v0LAR1t#gH*f#q{L*roA=SLw-&a}I=*uJ4g>i8oD)|$8HyJ^u zbuSSS#R~?GP#}TovG)NOXG(h;N5>)=(dQV?^}h6f=#uW7(}Tk0xYOC7dCK>%TeOSb z1-yF<=GIGy$c^;th&7~6=+rZ!m^(h&7Y^!go%t3tzN)nUuRM6yt2k|Nuij>OtlzwD z)!z-{j9Kq9oY;!mwrnUgOfHPqEw!jS0xU;Bci~TJd-^leLP7V&t$6CoLF%B*43|Ci z7N2$uxzLiDsgGGU^P_E0UmrJ!9+Ke43cz#oAFSE2YvjLPS4mklW$gX1=3{0W3y2pA zYJJ*|9IOtS8q)vi25+_(z71r7nm*S^Rsoj3Jh-Dk`Ci1DRw%y!iAn33Y5A3u2lxPSQo<~c&HH(=uCj%kAJ=`Le zb?*Ifx=HU+tNOS{CCMLT~h9AMsMz+(P&0QmPQW=Gu7t%h;C|4ECfQb&e1RU zn<~#*thZ8LN*wiUC_6hRCo}W*O^b%BVy4X*-vPI}X`eZ-kZ{j?5EJOO2D+_4Ri2UR z$4AwB+@RXUoB2h7|D@T(-y2i@ZrD0Y&0lKz27( zi+!M-5j&Une%yEnp=)DxAPW@D3?ga)SirYzyCyWTrabjOV*Z4FU7QBU?YQx+zcpS9 z$M1mDGrKYPr3=99Un|xs*pr9t{0fh(kI*w^#Ou@zI~68D$dQ~7sQon*idqv8Hgt!r z(SayBXlWH7h(Dj;sFY<1+9KRjjvLqCb}-9jx7}uu^q9IzqV(C8E5y48Ev!=qo|S~S zIFIhl<>3BU&_;Ae9LuDsQ6?oeb;FGbe?uXDQUG03 zMIw`zff5oYBuBjd#bnsMrm%339xpjB77?fk( zBCLOK5#A*|-WxGaeuhRTf*RybRS%%OKsFBiFJ$>|xd7y-CKC9C7K#NqF`}Y=pkl?! zM>9x+Xr06&T>V~l{u*`3P!VuGJpb$wcz7xjB>3>+lna4H0DspSC_v>0?NYkorMwY>>f(%QrYXfn9_};W+*Wg% z1;*W9{__gCV46KX=l!80#7hDd{)zq!>;=1ick+&NtKB z>t<`E<+7Jeo5id-I6*QRSP)RBaOs*Y6c>8>HcY<{NYwVkQ&S^AfEzjvc)KV$>`nXj z1iRqixI6&L+EbFGk%S+Z-t3#6epqMz)Ksz7eep=a!J%fdpS<DiAysFv1t zkA<-OHDGli*c_YHY8EF3|#* zbI7YEF^PMVZi6AjE)PS>LR7-d<)X)t#CJfc6g;P#r;gq0k^zYBHOf zB=a_KIPwp)A#05?0&hVS1hvz-eZHTqUtl6$`m(=VpyRJuG$&I{BtsBA48aWm68?4qIfWfde+N z2yWnx-@))fwV^Pubp%q=#2!mWjX=o%=!5^fM==2?@J_v}ykdyc{tk@FVDMi%t|49u zA{`P4!kiec>DNiBK;ldTM;t_foDlhJzPbtDbJE7I)w)l?2!WR&R_5M?mDXI`{+=XY zfbvEciH!;|f;{`!XsyE3d~AyV`ginNKdAD6eRha*`T_hjicJ&#oekh^C5+I1)umnH zQbvKT?LQU|;@?jzla?B}xKC8}lpKX#1>hH^d*IA{$j={>XxV(ZxCA*)A?G1DGFRXC TH|cpnz>lVyj_Mbbb=dy_VmBzO literal 0 HcmV?d00001 diff --git a/tests/images/outputs/64x64/SeemoRe_T_X2.png b/tests/images/outputs/64x64/SeemoRe_T_X2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5d1a9ba302c77fb6f42b941e7d199bb00bf218 GIT binary patch literal 24115 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 YT!t8O*g)IfsRSMryQ7CINQ}7u0n1a@vH$=8 literal 0 HcmV?d00001 diff --git a/tests/test_SeemoRe.py b/tests/test_SeemoRe.py new file mode 100644 index 00000000..7d70ea1d --- /dev/null +++ b/tests/test_SeemoRe.py @@ -0,0 +1,105 @@ +from spandrel.architectures.SeemoRe import SeemoRe, SeemoReArch + +from .util import ( + ModelFile, + TestImage, + assert_image_inference, + assert_loads_correctly, + assert_size_requirements, + disallowed_props, + skip_if_unchanged, +) + +skip_if_unchanged(__file__) + + +def test_load(): + assert_loads_correctly( + SeemoReArch(), + lambda: SeemoRe(), + lambda: SeemoRe(in_chans=1, embedding_dim=32, num_layers=2), + lambda: SeemoRe(scale=2, num_experts=4), + lambda: SeemoRe(scale=1, global_kernel_size=7), + lambda: SeemoRe(num_experts=4, lr_space="linear"), + lambda: SeemoRe(num_experts=1, lr_space="linear"), + lambda: SeemoRe(num_experts=4, lr_space="double"), + lambda: SeemoRe(num_experts=2, lr_space="double"), + lambda: SeemoRe(num_experts=3, lr_space="exp"), + # detect official configs + # T + lambda: SeemoRe( + scale=2, + in_chans=3, + num_experts=3, + img_range=1, + num_layers=6, + embedding_dim=36, + use_shuffle=True, + lr_space="exp", + topk=1, + recursive=2, + global_kernel_size=11, + ), + # B + lambda: SeemoRe( + scale=2, + in_chans=3, + num_experts=3, + img_range=1, + num_layers=8, + embedding_dim=48, + use_shuffle=True, + lr_space="exp", + topk=1, + recursive=2, + global_kernel_size=11, + ), + # L + lambda: SeemoRe( + scale=2, + in_chans=3, + num_experts=3, + img_range=1, + num_layers=16, + embedding_dim=48, + use_shuffle=False, + lr_space="exp", + topk=1, + recursive=1, + global_kernel_size=11, + ), + ) + + +def test_size_requirements(): + file = ModelFile.from_url( + "https://drive.google.com/file/d/1TLq5C2URWCvrI3HKsTxvwN4M5GpYj8rc/view?usp=drive_link", + name="SeemoRe_T_X2.pth", + ) + assert_size_requirements(file.load_model()) + + +def test_SeemoRe_T_X2(snapshot): + file = ModelFile.from_url( + "https://drive.google.com/file/d/1TLq5C2URWCvrI3HKsTxvwN4M5GpYj8rc/view?usp=drive_link", + name="SeemoRe_T_X2.pth", + ) + model = file.load_model() + assert model == snapshot(exclude=disallowed_props) + assert isinstance(model.model, SeemoRe) + assert_image_inference( + file, model, [TestImage.SR_16, TestImage.SR_32, TestImage.SR_64] + ) + + +def test_SeemoRe_T_X4(snapshot): + file = ModelFile.from_url( + "https://drive.google.com/file/d/1gX6H7jmbE4GwC0OIyRFrbfu5wGSfUpX4/view?usp=drive_link", + name="SeemoRe_T_X4.pth", + ) + model = file.load_model() + assert model == snapshot(exclude=disallowed_props) + assert isinstance(model.model, SeemoRe) + assert_image_inference( + file, model, [TestImage.SR_16, TestImage.SR_32, TestImage.SR_64] + )