跳至内容

SAM 2.1

我们刚刚支持了更精确的SAM2.1 模型。请试用一下!

SAM 2: 任何分段模型 2

SAM 2 是 Meta 的Segment Anything Model (SAM) 的后续产品,是一款专为图像和视频中的综合对象分割而设计的尖端工具。它采用统一、可提示的模型架构,支持实时处理和零镜头泛化,在处理复杂的视觉数据方面表现出色。

SAM 2 结果示例

主要功能



观看: 如何使用Ultralytics 利用 Meta'sSAM2 运行推理 | 分步指南 🎉

统一模型架构

SAM 2 在单一模型中结合了图像和视频分割功能。这种统一简化了部署,并能在不同媒体类型中实现一致的性能。它利用灵活的基于提示的界面,使用户能够通过各种提示类型(如点、边界框或遮罩)指定感兴趣的对象。

实时性能

该模型可实现实时推理速度,每秒可处理约 44 帧图像。这使得SAM 2 适用于需要即时反馈的应用,如视频编辑和增强现实。

零点概括

SAM 2 可以分割它从未遇到过的物体,展示了强大的零点泛化能力。这在多种多样或不断变化的视觉领域尤其有用,因为在这些领域中,预定义的类别可能无法涵盖所有可能的物体。

互动式改进

用户可以通过提供额外的提示来迭代完善分割结果,从而实现对输出的精确控制。这种交互性对于微调视频注释或医学成像等应用中的结果至关重要。

视觉挑战的高级处理

SAM 2 包括一些机制,用于管理常见的视频分割难题,如物体遮挡和重现。它使用复杂的记忆机制来跟踪各帧中的物体,即使物体暂时被遮挡或退出和重新进入场景,也能确保连续性。

要深入了解SAM 2 的架构和功能,请浏览SAM 2 研究论文

性能和技术细节

SAM 2 树立了该领域的新基准,在各种指标上都优于以前的模型:

公制 SAM 2 上一个 SOTA
交互式视频分割 最佳 -
需要人际互动 减少 3 倍 基线
图像分割精度 改进 SAM
推理速度 快 6 倍 SAM

模型架构

核心部件

  • 图像和视频编码器:利用基于变换器的架构,从图像和视频帧中提取高级特征。该组件负责理解每个时间步的视觉内容。
  • 提示编码器:处理用户提供的提示(点、框、遮罩),以指导分割任务。这样,SAM 2 就能适应用户输入,并锁定场景中的特定对象。
  • 记忆机制:包括记忆编码器、记忆库和记忆注意力模块。这些组件共同存储和利用过去帧的信息,使模型能够在一段时间内保持一致的目标跟踪。
  • 掩码解码器:根据编码图像特征和提示生成最终的分割掩码。在视频中,它还使用内存上下文来确保跨帧的准确跟踪。

SAM 2 结构图

记忆机制和闭塞处理

记忆机制允许SAM 2 处理视频数据中的时间依赖性和遮挡。当物体移动和互动时,SAM 2 会将其特征记录在记忆库中。当一个物体被遮挡时,模型可以依靠这个记忆库来预测它再次出现时的位置和外观。遮挡头专门处理物体不可见的情况,预测物体被遮挡的可能性。

多掩码模糊解决

在模棱两可的情况下(如物体重叠),SAM 2 可以生成多个掩码预测。这一功能对于准确呈现复杂场景至关重要,因为在复杂场景中,单一掩码可能无法充分描述场景的细微差别。

SA-V 数据集

SA-V 数据集是为SAM 2 的训练而开发的,是目前最大、最多样化的视频分割数据集之一。它包括

  • 51,000 多部视频:在 47 个国家拍摄,提供各种真实场景。
  • 600,000+ 个掩码注释:详细的时空掩码注释,称为 "小掩码",涵盖整个物体和部分。
  • 数据集规模:与以往最大的数据集相比,该数据集的视频数量增加了 4.5 倍,注释数量增加了 53 倍,提供了前所未有的多样性和复杂性。

基准

视频对象分割

SAM 2 在主要的视频分割基准测试中表现出了卓越的性能:

数据集 J&F J F
戴维斯 2017 82.5 79.8 85.2
YouTube-VOS 81.2 78.9 83.5

交互式细分

在交互式分割任务中,SAM 2 显示出显著的效率和准确性:

数据集 NoC@90 AUC
戴维斯互动 1.54 0.872

安装

