用 MultiMatte 抠图终于能通过文字指定要保留哪个物体了

PromptCube 中级 1天前 320 浏览 15 点赞 约 2 分钟

只要在提示词里写上想保留的物体名称,MultiMatte 就能把该物体之外的所有背景(包括其他前景物体)全部删掉。它基于 SAM 3 改进,把二进制掩码换成了 Alpha Matte 透明度通道,处理头发丝、动物毛发这种模糊边缘比纯掩码模型干净得多。

为什么不用传统的背景去除模型

以前用那种一键抠图工具,最头疼的是图片里有多个主体时它分不清谁是谁。比如照片里有个模特拿着个包,你只想留模特,结果包也被留下来了。MultiMatte 解决了这个问题,因为它支持 Promptable(可提示),你输入 "dog",它就只留狗,把旁边的饭碗全部抠掉。

我在对比测试时发现,它在处理边缘细节上的提升很明显。看数据的话,在 DIS5K 这种专业数据集上,S-measure 从 SAM 3 的 0.674 提升到了 0.908,提升幅度大概 34.6%。这意味着在实际操作中,你不需要再手动用橡皮擦去修那些抠不干净的毛边。

怎么在本地跑起来

这个模型是开源的,官方提供了一个叫 nobg 的库,安装和调用逻辑比较简单。如果你想在自己的项目里集成,可以参考下面的步骤。

首先安装依赖库:

pip install nobg

然后通过以下 Python 代码调用模型进行抠图:

from nobg import MultiMatte

# 初始化模型
model = MultiMatte.from_pretrained("feyninc/multimatte")

# 加载图片并指定要保留的物体
# 比如图片里有猫和球,只想保留猫
image = model.load_image("path/to/your/image.jpg")
result = model.remove_background(image, prompt="cat")

# 保存结果,输出的是带透明通道的 PNG
result.save("output.png")

实际操作中的坑和注意事项

在试用过程中,有几点需要注意,否则很容易觉得效果不好:

  • 提示词的精准度: 虽然它支持自然语言,但建议使用具体的名词。比如 "golden retriever" 比起 "dog" 识别率更高,尤其是在背景复杂的情况下。
  • 显存占用: 它是基于 SAM 3 架构的,虽然抠图速度很快,但加载模型时还是需要一定的显存。如果是在低显存设备上跑,建议检查是否触发了 OOM。
  • 对比判断: 如果你的图片只有单一主体,用普通的 rembg 这种轻量级工具就够了,速度更快。但只要涉及到“多物体选其一”的场景,MultiMatte 是目前最方便的选择,省去了手动画 Mask 的时间。

性能提升的具体细节

为了证明它比 SAM 3 强,官方给出了两个关键指标的对比(案例数据,仅供参考):

  • DIS5K 数据集: S-measure 从 0.674 → 0.908(提升 34.6%)。
  • DUT-OMRON 数据集: 从 0.792 → 0.901(提升 13.7%)。

这种提升直接体现在对“半透明”区域的处理上。传统的二值化掩码(Binary Mask)要么是 0 要么是 1,导致边缘像锯齿;而 MultiMatte 采用的 Alpha Matte 给每个像素分配透明度值,所以处理运动模糊或者细碎的发丝时,过渡非常自然。

MetaMultiMatteSAM 3nobg

全部回复 (6)

深漂独立开发者 中级 1天前

这想法绝了,要是能直接喂两张图给 ControlNet 跑,效率起码翻三倍吧?

0 回复
程序员老陈 初级 1天前

用 Preview 抠图也太慢了吧,直接上 rembg 试试,速度快得离谱。

0 回复
在深圳设计师 中级 1天前

太牛了,这波操作简直是教科书级别,快告诉我你用了哪个插件?

0 回复
数据分析师大山 中级 1天前

这年头还在这问插件?直接看原作者发的那个 GitHub 链接不就完了。哈哈

0 回复
远程办公技术宅 中级 1天前

这效果也太离谱了,赶紧发原图对比看看,我想知道它怎么处理那些细碎的围栏。

0 回复
阿Sam的日常 高级 1天前

真能信这套逻辑?我看就是想把用户全圈在自家的围墙里,到时候涨价到 19 刀你还用吗?

0 回复

发表回复

支持 Markdown 格式