【论文阅读】SAM 2:Segment Anything in Images and Videos

SAM 2:Segment Anything in Images and Videos

官方代码
论文地址

SAM 2:Segment Anything in Images and Videos

  • SAM 2:Segment Anything in Images and Videos
    • 摘要
    • 引言
    • 模型
      • 整体介绍
      • 各个模块
        • Image encoder
        • Memory attention
        • Prompt encoder and mask decoder
      • 训练
    • 数据
    • 结果
    • 局限

摘要

本文提出了 Segment Anything Model 2 (SAM 2),这是解决图像和视频中可提示视觉分割问题的基础模型。本文建立了一个数据引擎,通过用户互动改进模型和数据,从而收集到迄今为止最大的视频分割数据集。本文的模型是一个简单的transformer架构,具有流式内存,可用于实时视频处理。在本文的数据基础上训练的 SAM 2 在各种任务中都表现出色。在视频分割方面,本文观察到了更高的准确性,使用的交互次数比之前的方法少 3 倍。在图像分割中,本文的模型比 Segment Anything Model (SAM) 更准确,速度快 6 倍。

引言

视频分割的目的是确定实体的时空范围,这提出了比图像分割更独特的挑战。由于运动、变形、遮挡、光照变化和其他因素,实体的外观会发生显著变化。由于摄像机运动、模糊和分辨率较低,视频的质量往往低于图像。此外,高效处理大量帧也是一项关键挑战。虽然 SAM 成功地解决了图像分割问题,但现有的视频分割模型和数据集却无法提供 “分割视频中任何内容 ”的类似能力

本文提出Segment Anything Model 2 (SAM 2),一个视频和图像分割的统一模型(将图像视为单帧视频),如下图所示:
在这里插入图片描述

本文将重点放在可提示视觉分割(PVS)任务上,该任务将图像分割推广到视频领域。该任务将视频任意帧上的点、框或掩码作为输入,以定义感兴趣的片段,并预测其时空掩码(即 “小掩码”)。一旦预测出小掩码,就可以通过在其他帧中提供提示对其进行迭代改进。

SAM 2 配备了一个存储器,可存储对象信息和之前的交互信息,这使它能够在整个视频中生成小掩码预测,并根据存储在存储器中的以前观察到的帧的对象上下文有效地修正这些预测。本文的流式结构是将 SAM 自然地推广到视频领域,一次处理一个视频帧,并配备一个记忆关注模块,以关注目标对象的先前记忆。当应用于图像时,内存是空的,模型的行为与 SAM 相似。这个存储器应该是借鉴了半监督VOS里面的设计。

本文还采用了一个数据引擎,通过使用本文的模型与注释者互动注释新的和具有挑战性的数据来生成训练数据。与大多数现有的视频分割数据集不同,我们的数据引擎不局限于特定类别的对象,而是旨在为分割任何具有有效边界的对象提供训练数据,包括部件和子部件。

本文提出的视频分割(SA-V)数据集包含 50.9K 个视频中的 3550 万个掩码,比现有视频分割数据集多 53 倍。SA-V 具有挑战性,因为视频中的小物体和部分会被遮挡并重新出现。SA-V 数据集具有地域多样性,SAM 2 的公平性评估表明,基于感知性别的视频分割性能差异极小,评估的三个感知年龄组之间的差异也很小。

许多zero-shot基准测试(包括 17 个视频分割基准测试和 37 个单图像分割基准测试)表明,SAM 2 在各种视频和图像分布中都很有效。

模型

整体介绍

在这里插入图片描述

其流程如上图所示,对于给定的帧,分割预测取决于当前提示和/或先前观察到的记忆。视频以流媒体的方式处理,图像编码器每次使用一个帧,并从前一帧中交叉关注目标对象的记忆。掩码解码器(也可选择接受输入提示)预测该帧的分段掩码。最后,存储器编码器转换预测和图像编码器嵌入(未在图中显示),以便在未来帧中使用。

SAM 2支持单个帧上的点、框和掩码提示,以定义要在视频中分割的对象的空间范围。对于图像输入,模型的行为类似于SAM。可提示的轻量级掩码解码器接受帧嵌入并提示(如果有的话)当前帧并输出该帧的分段掩码。可以在框架上迭代地添加提示,以改进掩码。
与SAM不同,SAM 2解码器使用的帧嵌入不是直接来自图像编码器,而是以过去预测和提示帧的记忆为条件。相对于当前帧提示帧也可能“来自未来”。帧的memory由存储器编码器根据当前的预测产生,并放置在memory bank中以供以后的帧使用。内存attention操作从图像编码器获取每帧嵌入,并在memory bank上对其进行调整,以产生之后传递给掩码解码器的嵌入。

