Interactive Segmentation
交互式分割会将用户的点击、框选或涂鸦转换为物体掩码,并通过用于纠正的点击不断优化掩码,涵盖从 GrabCut 到 Meta 的 SAM。
交互式分割会根据用户提供的少量提示(例如点击、边界框或涂鸦)生成像素级精准的对象掩码,并随着用户添加修正不断优化掩码。正向点击表示某个点属于对象,负向点击表示某个点不属于对象,因此每轮之后,用户只需指出剩余的最大错误即可。这种方法不依赖类别:模型会分割用户指示的任何对象,包括训练期间从未见过的对象,因此常用于数据标注、照片编辑以及勾画医学扫描中的结构。它是一种人在回路的图像分割方法。
点击循环的工作原理#
模型会接收图像和到目前为止的所有点击,许多模型还会接收上一轮的掩码,然后预测新的掩码。循环会持续进行,直到掩码达到足够好的效果:
基准测试会模拟这类用户:每次新点击都会落在最大误差区域的中心,得分是达到与真实标注 交并比 85% 或 90% 所需的点击次数,在 GrabCut、Berkeley 和 DAVIS 等数据集上分别记为 NoC@85 和 NoC@90。
Ultralytics 包会通过点提示运行 Meta 的 SAM 模型,其中标签 1 表示正向点击,0 表示负向点击:
from ultralytics import SAM
# Meta's SAM 2.1 base model, run through the Ultralytics package
model = SAM("sam2.1_b.pt")
image = "https://ultralytics.com/images/bus.jpg"
# Round 1: a single positive click on the pedestrian's dark coat
results = model(image, points=[[[250, 620]]], labels=[[1]])
print(f"1 click: {int(results[0].masks.data.sum())} mask pixels")
# Round 2: add a positive click on the pedestrian's jeans and a negative click on the bus
results = model(image, points=[[[250, 620], [290, 760], [420, 560]]], labels=[[1, 1, 0]])
print(f"3 clicks: {int(results[0].masks.data.sum())} mask pixels")
results[0].save(filename="interactive_mask.jpg")单击一次后会打印出 32,598 个掩码像素,单击三次后则为 33,120 个,因此在外套上单击一次就已选中了行人的绝大部分,额外点击则将掩码细化了约 500 个像素。Ultralytics Platform的标注编辑器也运行相同的循环:在智能模式下,单击当前 SAM 掩码外部会添加该区域,单击内部则会减去该区域;完成的掩码会根据数据集任务保存为多边形、边界框或定向框。
从图割到可提示模型#
早期工具会直接优化边界。智能剪刀(1995 年)会将描绘的轮廓吸附到明显边缘上;GrabCut 于 2004 年由 Microsoft Research 发布并收入 OpenCV,它会分割用户绘制框内的对象:迭代拟合前景和背景的颜色模型,并求解图割。自 2016 年以来,深度学习方法会将点击编码为图像旁边的额外输入通道,并通过卷积神经网络学习掩码;后来的模型还会将上一轮掩码作为输入来进行细化。
Meta 于 2023 年发布的 Segment Anything Model (SAM) 将处理过程拆分,使交互几乎即时完成:大型视觉 Transformer只对图像编码一次,轻量级提示编码器和掩码解码器则会在约 50 毫秒内将每组新点击转换为掩码。SAM 还通过自身的交互循环进行训练:在构建 SA-1B 数据集时,标注人员使用模型的连续版本点击分割对象,每个掩码的平均处理时间从 34 秒降至 14 秒。SAM 2 将点击扩展到视频,可在帧间传播掩码;SAM 3 则新增了可提示概念分割,能够找出所有符合简短文本短语的实例。
交互式分割与自动分割#
实例分割模型无需人工输入,就能自动分割固定的一组训练类别,适用于必须处理每一帧的生产流水线。交互式分割以灵活性换取自动化,通常用于创建这类模型的训练掩码,且经常嵌入主动学习循环:该循环会将模型最不确定的图像发送给标注人员。视觉提示是通过点、框或示例图像引导视觉模型这一更广泛的概念,而交互式分割则是其中以迭代方式生成掩码的形式。










