SAM 2 的进步:从分割图片到分割视频——加了一个记忆机制

你可能会觉得,让 AI 分割视频,不就是把图片分割连起来吗?SAM 2 的论文一出来,这个直觉就被打脸了。如果只是简单地把逐帧分割结果拼接,那个物体一旦被遮挡一下,就再也找不回来了——模型根本不知道被挡住的物体还会从同一个地方出来。SAM 2 解决这个问题的办法,是在网络里塞了一个记忆机制,让模型能“记住”一个物体长什么样,哪怕它暂时消失,也能凭记忆把它认回来。

AI technology illustration

我最早用 SAM 1 的时候,每一张图片都要重新点一下要分割的物体,虽然效果惊艳,但碰到视频就头疼——30 秒的片段,我点了快 200 次鼠标,手都酸了。后来 SAM 2 发布,我第一时间读了 论文Meta 官方博客,才发现它的核心突破根本不是“分割得更准”,而是引入了一套精巧的记忆系统,让模型具备了时间一致性。这篇文章就是把我踩过的坑、看过的论文、想通的逻辑,讲给你听。

为什么 SAM 1 搞不定视频?

SAM 1 是一个纯图像分割模型,它的架构设计里没有“时间”这回事。你给它一张图片和几个提示点,它就输出一个分割掩码,每张图片独立处理,互不干涉。这导致三个致命问题:

  • 没有记忆:上一帧的分割结果不能为下一帧提供任何线索,物体稍微动一下,模型就得重新猜。
  • 身份不一致:同一只狗,第一帧标记为“狗 A”,第二帧可能就变成“狗 B”,模型不知道它们是同一个东西。
  • 无法处理遮挡:物体被路牌挡住再出现,SAM 1 会认为这是一个全新物体,因为它的视野里没有“过去”。

说白了,SAM 1 是一个“健忘”的画家,每一笔都重新蘸颜料,从来不看自己刚才画了什么。而视频分割需要的,是一个边画边回顾的家伙——SAM 2 就是那个家伙。

记忆机制到底长什么样?

读完 SAM 2 的论文,我发现很多人在解释记忆机制时只说“它存了前几帧的掩码”,这个说法太粗糙了,会让人误解。实际上,SAM 2 的记忆模块由三个紧密协作的部分构成:记忆编码器记忆库记忆注意力

想象你正在人群里跟踪一个穿红衣服的朋友。你的眼睛不断接收当前画面,同时你的大脑里存着刚才看到的“红色背影”和“大致位置”。当他被一辆公交车挡住,你并不会立刻忘记他,而是根据记忆预测他下一秒会从公交车后面走出来。SAM 2 做的,就是把这个过程搬进了神经网络。

记忆编码器 负责把当前帧的预测结果(掩码和图像特征)压缩成一个“记忆向量”。这个向量不是简单的二值掩码,而是融合了物体外观和空间信息的稠密表示。论文里用了一个轻量级的卷积网络来做这件事,输出的记忆向量会存入一个记忆库。记忆库就像一个 FIFO 队列,存储最近 N 帧的记忆(默认 N=7),同时还可以存一些“提示帧”的记忆——也就是用户交互修正过的帧,这些帧的权重更高,不会被轻易覆盖。

最关键的是记忆注意力模块。当模型处理当前帧时,它会用当前帧的查询(query)去记忆库里检索相关的记忆,然后通过一个类似 Transformer 的 cross-attention 操作,把过去的时空信息融入当前的特征。这一步让模型能“看到”过去几个时刻里物体的样子,从而在遮挡、形变、快速运动时依然保持一致的定位。

论文原文这样描述:“Memory attention allows the model to condition on past predictions and features, enabling temporally consistent segmentation across frames.”(记忆注意力让模型能够以过去的预测和特征为条件,从而实现跨帧的时间一致分割。)

这个设计让我一下子想通了:SAM 2 并不是凭空“记住”了物体,而是用了一种结构化记忆,像你翻看相册一样,通过对比过去和现在的样子,来确认它还是同一个东西。

和 Transformer 的 cross-attention 有什么不同?

如果你熟悉 Transformer,可能会觉得记忆注意力就是 cross-attention 的翻版。确实,结构上非常相似,但这里有一个微妙的差异:记忆库里的 key 和 value 是经过时序压缩的。传统的 cross-attention 通常作用于同一帧内的不同模态(比如文本和图像),而 SAM 2 的记忆注意力引进了时间维度,并且通过记忆编码器有选择地丢弃不重要的细节,只保留对后续跟踪有帮助的“精华”信息。这避免了直接存储所有帧的原始特征会带来的平方级计算爆炸。

我最早以为记忆就是存一帧帧的掩码,然后简单叠加,后来读了源码才明白,存储的是编码后的特征向量,而且注意力机制的查询、键、值都经过了专门设计的投影,专门为“物体身份保持”这个任务优化过。这个设计很巧妙,但也让我意识到:如果记忆编码器遗漏了关键特征(比如物体旋转了 180 度),后续的注意力再强也无济于事。