各个模块

Image encoder

图像编码器在整个交互过程中只运行一次,其作用是提供无条件的token(特征嵌入)。我们使用 MAE 预先训练的 Hiera 图像编码器,它是分层的、这样就能在解码过程中使用多尺度特征

Memory attention

Memory attention的作用是将当前帧的特征与过去帧的特征和预测以及任何新的提示联系起来。我们堆叠了 L 个transformer模块,第一个模块将当前帧的图像编码作为输入。每个区块执行self-attention,然后cross-attention(提示/未提示)帧和对象的记忆,这些记忆存储在一个记忆库中,接着是一个 MLP。我们在self-attention和cross-attention中使用了vanilla注意力操作,从而受益于高效注意力内核的最新发展。

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

memory bank通过维护最多N个最近帧的FIFO记忆队列来保留视频中目标对象的过去预测信息,并将提示信息存储在最多M个提示帧的FIFO队列中。例如,在VOS任务中,初始掩码是唯一的提示,内存库始终保留第一帧的记忆以及最多N个最近(非提示)帧的记忆。两组记忆都以空间特征图的形式存储。

除空间存储器外,还根据每个帧的掩码解码器输出标记,将对象指针列表作为轻量级向量存储起来,用于存储要分割对象的高级语义信息

我们将时间位置信息嵌入到N个最近帧的memory中,允许模型表示短期物体运动,但不包含到提示帧的记忆中,因为提示帧的训练信号更稀疏,并且更难以推广到推理设置中,提示帧可能来自与训练期间看到的时间范围非常不同的时间范围。

Prompt encoder and mask decoder

提示编码器与SAM的相同,可以通过点击(正或负)、边界框或蒙版来提示,以定义给定帧中对象的范围。稀疏提示由位置编码表示,并对每种提示类型的学习嵌入求和,而掩码则使用卷积嵌入并使用帧嵌入求和。

解码器设计很大程度上遵循SAM,如下图所示:堆叠“双向”transformer块来更新提示符和帧嵌入。与SAM中一样,对于可能存在多个兼容目标掩码的模糊提示(即,一次单击),我们预测多个掩码。这种设计对于确保模型输出有效掩码非常重要。在视频中,模糊性可以跨视频帧扩展,该模型预测每帧上的多个掩码。如果没有后续提示解决歧义,则模型仅传播具有当前帧的最高预测IoU的掩码。
在这里插入图片描述

与 SAM 不同的是,在 SAM 中,只要有positive的提示,就一定会有一个有效的对象被分割,而在 PVS 任务中,有可能在某些帧上不存在有效的对象(例如由于遮挡)。为了应对这种新的输出模式,增加了一个额外的头,用于预测当前帧上是否存在感兴趣的对象。
与 SAM 的另一个不同之处在于,使用分层图像编码器的跳跃连接(Memory attention),将高分辨率信息用于掩码解码。

训练

该模型在图像和视频数据的基础上进行联合训练。模拟了模型的交互式提示。对 8 个帧的序列进行采样,并随机选择最多 2 个帧来提示和概率性地接收纠正点击,这些点击是在训练过程中使用ground-truth mask和模型预测进行采样的。训练任务是按顺序(“交互式”)预测ground-truth mask。对模型的初始提示可以是概率为 0.5 的ground-truth mask、从概率为 0.25 的ground-truth mask中采样的正点击或概率为 0.25 的边界框输入

具体来说,首先在SA-1B上进行预训练。与 SAM 不同的是,我们发现使用 L1 损失对 IoU 预测进行监督更有帮助,并对 IoU 对数应用 sigmoid 激活,以将输出限制在 0 和 1 之间的范围内。

然后在SA-V + Internal(后面数据集比较部分有),SA-1B的一个子集,占SA-1B 10%的数据,以及DAVIS,YouTube,MOSE数据集上进行完全的训练。

为了优化训练过程中的数据使用和计算资源,我们采用了视频数据(多帧)和静态图像(单帧)交替训练的策略。具体来说,在每次训练迭代中,我们都会从图像或视频数据集中进行full batch采样,采样概率与每个数据源的大小成正比。通过这种方法,我们可以均衡地完成这两项任务,并对每个数据源采用不同的批次规模,以最大限度地提高计算利用率。

