aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorRitesh Gangnani <riteshgangnani10>2023-11-05 19:13:49 +0530
committerRitesh Gangnani <riteshgangnani10>2023-11-05 19:13:49 +0530
commitff1609f91ea0e9a90ba7b6ecc6d794c39c1f8c8f (patch)
treefffc80140694c6a15e78366dcc8008ed4a6f0bc7 /modules
parent4afaaf8a020c1df457bcf7250cb1c7f609699fa7 (diff)
Add SSD-1B as a supported model
Diffstat (limited to 'modules')
-rw-r--r--modules/sd_hijack.py11
-rw-r--r--modules/sd_models.py8
-rw-r--r--modules/sd_models_types.py5
3 files changed, 21 insertions, 3 deletions
diff --git a/modules/sd_hijack.py b/modules/sd_hijack.py
index 592f0055..d19f853e 100644
--- a/modules/sd_hijack.py
+++ b/modules/sd_hijack.py
@@ -180,6 +180,17 @@ class StableDiffusionModelHijack:
except Exception as e:
errors.display(e, "applying cross attention optimization")
undo_optimizations()
+
+ def conv_ssd(self, m):
+ delattr(m.model.diffusion_model.middle_block, '1')
+ delattr(m.model.diffusion_model.middle_block, '2')
+ for i in ['9','8','7','6','5','4']:
+ delattr(m.model.diffusion_model.input_blocks[7][1].transformer_blocks,i)
+ delattr(m.model.diffusion_model.input_blocks[8][1].transformer_blocks,i)
+ delattr(m.model.diffusion_model.output_blocks[0][1].transformer_blocks,i)
+ delattr(m.model.diffusion_model.output_blocks[1][1].transformer_blocks,i)
+ delattr(m.model.diffusion_model.output_blocks[4][1].transformer_blocks,'1')
+ delattr(m.model.diffusion_model.output_blocks[5][1].transformer_blocks,'1')
def hijack(self, m):
conditioner = getattr(m, 'conditioner', None)
diff --git a/modules/sd_models.py b/modules/sd_models.py
index 930d0bee..ef96d29d 100644
--- a/modules/sd_models.py
+++ b/modules/sd_models.py
@@ -346,10 +346,14 @@ def load_model_weights(model, checkpoint_info: CheckpointInfo, state_dict, timer
model.is_sdxl = hasattr(model, 'conditioner')
model.is_sd2 = not model.is_sdxl and hasattr(model.cond_stage_model, 'model')
model.is_sd1 = not model.is_sdxl and not model.is_sd2
-
+ model.is_ssd = model.is_sdxl and 'model.diffusion_model.middle_block.1.transformer_blocks.0.attn1.to_q.weight' not in state_dict.keys()
+
if model.is_sdxl:
sd_models_xl.extend_sdxl(model)
-
+
+ if model.is_ssd:
+ sd_hijack.model_hijack.conv_ssd(model)
+
model.load_state_dict(state_dict, strict=False)
timer.record("apply weights to model")
diff --git a/modules/sd_models_types.py b/modules/sd_models_types.py
index 5ffd2f4f..1f28942a 100644
--- a/modules/sd_models_types.py
+++ b/modules/sd_models_types.py
@@ -22,7 +22,10 @@ class WebuiSdModel(LatentDiffusion):
"""structure with additional information about the file with model's weights"""
is_sdxl: bool
- """True if the model's architecture is SDXL"""
+ """True if the model's architecture is SDXL or SSD"""
+
+ is_ssd: bool
+ """True if the model is SSD"""
is_sd2: bool
"""True if the model's architecture is SD 2.x"""