一张表说清 SAM 1 和 SAM 2 的区别

维度 SAM 1 SAM 2
处理对象 单张图片 视频流(也可处理图片)
时间一致性 有,通过记忆模块实现
交互方式 每帧单独提示 首帧提示后自动传播,可随时修正
记忆机制 记忆编码器 + 记忆库 + 记忆注意力
遮挡处理 无法处理 利用记忆在一定范围内恢复
推理速度 快(单帧) 实时流式处理(约 44 FPS)
模型大小 基础模型约 600M 参数 类似尺寸,但增加了记忆模块参数

从这张表能看出,SAM 2 并不是简单地把 SAM 1 套在视频上,而是从架构层面重新设计了信息流,让“过去”能够直接影响“现在”。

交互式分割:为什么“任意帧修正”是一个杀手级功能?

传统视频目标分割任务(比如 DAVIS 数据集)通常只给第一帧的真值掩码,然后让模型在整个视频中传播。但现实场景中,没有任何一个模型能一次就完美分割所有帧,用户总需要修正。SAM 2 的一大亮点是,你可以在任意一帧点击或画框来修正错误,模型会立即把修正传播到前后帧,同时把这一帧作为“提示帧”存入记忆库,优先级高于普通帧。这个设计让分割过程变成了一个人机协作的闭环:模型先跑一遍,你看到不对的地方点一下,模型再跑一遍,记忆库刷新,结果越来越准。

我试过用 SAM 2 分割一段 30 秒的篮球视频,初始框选一个球员后,模型自动跟踪了大约 20 帧就丢失了,因为球员被队友挡住了。我在第 25 帧重新框选了一下,模型立刻纠正了前面 5 帧的掩码,并且后面的跟踪也稳定了很多。这个体验让我觉得,记忆机制配合交互修正,实际上是把视频分割变成了一种“迭代标注”工作流,而不是一次性任务。

实测中的惊喜与翻车

根据论文和官方演示,SAM 2 在多个视频分割基准上达到了 SOTA,而且推理速度很快(44 FPS),可以实时处理视频流。但它的记忆机制也有明显的天花板:

  • 长视频记忆衰减:记忆库容量有限(默认 7 帧),如果物体消失超过 7 帧,模型就彻底忘了它。虽然可以通过调大 N 来缓解,但会增加计算量,而且记忆过于久远也会引入噪声。
  • 小物体和快速移动:当物体在画面中占比极小或者移动极快时,记忆编码器可能提取不到足够强的特征,导致注意力机制找不到匹配,物体就丢了。
  • 外观相似的同类别物体:比如多只白鸽在空中飞,模型容易混淆个体,因为记忆库里的特征差异不够显著。这是当前所有基于外观的跟踪模型共同的难题。

有一次我拿一个魔术视频测试,魔术师用手帕盖住硬币再掀开,SAM 2 在掀开后就再也找不到硬币了——因为盖住的时候记忆库里的硬币特征被手帕覆盖,掀开后手帕的纹理残留干扰了记忆注意力。这说明记忆机制在面对突然的剧烈外观变化时,仍然脆弱。

几个容易搞混的概念

记忆机制 = 存掩码? 不,存的是经过编码的时空特征,掩码只是其中一部分输入。如果把记忆机制想象成“截图存档”,那就低估了它的能力。

SAM 2 能分割任何视频? 不能。它需要明显的视觉特征和运动线索,对于完全静态、无纹理的物体,或者剧烈光照变化,它还是会翻车。

SAM 2 是端到端训练的吗? 是的,整个系统(包括记忆模块)是联合训练的,不过训练数据是合成视频和真实视频的混合,通过模拟遮挡和变形来增强鲁棒性。

和 XMem、STCN 这些半监督视频分割方法比呢? SAM 2 的优势在于可以交互式修正,并且不需要第一帧的真值掩码作为唯一输入,它更灵活;但 XMem 等专门针对长视频做了记忆压缩,在极长视频上可能更稳定。

这个能力边界意味着什么?

如果你准备把 SAM 2 用在真实项目里,我有几个建议:首先,尽量在高质量视频上使用,帧率太低(低于 15 FPS)会导致记忆库覆盖的物理时间变短,容易丢失;其次,对于密集遮挡场景,最好在遮挡发生前后手动加点提示,把关键帧存进记忆库;最后,别指望它处理超长视频(几分钟以上),目前的记忆机制不具备压缩和总结长期历史的能力——那是未来研究工作要解决的问题。

SAM 2 的进步,本质上是用一个“带备忘录的注意力”把图像分割抬进了视频时代。它让我意识到,在视频理解里,记住过去和看清现在同样重要。下一个突破,或许是让模型学会主动遗忘该忘的,记住该记的——就像我们人类一样。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/172.html

(0)
上一篇 2026年8月18日 上午12:26
下一篇 2026年8月18日 上午12:31

相关推荐