SAM2 : Segment Anything in Images and Videos
-
原文摘要:
-
模型目标:
- SAM2(Segment Anything Model 2)是一个基础模型,旨在解决图像和视频中的**可提示视觉分割(promptable visual segmentation)**任务。
-
数据引擎:
- 构建了一个数据引擎,通过用户交互改进模型和数据,收集了迄今为止最大的视频分割数据集。
-
模型架构:
- 采用简单的Transformer架构,并引入流式内存,支持实时视频处理。
- 流失存储(Streaming memory):一种可以实时处理和存储数据的内存方式
- 采用简单的Transformer架构,并引入流式内存,支持实时视频处理。
-
性能优势:
-
视频分割:比现有方法减少3倍的用户交互,同时实现更高的精度。
-
图像分割:比SAM模型更准确,速度提升6倍。
-
-
SAM2通过创新的数据引擎和高效架构,在图像和视频分割任务中实现了显著的性能提升,同时开源了相关资源以促进研究。
1. 研究背景
1.1 图像分割的局限性
- Segment Anything (SA)提出了一个基础模型,用于解决图像中的可提示分割任务。
- 然而,图像只是现实世界的静态快照,无法捕捉视觉片段在时间维度上的复杂运动。
- 随着多媒体内容的快速增长,大量数据(尤其是视频)具有时间维度,而许多应用(如AR/VR、机器人、自动驾驶和视频编辑)需要超越图像分割的时空定位能力。
1.2 视频分割的挑战
- 视频分割旨在确定实体的时空范围,主要存在一下难点:
- 实体的外观可能因运动、形变、遮挡、光照变化等因素发生显著变化。
- 视频质量通常较低(如相机运动模糊、分辨率低)。
- 高效处理大量帧数据是一个关键挑战。
- 现有的视频分割模型和数据集未能提供与SA在图片领域类似的“分割视频中任何内容”的能力。
1.3 通用视觉分割系统的需求
- 一个**通用的视觉分割系统(universal visual segmentation system)**应同时适用于图像和视频(将图像视为单帧视频)。
- 视频分割任务需要从视频的任何帧中接收输入(如点、框或掩码),并预测时空掩码(即“masklet”),同时支持通过迭代和之后的提示进行细化。
- 时空掩码:一种mask,不仅考虑空间(图像中的位置信息),还涉及时间(不同帧的时间关系)。
1.4 现有工作的不足
- 尽管SA在图像分割中取得了成功,但视频分割领域仍缺乏类似的基础模型和高质量数据集。
- 现有视频分割数据集通常局限于特定类别的对象,而无法支持任意对象(包括部分和子部分)的分割。
1.5 SAM2的提出
-
SAM2旨在填补这一空白,提出一个统一的视频和图像分割模型。
-
通过引入流式架构和记忆模块,SAM2能够处理视频帧并利用历史信息生成和修正掩码。
-
流式架构(Streaming architecture):
- 一次性处理一帧的视频
- 配备了一个内存注意力模块–关注目标对象的先前记忆
-
记忆模块:存储先前的提示(prompt)和预测(prediction)
-
-
构建了一个数据引擎(data engine),以交互方式生成高质量训练数据,并发布了迄今为止最大的视频分割数据集Segment Anything Video (SA-V)。
1.6 研究目标
- 推动视频分割技术的发展,提供一种能够“分割视频中任何内容”的基础模型。
2. 相关工作
2.1 图像分割
- Segment Anything (SAM)提出了可提示的图像分割任务,通过输入提示(如框或点)生成目标对象的分割掩码。
- SAM在SA-1B数据集上训练,支持零样本分割,被广泛应用于各种领域。
- 近期工作对SAM进行了扩展:
- 引入高质量输出标记以训练细粒度掩码
- 提高SAM的效率
- SAM被应用于医学影像、遥感、运动分割和伪装目标检测等领域。
2.2 交互式视频对象分割(iVOS)
- iVOS旨在通过用户指导(如涂鸦、点击或框)高效获取视频中的对象分割掩码(masklets)。
- 早期方法使用基于图的优化(graph-based optimization)。
- 近期方法采用模块化设计,将用户输入转换为单帧掩码并传播到其他帧
- 一些工作结合SAM和基于掩码或点的视频跟踪器,但存在局限性:
- 跟踪器可能不适用于所有对象。
- SAM在视频帧上表现不佳。
- 缺乏交互式修正错误的机制。
- SAM2的目标与这些工作类似,但提出了一个统一的模型,直接接受提示进行交互式视频分割,并构建了一个大规模多样化数据集。
2.3 视频对象分割(VOS)
- VOS任务从第一帧的对象掩码开始,要求在整个视频中准确跟踪目。
- 该任务被称为半监督VOS(semi-supervised VOS),因为输入掩码被视为仅在第一帧可用的监督信号。
- 早期深度学习方法通常在第一帧或所有帧上进行在线微调。
- 更快推理通过离线训练模型实现,仅基于第一帧或结合前一帧。
- 使用RNN和Transformer扩展了多帧条件。
- 半监督VOS可视为SAM2的**Promptable Visual Segmentation (PVS)**任务的特例,仅在第一帧提供掩码提示。
2.4 视频分割数据集
- 早期VOS数据集(如DAVIS)包含高质量标注,但规模限制了深度学习方法的应用–规模不够
- YouTube-VOS是第一个大规模VOS数据集。
- 近期研究通过关注遮挡、长视频、极端变换、对象多样性或场景多样性增加任务难度
- 现有数据集通常覆盖整个对象(而非部分),且集中于特定类别(如人、车辆、动物)。
- SAM2发布的SA-V数据集不仅覆盖整个对象,还广泛包含对象部分,掩码数量比现有数据集多一个数量级。
3. 核心任务:可提示视觉分割(PVS)
3.1 Promptable Visual Segmentation (PVS) 任务
-
允许在视频的任何帧上向模型提供提示(prompts),包括正/负点击、框或掩码,用于定义或细化目标对象的分割。
-
提供交互式体验:在接收到提示后,模型应立即在当前帧生成有效的分割掩码。
- 若SAM2在某一帧丢失了对目标的标注,我们可以在新的一帧中提供新的提示来修正masklet
-
时空传播:在接收到初始提示后,模型将提示传播到整个视频,生成目标对象在所有帧上的时空掩码(masklet)。
-
迭代细化:可以在任何帧上提供额外的提示,以进一步细化整个视频中的分割结果。
3.2 数据收集与数据集构建
- 将SAM2应用于PVS任务,作为构建**Segment Anything Video (SA-V)**数据集的核心工具。
- 通过交互式标注生成高质量的训练数据,支持任意对象(包括部分和子部分)的分割。
3.3 模型评估
- 在交互式视频分割场景中评估模型,模拟多帧交互的实际情况。
- 在**半监督视频对象分割(VOS)**设置下评估,其中标注仅限于第一帧。
- 在图像分割任务上评估,使用SA基准测试集,验证模型在单帧分割中的性能。
4. 模型
SAM2模型是对Segment Anything (SAM)的视频和图像分割的扩展,通过引入流式架构和记忆机制,支持实时处理任意长度的视频,并允许用户通过交互式提示(如点击、框或掩码)定义和细化目标对象的分割。
4.1 核心架构
4.1.1 图像编码器:
-
图像编码器在整个交互过程中仅运行一次,提供每帧的无条件特征嵌入
- 无条件的特征嵌入是指图像编码器为每帧视频生成的原始特征表示**,这些特征**不依赖于任何特定任务或提示,而是纯粹基于图像内容本身。
-
使用MAE预训练的Hiera编码器。
- Hiera编码器采用分层设计,支持多尺度特征解码,能够利用上下文信息。
4.1.2 记忆注意力:
- 通过Transformer块将当前帧特征与记忆库中的历史帧特征和预测结果进行条件化。
- 使用自注意力和交叉注意力机制,结合记忆库中的空间特征和对象指针。
- 自注意力
- 定义:自注意力机制用于捕捉当前帧内部的依赖关系,即当前帧中不同位置(像素或区域)之间的关系。
- 过程:
- 将当前帧的特征嵌入作为输入。
- 计算每个位置与其他位置之间的注意力权重,表示它们之间的相关性。
- 根据注意力权重对特征进行加权求和,生成新的特征表示。
- 作用:增强当前帧中目标对象的局部一致性,例如识别物体的边界或内部结构。
- 交叉注意力
- 定义:交叉注意力机制用于捕捉当前帧与记忆库中历史帧特征和对象指针之间的依赖关系。
- 过程:
- 将当前帧的特征嵌入作为查询(Query),记忆库中的历史帧特征和对象指针作为键(Key)和值(Value)。
- 计算当前帧与记忆库中历史帧之间的注意力权重,表示它们之间的相关性。
- 根据注意力权重对记忆库中的特征进行加权求和,生成新的特征表示。
- 作用:
- 利用历史帧的信息,增强当前帧中目标对象的时空一致性。
- 例如,如果目标对象在历史帧中发生了运动或形变,交叉注意力可以帮助模型更好地跟踪和分割。
- 自注意力
- 利用高效注意力核加速计算
4.1.3 提示编码器和掩码解码器:
-
提示编码器:
- 提示编码器与SAM相同,支持点击、框或掩码输入。
- 稀疏提示通过位置编码和模型学习到的特征来表示
- 稠密提示(mask)则通过卷积和帧嵌入来嵌入
- 提示编码器与SAM相同,支持点击、框或掩码输入。
-
掩码解码器:
- 掩码解码器设计类似于SAM,支持多掩码预测以处理模糊提示。
- 解码器使用“two-way“ transformer 来更行提示嵌入和帧嵌入
- 新增对象存在性预测头,用于判断目标对象在当前帧是否存在(如遮挡情况)。
- 解码器使用的帧嵌入并不是直接来自图像编码器,而是基于过去预测的记忆和被提示帧进行预测的
- 掩码解码器设计类似于SAM,支持多掩码预测以处理模糊提示。
4.1.4 记忆编码器:
- 通过卷积模块对输出掩码进行下采样,并与图像编码器的无条件帧特征融合,生成记忆。
4.1.5 记忆库:
- 维护一个FIFO队列,存储最近N帧的记忆和M个提示帧的记忆。
- 都以空间特征图来进行存储
- 对象指针,用于高层次的语义信息。
- 对象指针生成是基于掩码解释器的输出特征,并且每帧都会生成一个对象指针
- 交叉注意力不仅关注空间记忆特征(如历史帧的特征和掩码),还关注对象指针
- 为最近N帧的记忆嵌入时间位置信息,以表示短期对象运动。
- 不嵌入提示帧
- 提示帧(如用户标注的帧)的时间位置信息不嵌入,因为提示帧的训练信号较稀疏
- 在推理阶段,提示帧可能来自与训练时不同的时间范围,嵌入时间位置信息可能导致模型难以泛化
- 不嵌入提示帧
4.2 训练方法
- 联合训练:在图像和视频数据上联合训练。
- 交互式提示模拟:
- 采样8帧序列,随机选择最多2帧进行提示。
- 根据真值掩码和模型预测生成纠正点击。
- 训练任务是顺序预测真值掩码。
- 初始提示:
- 以0.5概率使用真值掩码,0.25概率使用正点击,0.25概率使用框作为初始提示。
4.3 关键创新
- 流式处理:支持实时处理任意长度的视频。
- 记忆机制:通过记忆库存储历史帧和提示帧的信息,实现时空一致性分割。
- 交互式提示:允许用户通过点击、框或掩码定义和细化分割结果。
- 多掩码预测:处理模糊提示,确保模型输出有效掩码。
- 对象存在性预测:判断目标对象在当前帧是否存在,支持遮挡等复杂场景。
5. 数据
5.1 数据引擎 Data engine
5.1.1 阶段一:SAM per frame
- 方法:使用图像分割模型SAM逐帧标注,结合手动编辑工具(如“画笔”和“橡皮擦”)。
- 特点:
- 高质量:逐帧标注确保了空间标注的精确性。
- 低效率:平均每帧标注时间为37.8秒,标注速度较慢。
- 成果:收集了16K masklets和1.4K视频,用于后续阶段的基础训练和验证/测试集。
5.1.2 阶段二:SAM+SAM 2 Mask
- 方法:在第一帧使用SAM生成掩码,然后使用SAM 2 Mask将掩码传播到其他帧。
- 特点:
- 效率提升:标注时间降至7.4秒/帧,比Phase 1快5.1倍。
- 局限性:中间帧仍需手动标注,缺乏历史记忆支持。
- 成果:收集了63.5K masklets,并两次更新SAM 2 Mask模型。
5.1.3 阶段三:SAM 2
- 方法:使用完整版SAM 2,支持多种提示(如点击和掩码),并利用时间维度的记忆生成掩码。
- 特点:
- 高效性:标注时间降至4.5秒/帧,比Phase 1快8.4倍。
- 智能化:通过记忆机制减少中间帧的手动标注需求。
- 成果:收集了197.0K masklets,并五次更新SAM 2模型。
5.2 SA-V 数据集
- 规模:包含50.9K视频和642.6K masklets,是现有视频分割数据集的53倍(自动掩码)或15倍(手动掩码)。
- 多样性:
- 场景:54%室内,46%室外,覆盖多种日常场景。
- 对象:不仅包含整体对象(如人),还包含部分对象(如帽子)。
- 挑战性:
- 消失率:42.5%的掩码在至少一帧中消失后重新出现,增加了任务的难度。
- 验证/测试集:专注于快速移动、复杂遮挡和消失/重现的挑战性场景。