SAM 2: 任何分段模型 2
SAM 2 是 Meta 的Segment Anything Model (SAM) 的后续产品,是一款专为图像和视频中的综合对象分割而设计的尖端工具。它采用统一、可提示的模型架构,支持实时处理和零镜头泛化,在处理复杂的视觉数据方面表现出色。
主要功能
观看: How to Run Inference with Meta's SAM2 using Ultralytics | Step-by-Step Guide 🎉
统一模型架构
SAM 2 在单一模型中结合了图像和视频分割功能。这种统一简化了部署,并能在不同媒体类型中实现一致的性能。它利用灵活的基于提示的界面,使用户能够通过各种提示类型(如点、边界框或掩码)指定感兴趣的对象。
实时性能
该模型可实现实时推理速度,每秒处理约 44 帧图像。这使得SAM 2 适用于需要即时反馈的应用,如视频编辑和增强现实。
零点概括
SAM 2 可以分割它从未遇到过的物体,展示了强大的零点泛化能力。这在多种多样或不断变化的视觉领域尤其有用,因为在这些领域中,预定义的类别可能无法涵盖所有可能的物体。
互动式改进
用户可以通过提供额外的提示来迭代完善分割结果,从而实现对输出的精确控制。这种交互性对于微调视频注释或医学成像等应用中的结果至关重要。
视觉挑战的高级处理
SAM 2 包括一些机制,用于管理常见的视频分割难题,如物体遮挡和重现。它使用复杂的记忆机制来跟踪各帧中的物体,即使物体暂时被遮挡或退出和重新进入场景,也能确保连续性。
要深入了解SAM 2 的架构和功能,请浏览SAM 2 研究论文。
性能和技术细节
SAM 2 树立了该领域的新基准,在各种指标上都优于以前的模型:
公制 | SAM 2 | 上一个 SOTA |
---|---|---|
交互式视频分割 | 最佳 | - |
需要人际互动 | 减少 3 倍 | 基线 |
Image Segmentation Accuracy | 改进 | SAM |
推理速度 | 快 6 倍 | SAM |
模型架构
核心部件
- Image and Video Encoder: Utilizes a transformer-based architecture to extract high-level features from both images and video frames. This component is responsible for understanding the visual content at each timestep.
- 提示编码器:处理用户提供的提示(点、框、遮罩),以指导分割任务。这样,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 预测示例
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 如何在不提供提示(bboxes/points/masks)的情况下用于分割图像或视频的全部内容。
SAM 2 comparison vs YOLOv8
Here we compare Meta's smallest SAM 2 model, SAM2-t, with Ultralytics smallest segmentation model, YOLOv8n-seg:
模型 | Size (MB) |
Parameters (M) |
Speed (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 161440 |
Meta SAM2-b | 162 | 80.8 | 121923 |
Meta SAM2-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.7x smaller) | 3.4 (11.4x less) | 79.5 (1071x faster) |
这种比较显示了不同模型之间在模型大小和速度上的数量级差异。虽然SAM 在自动分段方面具有独特的功能,但它并不是YOLOv8 分段模型的直接竞争对手,后者更小、更快、更高效。
Tests run on a 2023 Apple M2 Macbook with 16GB of RAM using torch==2.3.1
和 ultralytics==8.3.82
. To reproduce this test:
示例
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 自动注释
要使用SAM 2 自动标注数据集,请参考以下示例:
自动注释示例
论据 | 类型 | 说明 | 默认值 |
---|---|---|---|
data |
str |
包含要注释的图像的文件夹路径。 | |
det_model |
str 可选 |
预先训练的YOLO 检测模型。默认为 "yolov8x.pt"。 | 'yolov8x.pt' |
sam_model |
str 可选 |
预先训练的SAM 2 分割模型。默认为 "sam2_b.pt"。 | 'sam2_b.pt' |
device |
str 可选 |
运行模型的设备。默认为空字符串(CPU 或GPU ,如果可用)。 | |
output_dir |
str , None 可选 |
保存注释结果的目录。默认为 "数据 "同一目录下的 "标签 "文件夹。 | None |
该功能有助于快速创建高质量的分割数据集,是旨在加快项目进度的研究人员和开发人员的理想选择。
局限性
SAM 2 虽然有其优势,但也有一定的局限性:
- 跟踪稳定性:SAM 2 在长时间连续跟踪或视角发生重大变化时,可能会失去对物体的跟踪。
- 物体混淆:模型有时会混淆外观相似的物体,尤其是在拥挤的场景中。
- 处理多个对象时的效率:同时处理多个对象时,由于缺乏对象间通信,分割效率会降低。
- Detail Accuracy: May miss fine details, especially with fast-moving objects. Additional prompts can partially address this issue, but temporal smoothness is not guaranteed.
引文和致谢
如果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 and Ultralytics YOLOv8 serve different purposes and excel in different areas. While SAM 2 is designed for comprehensive object segmentation with advanced features like zero-shot generalization and real-time performance, YOLOv8 is optimized for speed and efficiency in object detection and segmentation tasks. Here's a comparison:
模型 | Size (MB) |
Parameters (M) |
Speed (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 161440 |
Meta SAM2-b | 162 | 80.8 | 121923 |
Meta SAM2-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.7x smaller) | 3.4 (11.4x less) | 79.5 (1071x faster) |
For more details, see the SAM 2 comparison vs YOLOv8 section.