SAM 2:来自Meta的下一代视频图像分割模型

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Shaoni Mukherjee

编译:ronghuaiyang

导读

继llama 3.1成功发布之后,Meta于7月29日宣布了SAM2,这是一个统一的模型,用于图像和视频中的实时物体分割,并已达到了业界领先的表现。

在本文中,我们将探讨SAM2,它是原始SAM的扩展版本,能够处理图像和视频。SAM2在实时物体分割方面表现出色,通过提示和记忆注意力机制实现了动态互动。

20842c6903d819937024e50d823a8d98.png

引言

时代已经到来,你的手机或电脑能够理解图像中的物体,这得益于YOLO和SAM等技术。

Meta的Segment Anything Model (SAM)能够即时识别图像中的物体并将其分离,无需针对特定图像进行训练。它就像一位数字魔术师,只需轻轻一挥虚拟的魔法棒就能理解图像中的每一个物体。继llama 3.1成功发布之后,Meta于7月29日宣布了SAM2,这是一个统一的模型,用于图像和视频中的实时物体分割,并已达到了业界领先的表现。

SAM2提供了许多实际应用。例如,它的输出可以与生成式视频模型集成,以创建创新的视频效果并开启新的创意可能性。此外,SAM2还可以增强视觉数据标注工具,加速更先进的计算机视觉系统的开发。

8a25034a4ce2a4735ecc90ac281a9e7b.png

SAM 2,任务、模型和数据

什么是SAM中的图像分割?

Segment Anything (SAM) 引入了一项图像分割任务,该任务根据输入提示(例如边界框或指示感兴趣对象的点)生成分割掩码。SAM在 SA-1B数据集上训练,支持零样本分割与灵活提示,适用于多种应用场景。最近的技术进步提高了SAM的质量和效率。HQ-SAM通过使用高质量输出token并在精细掩模上训练来提升输出质量。为了扩大实际应用范围并提高效率,EfficientSAM、MobileSAM 和 FastSAM等项目应运而生。SAM的成功促使其在医疗影像、遥感、运动分割和伪装物体检测等领域得到了广泛应用。

使用的数据集

为了支持视频物体分割(VOS)任务,许多数据集被开发出来。早期的数据集虽然标注质量高,但规模较小,不足以训练深度学习模型。YouTube-VOS 是首个大规模的VOS数据集,覆盖了4000个视频中的94个物体类别。随着算法的进步和基准性能达到平台期,研究人员通过关注遮挡、长视频、极端变换以及物体和场景多样性来提高VOS任务的难度。当前的视频分割数据集缺乏“在视频中分割任何事物”的广度,因为它们的标注通常局限于特定类别的整个物体,如人物、车辆和动物。相比之下,新引入的 SA-V数据集不仅关注整个物体,还广泛涉及物体的部分,并包含超过一个数量级更多的掩模。SA-V数据集收集了50.9千个视频,共计642.6千个掩模片段。

aa1215ce08fba850dfc088e13cc991bd.png

来自SA-V dataset的带掩膜的示例视频

模型架构

该模型扩展了SAM,使其能够同时处理视频和图像。SAM2可以在单个帧上使用点、框和掩模提示来定义整个视频中要分割的物体的空间范围。在处理图像时,该模型的工作方式类似于SAM。一个轻量级、可提示的掩模解码器接收一帧的嵌入表示及任意提示,以生成分割掩模。提示可以迭代添加以细化掩模。

与 SAM 不同,SAM2解码器使用的帧嵌入并非直接从图像编码器获取。相反,它是基于过去预测的记忆和来自前一帧(包括相对于当前帧的“未来”帧)的提示进行条件化的。记忆编码器根据当前预测创建这些记忆,并将其存储在记忆库中供将来使用。记忆注意力操作利用图像编码器的每帧嵌入,并根据记忆库对其进行条件化,产生传递给掩模解码器的嵌入表示。

e9ce7e762394255a3ffebb38343539f8.png

SAM 2 架构

在每一帧中,分割预测基于当前提示以及之前观察到的记忆。视频以流式处理,图像编码器逐帧分析,同时参照先前帧中目标物体的记忆。掩模解码器可以使用输入提示来预测当前帧的分割掩模。最后,记忆编码器转换预测结果和图像编码器的嵌入表示(图中未显示),以便在后续帧中使用。

下面是图中不同组件和过程的简化解释:

图像编码器

  • 目的: 图像编码器处理每个视频帧以创建特征嵌入,即每个帧视觉信息的浓缩表示。

  • 工作原理: 它对整个视频只运行一次,因此非常高效。MAE 和 Hiera 在不同细节级别提取特征,帮助实现精确分割。

记忆注意力

  • 目的: 记忆注意力帮助模型利用来自先前帧的信息和任意新的提示来改进当前帧的分割。

  • 工作原理: 它使用一系列Transformer块来处理当前帧的特征,与过去帧的记忆进行比较,并根据两者更新分割。这有助于处理复杂的场景,其中物体可能会移动或随时间变化。

提示编码器和掩模解码器

  • 提示编码器: 类似于SAM中的,它接受输入提示(如点击或框选)来定义要分割的帧部分。它使用这些提示来细化分割。

  • 掩模解码器: 它与提示编码器协同工作以生成精确的掩模。如果提示不清楚,它会预测多个可能的掩模,并根据与物体重叠的程度选择最佳掩模。

