import os | |
import torch | |
import modules.core as core | |
from ldm_patched.pfn.architecture.RRDB import RRDBNet as ESRGAN | |
from ldm_patched.contrib.external_upscale_model import ImageUpscaleWithModel | |
from collections import OrderedDict | |
from modules.config import path_upscale_models | |
model_filename = os.path.join(path_upscale_models, 'fooocus_upscaler_s409985e5.bin') | |
opImageUpscaleWithModel = ImageUpscaleWithModel() | |
model = None | |
def perform_upscale(img): | |
global model | |
print(f'Upscaling image with shape {str(img.shape)} ...') | |
if model is None: | |
sd = torch.load(model_filename) | |
sdo = OrderedDict() | |
for k, v in sd.items(): | |
sdo[k.replace('residual_block_', 'RDB')] = v | |
del sd | |
model = ESRGAN(sdo) | |
model.cpu() | |
model.eval() | |
img = core.numpy_to_pytorch(img) | |
img = opImageUpscaleWithModel.upscale(model, img)[0] | |
img = core.pytorch_to_numpy(img)[0] | |
return img | |