From 37a20e516cf80261e6f16e4b231b48980d8238ab Mon Sep 17 00:00:00 2001 From: yueliang <2567830152@qq.com> Date: Thu, 5 Sep 2024 11:21:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=92=8C=E8=83=8C=E6=99=AF=E9=A2=9C=E8=89=B2=E9=80=89?= =?UTF-8?q?=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BiRefNet_node_config.py | 2 +- __init__.py | 7 -- assets/Colors_Presets.png | Bin 22399 -> 0 bytes nodes.py | 132 ++++++-------------------------------- 4 files changed, 19 insertions(+), 122 deletions(-) delete mode 100644 assets/Colors_Presets.png diff --git a/BiRefNet_node_config.py b/BiRefNet_node_config.py index 6d6dc09..4b4f600 100644 --- a/BiRefNet_node_config.py +++ b/BiRefNet_node_config.py @@ -2,7 +2,7 @@ import os import math -# from folder_paths import models_dir + os.environ['HOME'] = os.path.expanduser("~") class Config(): def __init__(self) -> None: diff --git a/__init__.py b/__init__.py index 604cbbc..d721463 100644 --- a/__init__.py +++ b/__init__.py @@ -1,10 +1,3 @@ -import os -import folder_paths - -rembg_path = os.path.join(folder_paths.models_dir, 'rembg') -if not os.path.exists(rembg_path): - os.makedirs(rembg_path) - from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] \ No newline at end of file diff --git a/assets/Colors_Presets.png b/assets/Colors_Presets.png deleted file mode 100644 index aef379968d7c96d447556ce471049c22e151be99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22399 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 diff --git a/nodes.py b/nodes.py index a0122d7..36fc804 100644 --- a/nodes.py +++ b/nodes.py @@ -2,15 +2,20 @@ from transformers import AutoModelForImageSegmentation import torch from torchvision import transforms import numpy as np -from PIL import Image, ImageColor +from PIL import Image import torch.nn.functional as F from .BiRefNet_node_config import Config -import folder_paths -import os import comfy.model_management as mm -from huggingface_hub import snapshot_download -comfyui_models_dir = folder_paths.models_dir +Config() + +torch.set_float32_matmul_precision(["high", "highest"][0]) + +birefnet = AutoModelForImageSegmentation.from_pretrained( + "ZhengPeng7/BiRefNet", trust_remote_code=True +) + + transform_image = transforms.Compose( [ @@ -43,84 +48,28 @@ def get_device_by_name(device): device = "cpu" if torch.cuda.is_available(): device = "cuda" - # device = torch.device("cuda") elif torch.backends.mps.is_available(): device = "mps" - # device = torch.device("mps") elif torch.xpu.is_available(): device = "xpu" - # device = torch.device("xpu") - # device = mm.get_torch_device() except: raise AttributeError("What's your device(到底用什么设备跑的)?") - # elif device == 'cuda': - # device = torch.device("cuda") - # elif device == "mps": - # device = torch.device("mps") - # elif device == "xpu": - # device = torch.device("xpu") print("\033[93mUse Device(使用设备):", device, "\033[0m") return device -def get_dtype_by_name(dtype): - """ - "dtype": (["auto","fp16","bf16","fp32", "fp8_e4m3fn", "fp8_e4m3fnuz", "fp8_e5m2", "fp8_e5m2fnuz"],{"default":"auto"}), - """ - if dtype == 'auto': - try: - if mm.should_use_fp16(): - dtype = torch.float16 - elif mm.should_use_bf16(): - dtype = torch.bfloat16 - else: - dtype = torch.float32 - except: - raise AttributeError("ComfyUI version too old, can't autodetect properly. Set your dtypes manually.") - elif dtype== "fp16": - dtype = torch.float16 - elif dtype == "bf16": - dtype = torch.bfloat16 - elif dtype == "fp32": - dtype = torch.float32 - elif dtype == "fp8_e4m3fn": - dtype = torch.float8_e4m3fn - elif dtype == "fp8_e4m3fnuz": - dtype = torch.float8_e4m3fnuz - elif dtype == "fp8_e5m2": - dtype = torch.float8_e5m2 - elif dtype == "fp8_e5m2fnuz": - dtype = torch.float8_e5m2fnuz - print("\033[93mModel Precision(模型精度):", dtype, "\033[0m") - return dtype - class BiRefNet_Hugo: def __init__(self): - self.model = None - self.loaded_model_name = None + pass @classmethod def INPUT_TYPES(cls): - rembg_list = os.listdir(os.path.join(comfyui_models_dir, "rembg")) - rembg_list.insert(0, "Auto_DownLoad-ZhengPeng7/BiRefNet") - rembg_list.insert(1, "Auto_DownLoad-ZhengPeng7/BiRefNet-DIS5K-TR_TEs") - rembg_list.insert(2, "Auto_DownLoad-ZhengPeng7/BiRefNet-COD") - rembg_list.insert(3, "Auto_DownLoad-ZhengPeng7/BiRefNet-HRSOD") - rembg_list.insert(4, "Auto_DownLoad-ZhengPeng7/BiRefNet-portrait") + return { "required": { - "model": (rembg_list, ), - # "model": (["Auto_Download"] + os.listdir(os.path.join(comfyui_models_dir, "rembg"))), "image": ("IMAGE",), - # "background_color_name": (["transparency", "green", "white", "red", "yellow", "blue", "black", "pink", "purple", "brown"],{"default": "transparency"}), "background_color_name": (colors,{"default": "transparency"}), - "background_color_code": ("STRING",{"default": "00ffdd"}), - "background_color_mode": ("BOOLEAN", {"default": True, "label_on": "color_name", "label_off": "color_code"}), - "device": (["auto", "cuda", "cpu", "mps", "xpu", "meta"],{"default": "auto"}), - "dtype": (["auto","fp16","bf16","fp32", "fp8_e4m3fn", "fp8_e4m3fnuz", "fp8_e5m2", "fp8_e5m2fnuz"],{"default":"fp32"}), - "cpu_offload": ("BOOLEAN", {"default": False, "label_on": "model_to_cpu", "label_off": "unload_model"}), - "Auto_Download_Path": ("BOOLEAN", {"default": True, "label_on": "rembg_local本地", "label_off": ".cache缓存"}), - "Show_Colors_In_Ternimal": ("BOOLEAN", {"default": False, "label_on": "yes", "label_off": "no"}), + "device": (["auto", "cuda", "cpu", "mps", "xpu", "meta"],{"default": "auto"}) } } @@ -131,73 +80,34 @@ class BiRefNet_Hugo: def background_remove(self, image, - model, device, - dtype, - cpu_offload, background_color_name, - background_color_code, - background_color_mode, - Auto_Download_Path, - Show_Colors_In_Ternimal, ): - if Show_Colors_In_Ternimal: - for name, code in ImageColor.colormap.items(): - print( f'{name:30} : {code}' ) - Config() - torch.set_float32_matmul_precision(["high", "highest"][1]) processed_images = [] processed_masks = [] - model_name = model.replace("Auto_DownLoad-", "") - if 'Auto_DownLoad-' not in model: - model_path = os.path.join(comfyui_models_dir, "rembg", model) - elif ('Auto_DownLoad-' in model) and (Auto_Download_Path == True): - model_path = os.path.join(comfyui_models_dir, "rembg", ("models--" + str(model_name).replace("/", "--"))) - if not os.path.exists(os.path.join(model_path, "model.safetensors")): - snapshot_download(model_name, - local_dir=model_path, - local_dir_use_symlinks=False - ) - elif ('Auto_DownLoad-' in model) and (Auto_Download_Path == False): - model_path = model_name - + device = get_device_by_name(device) - dtype = get_dtype_by_name(dtype) - - if self.loaded_model_name != model: - del self.model - self.model = None - if self.model == None: - self. model = AutoModelForImageSegmentation.from_pretrained( - model_path, - trust_remote_code=True, - ).to(device, dtype) - else: - self.model.to(device) - self.model.eval() + birefnet.to(device) for image in image: orig_image = tensor2pil(image) w,h = orig_image.size image = resize_image(orig_image) im_tensor = transform_image(image).unsqueeze(0) - im_tensor=im_tensor.to(device, dtype) + im_tensor=im_tensor.to(device) with torch.no_grad(): - result = self.model(im_tensor)[-1].sigmoid().cpu() + result = birefnet(im_tensor)[-1].sigmoid().cpu() result = torch.squeeze(F.interpolate(result, size=(h,w))) ma = torch.max(result) mi = torch.min(result) result = (result-mi)/(ma-mi) im_array = (result*255).cpu().data.numpy().astype(np.uint8) pil_im = Image.fromarray(np.squeeze(im_array)) - if background_color_name == 'transparency' and background_color_mode == True: + if background_color_name == 'transparency': color = (0,0,0,0) mode = "RGBA" else: color = background_color_name mode = "RGB" - if not background_color_mode: - color = "#" + str(background_color_code).replace("#", "").replace(":", "").replace(" ", "") # 颜色码-绿色:#00FF00 - # new_im = Image.new("RGBA", pil_im.size, (0,0,0,0)) new_im = Image.new(mode, pil_im.size, color) new_im.paste(orig_image, mask=pil_im) new_im_tensor = pil2tensor(new_im) @@ -207,12 +117,6 @@ class BiRefNet_Hugo: new_ims = torch.cat(processed_images, dim=0) new_masks = torch.cat(processed_masks, dim=0) - if cpu_offload == True: - self.model.to("cpu") - self.loaded_model_name = model - else: - del self.model - self.model = None return new_ims, new_masks