要安装SAM 2,请使用以下命令。首次使用时,所有SAM 2 型号都会自动下载。

pip install ultralytics

如何使用SAM 2:图像和视频分割的多功能性

下表详细介绍了可用的SAM 2 模型、预训练权重、支持的任务以及与推理验证训练导出等不同操作模式的兼容性。

型号 预训练重量 支持的任务 推论 验证 培训 出口
SAM 2 微小 sam2_t.pt 实例分割
SAM 2 个小的 sam2_s.pt 实例分割
SAM 2 个基地 sam2_b.pt 实例分割
SAM 2个大的 sam2_l.pt 实例分割
SAM 2.1 微小 sam2.1_t.pt 实例分割
SAM 2.1 小型 sam2.1_s.pt 实例分割
SAM 2.1 基础 sam2.1_b.pt 实例分割
SAM 2.1 大型 sam2.1_l.pt 实例分割

SAM 2 预测示例

SAM 2 可用于各种任务,包括实时视频编辑、医学成像和自主系统。它能够分割静态和动态视觉数据,是研究人员和开发人员的多功能工具。

带提示的片段

带提示的片段

使用提示来分割图像或视频中的特定对象。

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

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

# Run inference with bboxes prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

一切分段

一切分段

分割整个图像或视频内容,无需特定提示。

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

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

# Run inference
model("path/to/video.mp4")
# Run inference with a SAM 2 model
yolo predict model=sam2.1_b.pt source=path/to/video.mp4

分割视频和跟踪对象

分段视频

用特定的提示和跟踪对象分割整个视频内容。

from ultralytics.models.sam import SAM2VideoPredictor

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

# Run inference with single point
results = predictor(source="test.mp4", points=[920, 470], labels=1)

# Run inference with multiple points
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])
  • 本示例演示了SAM 2 如何在不提供提示(bboxes/points/masks)的情况下用于分割图像或视频的全部内容。

SAM 2 对比YOLOv8

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

模型 大小
(MB)
参数
(M)
速度 (CPU)
(ms/im)
MetaSAM-b 375 93.7 161440
MetaSAM2-b 162 80.8 121923
MetaSAM2-t 78.1 38.9 85155
MobileSAM 40.7 10.1 98543
FastSAM-s,YOLOv8 主干网 23.7 11.8 140
Ultralytics YOLOv8n-seg 6.7(小 11.7 倍) 3.4(少 11.4 倍) 79.5(快 1071 倍)

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

测试在配备 16GB 内存的 2023 年 Apple M2 Macbook 上进行,使用的是 torch==2.3.1ultralytics==8.3.82.要重现此测试:

示例

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)

自动注释:高效创建数据集

自动标注是SAM 2 的一项强大功能,用户可以利用预先训练好的模型快速准确地生成分割数据集。这一功能对于创建大型、高质量的数据集尤为有用,无需大量人工操作。

如何使用SAM 2 自动注释



观看: 使用Ultralytics | 数据标签,利用 Meta 的 Segment Anything 2 模型进行自动标注

要使用SAM 2 自动标注数据集,请参考以下示例:

自动注释示例

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam2_b.pt")
论据 类型 说明 默认值
data str 包含要注释的图像的文件夹路径。
det_model str可选 预训练的YOLO 检测模型。默认为 "yolo11x.pt"。 'yolo11x.pt'
sam_model str可选 预先训练的SAM 2 分割模型。默认为 "sam2_b.pt"。 'sam2_b.pt'
device str可选 运行模型的设备。默认为空字符串(CPU 或GPU ,如果可用)。
conf float可选 检测模型的置信度阈值;默认为 0.25。 0.25
iou float可选 用于过滤检测结果中重叠方框的 IoU 阈值;默认值为 0.45。 0.45
imgsz int可选 输入图像调整尺寸;默认为 640。 640
max_det int可选 限制每幅图像的检测次数,以控制密集场景中的输出。 300
classes list可选 根据指定的类 ID 过滤预测结果,只返回相关的检测结果。 None
output_dir str, None可选 保存注释结果的目录。默认为 "数据 "同一目录下的 "标签 "文件夹。 None

该功能有助于快速创建高质量的分割数据集,是旨在加快项目进度的研究人员和开发人员的理想选择。

局限性

