aboutsummaryrefslogtreecommitdiffstats
path: root/modules/deepbooru_model.py
diff options
context:
space:
mode:
authorbrkirch <brkirch@users.noreply.github.com>2023-01-25 04:51:45 +0000
committerbrkirch <brkirch@users.noreply.github.com>2023-01-25 06:13:02 +0000
commit84d9ce30cb427759547bc7876ed80ab91787d175 (patch)
treea87ca1a7094ca9b7af4e573a211b1dcf8146af67 /modules/deepbooru_model.py
parent48a15821de768fea76e66f26df83df3fddf18f4b (diff)
downloadstable-diffusion-webui-gfx803-84d9ce30cb427759547bc7876ed80ab91787d175.tar.gz
stable-diffusion-webui-gfx803-84d9ce30cb427759547bc7876ed80ab91787d175.tar.bz2
stable-diffusion-webui-gfx803-84d9ce30cb427759547bc7876ed80ab91787d175.zip
Add option for float32 sampling with float16 UNet
This also handles type casting so that ROCm and MPS torch devices work correctly without --no-half. One cast is required for deepbooru in deepbooru_model.py, some explicit casting is required for img2img and inpainting. depth_model can't be converted to float16 or it won't work correctly on some systems (it's known to have issues on MPS) so in sd_models.py model.depth_model is removed for model.half().
Diffstat (limited to 'modules/deepbooru_model.py')
-rw-r--r--modules/deepbooru_model.py4
1 files changed, 3 insertions, 1 deletions
diff --git a/modules/deepbooru_model.py b/modules/deepbooru_model.py
index edd40c81..83d2ff09 100644
--- a/modules/deepbooru_model.py
+++ b/modules/deepbooru_model.py
@@ -2,6 +2,8 @@ import torch
import torch.nn as nn
import torch.nn.functional as F
+from modules import devices
+
# see https://github.com/AUTOMATIC1111/TorchDeepDanbooru for more
@@ -196,7 +198,7 @@ class DeepDanbooruModel(nn.Module):
t_358, = inputs
t_359 = t_358.permute(*[0, 3, 1, 2])
t_359_padded = F.pad(t_359, [2, 3, 2, 3], value=0)
- t_360 = self.n_Conv_0(t_359_padded)
+ t_360 = self.n_Conv_0(t_359_padded.to(self.n_Conv_0.bias.dtype) if devices.unet_needs_upcast else t_359_padded)
t_361 = F.relu(t_360)
t_361 = F.pad(t_361, [0, 1, 0, 1], value=float('-inf'))
t_362 = self.n_MaxPool_0(t_361)