记忆编码器和记忆库

  • 记忆编码器: 这个组件通过总结和组合来自先前掩模和当前帧的信息来创建过去帧的记忆。这有助于模型记住并利用视频早期的信息。

  • 记忆库: 它存储过去帧的记忆和提示。这包括最近帧和提示的队列以及高级对象信息。它帮助模型跟踪随时间变化的物体变化和移动。

训练

  • 目的: 该模型被训练用于处理交互式提示和分割任务,既包括图像也包括视频。

  • 工作原理: 在训练过程中,模型通过与帧序列的交互来学习预测分割掩模。它接收诸如真实标签掩模、点击或边界框之类的提示来引导其预测。这有助于模型能够响应各种类型的输入,并提高其分割准确性。

总体而言,该模型设计用于高效处理长视频,记住来自过去帧的信息,并根据交互式提示准确地分割物体。

SAM 2 表现

d2e94f963adb926a59fa876d45c806c3.png

SAM 2 物体分割

1e5953c341273ee865a62bea0839d065.png

SAM和SAM 2的对比

SAM 2 在交互式视频分割方面显著超越了先前的方法,在17个零样本视频数据集上取得了更优异的结果,并且所需的人工交互次数大约减少了三分之二。它在零样本基准测试中比SAM快六倍,并在已建立的视频物体分割基准测试如DAVIS、MOSE、LVOS和YouTube-VOS等方面表现出色。SAM2 的实时推理速度约为每秒44帧,比使用SAM进行的手动逐帧标注快8.4倍。

如何安装SAM 2?

克隆代码仓库:

# Clone the repo
!git clone https://github.com/facebookresearch/segment-anything-2.git

# Move to the folder
cd segment-anything-2

# Install the necessary requirements
!pip install -e .

要使用SAM 2预测器并运行示例Notebook,您需要jupytermatplotlib,可以通过以下命令进行安装:

pip install -e ".[demo]"

下载checkpoints

cd checkpoints
./download_ckpts.sh

如何使用SAM 2?

图像预测

SAM 2 可以用于静态图像物体分割。SAM 2提供了类似SAM的图像预测API,适用于这些用例。SAM2ImagePredictor类为图像提示提供了一个用户友好的接口。

import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor

checkpoint = "./checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_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 同样支持视频预测,并且可以在多个物体上使用。它还使用了一个推理状态来跟踪每个视频中的交互。

import torch
from sam2.build_sam import build_sam2_video_predictor

checkpoint = "./checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_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>)

    # add new prompts and instantly get the output on the same frame
    frame_idx, object_ids, masks = predictor.add_new_points(state, <your prompts>):

    # propagate the prompts to get masklets throughout the video
    for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
        ...

总结

  • SAM 2 概览: SAM 2 基于SAM构建,扩展了其功能以支持从图像到视频的处理。它使用诸如点击、边界框或掩模等提示来定义每一帧中的物体边界。一个轻量级的掩模解码器处理这些提示,并为每一帧生成分割掩模。

  • 视频处理: 在视频中,SAM 2 将初始掩模预测应用于所有帧,以创建掩模片段。它允许通过在后续帧中添加提示来进行迭代细化。

  • 记忆机制: 对于视频分割,SAM 2 使用记忆编码器、记忆库和记忆注意力模块。记忆编码器存储帧信息和用户交互,使预测跨越帧保持准确。记忆库保存来自先前帧和提示帧的数据,记忆注意力模块利用这些数据来细化预测。

  • 流式架构: SAM 2 以流式方式逐帧处理,使其在处理长视频和实时应用(如机器人)时非常高效。它使用记忆注意力模块将过去帧的数据纳入当前预测。

  • 解决歧义: SAM 2 通过生成多个掩模来解决提示不清楚时的歧义问题。如果提示未能解决问题,则模型会选择置信度最高的掩模以供视频后续处理。

SAM 2 局限性

  • 性能与改进: 尽管SAM 2 在分割图像和短视频中的物体方面表现良好,但在具有挑战性的场景下其性能可以进一步增强。

  • 跟踪挑战: SAM 2 可能在相机视角发生剧烈变化、长时间遮挡、拥挤场景或长视频中遇到困难。为了解决这个问题,模型设计为交互式的,允许用户通过在任意帧上点击来手动纠正跟踪,从而恢复目标物体。

  • 对象混淆: 当仅在一个帧中指定了目标物体时,SAM 2 可能会与类似的物体混淆。在后续帧中添加额外的细化提示可以解决这些问题,确保在整个视频中维持正确的掩模片段。

  • 多个物体分割: 虽然SAM 2 可以同时分割多个物体,但由于每个物体仅使用共享的每帧嵌入进行处理,因此效率显著下降。整合共享的物体级上下文可以提高效率。

  • 快速移动的物体: 对于复杂、快速移动的物体,SAM 2 可能会错过细微细节,导致跨帧预测不稳定,如自行车手的例子。虽然添加提示可以部分解决这个问题,但由于模型没有受到跨帧波动的惩罚,预测仍然可能缺乏时间平滑性。

  • 数据标注与自动化: 尽管使用SAM 2 自动生成掩模片段取得了进展,但仍需要人工标注员来验证质量并识别需要修正的帧。未来的改进可以进一步自动化数据标注过程,以提高效率。

e5b9678f28c3d3f29c36cdcb5d9a893e.png

—END—

英文原文:https://blog.paperspace.com/sam-2-metas-next-gen-model-for-video-and-image-segmentation/

362f7ed587f8c625ae31de6048e09e50.jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个在看吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值