当前位置: 首页 > news >正文

SAM 2: Segment Anything in Images and Videos

SAM2: 在图像和视频中分割任何内容

请添加图片描述

作者
Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu 等 (Meta FAIR)

  • 论文:SAM2: Segment Anything in Images and Videos
  • 项目代码:GitHub Repository
  • 互动演示:Demo

摘要

SAM2 是一个用于处理图像和视频分割的统一模型。基于最初的 Segment Anything Model (SAM),SAM2 将其能力从静态图像扩展到视频分割。其关键特点在于 Transformer 架构和 流媒体记忆,允许实时处理视频并利用之前的帧信息作为参考来提高分割的准确性。SAM2 不仅在图像上表现出色,在视频分割上也显示出更好的交互效率和准确性。

主要贡献

  1. 统一的分割模型:支持图像和视频分割。
  2. 大规模视频分割数据集:包括 35.5M 个分割蒙版,涵盖了 50.9K 个视频。
  3. 交互式分割:允许通过点击、框选和蒙版的方式进行提示,实现实时分割。
  4. 数据引擎:通过使用人工交互的方式提升模型和数据的质量,注释速度比传统方法快 8.4 倍。
  5. 高效性:比 SAM 模型快 6 倍的同时使用更少的交互次数。

PVS 任务概述

**PVS(Prompt-based Video Segmentation)**任务允许在视频的任意帧上向模型提供提示。这些提示可以是正/负点击、边界框或蒙版,旨在定义需要分割的目标对象或细化模型预测的结果。为了提供交互式体验,当模型在特定帧上收到提示时,应该立即做出反应并返回该帧上目标对象的有效分割掩码。

任务流程

  • 初始提示:模型可以接收到一个或多个提示,这些提示可能位于同一帧或不同帧上。提示可以帮助模型更好地定义目标对象。
  • 提示传播:在接收到初始提示后,模型应该将这些提示传播到整个视频,以获得目标对象在视频每一帧上的分割掩码,称为“masklet”。
  • 进一步细化:用户可以在视频的任何帧上为模型提供附加提示,以细化整个视频中的分割结果。用户可以通过添加新的提示,进一步优化视频中目标对象的分割。

例如,图2 展示了如何在不同帧上提供提示,进而影响整个视频中的分割效果。

SAM2 模型在 PVS 任务中的应用

请添加图片描述

##SAM2(Segment Anything Model 2) 是为 PVS 任务 设计的一个数据收集工具,旨在通过提示驱动的方式构建 SA-V 数据集。SAM2 不仅能够在图像上执行分割任务,还能够在视频上执行分割并传播提示,以获得目标对象的完整分割信息。

  • 数据集构建:SAM2 被应用于 PVS 任务,作为数据收集工具,为大规模的视频分割数据集 SA-V 提供了基础数据。
  • 任务设置:SAM2 模型在 在线离线 场景下进行了评估,模拟了跨多帧的交互式视频分割任务。在传统的半监督视频对象分割(VOS)任务设置中,模型仅能在视频的第一帧上接收到注释。此外,SAM2 模型还在 SA 基准测试上进行了图像分割任务的评估。
SAM2 模型的任务表现

请添加图片描述

  • 交互式分割场景:在 PVS 任务中,模型通过模拟的提示与多帧注释交互,评估其在处理交互式视频分割场景中的性能。模型能够迅速响应提示,并通过传播提示实现整个视频的分割任务。
  • 半监督分割:在常规的半监督 VOS 设置下,SAM2 模型在仅能获得第一帧注释的情况下,展示了强大的分割能力。
  • 图像分割:除了视频分割任务,SAM2 也在图像分割任务上进行了评估,并通过 SA 基准测试展示了其在图像上的分割精度。

PVS 任务通过提示驱动的方式,实现了视频中目标对象的交互式分割任务,而 SAM2 模型在这一任务中发挥了重要作用。通过收集大量视频数据,SAM2 使得 SA-V 数据集成为可能,并且在各种场景下(包括在线交互、半监督视频分割和图像分割)均表现出色。

模型架构

SAM2 采用了一个轻量的 Transformer 架构来处理图像和视频的分割任务。模型通过一个流式架构来处理视频帧,结合 记忆注意力模块 来引用过去的帧信息,以提高预测的准确性。其核心组件包括:

  • 图像编码器:用于生成每一帧的基础特征表示。
  • 记忆编码器:将每一帧的特征存储在记忆库中,以供后续帧使用。
  • 蒙版解码器:通过提示信息(点击、框选、蒙版)来预测物体的分割蒙版。

SAM2 架构与功能概述

请添加图片描述

SAM2(Segment Anything Model 2)在原始的 SAM 模型基础上扩展,能够处理图像和视频帧的分割任务。它被设计用于交互式分割任务,利用点击、边界框或蒙版等提示,动态细化分割结果,并将这些提示传播到整个视频序列中。

1. 图像编码器

图像编码器 负责以流式处理的方式处理视频帧。它在整个交互过程中只运行一次,生成每帧的 无条件特征嵌入(tokens)。SAM2 使用了 MAE 预训练的 Hiera 图像编码器,支持多尺度特征解码,以提高处理效率。

2. 记忆注意力模块

记忆注意力模块 的作用是基于之前帧的特征和预测结果,以及任何新的提示,来调整当前帧的特征。该模块由堆叠的 Transformer 块 组成。第一个 Transformer 块处理当前帧的图像编码,接下来的块执行 自注意力交叉注意力,引用存储在 记忆库 中的提示帧和未提示帧的记忆。这种注意力机制让 SAM2 能够利用最新的 高效注意力核 技术,以更高效地理解整个视频的对象分割情况。

