❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
🚀 快速阅读
- 方面:SAM 2.1是Meta推出的先进视觉分割模型,用于图像和视频处理。
- 功能:支持图像和视频分割、实时视频处理、用户交互式分割和多对象跟踪。
- 技术:基于Transformer架构和流式记忆设计,引入数据增强技术,提升识别能力。
正文(附运行示例)
SAM 2.1 是什么
SAM 2.1(全称Segment Anything Model 2.1)是Meta推出的先进视觉分割模型,专为图像和视频处理设计。该模型基于简单的Transformer架构和流式记忆设计,实现了实时视频处理。
SAM 2.1在前代基础上引入了数据增强技术,改善了对视觉相似物体和小物体的识别能力,提升了遮挡处理能力。此外,Meta开源了SAM 2的开发者套件,包括训练代码和网络演示的前后端代码,方便用户使用和微调模型。
SAM 2.1 的主要功能
- 图像和视频分割:对图像和视频进行视觉分割,识别和分离出不同的对象和元素。
- 实时视频处理:基于流式记忆和Transformer架构,实时处理视频流。
- 用户交互式分割:基于用户点击或框选,交互式地分割图像和视频中的对象。
- 多对象跟踪:支持在视频序列中跟踪多个对象,并为每个对象生成分割掩码。
- 数据增强:引入数据增强技术,提高模型对视觉相似物体和小物体的识别能力。
- 遮挡处理:改进模型的位置编码和训练策略,增强对遮挡情况的处理能力。
SAM 2.1 的技术原理
- Transformer架构:SAM 2.1基于Transformer架构,一种高效的注意力机制模型,能处理序列数据,如图像和视频帧。
- 流式记忆:为处理视频数据,引入流式记忆机制,支持模型在处理视频帧时保持对之前帧的记忆,能更好地理解场景的动态变化。
- 数据增强技术:基于模拟视觉相似物体和小物体的数据增强,提高了对难以识别物体的识别能力。
- 位置编码:改进空间和物体指向记忆的位置编码,有助于模型更好地理解物体的空间位置和它们之间的交互。
如何运行 SAM 2.1
安装
SAM 2.1需要先进行安装。代码要求python>=3.10
,以及torch>=2.3.1
和torchvision>=0.18.1
。请按照以下步骤安装:
git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
如果是在Windows系统上安装,强烈建议使用Windows Subsystem for Linux (WSL)。
下载检查点
首先,需要下载模型检查点。所有模型检查点可以通过运行以下命令下载:
cd checkpoints && ./download_ckpts.sh && cd ..
或者单独下载:
图像预测
SAM 2.1具有与SAM相同的静态图像处理能力,并提供了与SAM相似的图像预测API。以下是一个简单的图像预测示例:
import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
视频预测
对于视频中的可提示分割和跟踪,SAM 2.1提供了视频预测器,支持在视频中添加提示并传播掩码。以下是一个简单的视频预测示例:
import torch
from sam2.build_sam import build_sam2_video_predictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = build_sam2_video_predictor(model_cfg, checkpoint)
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
state = predictor.init_state(<your_video>)
# 添加新提示并立即获取同一帧的输出
frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):
# 传播提示以获取整个视频的掩码
for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
...
资源
- 项目官网:https://ai.meta.com/blog/fair-news-segment-anything-2-1-meta-spirit-lm-layer-skip-salsa-sona/
- GitHub 仓库:https://github.com/facebookresearch/sam2
- 环境配置文档:https://github.com/facebookresearch/sam2/blob/main/INSTALL.md
- arXiv 技术论文:https://arxiv.org/abs/2408.00714
- Hugging Face:https://huggingface.co/models?search=facebook/sam2
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