SAM 2 虽然有其优势,但也有一定的局限性:

  • 跟踪稳定性:SAM 2 在长时间连续跟踪或视角发生重大变化时,可能会失去对物体的跟踪。
  • 物体混淆:模型有时会混淆外观相似的物体,尤其是在拥挤的场景中。
  • 处理多个对象时的效率:同时处理多个对象时,由于缺乏对象间通信,分割效率会降低。
  • 细节准确性:可能会错过细节,尤其是快速移动的物体。额外的提示可以部分解决这一问题,但无法保证时间上的流畅性。

引用和致谢

如果SAM 2 是您研究或开发工作的重要组成部分,请使用以下参考文献引用它:

@article{ravi2024sam2,
  title={SAM 2: Segment Anything in Images and Videos},
  author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
  journal={arXiv preprint},
  year={2024}
}

我们向 Meta AI 表示感谢,感谢他们通过这一开创性的模型和数据集为人工智能界做出的贡献。

常见问题

什么是SAM 2,它是如何改进原来的 "分段式任何模式" (SAM) 的?

SAM 2 是 Meta 的Segment Anything Model (SAM) 的后续产品,是一款专为图像和视频中的综合对象分割而设计的尖端工具。它采用统一、可提示的模型架构,支持实时处理和零镜头泛化,在处理复杂视觉数据方面表现出色。SAM 与最初的SAM 相比,2 提供了多项改进,包括

  • 统一模型架构:将图像和视频分割功能整合到一个模型中。
  • 实时性能:每秒可处理约 44 帧图像,适合需要即时反馈的应用。
  • 零镜头泛化:对从未遇到过的物体进行分段,适用于各种视觉领域。
  • 交互式细化:通过提供额外提示,允许用户迭代完善细分结果。
  • 先进的视觉挑战处理能力:处理常见的视频分割难题,如物体遮挡和重现。

有关SAM 2 架构和功能的更多详情,请浏览SAM 2 研究论文

如何使用SAM 2 进行实时视频分割?

SAM 2 可利用其可提示界面和实时推理功能进行实时视频分割。下面是一个基本示例:

带提示的片段

使用提示来分割图像或视频中的特定对象。

from ultralytics import SAM

# Load a model
model = SAM("sam2_b.pt")

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

# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])

有关更全面的使用方法,请参阅如何使用SAM 2 部分。

SAM 2 使用哪些数据集进行训练,这些数据集如何提高其性能?

SAM 2 是在 SA-V 数据集上进行训练的,该数据集是目前最大、最多样化的视频分割数据集之一。SA-V 数据集包括

  • 51,000 多部视频:在 47 个国家拍摄,提供各种真实场景。
  • 600,000+ 个掩码注释:详细的时空掩码注释,称为 "小掩码",涵盖整个物体和部分。
  • 数据集规模:比以往最大的数据集多 4.5 倍的视频和 53 倍的注释,提供前所未有的多样性和复杂性。

这一广泛的数据集使SAM 2 在主要的视频分割基准测试中取得了优异的性能,并增强了其零镜头泛化能力。更多信息,请参阅SA-V 数据集部分。

SAM 2 如何处理视频分割中的遮挡和物体重现?

SAM 2 包括一个复杂的存储机制,用于管理视频数据中的时间依赖性和遮挡。存储机制包括

  • 记忆编码器和记忆库:存储过去帧的特征。
  • 记忆注意力模块:利用存储的信息,保持对物体的追踪始终如一。
  • 遮挡头:专门处理物体不可见的情况,预测物体被遮挡的可能性。

即使物体被暂时遮挡或退出并重新进入场景,该机制也能确保连续性。更多详情,请参阅 "记忆机制和遮挡处理"部分。

SAM 2 与其他细分模型(如YOLOv8 )相比如何?

SAM 2 和Ultralytics YOLOv8 的目的不同,擅长的领域也不同。SAM 2 专为综合物体分割而设计,具有零镜头泛化和实时性能等高级功能,而YOLOv8 则针对物体检测和分割任务的速度和效率进行了优化。下面是一个比较:

模型 大小
(MB)
参数
(M)
速度 (CPU)
(ms/im)
MetaSAM-b 375 93.7 161440
MetaSAM2-b 162 80.8 121923
MetaSAM2-t 78.1 38.9 85155
MobileSAM 40.7 10.1 98543
FastSAM-s,YOLOv8 主干网 23.7 11.8 140
Ultralytics YOLOv8n-seg 6.7(小 11.7 倍) 3.4(少 11.4 倍) 79.5(快 1071 倍)

更多详情,请参阅SAM 2 对比YOLOv8部分。

📅创建于 4 个月前 ✏️已更新 13 天前

评论