前言:
学习 ComfyUI 是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如自动人脸检测和优化修复、区域增强、局部重绘、控制人群、发型设计、更换模特服饰等。在 ComfyUI 的进阶之路上,ComfyUI Impact 是每个人不可绕过的一条大河,所以本篇文章将带领大家理解并学会使用这些节点。祝大家学习顺利,早日成为 ComfyUI 的高手!
一、安装方式
方法一:通过 ComfyUI Manager 安装(推荐)
打开 Manager 界面
方法二:使用 git clone 命令安装
在 ComfyUI/custom_nodes 目录下输入 cmd 按回车进入电脑终端
在终端输入下面这行代码开始下载
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack
二、SAMLoader 节点
加载和处理 SAM(Segment Anything Model)模型文件。该节点的主要功能是将预训练的 SAM 模型加载到内存中,以便在后续的节点中进行图像分割或其他相关操作。
输入:
SAM 模型的路径 **假如配置好了路径文件,模型可自行选择**
device_name → 设备模式,可以选择在GPU或CPU上运行,推荐选择自动即可
输出:
SAM_MODEL → 根据调用该模型的节点情况对目标进行分割,生成目标的轮廓
注意:该模型不能单独使用,需要其他模型为其指定分割区域,随后该模型可以做到精细的分割。如下图对比:
使用场景:
加载模型:SAMLoader 节点用于从指定路径加载预训练的 SAM 模型文件。通常,这些模型文件会存储在本地磁盘或其他存储介质上。
配置参数:节点会提供一些参数配置选项,让用户可以指定模型文件的路径和其他加载参数。
输出模型:一旦模型加载完成,SAMLoader 节点会输出一个表示该模型的对象,该对象可以传递给其他节点以执行具体的图像分割任务。
通过 SAMLoader 节点,可以方便地加载和使用预训练的 SAM 模型,进行各种图像分割任务,实现更高效的图像处理工作流程。
三、UltralyticsDetectorProvider 节点
提供一个基于 Ultralytics 的目标检测器,用于替换现有基于 mmdet 的检测器,可加载 BBOX_Model 和 SEGM_Model 两种模型之一。
输入:
目标检测模型的路径 **主流的模型有脸部检测、手部检测、身体检测等,假如配置好了路径文件,模型可自行选择**
输出:
BBOX_DETECTOR → 使用矩形框进行检测
SEGM_DETECTOR → 检测出目标的轮廓
注意:该节点只能加载 BBOX 和 SEGM 中的一种模型,并且要根据 model_name 中所选的模型类型进行连接,例如我的 bbox/face_yolov8m.pt 是一个 BBOX 类型的脸部检测模型,所以再连线时我就要选择 BBOX_DETECTOR 进行连线,这也是 SEGM_DETECTOR 会显示红叉的原因。
下面两张图片说明 BBOX 模型和 SEGM 模型的区别:
节点注意事项:
确保选择的模型文件路径正确,或者如果使用预定义模型,确保网络连接稳定以下载模型文件。
调整置信度阈值可以控制检测结果的精确度和召回率。较高的阈值会减少误报,但可能漏检,较低的阈值会增加召回率,但可能误报更多。
通过 UltralyticsDetectorProvider 节点,可以方便地利用 Ultralytics 提供的高效目标检测模型,进行各种目标检测任务,如物体识别、跟踪等,实现智能图像分析。
四、BBOX Detector(SEGS) / BBOX Detector(combined)节点
这两个节点用于目标检测任务,这些节点会输出检测到的对象的边界框(Bounding Box, BBOX)信息。它们的主要区别在于处理的输入类型和方法。
BBOX Detector(SEGS) 节点通常用于从分割结果中提取边界框。这种方法适用于图像分割模型的输出,其中每个对象的像素已经被分割出来,节点通过分析这些分割结果来确定每个对象的边界框。
BBOX Detector(combined) 节点用于直接处理输入图像,通过目标检测模型同时进行对象识别和边界框提取。这个节点适合使用预训练的目标检测模型,如 YOLO 等。
输入:
bbox_detector → BBOX类型的检测模型
image → 输入加载的图片
detailer_hook → impact库的一个特殊参数,用于在模型的不同阶段或特定事件发生时执行一些额外的操作
参数:
threshold → 阈值,仅检测已识别置信度高于此值的对象
dilation → 调整最终显示时,检测到的掩码区域的大小
crop_factor → 根据检测到的掩码区域,确定应将周围区域包含在细节修复过程中的次数 **如果此值较小,则修复可能无法正常工作,因为无法知道周围的上下文**
drop_size → 降低尺寸,用于控制细节增强过程中的图像降低尺寸的大小。
文本框 → 用于输入文本指定被允许检测的地方
输出:
SEGS → 包含每次检测的裁剪图像、掩码图案、裁剪位置和置信度
MASK → 所有检测到的矩形框组合而成的单个掩码
使用方法:
① BBOX Detector(SEGS) 节点
输入分割结果:节点接受图像分割模型的输出,通常是一个包含分割掩码的图像。
提取边界框:通过分析分割掩码,节点确定每个对象的边界框。
输出边界框:节点输出一个包含所有检测对象边界框的信息,包括每个边界框的位置和大小。
② BBOX Detector(combined) 节点
输入图像:节点接受一个输入图像。
目标检测:通过预训练的目标检测模型(如 YOLO)在图像中检测对象并提取边界框。
输出边界框:节点输出一个包含所有检测对象边界框的信息,包括每个边界框的位置、大小以及对象类别和置信度分数。
合理使用 BBOX Detector(SEGS)和 BBOX Detector(combined)节点,可以实现复杂的图像分析任务,包括对象检测、定位和分类,从而提升各种应用场景下的智能化水平。
五、SAMDetector(combined) / SAMDetector(segmented)节点
用于目标检测和图像分割任务。这俩节点利用 Segment Anything Model (SAM) 来进行高级的图像处理。
输入:
sam_model → 接收SAMLoader节点加载的SAM模型
segs → 接收UltralyticsDetectorProvider节点加载的目标检测模型
image → 接收加载的图片
参数:
detection_hint → 用来指定在分割时使用哪种类型的检测结果作为提示来帮助生成掩码
dilation → 膨胀分割结果的边界
threshold → 阈值,仅检测已识别置信度高于此值的对象
bbox_expansion → 控制在生成轮廓时扩展边界的大小,以确保更好地包含目标对象
mask_hint_threshold → 与mask_hint_use_nagative参数一起使用,用于指定detection_hint的阈值,将掩码区域中的掩码值等于或高于阈值的情况解释为正提示
注意:大于 0 但小于 mask_hint_threshold 的值不用作否定提示。
mask_hint_use_nagative → 控制是否使用负提示来辅助分割
输出:
combined_mask → 分割节点的深度信息,包含整个图像的分割结果
batch_masks → 分割节点的深度信息,包含批处理中每个样本的分割结果
MASK → 分割节点的深度信息,包含整个图像的分割结果
注意事项
模型选择:确保选择合适的 SAM 模型版本和配置参数,以获得最佳的检测和分割效果。
输入数据质量:无论是直接输入图像还是预先分割的结果,输入数据的质量都会影响最终的检测和分割效果。
合理使用 SAMDetector(combined)和 SAMDetector(segmented)节点,可以实现高效的图像检测和分割任务,满足多种应用场景的需求。
六、Simple Detector(SEGS) / Simple Detector(SEGS/pipe) / Simple Detector for AnimateDiff(SEGS)
与前面几个检测器的功能类似,都是接收模型->分割->输出分割结果,旨在处理不同类型的输入和工作流程,以满足特定应用需求。
输入:
bbox_detector → 接收BBOX模型
image_frames → 动画帧的输入图像序列
image → 接收待分割的图片
sam_model_opt → 接收SAM模型
segm_detector_opt → 接收SEGM模型
detailer_pipe → 输入细节调整的参数,使分割结果更加完美
参数:
bbox_threshold → BBOX模型的检测阈值
bbox_dilation → BBOX模型边界框的膨胀参数,用于扩展边界框的范围
crop_factor → 裁剪因子,用于裁剪图像
drop_size → 设置一个尺寸阈值,用于过滤较小目标的参数
sub_dilation → 子图的膨胀参数
sub_bbox_expansion → 子图BBOX模型的边界框扩展参数
sam_mask_hint_threshold → SAM模型的掩码提示阈值
masking_mode → 调节掩码模式
segs_pivot → 选择动画差异检测的基准点
post_dilation → 后期处理膨胀参数
输出:
SEGS → 分割结果的深度信息
注意事项
输入数据质量:无论是直接输入图像还是预先分割的结果,输入数据的质量都会影响最终的检测和分割效果。
工作流程配置:确保在复杂工作流程中,各节点的连接和数据流动顺畅,以获得最佳处理效果。
合理使用这三个节点,可以实现多种图像处理任务,包括目标检测、图像分割和动画处理,满足不同应用场景的需求。
七、DetailerDebug(SEGS)节点
放大图像并在内部利用 KSampler 对图像进行绘制。
输入:
image → 需要重绘的原始图像
segs → 输入分割模型得到的分割结果
model → checkpoints大模型
clip → 提示词编码模型
vae → vae模型
positive → 正向提示词
negative → 反向提示词
detailer_hook → 对模型进行更加精细调整的拓展接口
注意:这里的正向提示词和反向提示词都是针对重绘部分的,用于指导重绘后的图像。
参数:
guide_size → 参考尺寸 **小于的目标图像被放大以匹配,而大于的图像将被跳过,因为它们不需要细节处理**
guide_size_for → 设置guide_size基于什么 **当设置为bbox时,它使用检测器检测到的bbox作为参考;当设置为crop_region时,它使用基于检测到的bbox所识别的裁剪区域作为参考**
注意:选择 BBOX 时,基于 crop_factor 的放大图像的大小可能比 guide_size 大几倍。
max_size → 最大尺寸 **将目标图像的最长边限制为小于max_size的安全措施,它解决了bbox可能变得过大的问题,特别是如果它有细长的形状**
seed → 内置KSampler的种子
contorl_after_generate → 控制种子的变更方式 **fixed为固定种子,increment为每次增加1,decrement为每次减少1,randomize为种子随机**
steps → 去噪步数(也可以理解成生成图片的步数)
cfg → 提示词引导系数,即提示词对结果产生影响的大小 **过高会产生负面影响**
sampler_name → 选择采样器
scheduler → 选择调度器
denoise → 去噪幅度 **值越大对图片产生的影响和变化越大**
feather → 羽化的大小
noise_mask → 控制在修复过程中是否使用噪声掩码 **虽然在不用噪声掩码的情况下,较低的去噪值有时会产生更自然的结果,但通常建议将该参数设置为enabled**
force_inpaint → 防止跳过基于guide_size的所有过程 **当目标是修复而不是细化时,这很有用。小于guide_size的SEGS不会通过减小去匹配guide_size;相反,它们会被修复为原来的大小**
文本框 → 输入通配符的规范,如果保持为空,此选项将被忽略
cycle → 采样的迭代次数 **当与Detailer_hook一起使用时,此选项允许添加间歇性噪声,也可用于逐渐减小去噪大小,最初建立基本结构,然后对其进行细化。
inpaint_model → 使用修复模型时,需要启用此选项,以确保在低于1.0的降噪值下进行正确的内补
noise_mask_feather → 控制羽化操作是否应用于修复过程的蒙版
注意:此选项不能保证图像更自然,同时它可能会在边缘产生伪影,大家按需设置!
输出:
image → 最终重绘后的图片
cropped → 调整图像的大小、去除不必要的部分、集中注意力于特定区域的效果图
cropped_refined → 经过剪裁和进一步处理的图像
cropped_refined_alpha → 经过裁剪和精细化处理后的alpha通道
cnet_images → 蒙版位置图
注意事项
输入数据质量:确保输入的分割结果准确无误,因为输入数据的质量会直接影响分析和调试的效果。
节点配置:根据具体需求调整 DetailerDebug(SEGS)节点的配置参数,以获得最佳的分析和调试效果。
通过使用 DetailerDebug(SEGS)节点,可以深入了解和优化图像分割模型的性能,确保分割结果满足实际应用的需求,同时提升模型的开发和调试效率。
八、示例工作流
熟练使用以上节点,你就可以搭建一个简单的“AI 换脸”的工作流了。
该工作流先是对加载的图片进行脸部的检测和分割,然后将分割的结果、原图、重绘的提示词输入细节修复器中,在细节修复器中,内置的采样器会根据提示词对图片的脸部进行重新扩散,最后输出换脸之后的图。原图和换脸后的图如下所示: