damian0815 / compel

A prompting enhancement library for transformers-type text embedding systems
MIT License
499 stars 43 forks source link

SD XL Inpainting - 'NoneType' object has no attribute 'repeat' #83

Open WaterKnight1998 opened 5 months ago

WaterKnight1998 commented 5 months ago

Example code:

from diffusers import AutoPipelineForInpainting, DPMSolverMultistepScheduler
import torch
from diffusers.utils import load_image, make_image_grid
from compel import Compel, ReturnedEmbeddingsType

pipeline = AutoPipelineForInpainting.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16).to("cuda")

compel_proc = Compel(tokenizer=[pipeline.tokenizer, pipeline.tokenizer_2] , text_encoder=[pipeline.text_encoder, pipeline.text_encoder_2], returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, requires_pooled=[False, True],device="cuda" )

prompt_embeds, pooled_prompt_embeds = compel_proc("whatever you want")
    negative_prompt_embeds, pooled_negative_prompt_embeds = compel_proc("whatever you don't want")
    image = pipeline(
        prompt_embeds=prompt_embeds, 
        pooled_prompt_embeds=pooled_prompt_embeds,
        negative_prompt_embeds=negative_prompt_embeds, 
        pooled_negative_prompt_embeds=pooled_negative_prompt_embeds,
        image=img_original, 
        mask_image=mask,
        generator=generator,
        num_inference_steps=50,
        strength=1,
        ).images[0]

Error:

ile /databricks/python/lib/python3.10/site-packages/torch/utils/_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)
    112 @functools.wraps(func)
    113 def decorate_context(*args, **kwargs):
    114     with ctx_factory():
--> 115         return func(*args, **kwargs)

File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py:1547, in StableDiffusionXLInpaintPipeline.__call__(self, prompt, prompt_2, image, mask_image, masked_image_latents, height, width, padding_mask_crop, strength, num_inference_steps, timesteps, denoising_start, denoising_end, guidance_scale, negative_prompt, negative_prompt_2, num_images_per_prompt, eta, generator, latents, prompt_embeds, negative_prompt_embeds, pooled_prompt_embeds, negative_pooled_prompt_embeds, ip_adapter_image, output_type, return_dict, cross_attention_kwargs, guidance_rescale, original_size, crops_coords_top_left, target_size, negative_original_size, negative_crops_coords_top_left, negative_target_size, aesthetic_score, negative_aesthetic_score, clip_skip, callback_on_step_end, callback_on_step_end_tensor_inputs, **kwargs)
   1537 # 3. Encode input prompt
   1538 text_encoder_lora_scale = (
   1539     self.cross_attention_kwargs.get("scale", None) if self.cross_attention_kwargs is not None else None
   1540 )
   1542 (
   1543     prompt_embeds,
   1544     negative_prompt_embeds,
   1545     pooled_prompt_embeds,
   1546     negative_pooled_prompt_embeds,
-> 1547 ) = self.encode_prompt(
   1548     prompt=prompt,
   1549     prompt_2=prompt_2,
   1550     device=device,
   1551     num_images_per_prompt=num_images_per_prompt,
   1552     do_classifier_free_guidance=self.do_classifier_free_guidance,
   1553     negative_prompt=negative_prompt,
   1554     negative_prompt_2=negative_prompt_2,
   1555     prompt_embeds=prompt_embeds,
   1556     negative_prompt_embeds=negative_prompt_embeds,
   1557     pooled_prompt_embeds=pooled_prompt_embeds,
   1558     negative_pooled_prompt_embeds=negative_pooled_prompt_embeds,
   1559     lora_scale=text_encoder_lora_scale,
   1560     clip_skip=self.clip_skip,
   1561 )
   1563 # 4. set timesteps
   1564 def denoising_value_valid(dnv):

File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py:734, in StableDiffusionXLInpaintPipeline.encode_prompt(self, prompt, prompt_2, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt, negative_prompt_2, prompt_embeds, negative_prompt_embeds, pooled_prompt_embeds, negative_pooled_prompt_embeds, lora_scale, clip_skip)
    731     negative_prompt_embeds = negative_prompt_embeds.repeat(1, num_images_per_prompt, 1)
    732     negative_prompt_embeds = negative_prompt_embeds.view(batch_size * num_images_per_prompt, seq_len, -1)
--> 734 pooled_prompt_embeds = pooled_prompt_embeds.repeat(1, num_images_per_prompt).view(
    735     bs_embed * num_images_per_prompt, -1
    736 )
    737 if do_classifier_free_guidance:
    738     negative_pooled_prompt_embeds = negative_pooled_prompt_embeds.repeat(1, num_images_per_prompt).view(
    739         bs_embed * num_images_per_prompt, -1
    740     )

AttributeError: 'NoneType' object has no attribute 'repeat'

Thanks in advance!

Woodyet commented 2 months ago

Still getting this error

damian0815 commented 2 months ago

what happens when you run this:

prompt_embeds, pooled_prompt_embeds = compel_proc("whatever you want")
print('pooled positive:', pooled_prompt_embeds)
negative_prompt_embeds, pooled_negative_prompt_embeds = compel_proc("whatever you don't want")
print('pooled negative:', pooled_negative_prompt_embeds)

?

Woodyet commented 2 months ago

https://huggingface.co/docs/diffusers/using-diffusers/weighted_prompts#stable-diffusion-xl

This worked for me