Link to this sectionSAM 2: Segment Anything Model 2#
SAM 2 是 Meta Segment Anything Model (SAM) 的继任者,是一款尖端工具,专为图像和视频中的全面对象分割而设计。它通过统一的可提示模型架构处理复杂的视觉数据,并支持实时处理和零样本泛化。
SAM 2.1 models power the smart annotation feature on Ultralytics Platform, enabling click-based segmentation for fast dataset labeling. See the annotation guide for details.

Link to this section主要功能#
Watch: How to Run Inference with Meta's SAM2 using Ultralytics | Step-by-Step Guide 🎉
Link to this section统一的模型架构#
SAM 2 将图像和视频分割功能结合在单个模型中。这种统一简化了部署,并确保在不同媒体类型间表现一致。它利用灵活的基于提示的界面,使用户能够通过点、边界框或掩码等多种提示类型来指定感兴趣的对象。
Link to this section实时性能#
该模型实现了实时推理速度,每秒可处理约 44 帧。这使得 SAM 2 非常适合需要即时反馈的应用,例如视频编辑和增强现实。
Link to this section零样本泛化#
SAM 2 可以分割它从未见过的对象,展现了强大的零样本泛化能力。这在多变或不断发展的视觉领域中特别有用,因为预定义的类别可能无法涵盖所有可能的对象。
Link to this section交互式细化#
用户可以通过提供额外的提示来迭代地细化分割结果,从而实现对输出的精确控制。这种交互性对于在视频标注或医学成像等应用中微调结果至关重要。
Link to this section视觉挑战的高级处理#
SAM 2 包含处理常见视频分割挑战(如对象遮挡和重现)的机制。它利用复杂的记忆机制来跟踪帧间对象,即使对象被暂时遮挡或离开并重新进入场景,也能确保连续性。
若想深入了解 SAM 2 的架构和功能,请阅读 SAM 2 研究论文。
Link to this section性能与技术细节#
SAM 2 在该领域树立了新标杆,在多项指标上均优于以往模型:
| 指标 | SAM 2 | 先前 SOTA |
|---|---|---|
| 交互式视频分割 | 最佳 | - |
| 所需人工交互 | 减少 3 倍 | 基准 |
| 图像分割 准确率 | 提升 | SAM |
| 推理速度 | 快 6 倍 | SAM |
Link to this section模型架构#
Link to this section核心组件#
- 图像和视频编码器:利用基于 Transformer 的架构从图像和视频帧中提取高级特征。该组件负责理解每个时间步的视觉内容。
- 提示编码器:处理用户提供的提示(点、框、掩码)以指导分割任务。这使 SAM 2 能够适应用户输入并定位场景中的特定对象。
- 记忆机制:包括记忆编码器、记忆库和记忆注意力模块。这些组件共同存储和利用来自过去帧的信息,使模型能够随时间保持一致的 对象跟踪。
- 掩码解码器:基于编码的图像特征和提示生成最终的分割掩码。在视频中,它还利用记忆上下文来确保跨帧的精确跟踪。

