【ComfyUI插件】comfyui_segment_anything插件
前言:
Segment anything作为图像语义分割中被广泛使用的插件,其重要程度不言而喻,现如今无论电商,游戏原画,室内设计等各种行业都需要进行图像抠图处理,而Segment anything作为语义分析自动抠图工具,给各行各业带来了更为便捷化的使用方式,本文将对库中的节点进行详细的解释和示例教学,希望大家活学活用!
目录:
一、SAMModelLoader (segment anything)节点
二、GroundingDinoModelLoader (segment anything)节点
三、GroundingDinoSAMSegment (segment anything)节点
四、IsMaskEmpty/ InvertMask (segment anything)节点
"带字产品背景更换"示例工作流
安装方法:※※看这里※※
一、SAMModelLoader (segment anything)节点
节点功能:这个节点用来加载SAM模型,下面会针对这些模型进行实验验证。
注意:vit_b、vit_l和vit_h,分别代表 vit_base、vit_large 和 vit_huge。大模型更准确,但速度更慢。
sam_hq是sam的进化版本,具体效果大家可以测试之后选择性使用。
参数:
model_name -> 选择模型
输出:
SAM_MODEL -> 输出模型
注意:我们搭建了以下工作流,用来对我们输入的图像进行语义分割
注意:SAM模型测试了以下6个模型,下面是对比图实验,发现对于语义分析,hq模型似乎并不太精准,比如我们输入的是sofa沙发,但是在hq模型的识别结果中,可以看到都识别到了部分桌椅,同类型模型之间的对比发现vit i的模型比vit h的模型更加精准一点,比如沙发拐角处的小枕头,能够被vit i识别出。
二、GroundingDinoModelLoader (segment anything)节点
节点功能:这个节点用来加载GroundingDINO模型。
注意:内部运行逻辑是图像进入,先通过GroundingDINO模型去理解我们输入的文本,然后根据文本对图像中的物体进行定位,定位之后再使用SAM模型去生成物体对应的mask,对物体进行分割。
参数:
model_name -> 选择模型
输出:
GROUNDING_DINO_MODEL -> 输出选择的模型
注意:如下图所示,这是对于两个不同的GroundingDINO模型的实验结果,从结果来看,两个模型对分割结果的影响不太大,可能是sofa比较精确,所以两个模型都可以识别文字并且跟图像进行结合,分辨出图像中沙发的位置。
三、GroundingDinoSAMSegment (segment anything)节点
节点功能:这个节点为图像处理节点,通过prompt的输入,经过grounding模型取识别理解文字,然后结合输入的image去进行区域检测,进行区域匹配,随后使用sam模型对区域内的符合文本的部分进行分割,生成对应的mask。
输入:
sam_model -> SAM模型 ***用于分割的SAM模型***
grounding_dino_model -> Grounding DINO模型 ***用于对象定位的Grounding DINO模型***
image -> 图像 ***输入的图像或图像集合***
参数:
prompt -> 提示语 ***用于指导模型执行的提示语***
threshold -> 阈值 ***用于控制对象定位结果的阈值,取值范围为0到1.0***
输出:
IMAGE -> 输出符合设置信息的图像
MASK -> 输出对应的蒙版
注意:如下图所示,我们对阈值0.5和0.3做了测试,效果差不太多,但是对显存有一定的要求,阈值越小我们需要参与计算的像素点越多,所以当我们的模型报错显存不足的时候,可以通过调大阈值去避免爆显存的问题!
四、IsMaskEmpty/ InvertMask (segment anything)节点
节点功能:IsMaskEmpty节点用来判断mask是不是空蒙版,InvertMask (segment anything)节点用来将蒙版进行翻转。
输入:
mask -> 蒙版图像信息
输出:
mask -> 翻转后的蒙版
boolean_number -> 输出判断结果
注意:如下图所示,识别出人物得到人物有关的蒙版,然后通过InvertMask节点对蒙版进行翻转得到无人物的蒙版信息。
"带字产品背景更换"示例工作流:
学习完以上节点,您就可以搭建“带字产品背景更换”示例工作流了
注意:该工作流比较大,有时间我出个视频讲解一下,这里主要是对原始图像通过segment识别到主体,建立相关的蒙版,然后通过随机底图进行粘贴, 然后进行扩散,扩散之后再对整体进行二次扩散,消除产品图的边缘锯齿,在二次扩散之后,边缘锯齿消失,但是原始文本被毁,在通过一个segment结点对原始图像的文本进行提取和粘贴,最终完成产品换背景。
锯齿并没有完全的消除,但是是可以有机会消除的,我电脑性能不好,我没办法一直测试,大家拿到工作流之后,就自己多跑几遍。
工作流地址:https://pan.quark.cn/s/972a4a2619ff
孜孜不倦,方能登峰造极。坚持不懈,乃是成功关键。