Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
automatic1111
GitHub Repository: automatic1111/stable-diffusion-webui
Path: blob/master/modules/codeformer_model.py
3028 views
1
from __future__ import annotations
2
3
import logging
4
5
import torch
6
7
from modules import (
8
devices,
9
errors,
10
face_restoration,
11
face_restoration_utils,
12
modelloader,
13
shared,
14
)
15
16
logger = logging.getLogger(__name__)
17
18
model_url = 'https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth'
19
model_download_name = 'codeformer-v0.1.0.pth'
20
21
# used by e.g. postprocessing_codeformer.py
22
codeformer: face_restoration.FaceRestoration | None = None
23
24
25
class FaceRestorerCodeFormer(face_restoration_utils.CommonFaceRestoration):
26
def name(self):
27
return "CodeFormer"
28
29
def load_net(self) -> torch.Module:
30
for model_path in modelloader.load_models(
31
model_path=self.model_path,
32
model_url=model_url,
33
command_path=self.model_path,
34
download_name=model_download_name,
35
ext_filter=['.pth'],
36
):
37
return modelloader.load_spandrel_model(
38
model_path,
39
device=devices.device_codeformer,
40
expected_architecture='CodeFormer',
41
).model
42
raise ValueError("No codeformer model found")
43
44
def get_device(self):
45
return devices.device_codeformer
46
47
def restore(self, np_image, w: float | None = None):
48
if w is None:
49
w = getattr(shared.opts, "code_former_weight", 0.5)
50
51
def restore_face(cropped_face_t):
52
assert self.net is not None
53
return self.net(cropped_face_t, weight=w, adain=True)[0]
54
55
return self.restore_with_helper(np_image, restore_face)
56
57
58
def setup_model(dirname: str) -> None:
59
global codeformer
60
try:
61
codeformer = FaceRestorerCodeFormer(dirname)
62
shared.face_restorers.append(codeformer)
63
except Exception:
64
errors.report("Error setting up CodeFormer", exc_info=True)
65
66