Skip to content

Commit b5fd6f1

Browse files
hlkyDN6
andauthored
ControlNet from_single_file when already converted (#9978)
Co-authored-by: Dhruv Nair <[email protected]>
1 parent 64b3e0f commit b5fd6f1

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

src/diffusers/loaders/single_file_utils.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,14 @@
6262
"xl_base": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_proj.bias",
6363
"xl_refiner": "conditioner.embedders.0.model.transformer.resblocks.9.mlp.c_proj.bias",
6464
"upscale": "model.diffusion_model.input_blocks.10.0.skip_connection.bias",
65-
"controlnet": "control_model.time_embed.0.weight",
65+
"controlnet": [
66+
"control_model.time_embed.0.weight",
67+
"controlnet_cond_embedding.conv_in.weight",
68+
],
69+
# TODO: find non-Diffusers keys for controlnet_xl
70+
"controlnet_xl": "add_embedding.linear_1.weight",
71+
"controlnet_xl_large": "down_blocks.1.attentions.0.transformer_blocks.0.attn1.to_k.weight",
72+
"controlnet_xl_mid": "down_blocks.1.attentions.0.norm.weight",
6673
"playground-v2-5": "edm_mean",
6774
"inpainting": "model.diffusion_model.input_blocks.0.0.weight",
6875
"clip": "cond_stage_model.transformer.text_model.embeddings.position_embedding.weight",
@@ -96,6 +103,9 @@
96103
"inpainting": {"pretrained_model_name_or_path": "stable-diffusion-v1-5/stable-diffusion-inpainting"},
97104
"inpainting_v2": {"pretrained_model_name_or_path": "stabilityai/stable-diffusion-2-inpainting"},
98105
"controlnet": {"pretrained_model_name_or_path": "lllyasviel/control_v11p_sd15_canny"},
106+
"controlnet_xl_large": {"pretrained_model_name_or_path": "diffusers/controlnet-canny-sdxl-1.0"},
107+
"controlnet_xl_mid": {"pretrained_model_name_or_path": "diffusers/controlnet-canny-sdxl-1.0-mid"},
108+
"controlnet_xl_small": {"pretrained_model_name_or_path": "diffusers/controlnet-canny-sdxl-1.0-small"},
99109
"v2": {"pretrained_model_name_or_path": "stabilityai/stable-diffusion-2-1"},
100110
"v1": {"pretrained_model_name_or_path": "stable-diffusion-v1-5/stable-diffusion-v1-5"},
101111
"stable_cascade_stage_b": {"pretrained_model_name_or_path": "stabilityai/stable-cascade", "subfolder": "decoder"},
@@ -481,8 +491,16 @@ def infer_diffusers_model_type(checkpoint):
481491
elif CHECKPOINT_KEY_NAMES["upscale"] in checkpoint:
482492
model_type = "upscale"
483493

484-
elif CHECKPOINT_KEY_NAMES["controlnet"] in checkpoint:
485-
model_type = "controlnet"
494+
elif any(key in checkpoint for key in CHECKPOINT_KEY_NAMES["controlnet"]):
495+
if CHECKPOINT_KEY_NAMES["controlnet_xl"] in checkpoint:
496+
if CHECKPOINT_KEY_NAMES["controlnet_xl_large"] in checkpoint:
497+
model_type = "controlnet_xl_large"
498+
elif CHECKPOINT_KEY_NAMES["controlnet_xl_mid"] in checkpoint:
499+
model_type = "controlnet_xl_mid"
500+
else:
501+
model_type = "controlnet_xl_small"
502+
else:
503+
model_type = "controlnet"
486504

487505
elif (
488506
CHECKPOINT_KEY_NAMES["stable_cascade_stage_c"] in checkpoint
@@ -1072,6 +1090,9 @@ def convert_controlnet_checkpoint(
10721090
config,
10731091
**kwargs,
10741092
):
1093+
# Return checkpoint if it's already been converted
1094+
if "time_embedding.linear_1.weight" in checkpoint:
1095+
return checkpoint
10751096
# Some controlnet ckpt files are distributed independently from the rest of the
10761097
# model components i.e. https://huggingface.co/thibaud/controlnet-sd21/
10771098
if "time_embed.0.weight" in checkpoint:

0 commit comments

Comments
 (0)