SAM 2: Segment Anything in Images and Videos

news2024/9/20 3:17:31

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机的锅炉温度控制系统PID调节proteus仿真

地址: https://pan.baidu.com/s/17oMgAnUBUKKEVnv5hNRQmQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…

招聘数据分析师,HR会考察候选人哪些方面?

数据分析是必须具备深厚的专业技能底蕴,这是最基本的要求,其中包括对数据分析工具和编程语言的精通,以及对数据库管理的实验操作。 在数据分析师的招聘过程中,必须要注重对方掌握的知识,比如数据挖掘数据可视化等先进…

Qt构建JSON及解析JSON

目录 一.JSON简介 JSON对象 JSON数组 二.Qt中JSON介绍 QJsonvalue Qt中JSON对象 Qt中JSON数组 QJsonDocument 三.Qt构建JSON数组 四.解析JSON数组 一.JSON简介 一般来讲C类和对象在java中是无法直接直接使用的,因为压根就不是一个规则。但是他们在内存中…

详解:Tensorflow、Pytorch、Keras(搭建自己的深度学习网络)

这是一个专门对Tensorflow、Pytorch、Keras三个主流DL框架的一个详解和对比分析 一、何为深度学习框架? 你可以理解为一个工具帮你构建一个深度学习网络,调用里面的各种方法就能自行构建任意层,diy你想要的DNN,而且任意指定学习…

揭秘!当业务方需求模糊,产品经理如何施展‘化雾为金’的神奇策略!

引言 在产品管理的实践中,产品经理经常会遇到业务方无法清晰表达需求的情况。这可能是由于业务方对问题的理解不够深入,或者缺乏将业务需求转化为产品需求的经验。作为资深产品经理,我们需要采取一系列策略来应对这一挑战,确保产…

Solid Converter PDF9.1安装教程

软件介绍 Solid Converter PDF是一套专门将PDF文件转换成word的软件,除了转换成word文件外,还可以转换成RTF以及Word XML文件。除此之外,它还有一个图片撷取功能,可以让我们]将PDF档里的图片撷取出来,以及将PDF档里的…

word文档的读入(8)

如何读取答题卡中的选择题答案,并把所有的信息导入到Excel表格中~ 在初始化了字典中的字段并获取了标准答案和学生答案后,现在只需使用if语句将学生答案studentAnswerOne和标准答案value进行比较。选择题一道题2分,答案正确时&…

C++11 右值引用完美转发

前言 上一期介绍了C11的基础新特性,这一期开始我们继续来介绍C11的新特性! 目录 前言 一、右值引用和移动语义 1.1左值和左值引用 1.2右值和右值引用 1.3左值引用vs右值引用 1.4右值引用的使用场景和意义 左值引用的使用场景 左值引用的缺陷 …

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践

背景介绍 中盾数科集团始创于2012年,是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块,业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…

LabVIEW提高开发效率技巧----模块化设计与代码复用

模块化设计是现代软件开发中不可或缺的理念,在LabVIEW开发中尤为重要。通过将系统功能划分为独立的、可复用的模块,开发者可以显著提升代码的可读性、维护性以及效率。下面将介绍模块化设计的核心概念、如何利用子VI实现代码复用、以及使用模板&#xff…

claude,gpt,通义千问

起因是通义千问对这张图的解释有严重错误,因此想着让claude和gpt回答一下,记录一下。 claude 这张图表显示了中国多个城市的房地产价格指数数据。让我为您解读一下主要信息: 指标解释: "环比": 与上月相比的价格变化&…

[yotroy.cool] MGT 388 - Finance for Engineers - notes 笔记

个人博客https://www.yotroy.cool/,感谢关注~ 图片资源可能显示不全,请前往博客查看哦! ============================================================ Lecture 1 What is Accounting? The process of identifying, measuring and communicating economic informati…

【UEFI基础】BIOS下的启动项管理

启动管理 启动管理(Boot Manager)是UEFI BIOS中重要的一部分,它通过一系列的变量来确定启动策略,包括: 执行启动还是恢复操作启动顺序是如何 本文会介绍下面的内容: 与启动管理相关的变量启动或恢复的流…

Git rebase 的使用(结合图与案例)

目录 Git rebase 的使用Git rebase 概念Git rebase 原理rebase和merge的选择 Git rebase 的使用 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase Git rebase 概念 **rebase概念:**用来重新应用提交(commits&#xff09…

Vue2知识点

注意:笔记内容来自网络 1Vue指令 指令是指&#xff1a;带有v-前缀的特殊标签属性 1.1 v-html v-html&#xff08;类似 innerHTML&#xff09; 使用语法&#xff1a;<p v-html"intro">hello</p>&#xff0c;意思是将 intro 值渲染到 p 标签中 类似 i…

神经网络-MNIST数据集训练

文章目录 一、MNIST数据集1.数据集概述2.数据集组成3.文件结构4.数据特点 二、代码实现1.数据加载与预处理2. 模型定义3. 训练和测试函数4.训练和测试结果 三、总结 一、MNIST数据集 MNIST数据集是深度学习和计算机视觉领域非常经典且基础的数据集&#xff0c;它包含了大量的手…

链表的合并,结点逆置,顺序表的高效划分(数据结构作业02)

目录 链表的合并 链表的结点逆置 顺序表的高效划分 链表的合并 已知两个递增有序的单链表A和B&#xff0c;分别表示两个集合。试设计一个算法&#xff0c;用于求出A与B的交集&#xff0c;并存储在C链表中。例如 : La {2&#xff0c;4&#xff0c;6&#xff0c;8}&#xff1b;…

闯关leetcode——28. Find the Index of the First Occurrence in a String

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ 内容 Given two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if …

冒泡排序的C++语言实现(不用std::sort)

自己写一个冒泡排序的代码。 void vSort(std::vector<int> & vec, bool bDescending) {//冒泡排序int iTail vec.size()-1;while(iTail > 0){for(int k 0; k < iTail; k){int f1 vec.at(k);int f2 vec.at(k1);if(f1 < f2){//默认是降序int iTmp vec.a…

为什么大公司不用pandas取代excel?

如果你熟练使用Excel的话&#xff0c;你就会发现有些pandas的功能&#xff0c;在Excel中也可以实现&#xff0c;而且对比下来&#xff0c;Excel操作更简单&#xff0c;从效率上跟pandas更无二致&#xff0c;这样Excel的优势就比较突出了&#xff0c;比如下面使用pandas和Excel分…