Link to this section记忆机制与遮挡处理#
记忆机制使 SAM 2 能够处理视频数据中的时间依赖性和遮挡问题。随着对象的移动和交互,SAM 2 将其特征记录在记忆库中。当对象被遮挡时,模型可以依靠此记忆来预测其重现时的位置和外观。遮挡头专门处理对象不可见的情况,预测对象被遮挡的可能性。
Link to this section多掩码歧义消解#
在存在歧义的情况下(例如重叠对象),SAM 2 可以生成多个掩码预测。此功能对于准确表示复杂场景至关重要,因为单个掩码可能无法充分描述场景的细微差别。
Link to this sectionSA-V 数据集#
SA-V 数据集是为 SAM 2 的训练而开发的,是目前最大且最多样化的视频分割数据集之一。它包括:
- 51,000 多段视频:在 47 个国家/地区拍摄,提供了广泛的现实世界场景。
- 600,000 多条掩码标注:被称为“masklets”的详细时空掩码标注,覆盖整个对象及其部分。
- 数据集规模:其视频数量是之前最大数据集的 4.5 倍,标注数量多出 53 倍,提供了前所未有的多样性和复杂性。
Link to this section基准测试#
Link to this section视频对象分割#
SAM 2 在各大视频分割基准测试中表现优异:
| 数据集 | J&F | J | F |
|---|---|---|---|
| DAVIS 2017 | 82.5 | 79.8 | 85.2 |
| YouTube-VOS | 81.2 | 78.9 | 83.5 |
Link to this section交互式分割#
在交互式分割任务中,SAM 2 显示出显著的效率和准确性:
| 数据集 | NoC@90 | AUC |
|---|---|---|
| DAVIS 交互式 | 1.54 | 0.872 |
Link to this section安装#
要安装 SAM 2,请使用以下命令。所有 SAM 2 模型将在首次使用时自动下载。
pip install ultralyticsLink to this section如何使用 SAM 2:图像和视频分割的多功能性#
下表详细介绍了可用的 SAM 2 模型、其预训练权重、支持的任务以及与 推理、验证、训练 和 导出 等不同操作模式的兼容性。
| 模型类型 | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
|---|---|---|---|---|---|---|
| SAM 2 tiny | sam2_t.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2 small | sam2_s.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2 base | sam2_b.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2 large | sam2_l.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2.1 tiny | sam2.1_t.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2.1 small | sam2.1_s.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2.1 base | sam2.1_b.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
| SAM 2.1 large | sam2.1_l.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
Link to this sectionSAM 2 预测示例#
SAM 2 可应用于多种任务,包括实时视频编辑、医学成像和自主系统。它处理静态和动态视觉数据的分割能力,使其成为研究人员和开发人员手中的多功能工具。
Link to this section基于提示的分割#
使用提示来分割图像或视频中的特定对象。
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]])Link to this section全景分割#
无需特定提示,即可分割整个图像或视频内容。
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")Link to this section视频分割与对象追踪#
通过特定提示分割整个视频内容并追踪对象。
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]])- This example demonstrates how SAM 2 can be used to segment the entire content of an image or video if no prompts (bboxes/points/masks) are provided.
Link to this section动态交互式分割与追踪#
SAM2DynamicInteractivePredictor is an advanced training-free extension of SAM2 that enables dynamic interaction with multiple frames and continual learning capabilities. This predictor supports real-time prompt updates and memory management for improved tracking performance across a sequence of images. Compared to the original SAM2, SAM2DynamicInteractivePredictor rebuilds the inference flow to make the best use of pretrained SAM2 models without requiring additional training.

