跳至内容

分段任何模式 (SAM)

欢迎使用 Segment Anything Model(即SAM )进入图像分割的前沿领域。这一革命性的模型改变了游戏规则,它引入了具有实时性能的可提示图像分割技术,为该领域设立了新的标准。

SAM 简介:分段模式

SAM SAM 是 Segment Anything 计划的核心,该计划是一个开创性的项目,它为图像分割引入了一个新颖的模型、任务和数据集。

SAM其先进的设计使其能够适应新的图像分布和任务,而无需事先了解相关知识,这一特性被称为零镜头传输。SAM 在庞大的SA-1B 数据集上进行了训练,该数据包含超过 10 亿个掩码,分布在 1100 万张精心策划的图像上,显示出令人印象深刻的零镜头性能,在许多情况下超过了以前的完全监督结果。

数据集样本图像 SA-1B 示例图像。 数据集图像叠加了新推出的 SA-1B 数据集的掩码。SA-1B 包含 1,100 万张不同的高分辨率授权隐私保护图像和 11B 个高质量分割掩码。这些掩码由SAM 全自动注释,并经过人工评分和大量实验验证,具有很高的质量和多样性。为便于可视化,图像按每张图像的掩码数量分组(平均每张图像有 100 个掩码)。

分段 Anything 模型的主要特点 (SAM)

  • 可提示的分割任务: SAM 在设计时考虑到了可提示的分割任务,使其能够根据任何给定的提示(如识别物体的空间或文本线索)生成有效的分割掩码。
  • 先进的架构:Segment Anything Model 采用功能强大的图像编码器、提示编码器和轻量级掩码解码器。这种独特的架构可在分割任务中实现灵活的提示、实时掩码计算和模糊感知。
  • SA-1B 数据集SA-1B 数据集由 "Segment Anything "项目推出,在 1100 万张图像上使用了超过 10 亿个遮罩。作为迄今为止最大的分割数据集,它为SAM 提供了多样化的大规模训练数据源。
  • 零镜头性能: SAM 在执行各种分割任务时都能显示出出色的零镜头性能,使其成为一种可立即投入使用的工具,适用于各种应用,而无需进行及时的工程设计。

如需深入了解 Segment Anything 模型和 SA-1B 数据集,请访问Segment Anything 网站并查看研究论文Segment Anything。

可用型号、支持的任务和运行模式

本表介绍了可用模型及其特定的预训练权重、支持的任务以及与推理验证训练导出等不同操作模式的兼容性,支持的模式用 ✅ 符号表示,不支持的模式用 ❌ 符号表示。

型号 预训练重量 支持的任务 推论 验证 培训 出口
SAM 基础 sam_b.pt 实例分割
SAM 大 sam_l.pt 实例分割

如何使用SAM :图像分割的多功能性和强大功能

Segment Anything Model 可用于其训练数据之外的大量下游任务。这包括边缘检测、对象建议生成、实例分割和初步文本到掩码预测。通过及时的工程设计,SAM 可以快速适应新的任务和数据分布,成为满足所有图像分割需求的多功能强大工具。

SAM 预测示例

带提示的分段

根据提示分割图像。

from ultralytics import SAM

# Load a model
model = SAM('sam_b.pt')

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
model('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])

# Run inference with points prompt
model('ultralytics/assets/zidane.jpg', points=[900, 370], labels=[1])

分割一切

分割整个图像

from ultralytics import SAM

# Load a model
model = SAM('sam_b.pt')

# Display model information (optional)
model.info()

# Run inference
model('path/to/image.jpg')
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • 这里的逻辑是,如果不传递任何提示(bboxes/points/masks),则对整个图像进行分割。

SAMPredictor 示例

这样,您就可以一次设置图像,多次运行提示推理,而无需多次运行图像编码器。

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

用附加参数分割所有内容。

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)

SAM 对比YOLOv8

在此,我们将 Meta 的最小SAM 模型SAM-b 与Ultralytics 的最小分割模型YOLOv8n-seg 进行比较:

模型 尺寸 参数 速度(CPU)
Meta'sSAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40.7 MB 10.1 M 46122 MS/IM
FastSAM-s,YOLOv8 主干网 23.7 MB 11.8 M 115 毫升/分钟
Ultralytics YOLOv8n-seg 6.7 MB(缩小 53.4 倍) 340 万(少 27.9 倍) 59 毫秒/分钟(快 866 倍)

这种比较显示了不同模型之间在模型大小和速度上的数量级差异。虽然SAM 在自动分段方面具有独特的功能,但它并不是YOLOv8 分段模型的直接竞争对手,后者更小、更快、更高效。

测试在配备 16GB 内存的 2023 Apple M2 Macbook 上进行。重现此测试

示例

from ultralytics import FastSAM, SAM, YOLO

# Profile SAM-b
model = SAM('sam_b.pt')
model.info()
model('ultralytics/assets')

# Profile MobileSAM
model = SAM('mobile_sam.pt')
model.info()
model('ultralytics/assets')

# Profile FastSAM-s
model = FastSAM('FastSAM-s.pt')
model.info()
model('ultralytics/assets')

# Profile YOLOv8n-seg
model = YOLO('yolov8n-seg.pt')
model.info()
model('ultralytics/assets')

自动注释:获取分割数据集的快速通道

自动标注是SAM 的一项重要功能,允许用户使用预先训练好的检测模型生成分割数据集。这一功能可以快速、准确地标注大量图像,避免了耗时的人工标注。

使用检测模型生成分割数据集

要使用Ultralytics 框架自动标注数据集,请使用 auto_annotate 功能,如下图所示:

示例

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model='sam_b.pt')
论据 类型 说明 默认值
数据 字符串 包含要注释的图像的文件夹路径。
det_model str,可选 预先训练的YOLO 检测模型。默认为 "yolov8x.pt"。 'yolov8x.pt'
sam模型 str,可选 预先训练的SAM 分割模型。默认为 "sam_b.pt"。 'sam_b.pt'
装置 str,可选 运行模型的设备。默认为空字符串(CPU 或 GPU,如果可用)。
输出目录 str,无,可选 保存注释结果的目录。默认为 "数据 "同一目录下的 "标签 "文件夹。

"(《世界人权宣言》) auto_annotate 函数获取图像的路径,以及用于指定预训练检测和SAM 分割模型、运行模型的设备和保存注释结果的输出目录的可选参数。

使用预先训练好的模型进行自动标注可以大大减少创建高质量分割数据集所需的时间和精力。这一功能对处理大型图像集的研究人员和开发人员尤其有利,因为他们可以专注于模型开发和评估,而不是手动标注。

引文和致谢

如果您发现SAM 对您的研究或开发工作有用,请考虑引用我们的论文:

@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

我们对 Meta AI 为计算机视觉界创建和维护这一宝贵资源表示感谢。

关键词:Segment Anything, Segment Anything Model,SAM, MetaSAM, 图像分割, 可提示分割, 零镜头性能, SA-1B 数据集, 高级架构, 自动标注,Ultralytics, 预训练模型,SAM base,SAM large, 实例分割, 计算机视觉, AI, 人工智能, 机器学习, 数据标注, 分割掩码, 检测模型,YOLO 检测模型, bibtex, Meta AI.



创建于 2023-11-12,更新于 2024-04-17
作者:glenn-jocher(10),ChaoningZhang(1),Laughing-q(1)

评论