mirror of
https://github.com/easydiffusion/easydiffusion.git
synced 2025-05-01 06:44:56 +02:00
Fix a bug where Face Correction (GFPGAN) would fail on cuda:N (i.e. GPUs other than cuda:0), as well as fail on CPU if the system had an incompatible GPU.
This commit is contained in:
parent
cc3186a683
commit
97ee085f30
13
CHANGES.md
13
CHANGES.md
@ -1,9 +1,8 @@
|
|||||||
# What's new?
|
# What's new?
|
||||||
|
|
||||||
### 2.4.6
|
### 2.4
|
||||||
* 16 Nov 2022 - Fix a regression in VRAM usage during startup, which caused 'Out of Memory' errors when starting on GPUs with 4gb (or less) VRAM
|
* 2.4.7 - 17 Nov 2022 - Fix a bug where Face Correction (GFPGAN) would fail on cuda:N (i.e. GPUs other than cuda:0), as well as fail on CPU if the system had an incompatible GPU.
|
||||||
|
* 2.4.6 - 16 Nov 2022 - Fix a regression in VRAM usage during startup, which caused 'Out of Memory' errors when starting on GPUs with 4gb (or less) VRAM
|
||||||
### 2.4.5
|
* 2.4.5 - 16 Nov 2022 - Add checkbox for "Open browser on startup".
|
||||||
* 16 Nov 2022 - Add checkbox for "Open browser on startup".
|
* 2.4.5 - 16 Nov 2022 - Add a directory for core plugins that ship with Stable Diffusion UI by default.
|
||||||
* 16 Nov 2022 - Add a directory for core plugins that ship with Stable Diffusion UI by default.
|
* 2.4.5 - 16 Nov 2022 - Add a "What's New?" tab as a core plugin, which fetches the contents of CHANGES.md from the app's release branch.
|
||||||
* 16 Nov 2022 - Add a "What's New?" tab as a core plugin, which fetches the contents of CHANGES.md from the app's release branch.
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<div id="container">
|
<div id="container">
|
||||||
<div id="top-nav">
|
<div id="top-nav">
|
||||||
<div id="logo">
|
<div id="logo">
|
||||||
<h1>Stable Diffusion UI <small>v2.4.6 <span id="updateBranchLabel"></span></small></h1>
|
<h1>Stable Diffusion UI <small>v2.4.7 <span id="updateBranchLabel"></span></small></h1>
|
||||||
</div>
|
</div>
|
||||||
<div id="server-status">
|
<div id="server-status">
|
||||||
<div id="server-status-color">●</div>
|
<div id="server-status-color">●</div>
|
||||||
|
@ -236,9 +236,14 @@ def wait_model_move_to(model, target_device): # Send to target_device and wait u
|
|||||||
|
|
||||||
def load_model_gfpgan():
|
def load_model_gfpgan():
|
||||||
if thread_data.gfpgan_file is None: raise ValueError(f'Thread gfpgan_file is undefined.')
|
if thread_data.gfpgan_file is None: raise ValueError(f'Thread gfpgan_file is undefined.')
|
||||||
|
|
||||||
|
# hack for a bug in facexlib: https://github.com/xinntao/facexlib/pull/19/files
|
||||||
|
from facexlib.detection import retinaface
|
||||||
|
retinaface.device = torch.device(thread_data.device)
|
||||||
|
print('forced retinaface.device to', thread_data.device)
|
||||||
|
|
||||||
model_path = thread_data.gfpgan_file + ".pth"
|
model_path = thread_data.gfpgan_file + ".pth"
|
||||||
device = 'cuda:0' if force_gfpgan_to_cuda0 else thread_data.device
|
thread_data.model_gfpgan = GFPGANer(device=torch.device(thread_data.device), model_path=model_path, upscale=1, arch='clean', channel_multiplier=2, bg_upsampler=None)
|
||||||
thread_data.model_gfpgan = GFPGANer(device=torch.device(device), model_path=model_path, upscale=1, arch='clean', channel_multiplier=2, bg_upsampler=None)
|
|
||||||
print('loaded', thread_data.gfpgan_file, 'to', thread_data.model_gfpgan.device, 'precision', thread_data.precision)
|
print('loaded', thread_data.gfpgan_file, 'to', thread_data.model_gfpgan.device, 'precision', thread_data.precision)
|
||||||
|
|
||||||
def load_model_real_esrgan():
|
def load_model_real_esrgan():
|
||||||
@ -288,10 +293,10 @@ def apply_filters(filter_name, image_data, model_path=None):
|
|||||||
print(f'Applying filter {filter_name}...')
|
print(f'Applying filter {filter_name}...')
|
||||||
gc() # Free space before loading new data.
|
gc() # Free space before loading new data.
|
||||||
|
|
||||||
if filter_name == 'gfpgan':
|
if isinstance(image_data, torch.Tensor):
|
||||||
if isinstance(image_data, torch.Tensor):
|
image_data.to(thread_data.device)
|
||||||
image_data.to('cuda:0' if force_gfpgan_to_cuda0 else thread_data.device)
|
|
||||||
|
|
||||||
|
if filter_name == 'gfpgan':
|
||||||
if model_path is not None and model_path != thread_data.gfpgan_file:
|
if model_path is not None and model_path != thread_data.gfpgan_file:
|
||||||
thread_data.gfpgan_file = model_path
|
thread_data.gfpgan_file = model_path
|
||||||
load_model_gfpgan()
|
load_model_gfpgan()
|
||||||
@ -303,9 +308,6 @@ def apply_filters(filter_name, image_data, model_path=None):
|
|||||||
image_data = output[:,:,::-1]
|
image_data = output[:,:,::-1]
|
||||||
|
|
||||||
if filter_name == 'real_esrgan':
|
if filter_name == 'real_esrgan':
|
||||||
if isinstance(image_data, torch.Tensor):
|
|
||||||
image_data.to(thread_data.device)
|
|
||||||
|
|
||||||
if model_path is not None and model_path != thread_data.real_esrgan_file:
|
if model_path is not None and model_path != thread_data.real_esrgan_file:
|
||||||
thread_data.real_esrgan_file = model_path
|
thread_data.real_esrgan_file = model_path
|
||||||
load_model_real_esrgan()
|
load_model_real_esrgan()
|
||||||
|
@ -217,10 +217,6 @@ def thread_get_next_task():
|
|||||||
task = None
|
task = None
|
||||||
try: # Select a render task.
|
try: # Select a render task.
|
||||||
for queued_task in tasks_queue:
|
for queued_task in tasks_queue:
|
||||||
if queued_task.request.use_face_correction and runtime.thread_data.device == 'cpu' and is_alive() == 1:
|
|
||||||
queued_task.error = Exception('The CPU cannot be used to run this task currently. Please remove "Fix incorrect faces" from Image Settings and try again.')
|
|
||||||
task = queued_task
|
|
||||||
break
|
|
||||||
if queued_task.render_device and runtime.thread_data.device != queued_task.render_device:
|
if queued_task.render_device and runtime.thread_data.device != queued_task.render_device:
|
||||||
# Is asking for a specific render device.
|
# Is asking for a specific render device.
|
||||||
if is_alive(queued_task.render_device) > 0:
|
if is_alive(queued_task.render_device) > 0:
|
||||||
|
Loading…
Reference in New Issue
Block a user