Link to this section主要功能#
它带来了三项重大增强:
- 动态交互:在视频处理过程中的任何时刻,添加新提示以合并或追踪后续帧中出现的新实例。
- 持续学习:为现有实例添加新提示,以持续提升模型性能。
- 独立多图像支持:处理多个独立图像(不一定是视频序列),并实现内存共享和跨图像对象追踪。
Link to this section核心功能#
- 提示灵活性:支持将边界框、点和掩码作为提示。
- 内存库管理:维护一个动态内存库,用于跨帧存储对象状态。
- 多对象追踪:支持通过独立的对象 ID 同时追踪多个对象。
- 实时更新:允许在推理过程中添加新提示,而无需重新处理之前的帧。
- 独立图像处理:处理独立图像时共享内存上下文,以保持跨图像的对象一致性。
from ultralytics.models.sam import SAM2DynamicInteractivePredictor
# Create SAM2DynamicInteractivePredictor
overrides = dict(conf=0.01, task="segment", mode="predict", imgsz=1024, model="sam2_t.pt", save=False)
predictor = SAM2DynamicInteractivePredictor(overrides=overrides, max_obj_num=10)
# Define a category by box prompt
predictor(source="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[0], update_memory=True)
# Detect this particular object in a new image
results = predictor(source="image2.jpg")
# Add new category with a new object ID
results = predictor(
source="image4.jpg",
bboxes=[[300, 300, 400, 400]], # New object
obj_ids=[1], # New object ID
update_memory=True, # Add to memory
)
# Perform inference
results = predictor(source="image5.jpg")
# Add refinement prompts to the same category to boost performance
# This helps when object appearance changes significantly
results = predictor(
source="image6.jpg",
points=[[150, 150]], # Refinement point
labels=[1], # Positive point
obj_ids=[1], # Same object ID
update_memory=True, # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")SAM2DynamicInteractivePredictor 旨在与 SAM 2 模型配合使用,并原生支持通过 SAM 2 所支持的所有 框/点/掩码提示 来添加或细化类别。它特别适用于对象随时间出现或发生变化的情景,例如视频标注或交互式编辑任务。
Link to this section参数#
| 名称 | 默认值 | 数据类型 | 描述 |
|---|---|---|---|
max_obj_num | 3 | int | 预设的最大类别数量 |
update_memory | False | bool | 是否使用新提示更新内存 |
obj_ids | None | List[int] | 对应于提示的对象 ID 列表 |
Link to this section用例#
SAM2DynamicInteractivePredictor 非常适用于:
- 视频标注工作流:适用于序列中不断出现新对象的场景。
- 交互式视频编辑:需要实时对象添加和细化的场景。
- 监控应用:有动态对象追踪需求的场景。
- 医学成像:用于追踪跨时间序列的解剖结构。
- 自主系统:需要自适应对象检测和追踪的场景。
- 多图像数据集:用于在独立图像间进行一致的对象分割。
- 图像集分析:需要在不同场景间追踪对象的分析。
- 跨领域分割:利用来自不同图像上下文的记忆。
- 半自动标注:以最少人工干预实现高效的数据集创建。
Link to this sectionSAM 与 YOLO 的比较#
在此我们将 Meta 的 SAM 2 模型(包括最小的 SAM2-t 变体)与 Ultralytics 分割模型(包括 YOLO26n-seg)进行对比:
| 模型 | 大小 (MB) | 参数 (M) | 速度 (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s with YOLOv8 backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (小 11.0 倍) | 3.4 (少 11.4 倍) | 24.8 (快 945 倍) |
| Ultralytics YOLO11n-seg | 6.2 (小 12.6 倍) | 2.9 (少 13.4 倍) | 24.3 (快 964 倍) |
| Ultralytics YOLO26n-seg | 6.7 (小 11.7 倍) | 2.7 (少 14.4 倍) | 25.2 (快 930 倍) |
此比较显示了 SAM 变体与 YOLO 分割模型在模型大小和速度上的巨大差异。虽然 SAM 提供了独特的自动分割能力,但 YOLO 模型(特别是 YOLOv8n-seg、YOLO11n-seg 和 YOLO26n-seg)在尺寸更小、速度更快且计算效率更高方面具有显著优势。
SAM 速度使用 PyTorch 测量,YOLO 速度使用 ONNX Runtime 测量。测试运行于配备 16GB 内存的 2025 年款 Apple M4 Air,环境为 torch==2.10.0、ultralytics==8.4.31 和 onnxruntime==1.24.4。若要复现此测试:
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 YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
model = YOLO(file_name)
model.info()
onnx_path = model.export(format="onnx", dynamic=True)
model = YOLO(onnx_path)
model(ASSETS)Link to this section自动标注:高效创建数据集#
自动标注是 SAM 2 的一项强大功能,用户可以利用预训练模型快速准确地生成分割数据集。此功能特别适合在无需大量人工投入的情况下创建高质量的大型数据集。
Link to this section如何使用 SAM 2 进行自动标注#
Watch: Auto Annotation with Meta's Segment Anything 2 Model using Ultralytics | Data Labeling
要使用 SAM 2 自动标注你的数据集,请参考此示例:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam2_b.pt")| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
data | str | 必填 | 包含待标注或待分割图像的目录路径。 |
det_model | str | 'yolo26x.pt' | 用于初始对象检测的 YOLO 检测模型路径。 |
sam_model | str | 'sam_b.pt' | 用于分割的 SAM 模型路径(支持 SAM、SAM 2、MobileSAM 和 SAM 3 权重)。 |
device | str | '' | 计算设备(例如 'cuda:0'、'cpu',或留空以实现自动设备检测)。 |
conf | float | 0.25 | 用于过滤弱检测结果的 YOLO 检测置信度阈值。 |
iou | float | 0.45 | 用于非极大值抑制(NMS)的 IoU 阈值,以过滤重叠的框。 |
imgsz | int | 640 | 调整图像大小时的输入尺寸(必须是 32 的倍数)。 |
max_det | int | 300 | 每张图像的最大检测数量,以提升内存效率。 |
classes | list[int] | None | 要检测的类别索引列表(例如,[0, 1] 表示人和自行车)。 |
output_dir | str | None | 标注的保存目录(默认:<data>_auto_annotate_labels 同级目录)。 |
此功能有助于快速创建高质量的分割数据集,非常适合旨在加速项目的研究人员和开发人员。
Link to this section局限性#
尽管 SAM 2 实力强劲,但仍存在一定的局限性:
- 跟踪稳定性:在长序列或视角发生重大变化时,SAM 2 可能会丢失目标跟踪。
- 目标混淆:模型有时会混淆看起来相似的对象,特别是在拥挤的场景中。
- 处理多个目标的效率:由于缺乏目标间的交互通信,在同时处理多个目标时,分割效率会降低。
- 细节 精度:可能会漏掉精细的细节,特别是对于快速移动的物体。额外的提示(prompts)可以在一定程度上解决此问题,但不能保证时间上的平滑性。
Link to this section引用与致谢#
如果 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 表示感谢,感谢他们通过这一开创性的模型和数据集为 AI 社区做出的贡献。
Link to this section常见问题#
Link to this section什么是 SAM 2,它相比原始的 Segment Anything Model (SAM) 有哪些改进?#
SAM 2 是 Meta 的 Segment Anything Model (SAM) 的继任者,是一款专为图像和视频的全面目标分割而设计的前沿工具。它通过支持实时处理和零样本(zero-shot)泛化的统一提示模型架构,在处理复杂视觉数据方面表现出色。与原始 SAM 相比,SAM 2 进行了多项改进,包括:
- 统一的模型架构:在单个模型中结合了图像和视频分割能力。
- 实时性能:每秒处理约 44 帧,非常适合需要即时反馈的应用。
- 零样本(Zero-Shot)泛化:能够分割其从未见过的目标,在各种视觉领域中非常有用。
- 交互式精调:允许用户通过提供额外的提示(prompts)来迭代地优化分割结果。
- 对视觉挑战的高级处理:能够处理视频分割中常见的问题,如目标遮挡和重新出现。
欲了解有关 SAM 2 架构和功能的更多详细信息,请查看 SAM 2 研究论文。
Link to this section我该如何使用 SAM 2 进行实时视频分割?#
通过利用其可提示(promptable)的接口和实时推理能力,可以将 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 部分。
Link to this sectionSAM 2 是用什么数据集训练的,这些数据集如何提升其性能?#
SAM 2 在 SA-V 数据集上进行训练,这是目前最大、最多样化的视频分割数据集之一。SA-V 数据集包括:
- 51,000 多段视频:在 47 个国家/地区拍摄,提供了广泛的现实世界场景。
- 600,000 多条掩码标注:被称为“masklets”的详细时空掩码标注,覆盖整个对象及其部分。
- 数据集规模:与此前最大的数据集相比,视频数量增加了 4.5 倍,标注数量增加了 53 倍,提供了前所未有的多样性和复杂性。
这一庞大的数据集使 SAM 2 能够在主要的视频分割基准测试中获得优异的性能,并增强了其零样本(zero-shot)泛化能力。更多信息,请参阅 SA-V 数据集 部分。
Link to this sectionSAM 2 如何处理视频分割中的遮挡和目标重现?#
SAM 2 包含一个复杂的记忆机制来管理视频数据中的时间依赖关系和遮挡。该记忆机制包括:
- 记忆编码器和记忆库(Memory Encoder and Memory Bank):存储来自过去帧的特征。
- 记忆注意力模块(Memory Attention Module):利用存储的信息来保持随时间推移的一致目标跟踪。
- 遮挡检测头(Occlusion Head):专门处理目标不可见的场景,预测目标被遮挡的可能性。
即使在目标暂时被遮挡或离开又重新进入场景时,这种机制也能确保连续性。更多详细信息,请参考 记忆机制和遮挡处理 部分。
Link to this sectionSAM 2 与 YOLO26 等其他分割模型相比如何?#
SAM 2 模型(如 Meta 的 SAM2-t 和 SAM2-b)提供了强大的零样本(zero-shot)分割能力,但与 YOLO 模型相比,它们体积大得多且速度较慢。例如,YOLO26n-seg 在 CPU 上的体积约为 SAM2-b 的 24 分之一,速度则快过 1145 倍。虽然 SAM 2 在多功能、基于提示(prompt)和零样本(zero-shot)的分割场景中表现出色,但 YOLO26 针对速度、效率和具有端到端无 NMS 推理的实时应用进行了优化,这使其更适合部署在资源受限的环境中。