Mikubill / sd-webui-controlnet

WebUI extension for ControlNet
GNU General Public License v3.0
16.84k stars 1.94k forks source link

[Bug]: Wrong RGB channel order for IPA and InstantID #2735

Closed ZhangVision closed 5 months ago

ZhangVision commented 5 months ago

Is there an existing issue for this?

What happened?

IPA and InstantID preprocessor use the insight face model to detect face and extract face embeddings, the input color channel for insight face should be BGR. But the controlnet pass an RGB to insight face. A wrong channel order may cause failed face detection and wrong embedding features.

Steps to reproduce the problem

In controlnet, set preprocessor: ip-adapter_face_id_plus model: ip-adapter-faceid-plusv2_sd15 [6e14fc1a] use the following attached image to generate de790422-b8d9-402e-b15f-996635c57bff

What should have happened?

Face should be detected and ip-adapter is called. The image can be detected successfully if using BGR but failed in webUI controlnet.

Commit where the problem happens

webui: 5ef669de080814067961f28357256e8fe27544f4 controlnet: c5432dd

What browsers do you use to access the UI ?

No response

Command Line Arguments

python launch.py --listen --device-id=0 --port=8001 --no-half --xformers --api --skip-prepare-environment

List of enabled extensions

sd-webui-controlnet

Console logs

Launching Web UI with arguments: --listen --device-id=0 --port=8001 --no-half --xformers --api --skip-prepare-environment            
[2024-04-09 08:08:02,817] [INFO] [real_accelerator.py:158:get_accelerator] Setting ds_accelerator to cuda (auto detect)              
ControlNet preprocessor location: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/annotator/downloads         
2024-04-09 08:08:09,779 - ControlNet - INFO - ControlNet v1.1.440                                                                    
2024-04-09 08:08:10,085 - ControlNet - INFO - ControlNet v1.1.440                                                                    
Loading weights [6ce0161689] from /home/e/projects/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors    
2024-04-09 08:08:11,272 - ControlNet - INFO - ControlNet UI callback registered.                                                     
Running on local URL:  http://0.0.0.0:8001                                                                                           

To create a public link, set `share=True` in `launch()`.                                                                             
Startup time: 12.6s (import torch: 6.9s, import gradio: 0.4s, setup paths: 0.7s, initialize shared: 0.3s, other imports: 0.6s, setup 
codeformer: 0.2s, load scripts: 1.9s, create ui: 0.9s, gradio launch: 0.2s).                                                         
Creating model from config: /home/e/projects/stable-diffusion-webui/configs/v1-inference.yaml  
Applying attention optimization: xformers... done.
Model loaded in 60.8s (load weights from disk: 1.5s, create model: 0.2s, apply weights to model: 58.9s, move model to device: 0.1s, c
alculate empty prompt: 0.1s).
2024-04-09 08:43:04,334 - ControlNet - INFO - unit_separate = False, style_align = False
2024-04-09 08:43:04,580 - ControlNet - INFO - Loading model: ip-adapter-faceid-plusv2_sd15 [6e14fc1a]
2024-04-09 08:43:04,893 - ControlNet - INFO - Loaded state_dict from [/home/e/projects/stable-diffusion-webui/models/ControlNet/ip-ad
apter-faceid-plusv2_sd15.bin]
2024-04-09 08:43:04,893 - ControlNet - INFO - IP-Adapter faceid plus v2 detected.
2024-04-09 08:43:05,270 - ControlNet - INFO - ControlNet model ip-adapter-faceid-plusv2_sd15 [6e14fc1a] loaded.
2024-04-09 08:43:05,272 - ControlNet - INFO - Using preprocessor: ip-adapter_face_id_plus
2024-04-09 08:43:05,272 - ControlNet - INFO - preprocessor resolution = 512
Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}}
find model: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/annotator/downloads/insightface/models/buffalo_l/1
k3d68.onnx landmark_3d_68 ['None', 3, 192, 192] 0.0 1.0
Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}}
find model: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/annotator/downloads/insightface/models/buffalo_l/2
d106det.onnx landmark_2d_106 ['None', 3, 192, 192] 0.0 1.0
Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}}
find model: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/annotator/downloads/insightface/models/buffalo_l/d
et_10g.onnx detection [1, 3, '?', '?'] 127.5 128.0
Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}}
find model: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/annotator/downloads/insightface/models/buffalo_l/g
enderage.onnx genderage ['None', 3, 96, 96] 0.0 1.0
Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}}
find model: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/annotator/downloads/insightface/models/buffalo_l/w
600k_r50.onnx recognition ['None', 3, 112, 112] 127.5 127.5
set det-size: (640, 640)
*** Error running process: /home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/controlnet.py
    Traceback (most recent call last):
      File "/home/e/projects/stable-diffusion-webui/modules/scripts.py", line 619, in process
        script.process(p, *script_args)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/controlnet.py", line 1143, in process
        self.controlnet_hack(p)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/controlnet.py", line 1128, in controlnet_h
ack
 self.controlnet_main_entry(p)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/controlnet.py", line 969, in controlnet_ma
in_entry
        controls, hr_controls = list(zip(*[preprocess_input_image(img) for img in input_images]))
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/controlnet.py", line 969, in <listcomp>
        controls, hr_controls = list(zip(*[preprocess_input_image(img) for img in input_images]))
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/controlnet.py", line 936, in preprocess_in
put_image
        detected_map, is_image = self.preprocessor[unit.module](
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/utils.py", line 80, in decorated_func
        return cached_func(*args, **kwargs)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/utils.py", line 64, in cached_func
        return func(*args, **kwargs)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/global_state.py", line 37, in unified_prep
rocessor
 return preprocessor_modules[preprocessor_name](*args, **kwargs)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/processor.py", line 830, in face_id_plus
        face_embed, _ = g_insight_face_model.run_model(img)
      File "/home/e/projects/stable-diffusion-webui/extensions/sd-webui-controlnet/scripts/processor.py", line 753, in run_model
        raise Exception(f"Insightface: No face found in image.")
    Exception: Insightface: No face found in image.

Additional information

No response

huchenlei commented 5 months ago

Thanks for spotting this issue!

huchenlei commented 5 months ago

Corresponding channel convertion code in instant id main repo: https://github.com/InstantID/InstantID/blob/042a57c75a265db302eea4e402265d7a803dc93d/gradio_demo/app.py#L233