From 2eef7065a69af384860fafad24e47d2074314572 Mon Sep 17 00:00:00 2001 From: suzukimain Date: Tue, 4 Mar 2025 00:30:06 +0900 Subject: [PATCH 1/2] update --- src/diffusers/loaders/textual_inversion.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/diffusers/loaders/textual_inversion.py b/src/diffusers/loaders/textual_inversion.py index e756bb5d4956..8aed9db5ff47 100644 --- a/src/diffusers/loaders/textual_inversion.py +++ b/src/diffusers/loaders/textual_inversion.py @@ -400,13 +400,13 @@ def load_textual_inversion( # 5. Extend tokens and embeddings for multi vector tokens, embeddings = self._extend_tokens_and_embeddings(tokens, embeddings, tokenizer) - # 6. Make sure all embeddings have the correct size + # 6. Adjust all embeddings to match the expected dimension expected_emb_dim = text_encoder.get_input_embeddings().weight.shape[-1] if any(expected_emb_dim != emb.shape[-1] for emb in embeddings): - raise ValueError( - "Loaded embeddings are of incorrect shape. Expected each textual inversion embedding " - "to be of shape {input_embeddings.shape[-1]}, but are {embeddings.shape[-1]} " - ) + embed_tensor = state_dicts["emb_params"] + linear = nn.Linear(embed_tensor.size()[1], expected_emb_dim) + state_dicts["emb_params"] = linear(embed_tensor) + logger.info(f"Changed dimension from {embed_tensor.size()[1]} to {expected_emb_dim}") # 7. Now we can be sure that loading the embedding matrix works # < Unsafe code: From 1388b3dc47525b1186b84bdb763e713e984e7c17 Mon Sep 17 00:00:00 2001 From: suzukimain Date: Tue, 4 Mar 2025 01:18:27 +0900 Subject: [PATCH 2/2] update --- src/diffusers/loaders/textual_inversion.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/diffusers/loaders/textual_inversion.py b/src/diffusers/loaders/textual_inversion.py index 8aed9db5ff47..d921c791f1ec 100644 --- a/src/diffusers/loaders/textual_inversion.py +++ b/src/diffusers/loaders/textual_inversion.py @@ -402,11 +402,11 @@ def load_textual_inversion( # 6. Adjust all embeddings to match the expected dimension expected_emb_dim = text_encoder.get_input_embeddings().weight.shape[-1] - if any(expected_emb_dim != emb.shape[-1] for emb in embeddings): - embed_tensor = state_dicts["emb_params"] - linear = nn.Linear(embed_tensor.size()[1], expected_emb_dim) - state_dicts["emb_params"] = linear(embed_tensor) - logger.info(f"Changed dimension from {embed_tensor.size()[1]} to {expected_emb_dim}") + for i, embedding in enumerate(embeddings): + if embedding.shape[-1] != expected_emb_dim: + linear = nn.Linear(embedding.shape[-1], expected_emb_dim) + embeddings[i] = linear(embedding) + logger.info(f"Changed embedding dimension from {embedding.shape[-1]} to {expected_emb_dim}") # 7. Now we can be sure that loading the embedding matrix works # < Unsafe code: