【版权严正声明】
本文系作者 [编程界的小学生] 原创,并拥有完整、独立的著作权。
未经本人 书面授权 ,任何单位、平台或个人, 严禁 以任何形式(包括但不限于转载、复制、摘编、修改、链接、转贴、建立镜像等)使用本文的全部或部分内容。
任何无视本声明的侵权行为,本人将依据《中华人民共和国著作权法》等相关法律法规,采取一切必要的法律手段,追究其侵权责任,要求其 立即停止侵权、赔礼道歉、消除影响,并赔偿因此造成的一切经济损失及维权成本(包括但不限于律师费、诉讼费、公证费等)。
侵权必究,切勿以身试法!
1. 插件简介
插件地址: https://github.com/kijai/ComfyUI-segment-anything-2
这个插件是基于 Meta 公司最新的 SAM2(Segment Anything Model 2)技术开发的 ComfyUI 扩展。简单来说,它就像一个超级智能的"抠图神器",能够:
智能识别物体:你只需要点击一下图片上的物体,它就能自动把整个物体完美地抠出来
视频抠图:不仅能处理单张图片,还能对视频中的物体进行连续抠图
自动批量抠图:一键自动识别图片中的所有物体并分别抠出来
配合其他工具:可以和 Florence2 等其他 AI 工具配合使用,实现更智能的物体识别
想象一下,以前你用美图秀秀抠图需要小心翼翼地用橡皮擦一点点擦,现在你只需要在想要抠的物体上点一下,AI 就能帮你完美抠出来,就像有了一个专业的 PS 高手在帮你!
2. 如何安装
方法一:通过 ComfyUI Manager 安装(推荐)
打开 ComfyUI
点击右下角的 "Manager" 按钮
选择 "Install Custom Nodes"
搜索 "segment-anything-2" 或 "SAM2"
找到 "ComfyUI-segment-anything-2" 并点击安装
重启 ComfyUI
方法二:手动安装
打开终端/命令提示符
进入你的 ComfyUI 安装目录下的 custom_nodes 文件夹
运行命令:git clone https://github.com/kijai/ComfyUI-segment-anything-2.git
重启 ComfyUI
注意: 插件会自动从网上下载所需的 AI 模型文件,第一次使用时需要等待下载完成。
3. 节点详细解析
当前插件包含节点总数:6 个 本次输出节点数:6 个 剩余未输出节点数:0 个
3.1 DownloadAndLoadSAM2Model 节点
这个节点是干嘛的? 这就像是一个"模型管家",负责下载和加载 SAM2 的 AI 大脑。你可以把它想象成给你的抠图工具安装不同版本的"智能芯片",有的芯片速度快但精度一般,有的芯片慢一点但超级精准。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
model | model | sam2_hiera_base_plus.safetensors<br/>sam2_hiera_large.safetensors<br/>sam2_hiera_small.safetensors<br/>sam2_hiera_tiny.safetensors<br/>sam2.1_hiera_base_plus.safetensors<br/>sam2.1_hiera_large.safetensors<br/>sam2.1_hiera_small.safetensors<br/>sam2.1_hiera_tiny.safetensors | sam2_hiera_base_plus.safetensors | 选择AI大脑的版本,就像选手机处理器一样 | 选择不同大小和版本的SAM2模型文件 | tiny最快但精度低,large最慢但最精准,base_plus是平衡选择 |
segmentor | segmentor | single_image<br/>video<br/>automaskgenerator | single_image | 选择抠图模式,就像选择相机的拍照模式 | 设置分割器类型:单图片、视频或自动批量模式 | 抠单张图选single_image,抠视频选video,自动抠所有物体选automaskgenerator |
device | device | cuda<br/>cpu<br/>mps | cuda | 选择用什么硬件来运行,就像选择用跑车还是自行车 | 设置运行设备:显卡、CPU或苹果芯片 | 有N卡选cuda最快,苹果电脑选mps,其他选cpu |
precision | precision | fp16<br/>bf16<br/>fp32 | fp16 | 选择计算精度,就像选择画笔的精细程度 | 设置浮点数精度:16位、bfloat16或32位 | fp16速度快内存省,fp32最精确但慢,一般用fp16就够了 |
3.2 Sam2Segmentation 节点
这个节点是干嘛的? 这是核心的"抠图工人",它接收你的指令(比如你点击的位置或框选的区域),然后智能地把物体抠出来。就像一个超级听话的助手,你指哪它抠哪。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
sam2_model | sam2_model | SAM2MODEL类型 | - | 接收AI大脑,就像给工人配备工具 | 接收SAM2模型对象 | 连接DownloadAndLoadSAM2Model节点的输出 |
image | image | IMAGE类型 | - | 要处理的图片,就像给工人提供原材料 | 输入待分割的图像数据 | 连接LoadImage或其他图像节点 |
keep_model_loaded | keep_model_loaded | True/False | True | 是否保持AI大脑常驻内存,就像是否让工人待命 | 处理完后是否保持模型在显存中 | True可以加速连续处理,False可以节省显存 |
coordinates_positive | coordinates_positive | STRING类型 | - | 告诉AI"我要这里"的点击位置 | 正向提示点的坐标信息 | 格式如[{"x": 100, "y": 200}],表示要包含的区域 |
coordinates_negative | coordinates_negative | STRING类型 | - | 告诉AI"我不要这里"的排除位置 | 负向提示点的坐标信息 | 格式同上,表示要排除的区域,用来修正抠图结果 |
bboxes | bboxes | BBOX类型 | - | 框选区域,就像用矩形框圈出要抠的物体 | 边界框坐标信息 | 通常来自Florence2等物体检测工具 |
individual_objects | individual_objects | True/False | False | 是否把每个物体单独抠出来 | 是否为每个对象生成独立的掩码 | True会为每个点击位置生成单独的抠图结果 |
mask | mask | MASK类型 | - | 已有的抠图结果,用来进一步优化 | 输入的掩码用于引导分割 | 可以基于之前的抠图结果进行改进 |
3.3 Florence2toCoordinates 节点
这个节点是干嘛的? 这是一个"翻译官",它把 Florence2 AI 识别出的物体信息翻译成 SAM2 能理解的坐标格式。就像把中文地址翻译成GPS坐标一样。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
data | data | JSON类型 | - | Florence2识别出的物体信息,就像一份物体清单 | Florence2输出的检测结果数据 | 连接Florence2Run节点的data输出 |
index | index | STRING类型 | "0" | 选择要处理哪个物体,就像从清单中选择第几项 | 指定要转换的检测结果索引 | "0"表示第一个物体,"0,1,2"表示前三个物体 |
batch | batch | True/False | False | 是否批量处理多张图片 | 是否对批次中的所有图像进行处理 | True会处理所有图片中的对应物体 |
3.4 Sam2VideoSegmentationAddPoints 节点
这个节点是干嘛的? 这是视频抠图的"指挥官",专门用来在视频的某一帧上添加点击指令。就像在视频播放时暂停,然后在画面上点击要抠的物体。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
sam2_model | sam2_model | SAM2MODEL类型 | - | 视频抠图专用的AI大脑 | 配置为video模式的SAM2模型 | 必须是segmentor设为video的模型 |
coordinates_positive | coordinates_positive | STRING类型 | - | 在视频帧上点击"要这里"的位置 | 正向提示点坐标 | 格式如[{"x": 100, "y": 200}] |
frame_index | frame_index | INT类型 | 0 | 在第几帧上添加点击,就像选择视频的第几秒 | 指定添加提示点的帧索引 | 0表示第一帧,10表示第11帧 |
object_index | object_index | INT类型 | 0 | 给这个物体编号,用来区分不同物体 | 分配给对象的唯一标识符 | 0表示第一个物体,1表示第二个物体 |
image | image | IMAGE类型 | - | 视频帧图像数据 | 视频序列的图像数据 | 通常来自视频加载节点 |
coordinates_negative | coordinates_negative | STRING类型 | - | 在视频帧上点击"不要这里"的位置 | 负向提示点坐标 | 用来排除不想要的区域 |
prev_inference_state | prev_inference_state | SAM2INFERENCESTATE类型 | - | 之前的处理状态,用来连续处理 | 前一步的推理状态信息 | 用于链式连接多个添加点操作 |
3.5 Sam2VideoSegmentation 节点
这个节点是干嘛的? 这是视频抠图的"执行者",在你添加完所有点击指令后,它会自动处理整个视频,把每一帧中的目标物体都抠出来。就像按下"开始处理"按钮。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
sam2_model | sam2_model | SAM2MODEL类型 | - | 视频抠图专用的AI大脑 | 配置为video模式的SAM2模型 | 连接DownloadAndLoadSAM2Model节点 |
inference_state | inference_state | SAM2INFERENCESTATE类型 | - | 包含所有点击指令的状态信息 | 包含提示点和对象信息的推理状态 | 连接Sam2VideoSegmentationAddPoints节点的输出 |
keep_model_loaded | keep_model_loaded | True/False | True | 处理完后是否保持AI大脑在内存中 | 是否保持模型加载状态 | True可以加速后续处理,False节省显存 |
3.6 Sam2AutoSegmentation 节点
这个节点是干嘛的? 这是一个"全自动抠图机器",不需要你手动点击,它会自动识别图片中的所有物体并全部抠出来。就像一键美颜一样,一键就能把图片中的所有东西都分别抠出来。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
sam2_model | sam2_model | SAM2MODEL类型 | - | 自动抠图专用的AI大脑 | 配置为automaskgenerator模式的SAM2模型 | 必须是segmentor设为automaskgenerator的模型 |
image | image | IMAGE类型 | - | 要自动抠图的图片 | 输入图像数据 | 连接LoadImage或其他图像节点 |
points_per_side | points_per_side | INT类型 | 32 | 每边放多少个检测点,就像撒网的密度 | 每边生成的提示点数量 | 数值越大检测越细致但速度越慢 |
points_per_batch | points_per_batch | INT类型 | 64 | 每次处理多少个点,就像每次吃几口饭 | 批处理的点数量 | 影响显存使用和处理速度 |
pred_iou_thresh | pred_iou_thresh | FLOAT类型 | 0.8 | 抠图质量阈值,就像设置及格分数线 | 预测IoU阈值 | 0.8表示抠图准确度要达到80%才保留 |
stability_score_thresh | stability_score_thresh | FLOAT类型 | 0.95 | 抠图稳定性要求,就像要求结果要稳定 | 稳定性分数阈值 | 越高要求抠图结果越稳定 |
stability_score_offset | stability_score_offset | FLOAT类型 | 1.0 | 稳定性计算的偏移量 | 稳定性分数计算偏移 | 用于调整稳定性评估的基准 |
mask_threshold | mask_threshold | FLOAT类型 | 0.0 | 抠图二值化阈值,就像调节黑白照片的对比度 | 掩码二值化阈值 | 决定哪些像素被认为是前景 |
crop_n_layers | crop_n_layers | INT类型 | 0 | 裁剪层数,用来处理大图片 | 图像裁剪的层数 | 0表示不裁剪,大于0会分块处理大图 |
box_nms_thresh | box_nms_thresh | FLOAT类型 | 0.7 | 去除重复框的阈值,就像去重复 | 边界框非极大值抑制阈值 | 用来去除重叠的检测框 |
crop_nms_thresh | crop_nms_thresh | FLOAT类型 | 0.7 | 裁剪区域去重阈值 | 裁剪区域的NMS阈值 | 用于裁剪模式下的重复去除 |
crop_overlap_ratio | crop_overlap_ratio | FLOAT类型 | 0.34 | 裁剪块之间的重叠比例 | 裁剪块重叠比例 | 确保裁剪边界处的物体不被遗漏 |
crop_n_points_downscale_factor | crop_n_points_downscale_factor | INT类型 | 1 | 裁剪时点数缩放因子 | 裁剪时的点数下采样因子 | 用来在裁剪模式下调整检测点密度 |
min_mask_region_area | min_mask_region_area | FLOAT类型 | 0.0 | 最小抠图区域大小,过滤掉太小的物体 | 最小掩码区域面积 | 小于这个值的抠图结果会被过滤掉 |
use_m2m | use_m2m | True/False | False | 是否使用mask-to-mask优化 | 是否启用掩码到掩码的优化 | True可以提高质量但会增加计算时间 |
keep_model_loaded | keep_model_loaded | True/False | True | 处理完后是否保持AI大脑在内存中 | 是否保持模型加载状态 | True可以加速连续处理 |
4. 使用技巧和建议
4.1 模型选择建议
新手推荐:sam2_hiera_base_plus.safetensors,平衡了速度和精度
追求速度:sam2_hiera_small.safetensors 或 tiny 版本
追求精度:sam2_hiera_large.safetensors
最新功能:优先选择 sam2.1 版本,功能更完善
4.2 硬件配置建议
显卡内存 < 6GB:选择 tiny 或 small 模型,precision 用 fp16
显卡内存 6-12GB:可以用 base_plus 模型
显卡内存 > 12GB:可以放心使用 large 模型
4.3 抠图技巧
单张图片抠图:
先用 single_image 模式
在物体中心点击作为正向坐标
如果抠图包含了不想要的部分,添加负向坐标排除
批量自动抠图:
视频抠图:
使用 video 模式
在关键帧上添加点击指令
AI 会自动跟踪整个视频序列
4.4 与其他插件配合
配合 Florence2:先用 Florence2 识别物体,再用 SAM2 精确抠图
配合 ControlNet:抠出的 mask 可以用作 ControlNet 的控制信号
配合 Inpainting:抠图后可以用修复模型填补背景
5. 常见问题解答
Q1: 为什么第一次使用很慢?
A: 插件需要从网上下载 AI 模型文件,文件比较大(几个GB),下载完成后就会很快了。
Q2: 显存不够怎么办?
A:
Q3: 抠图不准确怎么办?
A:
Q4: 视频抠图效果不连贯?
A:
Q5: 自动抠图抠出太多小物体?
A:
6. 实际应用场景
6.1 电商产品图处理
使用自动抠图功能快速去除产品背景,批量处理商品图片。
6.2 视频内容创作
对视频中的人物或物体进行抠图,用于换背景或特效制作。
6.3 图像合成
精确抠出图像中的特定元素,用于创意合成和设计。
6.4 数据标注
为机器学习项目快速生成高质量的分割标注数据。
7. 总结
ComfyUI-segment-anything-2 插件是一个功能强大的智能抠图工具,它把复杂的 AI 技术包装成了简单易用的节点。无论你是新手还是专业用户,都能通过合理的参数配置获得满意的抠图效果。
记住几个关键点:
选择合适的模型大小平衡速度和精度
根据硬件配置调整参数
善用正负向坐标提高抠图精度
不同场景选择不同的分割模式
希望这份教程能帮助你快速上手这个强大的抠图工具!