3. 提示编码器与掩码解码器

提示编码器 设计用于处理提示(如点击、边界框或蒙版),这些提示帮助定义给定帧中感兴趣的对象。提示可以是稀疏的(如点击)或密集的(如蒙版),它们与帧嵌入一起嵌入到模型中,并传递给 掩码解码器,后者预测该帧的分割掩码。

  • 掩码解码器 类似于 SAM 模型,但它增加了处理视频帧的功能。它迭代地更新提示和帧嵌入,生成每帧的分割掩码。
  • 如果提示不明确(例如仅提供单击提示),模型会预测多个可能的掩码,并选择预测 IoU 最高的掩码进行传播。
  • SAM2 增加了一个机制,用于预测目标对象是否出现在给定帧中(例如在某些帧中可能由于遮挡导致对象缺失的情况)。

4. 记忆编码器

记忆编码器 生成记忆,通过卷积模块对输出掩码进行降采样,并将其与图像编码器的无条件帧嵌入相加。然后通过轻量级卷积层融合信息,创建高效的记忆表示,供未来帧使用。

5. 记忆库

记忆库 存储了过去帧的处理结果,最多保留 N 个最近帧M 个提示帧。在视频对象分割(VOS)任务中,初始提示帧(带有标注的第一帧)会被存储在记忆库中,其他最近的帧也会被存储为参考。这些记忆被存储为空间特征图,模型可以随时引用以改善未来帧的分割结果。

  • SAM2 还存储了 对象指针(轻量级向量),这些指针包含了关于目标对象的高层次语义信息,用于指导记忆注意力阶段的交叉注意力操作。
  • 通过记忆库,SAM2 能够跟踪对象在帧间的运动,并在处理长视频时有效地管理分割结果。

训练 SAM2

SAM2 在图像和视频数据上联合训练。模型在训练时模拟交互式提示,采样 8 帧序列,并随机选择最多 2 帧进行提示。根据模型的预测,随机提供纠正性的点击提示。训练任务是逐步预测 masklet(整个视频的分割结果)。

  • 初始提示可以是地面实况的蒙版、从对象中采样的正点击或边界框输入。
  • 模型被训练以使用其记忆和注意力机制细化和传播这些提示。

总结

SAM2 扩展了原始 SAM 模型的功能,能够处理视频分割任务,并在交互式提示的基础上提供更加精确的分割结果。该架构设计允许模型在实时处理帧的同时,利用过去的预测和提示生成整个视频的分割掩码。SAM2 的 提示编码器轻量级掩码解码器 使得它能够动态响应用户提示,实时更新分割结果。

数据集

请添加图片描述

SAM2 使用了全新的 Segment Anything Video (SA-V) 数据集。该数据集包含 35.5M 个蒙版,跨越 50.9K 个视频,远超以往的分割数据集。SA-V 数据集的生成是通过一个包含 SAM2 的数据引擎实现的,这使得注释速度提高了 8.4 倍。

实验结果

实验显示,SAM2 在图像和视频分割上表现出了卓越的效果:

  • 在视频分割任务中,SAM2 相比以前的模型,交互次数减少了 3 倍。
  • SAM2 在视频对象分割基准测试中表现优越,并且在图像分割任务中比 SAM 更快。
  • SAM2 对不同类型的视频和图像数据集表现稳定,涵盖了 17 个视频分割基准和 37 个图像分割基准。

未来工作

未来工作可能包括:

  • 提升模型在复杂场景中的鲁棒性,尤其是物体快速移动或相似物体出现的场景。
  • 自动化部分数据标注流程,进一步提高数据引擎的效率。

SAM2 未来的工作可能包括进一步优化模型的交互性能和泛化能力,尤其是在应对复杂视频场景时。此外,模型的记忆机制可以进一步改进,以便更好地处理长时间序列和快速移动的物体

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android 车联网——汽车模块介绍(附1)
  • Vue3.5+ 侦听器的3个更新
  • Java高级Day43-类加载
  • python压缩图片的代码
  • 基于Spring搭建SpringMvc框架
  • 网络通信开课作业c++
  • 【Go】Go语言中的数组基本语法与应用实战
  • 写作神器!推荐4款AI免费的写论文的文献网站
  • redisController工具类
  • 动态内存管理之malloc,free,calloc和realloc函数
  • Flip动画的实现示例demo
  • mysql的zip解压缩版安装
  • 常见的限流算法
  • hnust 湖科大 毕业实习常见问题30问(2021 年7月,V0.9)
  • django orm增删改查操作
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • exports和module.exports
  • JWT究竟是什么呢?
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MySQL-事务管理(基础)
  • Python学习笔记 字符串拼接
  • Redux 中间件分析
  • 给Prometheus造假数据的方法
  • 观察者模式实现非直接耦合
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 排序(1):冒泡排序
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 为视图添加丝滑的水波纹
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 字符串匹配基础上
  • scrapy中间件源码分析及常用中间件大全
  • ​VRRP 虚拟路由冗余协议(华为)
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #DBA杂记1
  • (Qt) 默认QtWidget应用包含什么?
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (一)Neo4j下载安装以及初次使用
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .“空心村”成因分析及解决对策122344
  • .bat批处理(六):替换字符串中匹配的子串
  • .CSS-hover 的解释
  • .net core docker部署教程和细节问题
  • .Net Core 中间件与过滤器
  • .NET Micro Framework 4.2 beta 源码探析
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET开发人员必知的八个网站
  • @javax.ws.rs Webservice注解
  • @SpringBootApplication 注解
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用