使用 AI 生成蒙版

在 inpainting 等场景中,经常需要制作蒙版。但每次都手动绘制,或者提前准备蒙版图像,非常麻烦。最重要的是,这样无法自动化。

但是,单纯说一句“把这部分做成蒙版”,并不一定就能轻松得到干净的蒙版。

需要把几种 AI 技术组合起来考虑。

  • 物体检测 - 找出图像中的目标在哪里。
  • 分割 - 将目标的形状切出为蒙版。
  • 抠图 - 更细致地处理前景和背景之间的边界。

例如,可以先用物体检测找到目标,再把结果传给分割模型,将其转换成蒙版。

下面看看主要有哪些技术。


物体检测 (Detection)

顾名思义,物体检测可以确定图像中特定物体的位置,并输出称为 BBOX 的矩形范围。

YOLO 系

YOLO 是以实时检测物体为目的的超高速检测技术。

基本上,它会针对想要检测的物体类型分别制作模型,例如人脸专用、手专用等。如果没有对应模型,就需要自己制作;如果想同时检测多种类别,也不太适合。

相对地,它的处理非常轻,适合需要高速处理的情况。

Grounding DINO 等

Grounding DINO 会检测用文本指定的物体,并输出 BBOX。

与 YOLO 不同,可以用 “white dog”、“red car” 这样的文本指定物体,因此使用方便,也可以同时检测多个物体。

VLM / MLLM

拥有看图能力的 LLM,就是 VLM / MLLM。

它们可以进行图像描述生成等各种任务,其中也有可以进行物体检测的模型。

比较早期的代表例是 Florence-2

速度较慢,但理解能力较高,因此可以用“画面右侧戴着蓝色帽子的女性”这样的复杂句子来指定目标。


抠图 (Matting)

很多被称为“背景去除”的处理,本质上就是抠图。

抠图会分离前景和背景,也可以处理头发这类细小边界,以及半透明区域。

不过,它并不是像分割那样,用来指定并切出某个特定物体的技术。

BiRefNet

详细用法请看 BiRefNet 页面。


分割 (Segmentation)

SAM (Segment Anything Model)

SAM 是目前最有名的分割模型。

它理解“物体的形状”。如果用文本、点或框指定照片中的汽车等对象,它就能找到轮廓,并生成蒙版。

目前最新模型的内容,会在 SAM 3 / 3.1 页面中说明。


实践例

下面组合上述技术,生成任意文本或类别的蒙版。

以下 workflow 是 SAM 3 出现以前经常使用的结构。如果目标是指定对象并进行分割,现在请先尝试 SAM 3 / 3.1

这里保留下来,是为了方便理解旧 workflow,或在既有环境中复现相同结构。

必要的自定义节点

以下自定义节点可能是运行本页实践例所需要的。

YOLO × SAM

YOLO_face-SAM.json

高速人脸检测(YOLO)与初期 SAM 的组合。

Grounding DINO × SAM

Grounding_DINO_HQ-SAM.json

Grounding DINO 与 SAM 改良版 HQ-SAM 的组合。

它可以用文本指定对象,同时生成高精度蒙版,因此曾是最常用的组合之一。

Florence2 × SAM2

Florence2_SAM2.1.json

Florence2 与 SAM2.1 的组合。

如果是人或动物等容易理解的对象,很多方法都可以。但如果想指定“戴墨镜的男人”、“躺在树下的猫”这类复杂条件,这种 LLM 系模型就会发挥作用。

SAM 3 × BiRefNet

SAM3_BiRefNet.json

分割本来是为了区分对象,并不是为了精细抠图。

相对地,抠图可以处理头发这种细小部分,也可以处理玻璃这类半透明物体。

把它们组合起来,就可以利用两者的能力。