状态:草稿(2026-10-13),部分实测数据于(2026-10-15)补充。 SAM 2.1 tiny 的速度与准确率引用自《TT Score 模型解剖》第 3 篇的实测数据(2026-10-11–12,当时服务器 GPU 处于共享状态且使用了 CPU 临时 Pod)。减少记忆的示例直接在笔记本 CPU 上运行(
code/10_memory_pool.py,耗时几秒)。 2026-10-15 补充: 此前未实测的 EfficientTAM,其在与 SAM 2.1 tiny 相同条件下测得的乒乓球桌自动检测任务数据已在第 6 节中引用。实际记忆图的平滑度仍未进行实测。论文中的数值结合原文件的条件进行了转录,硬件信息则以等级形式记录。 编写规则:实测数据为基本原则,未能测量的内容标注为「未实测」。
目录
1. 从图像到视频:还需具备什么
第 9 篇介绍的 SAM 用于分割单张图像。如果要在视频中实现「请将第一帧中指定的物体一直分割到底」,还需要另外两项功能。
- 记忆:上一帧中该物体的外观。即使物体旋转或被短暂遮挡后再次出现,也必须认出它是同一个物体。
- 速度:如果对每一帧都从头运行繁重的编码器,速度就会变慢。
Ravi 等人提出的 SAM 2 在 SAM 的结构中加入了 记忆机制来解决这两个问题。由于图像被视为「单帧视频」,因此同一个模型既可以分割图像,也可以分割视频。
2. 结构:在流动中进行记忆
视频帧按顺序逐张输入(流式传输)。以下是每一帧中发生的事情:
- 图像编码器:经 MAE 预训练的 Hiera(第 7 篇第 6 节中的分层 Transformer)将帧转换为特征。每帧仅需一次。
- 记忆注意力:当前帧的特征首先关注自身(自注意力),然后关注记忆库中的记忆(交叉注意力)。这类基础模块共有 4 个。
- 掩码解码器:与 SAM 相同的解码器会输出掩码。如果用户在当前帧进行了点击操作,该点击也会作为提示词使用。这里有一个专门预测物体是否 可见的预测头,因此在完全被遮挡的帧中可以输出「不存在」。
- 记忆编码器:将当前绘制的掩码进行缩减,并将其叠加到当前帧的特征上,通过轻量级卷积进行混合,从而生成「该物体在这一帧中的状态」这一记忆。
- 记忆库:将最近几帧的记忆(默认 6 张)与用户提供提示词的帧的记忆分别排队存放(先进先出)。这里还存放着从掩码解码器输出 token 中提取的 物体指针(将 256 维度拆分为 4 个 64 维度的 token)。如果说空间地图表示「在什么地方、呈什么样」,那么指针则是关于「那个物体是什么」的摘要。
直观地说,就是「结合最近几张图中该物体的外观,以及用户最初指定的场景中的外观,来在当前帧中寻找目标」。将用户指定的帧的记忆单独长期保留是核心设计。如果只保留最近的记忆,略有偏差的掩码就会变成记忆,进而导致下一帧产生更大的偏差,从而容易引发 漂移。用户确认过的记忆起到了锚点的作用。
3. 数据与数值
SA-V 数据:50,900 个视频,642,600 个掩码片段(视频中单个物体的逐帧掩码集合,其中人工标注 190,900 + 自动标注 451,700),共 3,550 万个掩码。它通过在视频上运行由模型预测并由人工修正的循环来构建,类似于 SAM 的数据引擎(第 9 篇)。
| 项目 | 数值(论文) | 条件 |
|---|---|---|
| 视频分割交互 | 比以往方法 少 3 倍 的点击量,且更准确 | 论文摘要 |
| 图像分割 | 比 SAM 更准确且 快 6 倍(130.1 对 21.7 FPS) | 单张数据中心 GPU,bfloat16,图像编码器已编译,批量大小为 10 |
| 视频速度 | Hiera-B+ 43.8 FPS, Hiera-L 30.2 FPS | 同款 GPU,批量大小为 1 |
| 训练 | 256 张数据中心 GPU,108 小时 | 模型卡片 |
这是 2024-09 发布的 SAM 2.1 检查点的官方表格(单张数据中心 GPU,所有组件均已编译。测试环境与论文不同)。
| 尺寸 | 参数量 | FPS | SA-V 测试 J&F | MOSE 验证 J&F | LVOS v2 J&F |
|---|---|---|---|---|---|
| tiny | 3,890 万 | 91.2 | 76.5 | 71.8 | 77.3 |
| small | 4,600 万 | 84.8 | 76.6 | 73.5 | 78.3 |
| base+ | 8,080 万 | 64.1 | 78.2 | 73.7 | 78.2 |
| large | 2.244 亿 | 39.5 | 79.5 | 74.6 | 80.6 |
J&F 是掩码区域重叠度 (J) 与边界准确率 (F) 的平均值。值得注意的是,即使将尺寸扩大近 6 倍,在 SA-V 上的得分差距也仅有 3 分。代码与检查点遵循 Apache-2.0 协议。
我们的实测:SAM 2.1 tiny
TT Score 项目针对乒乓球桌分割任务对体积最小的 tiny 模型进行了实验(《TT Score 模型解剖》第 3 篇)。
| 条件 | 数值 |
|---|---|
| 服务器 GPU,与其他任务共享时(2026-10-11) | 图像编码 40ms,提示词预测 26ms,单视频追踪物体 36–38ms/帧,GPU 显存 0.68–0.96GB |
| CPU 临时 Pod(2026-10-12) | 每帧中位数 1.14 秒 |
| 乒乓球桌边缘(实际比赛 12 场,5 帧中位数) | 与数据集掩码的差异中位数 4.7px,90% 为 11.2px |
官方表格中的 91.2 FPS(每帧约 11ms)与我们的 36–38ms 条件不同。官方表格是在专用 GPU 上对所有组件进行编译后测得的数据,而我们则与其他任务共享了 GPU。这是一个说明即使是「同款模型」,在引用数字时也必须附带说明测试条件的例子。
4. EfficientTAM:通过精简记忆实现轻量化
Xiong 等人提出的 EfficientTAM 旨在将 SAM 2 轻量化到足以在手机上运行的程度。它主要做了两项更改:
- 平坦的 ViT 编码器。 使用单一分辨率的小型 ViT(Tiny·Small,patch size 16)来代替分层的 Hiera。并使用 EfficientSAM 的 SAMI 预训练进行初始化。
- 粗糙的记忆交叉注意力。 对记忆中的空间 token(Key 和 Value)以 2×2 窗口进行 平均,缩减为四分之一 后再进行注意力计算。物体指针 token 不会被缩减。
第 2 点的理论依据是 局部平滑性。由于记忆图中相邻网格的特征彼此相似,因此用四个特征取平均后的一个特征来代替这四个特征,注意力计算的结果也不会发生显著变化。论文在某个示例中显示,与完整注意力的相对误差为 0.03(图 3,单一样例),并报告称如果进一步缩减为 4×4,准确率会下降约 1 分,而速度提升却微乎其微。
动手尝试:如果足够平滑真的可行吗
我们亲自对这一假设进行了测试。记忆 = 32×32 网格 × 4 张 × 64 维度,Query 数量为 1,024 个。构建了两种类型的记忆,并测量了当对 Key 和 Value 进行 2×2 平均时,注意力输出的变化程度(实测数据,笔记本 CPU,7 次运行的中位数)。
| 记忆 | Key 数量 | 相对误差 | 耗时 |
|---|---|---|---|
| 平滑的(邻近区域相似的低频场) | 4,096 → 1,024 | 0.050 | 29.2 → 8.4ms |
| 杂乱的(每个网格各不相同) | 4,096 → 1,024 | 0.753 | 30.9 → 8.3ms |
耗时与 Key 的数量成正比,减少了约四分之一。只有在记忆平滑时误差才较小。EfficientTAM 的精简并非没有代价,而是 「押注于视频特征在邻近区域具有相似性」这一假设,其准确性完全取决于该假设是否成立。实际特征的平滑程度因模型和场景而异,我们并未针对实际的记忆图进行测量(未实测)。
论文数值及阅读注意事项
| 模型 | SA-V 测试 J&F | 参数量 | 数据中心 GPU FPS | 手机(每帧耗时) |
|---|---|---|---|---|
| SAM 2(对比对象) | 74.7 | 8,100 万 | 43.8 | — |
| EfficientTAM-S | 74.5 | 3,400 万 | 85.0 | 1,010.8ms |
| EfficientTAM-S/2 | 74.0 | 3,400 万 | 109.4 | 450ms |
| EfficientTAM-Ti | 70.7 | 1,800 万 | 96.2 | 840.5ms |
| EfficientTAM-Ti/2 | 70.8 | 1,800 万 | 109.4 | 261.4ms |
(论文表 1,输入尺寸 1024×1024。「/2」表示将记忆进行 2×2 缩减的版本。手机为 2023 年高端机型。)
翻阅原文会发现两处不一致的地方。
- 作为对比对象的 SAM 2 具体的尺寸大小很模糊。 表格中的 SAM 2 参数量为 8,100 万(base+ 尺寸),但正文中也有一句话提到 SAM 2 的 tiny 版本达到 43.8 FPS。如果与上述 SAM 2.1 官方表格中的 tiny(3,890 万,SA-V 76.5)进行对比,情况就会发生变化。
- 「手机约 10 FPS」这一摘要结论与表格不符。 在 1024×1024 的表格中,每帧耗时 261–1,011ms(1–4 FPS),而接近 10 FPS 的数值出现在输入尺寸为 512×512 的另一个表格中(EfficientTAM-S 为 80.6ms)。
如果只搬运论文摘要中的数字,就会漏掉这些前置条件。这也是为什么要亲自查看论文表格的原因。代码与检查点遵循 Apache-2.0 协议,学术会议发表情况暂未确认(arXiv 版本)。
5. 局限性
- 漂移与长时间遮挡。 记忆库中仅保留最近的几张图和提示词所在的帧。如果物体被长时间遮挡后再次出现,或者有相似的物体(如邻近的桌子)经过,模型可能会跟丢并追踪到错误的目标上。
- 小物体与快速运动物体。 在 TT Score 中使用 SAM 2 尝试追踪球时,与运动员重叠时的球的召回率从 0.879 提升到了 0.926,但由于回弹精度下降,对多拍相持胜负的准确率增益为 0。因此我们最终没有采用(同第 3 篇)。
- 轻量化版本的代价。 平坦的编码器和粗糙的记忆机制会导致准确率有所下降(在上面的表格中,Ti 版本的准确率低了 4 分)。
6. 与我们项目的关联
- 把相机固定在三脚架上后,球台就不会动了。因此,对于 TT Score 来说,比起 SAM 2 的 追踪,我们更倾向于在 比赛开始时涂抹一次时使用这个模型。即使花上几百毫秒也没关系,用 CPU 也只需要 1 秒左右。
- 随着 2026-10-13 引入了无需人工点击即可找到球台并跟随晃动相机的功后,我们在与 SAM 2.1 tiny 相同的条件下对 EfficientTAM 进行了测试(有真实顶点标注的图片 103 张 × 7 种合成退化 = 721 张,512×288,当时服务器 GPU 正与其他任务分时复用)。无需点击即可找到的顶点误差中位数分别为:SAM 2.1 tiny 23.1px、EfficientTAM S 8.8px、EfficientTAM Ti 8.8px,落在 20px 内的比例分别为 45% · 57% · 53%。单次查找耗时分别为 1.48 · 1.65 · 1.55 秒,相差无几,且大部分时间消耗在将掩码(mask)转换为顶点的 CPU 后处理上,而不是模型本身。额外的 GPU 内存占用分别为 0.70 · 0.64 · 0.54GB。因此,TT Score 最终默认选择了 EfficientTAM S。只要人工点击一次,这三个模型的精度都会收敛到 7–8px(见《TT Score 模型解剖》第三篇第五节附录,代码仓库
docs/tt/PERFORMANCE.md2.12). - 论文报告称,EfficientTAM-S/2 在 SA-V 上的表现略低于 SAM 2(74.0 对 74.7),但在我们的球台检测任务中,EfficientTAM 表现得更准确。由于对比对象(SAM 2.1 tiny)和任务不同,我们并不将其视为对论文的驳斥。上文中“亲自尝试”部分的问题,即实际的记忆图谱究竟有多平滑,目前尚未进行测量(未实测)。
- EfficientTAM 所瞄准的“手机端分割”,终将铺平一条无需服务器即可进行球台检测的道路。既然比赛开始时只需运行一次,那么每帧 450ms 也是完全可以接受的。
接下来的文章将介绍通过 文字而不是点击来指代物体的 SAM 3。
TT 小贴士。 只有在相邻格子互相相似的时候,把记忆聚合成 2×2 才是没问题的。把杂乱无章的记忆强行聚合后,结果竟然相差了 75%。
参考文献
- Ravi, N. et al. (2025). SAM 2: Segment Anything in Images and Videos. ICLR 2025. https://arxiv.org/abs/2408.00714, 代码仓库 https://github.com/facebookresearch/sam2 (Apache-2.0)
- Xiong, Y. et al. (2024). Efficient Track Anything. arXiv. https://arxiv.org/abs/2411.18933, 代码仓库 https://github.com/yformer/EfficientTAM (Apache-2.0)
- Ryali, C. et al. (2023). Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles. ICML 2023. https://arxiv.org/abs/2306.00989
- 我们的测量:《TT Score 模型解剖》第三篇,代码仓库
docs/tt/PERFORMANCE.md2.4·2.12 - 示例代码与输出:此文件夹中的
code/10_memory_pool.py,code/10_memory_pool.out.txt