SAM 2.1:Meta 开源的图像和视频分割,支持实时视频处理

399 阅读4分钟

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 方面:SAM 2.1是Meta推出的先进视觉分割模型,用于图像和视频处理。
  2. 功能:支持图像和视频分割、实时视频处理、用户交互式分割和多对象跟踪。
  3. 技术:基于Transformer架构和流式记忆设计,引入数据增强技术,提升识别能力。

正文(附运行示例)

SAM 2.1 是什么

公众号: 蚝油菜花 - sam2

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.1torchvision>=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):
        ...

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