Path: blob/master/modules/codeformer_model.py
3028 views
from __future__ import annotations12import logging34import torch56from modules import (7devices,8errors,9face_restoration,10face_restoration_utils,11modelloader,12shared,13)1415logger = logging.getLogger(__name__)1617model_url = 'https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth'18model_download_name = 'codeformer-v0.1.0.pth'1920# used by e.g. postprocessing_codeformer.py21codeformer: face_restoration.FaceRestoration | None = None222324class FaceRestorerCodeFormer(face_restoration_utils.CommonFaceRestoration):25def name(self):26return "CodeFormer"2728def load_net(self) -> torch.Module:29for model_path in modelloader.load_models(30model_path=self.model_path,31model_url=model_url,32command_path=self.model_path,33download_name=model_download_name,34ext_filter=['.pth'],35):36return modelloader.load_spandrel_model(37model_path,38device=devices.device_codeformer,39expected_architecture='CodeFormer',40).model41raise ValueError("No codeformer model found")4243def get_device(self):44return devices.device_codeformer4546def restore(self, np_image, w: float | None = None):47if w is None:48w = getattr(shared.opts, "code_former_weight", 0.5)4950def restore_face(cropped_face_t):51assert self.net is not None52return self.net(cropped_face_t, weight=w, adain=True)[0]5354return self.restore_with_helper(np_image, restore_face)555657def setup_model(dirname: str) -> None:58global codeformer59try:60codeformer = FaceRestorerCodeFormer(dirname)61shared.face_restorers.append(codeformer)62except Exception:63errors.report("Error setting up CodeFormer", exc_info=True)646566