【ComfyUI插件】ControlNet核心节点
前言:
ControlNet_aux库包含大量的图片预处理节点,丰富的功能让他可以处理各种复杂的场景,包含图像分割,边缘检测,姿势检测,深度图处理等各种预处理方式,使用ControlNet之前必须掌握这些节点的使用,否则ControlNet可能不会起作用,所以本篇文章将带领大家理解并学会使用这些节点。
目录:
先行:安装方法
模型下载
一、Segmentor节点
二、Lines节点
三、Color Pallete/Content Shuffle节点
四、OpenPose节点
五、Depth节点
六、MeshGraphormer Hand Refiner节点
七、Inpaint Preprocessor/SAM Segmentor/Tile节点
八、Image Luminance/Image Intensity/Enchance And Resize Hint Images节点
九、Pixel Perfect Resolution/Generation Resolution From Latent/Generation Resolution From Image节点
十、AIO Aux Preprocessor节点
LoRA示例工作流
安装方法:
在ComfyUI主目录custom_nodes里面输入CMD回车。
在弹出的CMD命令行输入git clone xxx,即可开始下载。
github项目地址:https://github.com/Fannovel16/comfyui_controlnet_aux.git
模型下载:
ControlNet-SD1.5模型下载地址:https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main
注意:模型下载需同时下载ControlNet模型和模型对应的配置文件(yaml)文件。
一、Segmentor节点
节点功能:该类节点用来对原始图像进行分割,并且用不同颜色标注出图像区域。
节点检索:Anime Face Segmentor/ UniFormer Segmentor/ Semantic Segmentor (legacy, alias for UniFormer)/ OneFormer COCO Segmentor/ OneFormer ADE20K Segmentor
输入:
image -> 需要进行预处理的原始图片
参数:
remove_background_using_abg -> 自动生成的二值化字符掩码,从图像中分离对象
resolution -> 输出图像的分辨率 **此值会影响最终的图像分割结果**
输出:
IMAGE -> 输出图像分割后的结果
ABG_CHARACTER_MASK(MASK) -> 输出二值化的蒙版结果
注意:这些节点的使用会自动下载相应的模型,模型存放位置为。
..\ComfyUI\custom_nodes\comfyui_controlnet_aux\ckpts\lllyasviel\Annotators
二、Lines节点
节点功能:该节点将从原始图像进行处理获得图像的边缘信息或者二进制图像信息。
节点检索:Binary Lines/ Standard Lineart/ HED Soft-Edge Lines/ Scribble Lines/ Anime Lineart/ PiDiNet Soft-Edge Lines/ TEEDPreprocessor/ Scribble XDoG Lines/ Canny Edge/ M-LSD Lines/ Fake Scribble Lines (aka scribble_hed)/ Manga Lineart (aka lineart_anime_denoise)/ Diffusion Edge (batch size ↑ => speed ↑, VRAM ↑)/ Realistic Lineart/
输入:
image -> 需要处理的原始图像
参数:
bin_threshold -> 表示阈值 **该阈值会影响边缘检测效果,可进行更改尝试效果**
safe -> 该参数控制着 HED 算法中的行为 **比如异常值处理,边缘链接等**
guassian_sigma -> 表示高斯滤波核 **图像边缘检测前一般会进行降噪,此时用到高斯滤波核**
patch_batch_size -> 表示边缘检测时批次数量 **图像一般会被分块进行处理,块成为patch**
resolution -> 表示输出图像的分辨率 **该值会影响最终的检测效果**
注意:这些节点的参数较多,上图的对比仅使用默认的参数进行跑图,具体的情况还需要大家进行多次尝试,上图效果仅供参考。
输出:
IMAGE -> 输出图像的边缘检测信息结果
三、Color Pallete/Content Shuffle节点
节点功能:这两个节点对原始图像进行混洗或者分析色块,在ComfyUI主要作用是保持图像的画风一致,配合shuffle的ControlNet使用。
节点检索:Color Pallete/Content Shuffle
输入:
image -> 传入原始图像
参数:
resolution -> 表示输出图像的分辨率 **此值的设定会影响最终结果**
seed -> 随机数种子
control_after_generate -> 产生种子之后,以何种方式进行处理 **递增,递减,固定**
输出:
IMAGE -> 输出处理之后的图像
注意:此节点在ComfyUI中,主要用来配合shuffle的ControlNet模型一起使用,生成与原图中元素类似,并且色调类似的图像,如下图所示,使用ClipInterrogator结点进行提示词反推,后续使用ControlNet模型进行去噪过程干预,最终生成与原图类似的图像。
四、OpenPose节点
节点功能:该节点用来识别人物的骨骼图,作为openpose的预处理图片。
节点检索:DensePose Estimator/ AnimalPose Estimator (AP10K)/ DWPose Estimator/ MediaPipe Face Mesh/ OpenPose Pose
输入:
image -> 输入需要进行分析的原始图片
参数:
model -> 选择进行检测的模型
该模型所在路径: ..\comfyui_controlnet_aux\ckpts\LayerNorm
cmap -> 用于指定绘制图形时所使用的颜色映射方案
注意:常见的颜色映射方案包括 Viridis、Parula 等,具有不同的颜色分布,用于突出显示数据的不同特征或属性。
bbox_detector -> 加载探测框识别模型
pose_estimator -> 加载姿势识别模型
max_faces -> 参数用来指定一张图片最多出现人脸数量
min_confidence -> 代表了模型对于检测到的人脸的最小置信度阈值。
注意:当模型检测人脸时会给出一个数值,当值低于min_confidence则认为不是人脸。
输出:
IMAGE -> 输出检测后的图像
POSE_KEYPOINT -> 参数可能包含姿势检测结果的坐标信息,通常以一个列表或数组的形式呈现。
五、Depth节点
节点功能:这些节点用来处理原始图片生成深度图。
节点检索:MiDaS Depth Map/ Zoe Depth Map/ BAE Normal Map/ MiDaS Normal Map/ Depth Anything/ Zoe Depth Anything/ LeReS Depth Map (enable boost for leres++)
输入:
image -> 输入原始图片
参数:
bg_threshold -> 给出背景的阈值,以此值为基准进行背景分离
rm_nearest -> 设置像素插值 **该值主要针对主体**
rm_background -> 设置背景阈值 **该值过大会使得背景无深度信息**
boost -> 是否开始深度图增强模式 **开启,深度图会进行后处理,使深度信息更明显**
resolusion -> 输出图像的分辨率
输出:
IMAGE -> 输出处理后的深度图像信息
注意:深度图常配合depth的ControlNet使用,如下图所示的工作流,使用原图获得深度图信息,通过ControlNet指导模型进行扩散,最终生成与深度图吻合的图像。
六、MeshGraphormer Hand Refiner节点
节点功能:该节点将识别图片中人物的手部信息,并且输出对应的手部蒙版供inpaint使用,会输出修复后手部的深度信息。
输入:
images -> 接收输入的图像 **需要包含手部信息**
参数:
mask_bbox_padding -> 输出的蒙版大小 **该值只有在mask_type=original时起作用**
resolution -> 输出图像的分辨率
mask_type -> 选择输出蒙版的类型
mask_expand -> 蒙版区域扩大范围
rand_seed -> 给出种子用来生成输出结果
输出:
IMAGE -> 输出供ControlNet参考的预处理图像
INPAINTING_MASK -> 输出对应手部的蒙版
注意:如下图所示,使用该节点生成对应的深度图信息和手部的蒙版,将蒙版传入VAE encode(for inpainting)结点为扩散做准备,将深度图信息传入ControlNet用来引导模型扩散出指定的形状。
七、Inpaint Preprocessor/SAM Segmentor/Tile节点
节点功能:inpaint结点用来准备ControlNet的预处理图像,SAM Segmentor处理图像根据各部分使用不同的颜色标注,Tile会对原始图像进行金字塔采样从而生成预处理图像。
输入:
image -> 接收需要调整的图像
mask -> 输入蒙版信息
参数:
pyrUp_iters -> 该参数可能表示金字塔向上采样的迭代次数 **个人理解,慎重吸收**
resolution -> 表示输出图像的分辨率
输出:
IMAGE -> 输出调整之后的图像
注意:下图为ControlNet配合inpaint结点的使用方式,原图中对人物的脸部进行蒙版的绘制,随后传入Inpaint Preprocessor结点生成处理后的图像,然后使用inpaint对应的ControlNet模型去引导模型扩散,从而对人物的脸部进行局部修复。
八、Image Luminance/Image Intensity/Enchance And Resize Hint Images节点
节点功能:该节点对原始图像的亮度和强度以及分辨率进行更改。
输入:
image -> 需要进行处理的原始图像
参数:
gamma_corection -> 伽马矫正,用来调整图片的感知差异
resolution -> 调整输出图像的分辨率
输出:
IMAGE -> 输出调整后的图像
九、Pixel Perfect Resolution/Generation Resolution From Latent/Generation Resolution From Image节点
节点功能:完美像素结点是重点!!!剩余两个结点分别是从原图和潜空间图像获取分辨率信息。
输入:
image/original_image -> 需要进行处理的原始图像
latent -> 潜空间图像
参数:
image_gen_width -> 要生成图像的宽度 **最终输出int为width和height中最小值**
image_gen_height -> 要生成图像的高度 **最终输出int为width和height中最小值**
resize_mode -> 图片的填充模式
注意:完美像素结点是对原始图像进行分辨率分析,然后根据相应的算法去计算最终出图的分辨率,图中对于生成图片的参数设置只取其中最小的值,下面是该节点的代码,可以看出最终只输出estimation一个整数类型,取宽高中的最小值进行计算。
输出:
IMAGE_GEN_WIDTH(INT) -> 图像的宽度
IMAGE_GEN_HEIGHT(INT) -> 图像的高度
十、AIO Aux Preprocessor节点
节点功能:该节点作为预处理结点的综合结点,可通过参数设置预处理方法。
输入:
image -> 需要进行处理的原始图像
参数:
preprocessor -> 预处理方法的选择
resolution -> 调整输出图像的分辨率
注意:preprocessor包含多种预处理选项,可以根据需求自行选择。
输出:
IMAGE -> 处理后的图像
ControlNet示例工作流:
学习完以上节点,您就可以搭建“ControlNet示例”工作流了
这里使用SD1.5的大模型,使用手部修复结点产生原图中人物手部对应的蒙版和修复使用到的深度图,后续将深度图传入ControlNet进行指导模型扩散,并且使用Clipinterrogator节点对原始图片进行语义反推,从而修复人物手部,原图和修复后图像如下所示:
孜孜不倦,方能登峰造极。坚持不懈,乃是成功关键。