scraed / CharacteristicGuidanceWebUI

Provide large guidance scale correction for Stable Diffusion web UI (AUTOMATIC1111), implementing the paper "Characteristic Guidance: Non-linear Correction for Diffusion Model at Large Guidance Scale"
https://scraed.github.io/CharacteristicGuidance/
Apache License 2.0
78 stars 8 forks source link

[forge] Reported errors when using with unipc sampler. #14

Closed cavaniho closed 3 months ago

cavaniho commented 3 months ago

haracteristic Guidance recorded iterations info for 0 steps Characteristic Guidance recovering the CFGDenoiser Traceback (most recent call last): File "E:\aidraw\stable-diffusion-webui-forge\modules_forge\main_thread.py", line 37, in loop task.work() File "E:\aidraw\stable-diffusion-webui-forge\modules_forge\main_thread.py", line 26, in work self.result = self.func(*self.args, **self.kwargs) File "E:\aidraw\stable-diffusion-webui-forge\modules\txt2img.py", line 111, in txt2img_function processed = processing.process_images(p) File "E:\aidraw\stable-diffusion-webui-forge\modules\processing.py", line 752, in process_images res = process_images_inner(p) File "E:\aidraw\stable-diffusion-webui-forge\modules\processing.py", line 922, 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 "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\CHGextension.py", line 421, in wrapper raise e File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\CHGextension.py", line 417, in wrapper result = sample(conditioning, unconditional_conditioning, seeds, subseeds, subseed_strength, File "E:\aidraw\stable-diffusion-webui-forge\modules\processing.py", line 1275, in sample samples = self.sampler.sample(self, x, conditioning, unconditional_conditioning, image_conditioning=self.txt2img_image_conditioning(x)) File "E:\aidraw\stable-diffusion-webui-forge\modules\sd_samplers_timesteps.py", line 173, 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 "E:\aidraw\stable-diffusion-webui-forge\modules\sd_samplers_common.py", line 263, in launch_sampling return func() File "E:\aidraw\stable-diffusion-webui-forge\modules\sd_samplers_timesteps.py", line 173, 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 "E:\aidraw\stable-diffusion-webui-forge\modules\sd_samplers_timesteps_impl.py", line 135, in unipc x = unipc_sampler.sample(x, steps=len(timesteps), t_start=t_start, skip_type=shared.opts.uni_pc_skip_type, method="multistep", order=shared.opts.uni_pc_order, lower_order_final=shared.opts.uni_pc_lower_order_final) File "E:\aidraw\stable-diffusion-webui-forge\modules\models\diffusion\uni_pc\uni_pc.py", line 760, in sample model_prev_list = [self.model_fn(x, vec_t)] File "E:\aidraw\stable-diffusion-webui-forge\modules\models\diffusion\uni_pc\uni_pc.py", line 455, in model_fn return self.data_prediction_fn(x, t) File "E:\aidraw\stable-diffusion-webui-forge\modules\models\diffusion\uni_pc\uni_pc.py", line 439, in data_prediction_fn noise = self.noise_prediction_fn(x, t) File "E:\aidraw\stable-diffusion-webui-forge\modules\models\diffusion\uni_pc\uni_pc.py", line 433, in noise_prediction_fn return self.model(x, t) File "E:\aidraw\stable-diffusion-webui-forge\modules\sd_samplers_timesteps_impl.py", line 124, in model res = self.cfg_model(x, t_input, **self.extra_args) File "E:\aidraw\stable-diffusion-webui-forge\venv\lib\site-packages\torch\nn\modules\module.py", line 1518, in _wrapped_call_impl return self._call_impl(*args, **kwargs) File "E:\aidraw\stable-diffusion-webui-forge\venv\lib\site-packages\torch\nn\modules\module.py", line 1527, in _call_impl return forward_call(*args, **kwargs) File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\CHGextension.py", line 382, in _call_forward return CHGDenoiser.forward(self, *args, **kwargs) File "<string>", line 36, in forward File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\forge_inject.py", line 263, in forge_sample denoised = sampling_function(self,model, x, timestep, uncond, cond, cond_scale, model_options, seed) File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\forge_inject.py", line 193, in sampling_function cond_pred, uncond_pred = calc_cond_uncond_batch(self,model, cond, uncond_, x, timestep, model_options,cond_scale) File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\forge_inject.py", line 157, in calc_cond_uncond_batch output = Chara_iteration(self,model,None,input_x,timestep_,cond_scale,uncond[0]['cross_attn'],c).chunk(batch_chunks) File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\CharaIte.py", line 182, in Chara_iteration dxs_add = chara_ite_inner_loop(self, evaluations, ite_paras) File "E:\aidraw\stable-diffusion-webui-forge\extensions\CharacteristicGuidanceWebUI\scripts\CharaIte.py", line 222, in chara_ite_inner_loop abt = self.alphas[t_in.long()] RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu) indices should be either on cpu or on the same device as the indexed tensor (cpu)

scraed commented 3 months ago

Hey, seems unipc call the model in a different way. I will try to fix it soon.

charrywhite commented 3 months ago

Hello, I've updated the code to support UniPC sampler, please try it~ @cavaniho

cavaniho commented 3 months ago

Hello, I've updated the code to support UniPC sampler, please try it~ @cavaniho

The plugin can now be used on unipc, thanks