Haoming02 / sd-forge-ic-light

An Extension for Forge Webui that implements IC-Light
Apache License 2.0
24 stars 1 forks source link

使用FC或者FBC模型生成后,直接切换另一个模型进行生成时控制台会报错,目前我是重启控制台才能解决 #10

Closed nightdye closed 1 week ago

nightdye commented 1 week ago

报错如下: Traceback (most recent call last): File "D:\stable-diffusion-webui-forge\modules_forge\main_thread.py", line 30, in work self.result = self.func(*self.args, self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\modules\txt2img.py", line 124, in txt2img_function processed = processing.process_images(p) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\modules\processing.py", line 842, in process_images res = process_images_inner(p) ^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\modules\processing.py", line 990, 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:\stable-diffusion-webui-forge\modules\processing.py", line 1387, in sample samples = self.sampler.sample(self, x, conditioning, unconditional_conditioning, image_conditioning=self.txt2img_image_conditioning(x)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\modules\sd_samplers_kdiffusion.py", line 238, 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:\stable-diffusion-webui-forge\modules\sd_samplers_common.py", line 272, in launch_sampling return func() ^^^^^^ File "D:\stable-diffusion-webui-forge\modules\sd_samplers_kdiffusion.py", line 238, in 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:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\utils_contextlib.py", line 115, in decorate_context return func(*args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\k_diffusion\sampling.py", line 146, in sample_euler_ancestral denoised = model(x, sigmas[i] s_in, extra_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1532, in _wrapped_call_impl return self._call_impl(*args, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1541, in _call_impl return forward_call(*args, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\modules\sd_samplers_cfg_denoiser.py", line 199, in forward denoised, cond_pred, uncond_pred = sampling_function(self, denoiser_params=denoiser_params, cond_scale=cond_scale, cond_composition=cond_composition) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\sampling\sampling_function.py", line 362, in sampling_function denoised, cond_pred, uncond_pred = sampling_function_inner(model, x, timestep, uncond, cond, cond_scale, model_options, seed, return_full=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\sampling\sampling_function.py", line 303, in sampling_function_inner cond_pred, uncond_pred = calc_cond_uncondbatch(model, cond, uncond, x, timestep, model_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\sampling\sampling_function.py", line 271, in calc_cond_uncond_batch output = model_options['model_function_wrapper'](model.apply_model, {"input": inputx, "timestep": timestep, "c": c, "cond_or_uncond": cond_or_uncond}).chunk(batch_chunks) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\extensions\sd-forge-ic-light\lib_iclight\ic_light_nodes.py", line 61, in wrapper_func return existing_wrapper(unet_apply, params=apply_c_concat(params)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\extensions\sd-forge-ic-light\lib_iclight\ic_light_nodes.py", line 53, in unet_dummy_apply return unet_apply(x=params["input"], t=params["timestep"], params["c"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\modules\k_model.py", line 45, in apply_model model_output = self.diffusion_model(xc, t, context=context, control=control, transformer_options=transformer_options, *extra_conds).float() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1532, in _wrapped_call_impl return self._call_impl(args, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1541, in _call_impl return forward_call(*args, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\nn\unet.py", line 713, in forward h = module(h, emb, context, transformer_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1532, in _wrapped_call_impl return self._call_impl(*args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1541, in _call_impl return forward_call(args, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\nn\unet.py", line 89, in forward x = layer(x) ^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1532, in _wrapped_call_impl return self._call_impl(*args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\module.py", line 1541, in _call_impl return forward_call(args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge\backend\operations.py", line 170, in forward return super()._conv_forward(x, weight, bias) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\stable-diffusion-webui-forge.ext\Lib\site-packages\torch\nn\modules\conv.py", line 456, in _conv_forward return F.conv2d(input, weight, bias, self.stride, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Given groups=1, weight of size [320, 8, 3, 3], expected input[2, 12, 80, 64] to have 8 channels, but got 12 channels instead Given groups=1, weight of size [320, 8, 3, 3], expected input[2, 12, 80, 64] to have 8 channels, but got 12 channels instead

nightdye commented 1 week ago

还有一个办法,就是我得关闭插件生成一次图像,再次启用就正常

Haoming02 commented 1 week ago

我剛剛測試沒有問題。

  1. 開啟 Forge Webui
  2. 選擇 realisticVisionV51 模型
  3. 開啟 IC-Light;使用 FC 模式;上傳主角;進行文生圖
  4. 成功
  5. 關閉 IC-Light
  6. 選擇 flux1-schnell-bnb-nf4 模型
  7. 進行文生圖
  8. 成功
nightdye commented 1 week ago

QQ截图20241101101931 QQ截图20241101101942 我指的是来回切换IC-Light的模型,同一个Checkpoint下生成图片会有以上的报错,就是我先使用FC生成后切换FBC模型生成就会出错,相反先使用FBC生成后再切换FC也会报错,我目前解决方法是重启控制台或者关闭插件进行一次文生图后再启用插件

nightdye commented 1 week ago

QQ截图20241101103044 这是我用forge版本和py版本

Haoming02 commented 1 week ago

有了,我也 repro 這個問題了

研究中...

nightdye commented 1 week ago

以下是ChatGPT给的回复: 这个错误提示表明 torch.nn.Conv2d 层期望输入的通道数是 8,但当前输入的是 12 个通道。这个问题通常由以下原因引起:

  1. 输入通道不匹配:模型的卷积层配置和实际输入的通道数不一致。这可能发生在预处理、编码器、解码器或者通道数调整过程中。
  2. 模型配置错误:模型结构的某些层可能未正确初始化,或者存在修改,导致输入和期望的通道数不一致。
  3. 插件或扩展冲突:如果使用了第三方扩展或插件(如 ic_light 或其他增强功能),可能这些扩展改变了模型的内部结构,导致通道数不匹配。

解决方法

  1. 检查输入数据:确保输入数据的格式和通道数符合模型要求。可以在 txt2img_function 调用 processing.process_images 前,打印或检查输入数据的形状。

  2. 验证模型层配置:在 apply_model 函数中确认 unet 模型配置是否正确。检查卷积层是否被设置为接受正确数量的通道。如果模型代码可以更改,尝试显式指定每层的输入和输出通道数。

  3. 禁用相关扩展:如果使用了 sd-forge-ic-light 扩展,尝试禁用它,并查看问题是否解决。然后可以排查这个扩展的设置,或查找是否存在更新或补丁修复这个问题。

  4. 检查依赖项版本:有时依赖库(例如 torch)的更新会引起此类问题。确保当前的依赖项版本与项目要求匹配,特别是对于 torchdiffusers 等重要组件。

如果以上步骤仍无法解决问题,请提供更多信息(如模型架构和数据输入的形状)以便进一步排查。

Haoming02 commented 1 week ago

新發現: 在舊 Forge (Gradio 3) 上切換模型不會有這個問題,所以這是新 Forge 的 Backend 造成的。

Haoming02 commented 1 week ago

修好了~

nightdye commented 1 week ago

ok,完美