Segment Anything Model 2:使用Ultralytics框架进行SAM2图像分割
前言
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
相关介绍
- Ultralytics 官方文档:https://docs.ultralytics.com/
- Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git.
- SAM 论文地址:https://arxiv.org/abs/2304.02643
- SAM2 官方源代码:https://github.com/facebookresearch/segment-anything-2.git
- SAM2 论文地址:https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/
- Segment Anything Model(SAM)是一种尖端的图像分割模型,可以进行快速分割,为图像分析任务提供无与伦比的多功能性。SAM 构成了 Segment Anything 计划的核心,这是一个开创性的项目,引入了用于图像分割的新颖模型、任务和数据集。
- SAM 的先进设计使其能够在无需先验知识的情况下适应新的图像分布和任务,这一功能称为零样本传输。SAM 在庞大的SA-1B 数据集上进行训练,该数据集包含超过 10 亿个掩模,分布在 1100 万张精心策划的图像中,SAM 表现出了令人印象深刻的零样本性能,在许多情况下超越了之前完全监督的结果。
- Segment Anything Model (SAM) 的主要特征
- 即时分割任务: SAM 在设计时考虑了即时分割任务,允许它根据任何给定的提示生成有效的分割掩码,例如识别对象的空间或文本线索。
- 高级架构: Segment Anything Model 采用强大的图像编码器、提示编码器和轻量级掩模解码器。这种独特的架构可以在分割任务中实现灵活的提示、实时掩模计算和歧义感知。
- SA-1B 数据集: SA-1B 数据集由 Segment Anything 项目引入,在 1100 万张图像上包含超过 10 亿个掩模。作为迄今为止最大的分割数据集,它为 SAM 提供了多样化、大规模的训练数据源。
- 零样本性能: SAM 在各种分段任务中显示出出色的零样本性能,使其成为适用于各种应用的即用型工具,并且对快速工程的需求极小。
- 要深入了解 Segment Anything 模型和 SA-1B 数据集,请访问Segment Anything 网站并查看研究论文Segment Anything。
- SAM 2(Segment Anything Model 2) 是 Meta 的分段任意模型 (SAM) 的后继者,是一款尖端工具,专为图像和视频中的全面对象分割而设计。它擅长通过支持实时处理和零样本泛化的统一、可提示的模型架构来处理复杂的视觉数据。
- 关键特性
- 统一模型的架构
SAM2相结合的能力的图像和视频分段在一个单一的模式。 这简化了统一部署和使用一致的性能跨越不同媒体的类型。 它利用一个灵活迅速的接口,使用户能够指定对象的利益,通过各种提示的类型,例如点、边界箱,或面罩。- 实时性
该模型可实现实时间的推理速度,处理大约44框架。 这使得萨姆2适用于需要即时的反馈,例如视频编辑和增强现实。- 零样本泛化
SAM 2 可以分割以前从未遇到过的对象,展示了强大的零样本泛化能力。这在预定义类别可能无法涵盖所有可能对象的多样化或不断发展的视觉领域中特别有用。- 互动细化
用户可以通过提供额外的提示来迭代地细化分割结果,从而精确控制输出。这种交互性对于视频注释或医学成像等应用中的微调结果至关重要。- 视觉挑战的高级处理
SAM 2 包括管理常见视频分割挑战的机制,例如对象遮挡和再现。它使用复杂的内存机制来跟踪跨帧的对象,即使对象暂时被遮挡或退出并重新进入场景也能确保连续性。- 性能和技术细节
SAM 2 在该领域树立了新的基准,在各种指标上均优于以前的模型:
- 模型架构
- 核心组件
- 图像和视频编码器:利用基于变压器的架构从图像和视频帧中提取高级特征。该组件负责理解每个时间步的视觉内容。
- 提示编码器:处理用户提供的提示(点、框、掩模)以指导分割任务。这使得 SAM 2 能够适应用户输入并瞄准场景中的特定对象。
- 记忆机制:包括记忆编码器、记忆库和记忆注意模块。这些组件共同存储和利用过去帧的信息,使模型能够随着时间的推移保持一致的对象跟踪。
- 掩模解码器:根据编码的图像特征和提示生成最终的分割掩模。在视频中,它还使用内存上下文来确保跨帧的准确跟踪。
- 记忆机制和遮挡处理
内存机制允许 SAM 2 处理视频数据中的时间依赖性和遮挡。当物体移动和交互时,SAM 2 将其特征记录在存储库中。当物体被遮挡时,模型可以依靠此记忆来预测其重新出现时的位置和外观。遮挡头专门处理物体不可见的场景,预测物体被遮挡的可能性。- 多重掩码模糊度解析
在不明确的情况下(例如,重叠的对象),SAM 2 可以生成多个掩模预测。此功能对于准确表示复杂场景至关重要,在这些场景中,单个蒙版可能无法充分描述场景的细微差别。- SA-V数据集
SA-V 数据集是为 SAM 2 的训练而开发的,是可用的最大且最多样化的视频分割数据集之一。这包括:
- 51,000 多个视频:在 47 个国家/地区拍摄,提供广泛的真实场景。
- 600,000 多个掩模注释:详细的时空掩模注释,称为“masklet”,覆盖整个对象和部分。
- 数据集规模:与之前最大的数据集相比,它的视频数量增加了 4.5 倍,注释数量增加了 53 倍,提供了前所未有的多样性和复杂性。
- 基准测试
- 视频对象分割
SAM 2 在主要视频分割基准测试中展现了卓越的性能:
- 交互式细分
在交互式分割任务中,SAM 2 显示出显着的效率和准确性:
前提条件
- 熟悉Python
实验环境
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.6.0
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0
tensorboard>=2.4.1
pandas>=1.1.4
seaborn>=0.11.0
安装环境
pip install ultralytics
# 或者
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple # 国内清华源,下载速度更快
项目地址
- Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git
Linux
git clone https://github.com/ultralytics/ultralytics.git
Cloning into 'ultralytics'...
remote: Enumerating objects: 4583, done.
remote: Counting objects: 100% (4583/4583), done.
remote: Compressing objects: 100% (1270/1270), done.
remote: Total 4583 (delta 2981), reused 4576 (delta 2979), pack-reused 0
Receiving objects: 100% (4583/4583), 23.95 MiB | 1.55 MiB/s, done.
Resolving deltas: 100% (2981/2981), done.
Windows
请到
https://github.com/ultralytics/ultralytics.git
网站下载源代码zip压缩包。
使用Ultralytics框架进行SAM2图像分割
from ultralytics import SAM
# Load a model
model = SAM("SAM2_weights/sam2_t.pt")
# Display model information (optional)
model.info()
# Segment
results = model("test_imgs/image.jpg", save = True)
# Segment
results = model("test_imgs/image2.jpg", save = True)
参考文献
[1] Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git.
[2] Ultralytics Docs:https://docs.ultralytics.com/
[3] SAM2 官方源代码:https://github.com/facebookresearch/segment-anything-2.git
[4] SAM2 论文地址:https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/
[5] https://docs.ultralytics.com/models/sam/
[6] https://docs.ultralytics.com/models/sam-2/
[7] https://segment-anything.com/
[8] https://arxiv.org/abs/2304.02643
[9] Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexander C. Berg, Wan-Yen Lo, Piotr Dollár, Ross Girshick. Segment Anything. 2023
[10] Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu, Chay Ryali, Tengyu Ma, Haitham Khedr, Roman Rädle, Chloe Rolland, Laura Gustafson, Eric Mintun,Junting Pan, Kalyan Vasudev Alwala, Nicolas Carion, Chao-Yuan Wu, Ross Girshick,Piotr Dollar, Christoph Feichtenhofer. SAM 2: Segment Anything in Images and Videos. 2024
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目