ljleb / prompt-fusion-extension

auto1111 webui extension for all sorts of prompt interpolations!
MIT License
265 stars 16 forks source link

IndexError: too many indices for tensor of dimension 2 #68

Closed pmcculler closed 1 year ago

pmcculler commented 1 year ago

Got this while trying to isolate the cause of the other error I recently reported.

Traceback (most recent call last):
  File "D:\Users\pmccu\stable-diffusion-webui\modules\call_queue.py", line 57, in f
    res = list(func(*args, **kwargs))
  File "D:\Users\pmccu\stable-diffusion-webui\modules\call_queue.py", line 36, in f
    res = func(*args, **kwargs)
  File "D:\Users\pmccu\stable-diffusion-webui\modules\txt2img.py", line 55, in txt2img
    processed = processing.process_images(p)
  File "D:\Users\pmccu\stable-diffusion-webui\modules\processing.py", line 732, in process_images
    res = process_images_inner(p)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-webui-controlnet\scripts\batch_hijack.py", line 42, in processing_process_images_hijack
    return getattr(processing, '__controlnet_original_process_images_inner')(p, *args, **kwargs)
  File "D:\Users\pmccu\stable-diffusion-webui\modules\processing.py", line 867, in process_images_inner
    samples_ddim = p.sample(conditioning=p.c, unconditional_conditioning=p.uc, seeds=p.seeds, subseeds=p.subseeds, subseed_strength=p.subseed_strength, prompts=p.prompts)
  File "D:\Users\pmccu\stable-diffusion-webui\modules\processing.py", line 1140, in sample
    samples = self.sampler.sample(self, x, conditioning, unconditional_conditioning, image_conditioning=self.txt2img_image_conditioning(x))
  File "D:\Users\pmccu\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 235, in sample
    samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args=self.sampler_extra_args, disable=False, callback=self.callback_state, **extra_params_kwargs))
  File "D:\Users\pmccu\stable-diffusion-webui\modules\sd_samplers_common.py", line 261, in launch_sampling
    return func()
  File "D:\Users\pmccu\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py", line 235, in <lambda>
    samples = self.launch_sampling(steps, lambda: self.func(self.model_wrap_cfg, x, extra_args=self.sampler_extra_args, disable=False, callback=self.callback_state, **extra_params_kwargs))
  File "D:\Users\pmccu\stable-diffusion-webui\venv\lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
  File "D:\Users\pmccu\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\sampling.py", line 180, in sample_heun
    denoised_2 = model(x_2, sigmas[i + 1] * s_in, **extra_args)
  File "D:\Users\pmccu\stable-diffusion-webui\venv\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl
    return forward_call(*args, **kwargs)
  File "D:\Users\pmccu\stable-diffusion-webui\modules\sd_samplers_cfg_denoiser.py", line 95, in forward
    if sd_samplers_common.apply_refiner(self):
  File "D:\Users\pmccu\stable-diffusion-webui\modules\sd_samplers_common.py", line 188, in apply_refiner
    cfg_denoiser.p.setup_conds()
  File "D:\Users\pmccu\stable-diffusion-webui\modules\processing.py", line 1309, in setup_conds
    super().setup_conds()
  File "D:\Users\pmccu\stable-diffusion-webui\modules\processing.py", line 469, in setup_conds
    self.uc = self.get_conds_with_caching(prompt_parser.get_learned_conditioning, negative_prompts, total_steps, [self.cached_uc], self.extra_network_data)
  File "D:\Users\pmccu\stable-diffusion-webui\modules\processing.py", line 455, in get_conds_with_caching
    cache[1] = function(shared.sd_model, required_prompts, steps, hires_steps, shared.opts.use_old_scheduling)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\lib_prompt_fusion\hijacker.py", line 12, in wrapper
    return function(*args, **kwargs, original_function=self.__original_functions[attribute])
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\scripts\promptlang.py", line 69, in _hijacked_get_learned_conditioning
    schedules = [_sample_tensor_schedules(cond_tensor, real_total_steps, is_hires=hires_steps is not None)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\scripts\promptlang.py", line 69, in <listcomp>
    schedules = [_sample_tensor_schedules(cond_tensor, real_total_steps, is_hires=hires_steps is not None)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\scripts\promptlang.py", line 126, in _sample_tensor_schedules
    schedule_cond = tensor.interpolate(params, origin_cond)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\lib_prompt_fusion\interpolation_tensor.py", line 22, in interpolate
    cond = self.interpolate_rec(params, 0, origin_cond)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\lib_prompt_fusion\interpolation_tensor.py", line 36, in interpolate_rec
    return schedule.cond.extend_like(origin_cond, self.__empty_cond) - origin_cond.extend_like(schedule.cond, self.__empty_cond)
  File "D:\Users\pmccu\stable-diffusion-webui\extensions\sd-prompt-fusion-extension\lib_prompt_fusion\interpolation_tensor.py", line 158, in extend_like
    extended.original_cond['crossattn'] = torch.concatenate([self.original_cond['crossattn']] + [empty.original_cond['crossattn']] * missing_size)
IndexError: too many indices for tensor of dimension 2
ljleb commented 1 year ago

Thanks for reporting. What was the prompt? This looks like an sdxl generation

pmcculler commented 1 year ago

I don't know which prompt caused this anymore, and I haven't seen it since. I may have goofed something up. How about we close this and if I can repro it I'll open a bug with a repro? :)