训练的相关参数为:
在这里插入图片描述

数据

这部分具体可以看论文里面,数据的构建主要分为3个阶段:
在这里插入图片描述

其中SAM 2 Mask表示只接受Mask提示。

最终收集到的SA-V数据集和其他数据集的比较:
在这里插入图片描述

根据视频作者(及其地理位置)拆分 SA-V,以确保尽量减少相似对象的重叠。为了创建 SA-V val 和 SA-V 测试集,我们重点选择视频中具有挑战性的场景,并要求注释者识别具有挑战性的目标,这些目标包括快速移动、被其他物体复杂遮挡以及消失/再出现模式的挑战性目标。SA-V val 分割中有 293 个掩码和 155 个视频,SA-V test 分割中有 278 个掩码和 150 个视频。

结果

在视频数据集的零样本能力:
在这里插入图片描述

在图像数据集的零样本能力:
在这里插入图片描述

在半监督VOS数据集的比较:
在这里插入图片描述

局限

SAM 2 在静态图像和视频领域都表现出很强的性能,但在某些情况下会遇到困难。

该模型可能无法在镜头变换时分割物体,在拥挤的场景中、长时间遮挡后或在较长的视频中可能会丢失或混淆物体

为了缓解这一问题,设计了在任意帧中提示 SAM 2 的功能:如果模型丢失了对象或出现错误,在大多数情况下,对其他帧的细化点击可以快速恢复正确的预测。

SAM 2 还难以准确跟踪具有非常薄或精细细节的物体,尤其是快速移动的物体。另一种具有挑战性的情况是,附近有外观相似的物体(如多个相同的杂耍球)。在 SAM 2 中加入更明确的运动建模可以减少这种情况下的误差。

虽然 SAM 2 可以同时跟踪视频中的多个物体,但 SAM 2 会单独处理每个物体,只利用共享的每帧嵌入,而不进行物体间的交流。虽然这种方法很简单,但纳入共享的对象级上下文信息有助于提高效率。

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

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

相关文章

自写Json转换工具

前面写了简单的API测试工具ApiTools,返回的json有时需要做很多转换,于是开发了这个工具。 功能包括 1、json字符串转为表格,可以直观的展示,也可以复制,并支持转换后的表格点击列头进行排序,比较方便地定…

C++ set、map、multiset和multimap容器

目录 前言 1. 关联式容器和序列式容器 关联式容器 序列式容器 主要区别 2. 键值对 2. 树形结构的关联式容器 2.1 set 2.1.1 介绍 2.1.2 构造函数 2.1.3 迭代器 2.1.4 修改操作 2.1.5 容量相关 2.2 multiset 2.3 map 2.3.1 介绍 2.3.2 构造函数 2.3.3 迭代器 …

Gooxi荣获2024年深圳市计算机行业协会最具成长奖

近日,由深圳市计算机行业协会举办的2024年度深圳市计算机行业协会年中工作会议圆满落幕。本次会议邀请了多位行业专家以及深圳地区的理事会成员、企业家参会。会议的重点是总结上半年的经验,分析行业热点与痛点,探讨以新质生产力促进高质量发…

一行Python代码实现神奇效果:创意编程实例

文末赠免费精品编程资料~~ 1. 基础中的魔法:打印艺术 目标:用一行代码打印出一个简单的图案,比如心形。 print( .join([**i for i in range(1, 6)] [ *4] [**i for i in range(5, 0, -1)]))解析: 我们利用列表推导式生成两部…

项目:基于gRPC进行项目的微服务架构改造

文章目录 写在前面基本使用封装客户端封装服务端Zookeeper 写在前面 最近学了一下gRPC进行远程调用的原理,所以把这个项目改造成了微服务分布式的架构,今天也是基本实现好了,代码已提交 这里补充一下文档吧,也算记录一下整个过程…

2024 年最新 windows 操作系统搭建部署 nginx 服务器应用详细教程(更新中)

nginx 服务器概述 Nginx 是一款高性能的 HTTP 和 反向代理 服务器,同时是一个 IMAP / POP3 / SMTP 代理服务器。Nginx 凭借其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 浏览 nginx 官网:https://nginx.org/ Nginx 应用场景 静态…

Windows11安装MongoDB7.0.12详细教程

下载 地址:https://www.mongodb.com/try/download/community 我使用的是迅雷下载: 安装 选择自定义安装: 选择安装目录: 开始安装: 这个玩意会卡比较长的时间: 最后这一步如果没有科学上网&#…

