aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAUTOMATIC1111 <16777216c@gmail.com>2023-12-31 01:38:43 +0300
committerGitHub <noreply@github.com>2023-12-31 01:38:43 +0300
commitce21840a042b9454a136372ab2971c1f21ec51e0 (patch)
treed4960972aa80b444137cd598ece5c63fc2a0d26e /modules
parentae124439c4b67755125bcf5d7ac6886501f4c11d (diff)
parent777af661a21821994993df3ef566b01df2bb61a0 (diff)
Merge pull request #14477 from akx/spandrel-type-fix
Be more clear about Spandrel model nomenclature and types
Diffstat (limited to 'modules')
-rw-r--r--modules/gfpgan_model.py10
-rw-r--r--modules/modelloader.py25
-rw-r--r--modules/realesrgan_model.py4
-rw-r--r--modules/upscaler_utils.py2
4 files changed, 23 insertions, 18 deletions
diff --git a/modules/gfpgan_model.py b/modules/gfpgan_model.py
index 48f8ad5e..445b0409 100644
--- a/modules/gfpgan_model.py
+++ b/modules/gfpgan_model.py
@@ -3,6 +3,8 @@ from __future__ import annotations
import logging
import os
+import torch
+
from modules import (
devices,
errors,
@@ -25,7 +27,7 @@ class FaceRestorerGFPGAN(face_restoration_utils.CommonFaceRestoration):
def get_device(self):
return devices.device_gfpgan
- def load_net(self) -> None:
+ def load_net(self) -> torch.Module:
for model_path in modelloader.load_models(
model_path=self.model_path,
model_url=model_url,
@@ -34,13 +36,13 @@ class FaceRestorerGFPGAN(face_restoration_utils.CommonFaceRestoration):
ext_filter=['.pth'],
):
if 'GFPGAN' in os.path.basename(model_path):
- net = modelloader.load_spandrel_model(
+ model = modelloader.load_spandrel_model(
model_path,
device=self.get_device(),
expected_architecture='GFPGAN',
).model
- net.different_w = True # see https://github.com/chaiNNer-org/spandrel/pull/81
- return net
+ model.different_w = True # see https://github.com/chaiNNer-org/spandrel/pull/81
+ return model
raise ValueError("No GFPGAN model found")
def restore(self, np_image):
diff --git a/modules/modelloader.py b/modules/modelloader.py
index 0b89d682..a7194137 100644
--- a/modules/modelloader.py
+++ b/modules/modelloader.py
@@ -1,8 +1,9 @@
from __future__ import annotations
+import importlib
import logging
import os
-import importlib
+from typing import TYPE_CHECKING
from urllib.parse import urlparse
import torch
@@ -10,6 +11,8 @@ import torch
from modules import shared
from modules.upscaler import Upscaler, UpscalerLanczos, UpscalerNearest, UpscalerNone
+if TYPE_CHECKING:
+ import spandrel
logger = logging.getLogger(__name__)
@@ -140,19 +143,19 @@ def load_spandrel_model(
*,
device: str | torch.device | None,
half: bool = False,
- dtype: str | None = None,
+ dtype: str | torch.dtype | None = None,
expected_architecture: str | None = None,
-):
+) -> spandrel.ModelDescriptor:
import spandrel
- model = spandrel.ModelLoader(device=device).load_from_file(path)
- if expected_architecture and model.architecture != expected_architecture:
+ model_descriptor = spandrel.ModelLoader(device=device).load_from_file(path)
+ if expected_architecture and model_descriptor.architecture != expected_architecture:
logger.warning(
- f"Model {path!r} is not a {expected_architecture!r} model (got {model.architecture!r})",
+ f"Model {path!r} is not a {expected_architecture!r} model (got {model_descriptor.architecture!r})",
)
if half:
- model = model.model.half()
+ model_descriptor.model.half()
if dtype:
- model = model.model.to(dtype=dtype)
- model.eval()
- logger.debug("Loaded %s from %s (device=%s, half=%s, dtype=%s)", model, path, device, half, dtype)
- return model
+ model_descriptor.model.to(dtype=dtype)
+ model_descriptor.model.eval()
+ logger.debug("Loaded %s from %s (device=%s, half=%s, dtype=%s)", model_descriptor, path, device, half, dtype)
+ return model_descriptor
diff --git a/modules/realesrgan_model.py b/modules/realesrgan_model.py
index 65f2e880..4d35b695 100644
--- a/modules/realesrgan_model.py
+++ b/modules/realesrgan_model.py
@@ -36,14 +36,14 @@ class UpscalerRealESRGAN(Upscaler):
errors.report(f"Unable to load RealESRGAN model {path}", exc_info=True)
return img
- mod = modelloader.load_spandrel_model(
+ model_descriptor = modelloader.load_spandrel_model(
info.local_data_path,
device=self.device,
half=(not cmd_opts.no_half and not cmd_opts.upcast_sampling),
expected_architecture="ESRGAN", # "RealESRGAN" isn't a specific thing for Spandrel
)
return upscale_with_model(
- mod,
+ model_descriptor,
img,
tile_size=opts.ESRGAN_tile,
tile_overlap=opts.ESRGAN_tile_overlap,
diff --git a/modules/upscaler_utils.py b/modules/upscaler_utils.py
index dde5d7ad..174c9bc3 100644
--- a/modules/upscaler_utils.py
+++ b/modules/upscaler_utils.py
@@ -6,7 +6,7 @@ import torch
import tqdm
from PIL import Image
-from modules import devices, images
+from modules import images
logger = logging.getLogger(__name__)