From cd2ecae820c3063d702e7e33e413e98f7221e849 Mon Sep 17 00:00:00 2001 From: FuouM Date: Sat, 3 Aug 2024 17:21:22 +0700 Subject: [PATCH] doesnt work --- README.md | 12 +- __init__.py | 4 +- anysr_module/anysr_model.py | 87 +++++++ anysr_module/arch_util.py | 126 ++++++++++ anysr_module/edsr_anysr.py | 296 +++++++++++++++++++++++ anysr_module/rdn_anysr.py | 460 ++++++++++++++++++++++++++++++++++++ constants.py | 8 +- examples/006.jpg | Bin 0 -> 141928 bytes run.py | 46 ++++ test.ipynb | 342 +++++++++++++++++++++++++++ 10 files changed, 1378 insertions(+), 3 deletions(-) create mode 100644 anysr_module/anysr_model.py create mode 100644 anysr_module/arch_util.py create mode 100644 anysr_module/edsr_anysr.py create mode 100644 anysr_module/rdn_anysr.py create mode 100644 examples/006.jpg create mode 100644 test.ipynb diff --git a/README.md b/README.md index 0ef2865..f235d9a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ Click name to jump to workflow 2. [**RealViformer**](#realviformer) - Paper: [Investigating Attention for Real-World Video Super-Resolution](https://github.com/Yuehan717/RealViformer) 3. [**ProPIH**](#propih). Paper: [Progressive Painterly Image Harmonization from Low-level Styles to High-level Styles](https://github.com/bcmi/ProPIH-Painterly-Image-Harmonization) 4. [**CoLIE**](#colie). Paper: [Fast Context-Based Low-Light Image Enhancement via Neural Implicit Representations](https://github.com/ctom2/colie) - +5. [**AnySR**](#anysr). Paper: [Realizing Image Super-Resolution as Any-Scale, Any-Resource](https://github.com/CrispyFeSo4/AnySR) + ## Workflows ### WFEN @@ -52,3 +53,12 @@ No model needed to be downloaded. Lower `loss_mean` seems to result in brighter [workflow_colie_lowlight.json](workflow/workflow_colie_lowlight.json) ![colie_lowlight](workflow/colie_lowlight.png) + +### AnySR + +Download `anysr_edsr_500.pth(updated)` and `anysr_rdn_500.pth(updated)` from [Checkpoints](https://github.com/CrispyFeSo4/AnySR?tab=readme-ov-file#checkpoints) + +``` +models/anysr/anysr_edsr_500.pth +models/anysr/anysr_rdn_500.pth +``` \ No newline at end of file diff --git a/__init__.py b/__init__.py index 2bdd7e6..96793cd 100644 --- a/__init__.py +++ b/__init__.py @@ -1,5 +1,5 @@ from .run import ( - WFEN, RealViFormerSR, ProPIH_Harmonizer, CoLIE_LowLight_Enhance + WFEN, RealViFormerSR, ProPIH_Harmonizer, CoLIE_LowLight_Enhance, AnySR ) NODE_CLASS_MAPPINGS = { @@ -7,6 +7,7 @@ NODE_CLASS_MAPPINGS = { "RealViFormerSR": RealViFormerSR, "ProPIH_Harmonizer": ProPIH_Harmonizer, "CoLIE_LowLight_Enhance": CoLIE_LowLight_Enhance, + "AnySR": AnySR, } NODE_DISPLAY_NAME_MAPPINGS = { @@ -14,6 +15,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "RealViFormerSR": "RealViFormer Video SR", "ProPIH_Harmonizer": "ProPIH Harmonizer", "CoLIE_LowLight_Enhance": "CoLIE LowLight Enhance", + "AnySR": "AnySR", } diff --git a/anysr_module/anysr_model.py b/anysr_module/anysr_model.py new file mode 100644 index 0000000..f6310e8 --- /dev/null +++ b/anysr_module/anysr_model.py @@ -0,0 +1,87 @@ +import torch +from .edsr_anysr import make_edsr +from .rdn_anysr import make_rdn + + +def run_anysr( + image: torch.Tensor, model_arch: str, model_path: str, scale: float, entire_net=True +): + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + scale_max = 4 + + model_load = torch.load(model_path)['model'] + model_args = model_load['args']['encoder_spec']['args'] + pretrain_dict = model_load['sd'] + + print(f"{model_args=}") + + image_tensor = image.permute(0, 3, 1, 2).squeeze(dim=0).to(device) + print(f"{image_tensor.shape=}") + if model_arch == "edsr": + model = make_edsr(scale=scale, **model_args) + elif model_arch == "rdn": + model = make_rdn(scale=scale, **model_args) + + model_dict = model.state_dict() + model_dict = replace(pretrain_dict, model_dict) + model.load_state_dict(model_dict, strict=False) + + + # model.load_state_dict(torch.load(model_path)['model']['sd']) + + model = model.to(device) + + h = int(image_tensor.shape[-2] * int(scale)) + w = int(image_tensor.shape[-1] * int(scale)) + scale = h / image_tensor.shape[-2] + + # coord = make_coord((h, w), flatten=False).to(device) + # cell = torch.ones(1, 2).to(device) + # cell[:, 0] *= 2 / h + # cell[:, 1] *= 2 / w + + # cell_factor = max(scale / scale_max, 1) + + # model.encoder.scale = scale + # model.encoder.scale2 = scale + + pred = model( + image_tensor.cuda().unsqueeze(0), + ).squeeze(0) + print(f"{pred.shape=}") + pred = (pred * 0.5 + 0.5).clamp(0, 1).reshape(3, h, w).cpu() + print(f"{pred.shape=}") + pred = pred.permute(1, 2, 0).unsqueeze(dim=0) + + return pred + +def replace(pretrain_dict, model_dict): + new_dict = {} + for k,v in pretrain_dict.items(): + if 'body.0.' in k[15:]: + newk = k[:15] + k[15:].replace('body.0','conv1') + new_dict[newk] = v + elif 'body.2' in k[15:]: + newk = k[:15] + k[15:].replace('body.2','conv2') + new_dict[newk] = v + pretrain_dict.update(new_dict) + common_dict = {k:v for k,v in pretrain_dict.items() if k in model_dict} + model_dict.update(common_dict) + return model_dict + +def make_coord(shape, ranges=None, flatten=True): + """Make coordinates at grid centers.""" + coord_seqs = [] + for i, n in enumerate(shape): + if ranges is None: + v0, v1 = -1, 1 + else: + v0, v1 = ranges[i] + r = (v1 - v0) / (2 * n) + seq = v0 + r + (2 * r) * torch.arange(n).float() + coord_seqs.append(seq) + + ret = torch.stack(torch.meshgrid(*coord_seqs, indexing="ij"), dim=-1) + if flatten: + ret = ret.view(-1, ret.shape[-1]) + return ret diff --git a/anysr_module/arch_util.py b/anysr_module/arch_util.py new file mode 100644 index 0000000..2818d83 --- /dev/null +++ b/anysr_module/arch_util.py @@ -0,0 +1,126 @@ +import torch +import torch.nn as nn +import torch.nn.init as init +import torch.nn.functional as F +# import math + +from torch import Tensor +from typing import Optional, List + + +def make_divisible(v, divisor=8, min_value=8): + if min_value is None: + min_value = divisor + new_v = max(min_value, int(v + divisor / 2) // divisor * divisor) + # Make sure that round down does not go down by more than 10%. + if new_v < 0.9 * v: + new_v += divisor + return int(new_v) + +def initialize_weights(net_l, scale=1): + if not isinstance(net_l, list): + net_l = [net_l] + for net in net_l: + for m in net.modules(): + if isinstance(m, nn.Conv2d): + init.kaiming_normal_(m.weight, a=0, mode='fan_in') + m.weight.data *= scale # for residual block + if m.bias is not None: + m.bias.data.zero_() + elif isinstance(m, nn.Linear): + init.kaiming_normal_(m.weight, a=0, mode='fan_in') + m.weight.data *= scale + if m.bias is not None: + m.bias.data.zero_() + elif isinstance(m, nn.BatchNorm2d): + init.constant_(m.weight, 1) + init.constant_(m.bias.data, 0.0) + +class MeanShift(nn.Conv2d): + def __init__(self, rgb_range, rgb_mean, rgb_std, sign=-1): + super(MeanShift, self).__init__(3, 3, kernel_size=1) + std = torch.Tensor(rgb_std) + self.weight.data = torch.eye(3).view(3, 3, 1, 1) + self.weight.data.div_(std.view(3, 1, 1, 1)) + self.bias.data = sign * rgb_range * torch.Tensor(rgb_mean) + self.bias.data.div_(std) + # self.requires_grad = False + for p in self.parameters(): + p.requires_grad = False + +class USConv2d(nn.Conv2d): + def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, us=[False, False]): + super(USConv2d, self).__init__(in_channels, out_channels, kernel_size, stride=stride, padding=padding, dilation=dilation, groups=groups, bias=bias) + self.width_mult = 1.0 + self.us = us + + def set_width_mult(self, width_mult): + self.width_mult = width_mult + + def forward(self, inputs): + in_channels = inputs.shape[1] // self.groups if self.us[0] else self.in_channels // self.groups + out_channels = self.out_channels + if self.us[1]: + if self.width_mult is not None: + out_channels = int(self.out_channels * self.width_mult) + else: + self.width_mult = 1.0 + out_channels = self.out_channels + + weight = self.weight[:out_channels, :in_channels, :, :] + if self.bias is not None: + bias = self.bias[:out_channels] + else: + bias = self.bias + + y = F.conv2d(inputs, weight, bias, self.stride, self.padding, self.dilation, self.groups) + return y + + +class USConvTranspose2d(nn.ConvTranspose2d): + def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, us=[False, False]): + super(USConvTranspose2d, self).__init__(in_channels, out_channels, kernel_size, stride, padding, output_padding = output_padding) + self.width_mult = None + self.us = us + + def forward(self, input: Tensor, output_size: Optional[List[int]] = None) -> Tensor: + # in_channels = make_divisible(self.in_channels * self.width_mult) if self.us[0] else self.in_channels + in_channels = int(self.in_channels * self.width_mult) if self.us[0] else self.in_channels + out_channels = input.shape[1] if self.us[1] else self.out_channels + + + weight = self.weight[:in_channels, :out_channels, :, :] + + assert isinstance(self.padding, tuple) + output_padding = self._output_padding(input, output_size, self.stride, self.padding, self.kernel_size, self.dilation) # type: ignore[arg-type] + + return F.conv_transpose2d(input, weight, self.bias, self.stride, self.padding, output_padding, self.groups, self.dilation) + + +class USBatchNorm2d(nn.BatchNorm2d): + def __init__(self, num_features, width_list = None): + super(USBatchNorm2d, self).__init__(num_features, affine=True, track_running_stats=False) + self.width_id = None + + self.bn = nn.ModuleList([ + nn.BatchNorm2d(self.num_features, affine=False) for _ in range(len(width_list)) + ]) + # raise NotImplementedError + + def forward(self, inputs): + num_features = inputs.size(1) + y = F.batch_norm( + inputs, + self.bn[self.width_id].running_mean[:num_features], + self.bn[self.width_id].running_var[:num_features], + self.weight[:num_features], + self.bias[:num_features], + self.training, + self.momentum, + self.eps) + return y + + + + + diff --git a/anysr_module/edsr_anysr.py b/anysr_module/edsr_anysr.py new file mode 100644 index 0000000..f575262 --- /dev/null +++ b/anysr_module/edsr_anysr.py @@ -0,0 +1,296 @@ +# modified from: https://github.com/thstkdgus35/EDSR-PyTorch + +import argparse + +# from models import register +import math +import random +from argparse import Namespace + +import torch +import torch.nn as nn +import torch.nn.functional as F + +# torch.autograd.set_detect_anomaly(True) +# import torch.nn as nn +# import torch.nn.functional as F +# from torch.autograd import Variable + +from . import arch_util +from .arch_util import USConv2d + + +def default_conv(in_channels, out_channels, kernel_size, bias=True): + return nn.Conv2d( + in_channels, out_channels, kernel_size, + padding=(kernel_size//2), bias=bias) + +class MeanShift(nn.Conv2d): + def __init__(self, rgb_range, rgb_mean, rgb_std, sign=-1): + super(MeanShift, self).__init__(3, 3, kernel_size=1) + std = torch.Tensor(rgb_std) + self.weight.data = torch.eye(3).view(3, 3, 1, 1) + self.weight.data.div_(std.view(3, 1, 1, 1)) + self.bias.data = sign * rgb_range * torch.Tensor(rgb_mean) + self.bias.data.div_(std) + self.requires_grad = False + +class ResBlock(nn.Module): + def __init__( + self, conv, n_feats, kernel_size, + bias=True, bn=False, act=nn.ReLU(True), res_scale=1): + + super(ResBlock, self).__init__() + m = [] + for i in range(2): + m.append(conv(n_feats, n_feats, kernel_size, bias=bias)) + if bn: + m.append(nn.BatchNorm2d(n_feats)) + if i == 0: + m.append(act) + + self.body = nn.Sequential(*m) + self.res_scale = res_scale + + def forward(self, x): + res = self.body(x).mul(self.res_scale) + res += x + return res + +class ResidualBlock_noBN_anysr(nn.Module): + '''Residual block w/o BN + ---Conv-ReLU-Conv-+- + |________________| + ''' + def __init__(self, nf=64): + super(ResidualBlock_noBN_anysr, self).__init__() + self.conv1 = USConv2d(nf, nf, 3, 1, 1, bias=True, us=[False,True]) + self.conv2 = USConv2d(nf, nf, 3, 1, 1, bias=True, us=[True,False]) + self.fc1 = USConv2d(nf+8, nf*2, 1, 1, 0, bias=True, us=[True,False]) + self.fc2 = USConv2d(nf*2, nf, 1, 1, 0, bias=True, us=[False,True]) + self.gap = nn.AdaptiveAvgPool2d((1, 1)) + self.nf = nf + + # initialization + arch_util.initialize_weights([self.conv1, self.conv2, self.fc1, self.fc2], 0.1) + + def set_width(self, width): + self.conv1.width_mult = width + self.conv2.width_mult = width + self.fc1.width_mult = width + self.fc2.width_mult = width + + def set_scale(self, scale, scale2): + self.scale = scale + self.scale2 = scale2 + + def scale_aware_attn(self,feature,r): + B,C,H,W = feature.size() + global_avg_pooled = self.gap(feature) + feature = global_avg_pooled.view(B, -1) + r0 = r.to('cuda') + max_scale = max(r[0],r[1]) + if max_scale*10%2 == 1: + flag = -1 + else: + flag = 1 + r0 = r0 * flag + + r0 = r0.expand(B, -1) + interleaved_feature = [] + for i in range(0,C,16):# 0-C,step=16 + if i+16 <= C: + feature_trunk = feature[:,i:i+16] + interleaved_feature.append(feature_trunk) + interleaved_feature.append(r0) + else: + remain_channel = C - i + feature_trunk = feature[:,-remain_channel:] + interleaved_feature.append(feature_trunk) + + scale_fea = torch.cat(interleaved_feature, dim=1) + + res = self.fc1(scale_fea.view(B,-1,1,1)) + res = F.relu(res) + weight = self.fc2(res) + result = torch.sigmoid(weight) + + return result + + + def forward(self, x): + identity = x + b = identity.shape[0] + out = self.conv1(x) + + r_info = torch.tensor([self.scale,self.scale2]) + + attn_weight = self.scale_aware_attn(out,r_info).view(b,-1,1,1) + + out = out * attn_weight.expand_as(out) + tmp = F.relu(out) + out = self.conv2(tmp) + return identity + out + + +class Upsampler(nn.Sequential): + def __init__(self, conv, scale, n_feats, bn=False, act=False, bias=True): + + m = [] + if (scale & (scale - 1)) == 0: + for _ in range(int(math.log(scale, 2))): + m.append(conv(n_feats, 4 * n_feats, 3, bias)) + m.append(nn.PixelShuffle(2)) + if bn: + m.append(nn.BatchNorm2d(n_feats)) + if act == 'relu': + m.append(nn.ReLU(True)) + elif act == 'prelu': + m.append(nn.PReLU(n_feats)) + + elif scale == 3: + m.append(conv(n_feats, 9 * n_feats, 3, bias)) + m.append(nn.PixelShuffle(3)) + if bn: + m.append(nn.BatchNorm2d(n_feats)) + if act == 'relu': + m.append(nn.ReLU(True)) + elif act == 'prelu': + m.append(nn.PReLU(n_feats)) + else: + raise NotImplementedError + + super(Upsampler, self).__init__(*m) + +url = { + 'r16f64x2': 'https://cv.snu.ac.kr/research/EDSR/models/edsr_baseline_x2-1bc95232.pt', + 'r16f64x3': 'https://cv.snu.ac.kr/research/EDSR/models/edsr_baseline_x3-abf2a44e.pt', + 'r16f64x4': 'https://cv.snu.ac.kr/research/EDSR/models/edsr_baseline_x4-6b446fab.pt', + 'r32f256x2': 'https://cv.snu.ac.kr/research/EDSR/models/edsr_x2-0edfb8a3.pt', + 'r32f256x3': 'https://cv.snu.ac.kr/research/EDSR/models/edsr_x3-ea3ef2c6.pt', + 'r32f256x4': 'https://cv.snu.ac.kr/research/EDSR/models/edsr_x4-4f62e9ef.pt' +} + +class EDSR_anysr(nn.Module): + def __init__(self, args, conv=default_conv): + super(EDSR_anysr, self).__init__() + + n_resblock = args.n_resblocks + n_resblocks = args.n_resblocks + n_feats = args.n_feats + kernel_size = 3 + self.scale = args.scale[0] + self.scale2 = self.scale + + act = nn.ReLU(True) + self.scale_list = [round(x * 0.1 + 1, 1) for x in range(1, 31)] + + self.args = args + self.scale_idx = 0 + rgb_mean = (0.4488, 0.4371, 0.4040) + rgb_std = (1.0, 1.0, 1.0) + url_name = 'r{}f{}x{}'.format(n_resblocks, n_feats, self.scale) + if url_name in url: + self.url = url[url_name] + else: + self.url = None + self.sub_mean = MeanShift(args.rgb_range,rgb_mean,rgb_std) + self.add_mean = MeanShift(args.rgb_range,rgb_mean,rgb_std) + + m_head = [conv(args.n_colors, n_feats, kernel_size)] + + m_body = [] + for _ in range(n_resblock): + m_body.append(ResidualBlock_noBN_anysr(n_feats)) + + m_body.append(conv(n_feats, n_feats, kernel_size)) + + self.add_mean = MeanShift(args.rgb_range, rgb_mean, rgb_std, 1) + + self.head = nn.Sequential(*m_head) + self.body = nn.Sequential(*m_body) + + if args.no_upsampling: + self.out_dim = n_feats + else: + self.out_dim = args.n_colors + + + def forward(self, x): + + x = self.sub_mean(x) + max_scale = max(self.scale,self.scale2) + if max_scale in self.scale_list[:7]: + width = 0.5 + elif max_scale in self.scale_list[7:15]: + width = 0.7 + elif max_scale in self.scale_list[15:22]: + width = 0.9 + else: + width = 1.0 + # if args.entire_net == 1: + # width = 1 + + x = self.head(x) + res = x + + for i in range(self.args.n_resblocks): + self.body[i].set_width(width) + self.body[i].set_scale(self.scale,self.scale2) + res = self.body[i](res) + + res = self.body[-1](res) + res += x + return res + + + def load_state_dict(self, state_dict, strict=True): + own_state = self.state_dict() + for name, param in state_dict.items(): + if name in own_state: + if isinstance(param, nn.Parameter): + param = param.data + try: + own_state[name].copy_(param) + except Exception: + if name.find('tail') == -1: + raise RuntimeError('While copying the parameter named {}, ' + 'whose dimensions in the model are {} and ' + 'whose dimensions in the checkpoint are {}.' + .format(name, own_state[name].size(), param.size())) + elif strict: + if name.find('tail') == -1: + raise KeyError('unexpected key "{}" in state_dict' + .format(name)) + + +# @register('edsr-anysr-baseline') +def make_edsr_baseline(n_resblocks=16, n_feats=64, res_scale=1, + scale=2, no_upsampling=False, rgb_range=1): + args = Namespace() + args.n_resblocks = n_resblocks + args.n_feats = n_feats + args.res_scale = res_scale + + args.scale = [scale] + args.no_upsampling = no_upsampling + + args.rgb_range = rgb_range + args.n_colors = 3 + return EDSR_anysr(args) + + +# @register('edsr-anysr') +def make_edsr(n_resblocks=32, n_feats=256, res_scale=0.1, + scale=2, no_upsampling=False, rgb_range=1): + args = Namespace() + args.n_resblocks = n_resblocks + args.n_feats = n_feats + args.res_scale = res_scale + + args.scale = [scale] + args.no_upsampling = no_upsampling + + args.rgb_range = rgb_range + args.n_colors = 3 + return EDSR_anysr(args) diff --git a/anysr_module/rdn_anysr.py b/anysr_module/rdn_anysr.py new file mode 100644 index 0000000..5f32fd2 --- /dev/null +++ b/anysr_module/rdn_anysr.py @@ -0,0 +1,460 @@ +# Residual Dense Network for Image Super-Resolution +# https://arxiv.org/abs/1802.08797 +# modified from: https://github.com/thstkdgus35/EDSR-PyTorch + +import argparse +# import math +import random + +# from models import register +# import time +from argparse import Namespace + +import torch +import torch.nn as nn +import torch.nn.functional as F + +# torch.autograd.set_detect_anomaly(True) +# from torch.autograd import Variable + +# from . import arch_util +# from .arch_util import USConv2d + + +def default_conv(in_channels, out_channels, kernel_size, bias=True): + return nn.Conv2d( + in_channels, out_channels, kernel_size, padding=(kernel_size // 2), bias=bias + ) + + +class MeanShift(nn.Conv2d): + def __init__(self, rgb_range, rgb_mean, rgb_std, sign=-1): + super(MeanShift, self).__init__(3, 3, kernel_size=1) + std = torch.Tensor(rgb_std) + self.weight.data = torch.eye(3).view(3, 3, 1, 1) + self.weight.data.div_(std.view(3, 1, 1, 1)) + self.bias.data = sign * rgb_range * torch.Tensor(rgb_mean) + self.bias.data.div_(std) + self.requires_grad = False + + +class USConv2d(nn.Conv2d): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=True, + us=[False, False], + ): + super(USConv2d, self).__init__( + in_channels, + out_channels, + kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + bias=bias, + ) + self.width_mult = 1.0 + self.us = us + + def set_width_mult(self, width_mult): + self.width_mult = width_mult + + def forward(self, inputs): + in_channels = ( + inputs.shape[1] // self.groups + if self.us[0] + else self.in_channels // self.groups + ) + out_channels = self.out_channels + if self.us[1]: + if self.width_mult is not None: + out_channels = int(self.out_channels * self.width_mult) + else: + self.width_mult = 1.0 + out_channels = self.out_channels + + weight = self.weight[:out_channels, :in_channels, :, :] + if self.bias is not None: + bias = self.bias[:out_channels] + else: + bias = self.bias + + y = F.conv2d( + inputs, weight, bias, self.stride, self.padding, self.dilation, self.groups + ) + return y + + +class USConv2d_fc2(nn.Conv2d): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=True, + us=[False, False], + ): + super(USConv2d_fc2, self).__init__( + in_channels, + out_channels, + kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + bias=bias, + ) + self.width_mult = 1.0 + self.us = us + + def set_width_mult(self, width_mult): + self.width_mult = width_mult + + def forward(self, inputs): + in_channels = ( + inputs.shape[1] // self.groups + if self.us[0] + else self.in_channels // self.groups + ) + out_channels = self.out_channels + if self.us[1]: + if self.width_mult is not None: + out_channels = int(self.out_channels // 2 * self.width_mult) * 2 + else: + self.width_mult = 1.0 + out_channels = self.out_channels + + weight = self.weight[:out_channels, :in_channels, :, :] + if self.bias is not None: + bias = self.bias[:out_channels] + else: + bias = self.bias + + y = F.conv2d( + inputs, weight, bias, self.stride, self.padding, self.dilation, self.groups + ) + return y + + +class RDB_USConv2d_former_first(nn.Module): + def __init__(self, inChannels, growRate, kSize=3): + super(RDB_USConv2d_former_first, self).__init__() + Cin = inChannels + G = growRate + self.conv = nn.Sequential( + *[ + USConv2d( + Cin, + G, + kSize, + padding=(kSize - 1) // 2, + stride=1, + bias=True, + us=[False, True], + ), + nn.ReLU(), + ] + ) + + def forward(self, x): + out = self.conv(x) + return torch.cat((x, out), 1) + + +class RDB_USConv2d_former(nn.Module): + def __init__(self, inChannels, growRate, kSize=3): + super(RDB_USConv2d_former, self).__init__() + Cin = inChannels + G = growRate + self.conv = nn.Sequential( + *[ + USConv2d( + Cin, + G, + kSize, + padding=(kSize - 1) // 2, + stride=1, + bias=True, + us=[True, True], + ), + nn.ReLU(), + ] + ) + + def forward(self, x): + out = self.conv(x) + return torch.cat((x, out), 1) + + +class RDB_USConv2d_latter(nn.Module): + def __init__(self, inChannels, growRate, kSize=3): + super(RDB_USConv2d_latter, self).__init__() + Cin = inChannels + G = growRate + self.conv = nn.Sequential( + *[ + USConv2d( + Cin, + G, + kSize, + padding=(kSize - 1) // 2, + stride=1, + bias=True, + us=[True, False], + ), + nn.ReLU(), + ] + ) + + def forward(self, x): + out = self.conv(x) + return torch.cat((x, out), 1) + + +class RDB_Conv(nn.Module): + def __init__(self, inChannels, growRate, kSize=3): + super(RDB_Conv, self).__init__() + Cin = inChannels + G = growRate + self.conv = nn.Sequential( + *[nn.Conv2d(Cin, G, kSize, padding=(kSize - 1) // 2, stride=1), nn.ReLU()] + ) + + def forward(self, x): + out = self.conv(x) + return torch.cat((x, out), 1) + + +class RDB_any(nn.Module): + def __init__(self, growRate0, growRate, nConvLayers, kSize=3): + super(RDB_any, self).__init__() + G0 = growRate0 + G = growRate + C = nConvLayers + self.C = nConvLayers + self.G0 = G0 + self.G = G + + convs = [] + for i in range(C // 2): # 0,1,2,3 + convs.append(RDB_Conv(G0 + i * G, G)) + + convs.append(RDB_USConv2d_former_first(G0 + (C // 2) * G, G)) # 4 + for c in range(C - 1 - C // 2): # c=0, block=5 + if (c) % 2 == 1: # former + convs.append(RDB_USConv2d_former(G0 + (c + 5) * G, G)) + else: + convs.append(RDB_USConv2d_latter(G0 + (c + 5) * G, G)) + + self.convs = nn.Sequential(*convs) + + # Local Feature Fusion + self.LFF = USConv2d( + G0 + C * G, G0, 1, padding=0, stride=1, bias=True, us=[True, False] + ) + self.fc1 = USConv2d(2 * (G + 8), 256, 1, 1, 0, bias=True, us=[True, False]) + self.fc2 = USConv2d_fc2(256, 2 * G, 1, 1, 0, bias=True, us=[False, True]) + self.gap = nn.AdaptiveAvgPool2d((1, 1)) + + def set_scale(self, scale, scale2): + self.scale = scale + self.scale2 = scale2 + + def set_width(self, width): + for c in range(self.C): + self.convs[c].conv[0].width_mult = width + self.LFF.width_mult = width + self.fc1.width_mult = width + self.fc2.width_mult = width + + def scale_aware_attn(self, feature, r): + B, C, H, W = feature.size() + global_avg_pooled = self.gap(feature) + feature = global_avg_pooled.view(B, -1) + r0 = r.to("cuda") + + max_scale = max(r[0], r[1]) + if max_scale * 10 % 2 == 1: + flag = -1 + else: + flag = 1 + r0 = r0 * flag + + r0 = r0.expand(B, -1) + + interleaved_feature = [] + for i in range(0, C, 16): # 0-C,step=16 + if i + 16 <= C: + feature_trunk = feature[:, i : i + 16] + interleaved_feature.append(feature_trunk) + interleaved_feature.append(r0) + + else: + remain_channel = C - i + feature_trunk = feature[:, -remain_channel:] + interleaved_feature.append(feature_trunk) + + scale_fea = torch.cat(interleaved_feature, dim=1) + + res = self.fc1(scale_fea.view(B, -1, 1, 1)) + res = F.relu(res) + weight = self.fc2(res) + + result = torch.sigmoid(weight) + return result + + def forward(self, x): + B = x.shape[0] + res = self.convs(x) + r_info = torch.tensor([self.scale, self.scale2]) + + former_fea = res[:, : self.G0 + 6 * self.G, :, :] + attn_fea = res[:, self.G0 + 6 * self.G :, :, :] + + attn_weight = self.scale_aware_attn(attn_fea, r_info).view(B, -1, 1, 1) + + out = attn_fea * attn_weight.expand_as(attn_fea) + res = torch.cat((former_fea, out), dim=1).expand_as(res) + + tmp = self.LFF(res) + res = tmp + x + return res + + +class RDN_anysr(nn.Module): + def __init__(self, args): + super(RDN_anysr, self).__init__() + self.scale = args.scale[0] + self.scale2 = self.scale + G0 = args.G0 + kSize = args.RDNkSize + self.scale_list = [round(x * 0.1 + 1, 1) for x in range(1, 31)] + self.args = args + self.scale_idx = 0 + + self.D, C, G = { + "A": (20, 6, 32), + "B": (16, 8, 64), + }[args.RDNconfig] + + rgb_mean = (0.4488, 0.4371, 0.4040) + rgb_std = (1.0, 1.0, 1.0) + self.sub_mean = MeanShift(args.rgb_range, rgb_mean, rgb_std) + self.add_mean = MeanShift(args.rgb_range, rgb_mean, rgb_std, 1) + + self.SFENet1 = nn.Conv2d( + args.n_colors, G0, kSize, padding=(kSize - 1) // 2, stride=1 + ) + self.SFENet2 = nn.Conv2d(G0, G0, kSize, padding=(kSize - 1) // 2, stride=1) + + self.RDBs = nn.ModuleList() + for i in range(self.D): + self.RDBs.append(RDB_any(growRate0=G0, growRate=G, nConvLayers=C)) + self.GFF = nn.Sequential( + *[ + nn.Conv2d(self.D * G0, G0, 1, padding=0, stride=1), + nn.Conv2d(G0, G0, kSize, padding=(kSize - 1) // 2, stride=1), + ] + ) + + if args.no_upsampling: + self.out_dim = G0 + else: + r = self.scale + self.out_dim = args.n_colors + if r == 2 or r == 3: + self.UPNet = nn.Sequential( + *[ + nn.Conv2d( + G0, G * r * r, kSize, padding=(kSize - 1) // 2, stride=1 + ), + nn.PixelShuffle(r), + nn.Conv2d( + G, args.n_colors, kSize, padding=(kSize - 1) // 2, stride=1 + ), + ] + ) + elif r == 4: + self.UPNet = nn.Sequential( + *[ + nn.Conv2d(G0, G * 4, kSize, padding=(kSize - 1) // 2, stride=1), + nn.PixelShuffle(2), + nn.Conv2d(G, G * 4, kSize, padding=(kSize - 1) // 2, stride=1), + nn.PixelShuffle(2), + nn.Conv2d( + G, args.n_colors, kSize, padding=(kSize - 1) // 2, stride=1 + ), + ] + ) + else: + raise ValueError("scale must be 2 or 3 or 4.") + + def forward(self, x): + max_scale = max(self.scale, self.scale2) + + parser = argparse.ArgumentParser() + parser.add_argument("--test_only", type=int) + parser.add_argument("--entire_net", type=int) + args, _ = parser.parse_known_args() + + if max_scale in self.scale_list[:7]: + width = 0.7 + if args.test_only == 0: # train + if random.random() < 0.6: + width = 1.0 + elif max_scale in self.scale_list[7:15]: + width = 0.8 + elif max_scale in self.scale_list[15:22]: + width = 0.9 + else: + width = 1.0 + if args.entire_net == 1: + width = 1 + + x = self.sub_mean(x) + f__1 = self.SFENet1(x) + x = self.SFENet2(f__1) + + RDBs_out = [] + for i in range(self.D): + self.RDBs[i].set_width(width) + self.RDBs[i].set_scale(self.scale, self.scale2) + x = self.RDBs[i](x) + RDBs_out.append(x) + + x = self.GFF(torch.cat(RDBs_out, 1)) + x += f__1 + + if self.args.no_upsampling: + return x + else: + return self.UPNet(x) + + +# @register("rdn-anysr") +def make_rdn( + G0=64, RDNkSize=3, RDNconfig="B", scale=2, no_upsampling=False, rgb_range=1 +): + args = Namespace() + args.G0 = G0 + args.RDNkSize = RDNkSize + args.RDNconfig = RDNconfig + + args.scale = [scale] + args.no_upsampling = no_upsampling + args.rgb_range = rgb_range + + args.n_colors = 3 + return RDN_anysr(args) diff --git a/constants.py b/constants.py index 8f31860..a283db0 100644 --- a/constants.py +++ b/constants.py @@ -1,4 +1,10 @@ WFEN_MODEL_PATH = "models/wfen/WFEN.pth" REALVIFORMER_MODEL_PATH = "models/realviformer/weights.pth" PROPIH_VGG_MODEL_PATH = "models/propih/vgg_normalised.pth" -PROPIH_G_MODEL_PATH = "models/propih/latest_net_G.pth" \ No newline at end of file +PROPIH_G_MODEL_PATH = "models/propih/latest_net_G.pth" +ANYSR_MODELS = ["edsr", "rdn"] +ANYSR_MODEL_PATHS = { + "edsr": "models/anysr/anysr_edsr_500.pth", + "rdn": "models/anysr/anysr_rdn_500.pth" +} +ANYSR_DEFAULT = "edsr" \ No newline at end of file diff --git a/examples/006.jpg b/examples/006.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59393cd48f35ac9869dded9a2f09feebcad3c1c5 GIT binary patch literal 141928 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

~XKR*l=G0u(nzovN4O%mE$ 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 literal 0 HcmV?d00001 diff --git a/run.py b/run.py index cb4f6e2..b29f695 100644 --- a/run.py +++ b/run.py @@ -12,8 +12,12 @@ import torch.nn.functional as F import tqdm from comfy.utils import ProgressBar +from .anysr_module.anysr_model import run_anysr from .colie_module.colie_model import CoLIE_Config, run_colie from .constants import ( + ANYSR_DEFAULT, + ANYSR_MODEL_PATHS, + ANYSR_MODELS, PROPIH_G_MODEL_PATH, PROPIH_VGG_MODEL_PATH, REALVIFORMER_MODEL_PATH, @@ -283,3 +287,45 @@ class CoLIE_LowLight_Enhance: pbar.update_absolute(i, num_frames) return (torch.cat(result, dim=0),) + + +class AnySR: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "src_img": ("IMAGE",), + "scale": ( + "FLOAT", + {"default": 2.00, "min": 0.01}, + ), + "model": (ANYSR_MODELS, {"default": ANYSR_DEFAULT}), + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("res_img",) + FUNCTION = "todo" + CATEGORY = "FM_nodes" + + def todo( + self, + src_img: torch.Tensor, + scale: float, + model: str, + ): + result: list[torch.Tensor] = [] + num_frames = src_img.size(0) + pbar = ProgressBar(num_frames) + for i in range(num_frames): + image = src_img[i].unsqueeze(0) + res_tensor = run_anysr( + image, + scale=scale, + model_arch=model, + model_path=f"{base_dir}/{ANYSR_MODEL_PATHS[model]}", + ) + result.append(res_tensor) + pbar.update_absolute(i, num_frames) + + return (torch.cat(result, dim=0),) diff --git a/test.ipynb b/test.ipynb new file mode 100644 index 0000000..6ae320c --- /dev/null +++ b/test.ipynb @@ -0,0 +1,342 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "j:\\AI\\ComfyUI_windows_portable\\python_embeded\\Lib\\site-packages\\transformers\\utils\\hub.py:124: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import torch\n", + "from torchvision import transforms\n", + "from PIL import Image\n", + "\n", + "# Function to load and preprocess the image\n", + "def load_image_as_tensor(image_path, batch_size=1):\n", + " # Open the image using PIL\n", + " image = Image.open(image_path)\n", + " \n", + " # Define the transformation pipeline\n", + " transform = transforms.Compose([\n", + " transforms.Resize((256, 256)),\n", + " transforms.ToTensor(), # Convert PIL Image to tensor and scale to [0, 1]\n", + " # transforms.Lambda(lambda x: x.unsqueeze(0).repeat(batch_size, 1, 1, 1)) # Add batch dimension and repeat\n", + " ])\n", + " \n", + " # Apply the transformation\n", + " tensor = transform(image)\n", + " \n", + " return tensor" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "image = load_image_as_tensor(\"examples/006.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([3, 256, 256])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "scale_max = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "model_path = \"models/anysr/anysr_edsr_500.pth\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "model_load = torch.load(model_path)['model']\n", + "model_args = model_load['args']['encoder_spec']['args']\n", + "pretrain_dict = model_load['sd']" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "image_tensor = image.squeeze(dim=0).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([3, 256, 256])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image_tensor.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from anysr_module.edsr_anysr import make_edsr\n", + "\n", + "\n", + "model = make_edsr(scale=2, **model_args)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from anysr_module.anysr_model import replace\n", + "\n", + "\n", + "model_dict = model.state_dict()\n", + "model_dict = replace(pretrain_dict, model_dict)\n", + "model.load_state_dict(model_dict, strict=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "model = model.to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "model.scale = 2\n", + "model.scale2 = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([3, 256, 256])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image_tensor.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "pred = model(\n", + " image_tensor.unsqueeze(dim=0).cuda(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 256, 256, 256])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 256, 256, 256])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "ename": "RuntimeError", + "evalue": "shape '[1, 256, 256, 3, 9, 9]' is invalid for input of size 16777216", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[14], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m reshaped_tensor \u001b[38;5;241m=\u001b[39m \u001b[43mpred\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreshape\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m256\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m256\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m9\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m9\u001b[39;49m\u001b[43m)\u001b[49m\n", + "\u001b[1;31mRuntimeError\u001b[0m: shape '[1, 256, 256, 3, 9, 9]' is invalid for input of size 16777216" + ] + } + ], + "source": [ + "reshaped_tensor = pred.reshape(1, 256, 256, 3, 9, 9)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[[[-0.2023, -0.2465, -0.1883, ..., 0.0145, 0.0291, 0.0131],\n", + " [-0.2058, -0.3171, -0.2691, ..., 0.0181, 0.0362, 0.0219],\n", + " [-0.1518, -0.3128, -0.2633, ..., 0.0039, 0.0277, 0.0250],\n", + " ...,\n", + " [-0.0476, 0.0612, 0.0954, ..., -0.1948, -0.2188, -0.1279],\n", + " [-0.0426, 0.0376, 0.0445, ..., -0.1631, -0.1892, -0.0890],\n", + " [ 0.0051, 0.0672, 0.0702, ..., -0.0010, -0.0048, 0.0314]],\n", + "\n", + " [[-0.1818, -0.2641, -0.2487, ..., -0.1725, -0.1746, -0.1650],\n", + " [-0.0194, -0.1230, -0.1304, ..., -0.2200, -0.2187, -0.1621],\n", + " [-0.0632, -0.1623, -0.1519, ..., -0.2183, -0.2122, -0.1603],\n", + " ...,\n", + " [-0.1712, -0.1563, -0.1632, ..., -0.1246, -0.1534, -0.1306],\n", + " [-0.2195, -0.2493, -0.2216, ..., -0.1596, -0.1834, -0.1382],\n", + " [-0.1708, -0.2002, -0.1785, ..., -0.1240, -0.1355, -0.1496]],\n", + "\n", + " [[ 0.0384, -0.1395, -0.1434, ..., 0.0056, -0.0025, -0.0254],\n", + " [ 0.0819, -0.0770, -0.1296, ..., -0.0080, -0.0228, -0.0414],\n", + " [ 0.0429, -0.0804, -0.1248, ..., -0.0178, -0.0256, -0.0443],\n", + " ...,\n", + " [ 0.1172, 0.0857, 0.0598, ..., -0.0916, -0.1025, -0.0719],\n", + " [ 0.0778, 0.0410, 0.0348, ..., -0.0644, -0.0767, -0.0587],\n", + " [ 0.0415, 0.0601, 0.0726, ..., 0.0271, 0.0418, 0.0895]],\n", + "\n", + " ...,\n", + "\n", + " [[ 0.0076, -0.1249, -0.1511, ..., -0.0041, -0.0041, -0.0131],\n", + " [-0.1826, -0.2713, -0.2433, ..., 0.0897, 0.0770, 0.0489],\n", + " [-0.1696, -0.2405, -0.2122, ..., 0.0730, 0.0656, 0.0382],\n", + " ...,\n", + " [ 0.0398, 0.0766, 0.1059, ..., -0.0038, -0.0599, -0.0317],\n", + " [ 0.0230, 0.0949, 0.1537, ..., -0.0311, -0.0921, -0.0622],\n", + " [ 0.0083, 0.0128, 0.0458, ..., -0.1552, -0.1739, -0.1277]],\n", + "\n", + " [[ 0.1756, 0.2339, 0.2451, ..., 0.1755, 0.1732, 0.1503],\n", + " [ 0.0185, -0.0176, 0.0165, ..., 0.2317, 0.2341, 0.1946],\n", + " [-0.0086, -0.0330, 0.0083, ..., 0.2167, 0.2240, 0.1849],\n", + " ...,\n", + " [ 0.1407, 0.1760, 0.2159, ..., 0.0839, 0.0529, 0.0533],\n", + " [ 0.1521, 0.2473, 0.3145, ..., 0.0638, 0.0380, 0.0335],\n", + " [ 0.1696, 0.2355, 0.2771, ..., 0.0139, -0.0056, 0.0147]],\n", + "\n", + " [[-0.1895, -0.2206, -0.2065, ..., -0.0522, -0.0691, -0.0413],\n", + " [-0.1096, -0.1073, -0.1033, ..., -0.1391, -0.1615, -0.1086],\n", + " [-0.1121, -0.1327, -0.1424, ..., -0.1380, -0.1547, -0.1007],\n", + " ...,\n", + " [ 0.0065, -0.0212, -0.0236, ..., -0.1827, -0.1751, -0.0828],\n", + " [-0.0189, -0.0623, -0.0892, ..., -0.1393, -0.1310, -0.0676],\n", + " [-0.0020, -0.0198, -0.0286, ..., -0.0580, -0.0464, -0.0142]]]],\n", + " device='cuda:0', grad_fn=)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}