甄选范文“论数据分片技术及其应用”软考高级论文,系统架构设计师论文

论文真题 数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。 请围绕“论数据分片技术及其应用”论题…

算法日记day 24(回溯之组合问题)

一、组合总和3 题目: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输…

其他:trycatch模块捕获循环错误,避免中断程序

介绍 今天有位同事问我怎么在某次循环报错后仍然可以继续程序运行&#xff0c;最后我们使用了trycatch模块。 代码解读 任务&#xff1a;在循环中&#xff0c;如果某次循环的calc出现错误则跳过这次循环并重新赋值结果 res_list <- list() # 创建一个空列表来存储结果fo…

pdf压缩文件怎么压缩最小?8款实用PDF压缩软件,你值得拥有(2024)

pdf压缩文件怎么压缩最小&#xff1f;如今&#xff0c;无论在我们日常工作还是在日常学习中&#xff0c;pdf文件都无处不在。因此&#xff0c;如何压缩pdf文件&#xff0c;将其大小降至最小&#xff0c;既保证质量又使文件更易管理成为许多人迫切关心的问题。在本文中&#xff…

php 一个极简的类例子

https://andi.cn/page/621627.html

智慧矿山,安全先行:矿山风险预警视频智能监控系统的应用解析

随着科技的飞速发展&#xff0c;矿山行业作为国民经济的重要支柱之一&#xff0c;其安全生产问题日益受到社会各界的广泛关注。为了有效降低矿山作业中的风险&#xff0c;提升安全管理水平&#xff0c;矿山风险预警视频智能监控系统应运而生。该系统集成了高清视频监控、人工智…

工具(1)—截屏和贴图工具snipaste

演示和写代码文档的时候&#xff0c;总是需要用到截图。在之前的流程里面&#xff0c;一般是打开WX或者QQ&#xff0c;找到截图工具。但是尴尬的是&#xff0c;有时候&#xff0c;微信没登录&#xff0c;而你这个时候就在写文档。为了截个图&#xff0c;还需要启动微信&#xf…

OnlyOffice在线部署

部署服务环境&#xff1a;Centos7.6 curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash 安装yum-utils工具 yum install yum-utils 添加nginx.repo源(Nginx官网有最新版&#xff0c;直接copy即可) vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx st…

ElasticSearch父子索引实战

关于父子索引 ES底层是Lucene,由于Lucene实际上是不支持嵌套类型的,所有文档都是以扁平的结构存储在Lucene中,ES对父子文档的支持,实际上也是采取了一种投机取巧的方式实现的. 父子文档均以独立的文档存入,然后添加关联关系,且父子文档必须在同一分片,由于父子类型文档并没有…

木马后门实验

实验拓扑 实验步骤 防火墙 配置防火墙—充当边界NAT路由器 边界防火墙实现内部 DHCP 分配和边界NAT需求&#xff0c;其配置如下 登录网页 编辑接口 配置e0/0 配置e0/1 编辑策略 测试&#xff1a;内部主机能获得IP&#xff0c;且能与外部kali通信 kali 接下来开启 kali 虚…

Teamcenter用本地胖客户端启动时,可以看到插件的菜单项,但是用Eclipse启动时看不到

用本地胖客户端启动时&#xff0c;可以看到定制包的插件菜单项&#xff0c;但是用Eclipse启动时&#xff0c;看不到&#xff1f; 原因&#xff1a; 是因为Eclipse启动下&#xff0c;是采用 JAVA1.8 来运行的。但是本机的胖客户端是采用JAVA 11来运行的 解决办法&#xff1a;…

表现力丰富的肖像动画框架;结合本地LLM和GraphRAG的多代理RAG超级机器人;支持向量和图路径查询RAG;

✨ 1: Follow-Your-Emoji Follow-Your-Emoji 是一个基于扩散模型的精细控制与表现力丰富的肖像动画框架。 Follow-Your-Emoji 是一种基于扩散模型的肖像动画生成框架&#xff0c;可以通过目标标志序列动画化参考肖像。其核心优势在于能够实现精细可控和富有表现力的自由风格肖…

快速幂的求解方法(位运算)

需要求解幂运算的解法&#xff0c;可以将需要运算的内容进行判别&#xff0c;众所周知&#xff0c;幂就是指数&#xff0c;就是将底数乘以自身完成n次自相乘&#xff0c;那么就可以幻化为他的幂的简化计算&#xff1b; 以二进制为例&#xff0c;你要求&#xff0c;即可以看作是…