SAM 2.1
我们刚刚支持了更精确的SAM2.1 模型。请试用一下!
SAM 2: 任何分段模型 2
SAM 2 是 Meta 的Segment Anything Model (SAM) 的后续产品,是一款专为图像和视频中的综合对象分割而设计的尖端工具。它采用统一、可提示的模型架构,支持实时处理和零镜头泛化,在处理复杂的视觉数据方面表现出色。
主要功能
观看: 如何使用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 可以生成多个掩码预测。这一功能对于准确呈现复杂场景至关重要,因为在复杂场景中,单一掩码可能无法充分描述场景的细微差别。
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 型号都会自动下载。
如何使用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.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.1
和 ultralytics==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 自动标注数据集,请参考以下示例:
自动注释示例
论据 | 类型 | 说明 | 默认值 |
---|---|---|---|
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 倍) |