ENEAS:文本提示视频分割,SAM 3 把雕像当真人时它怎么拦下来

2026 年 9 月,SperidLabs 把一篇 19 页的论文和一份 Apache 2.0 的开源仓库一起放到了 arXiv。论文给出了一组反常的数字:在 Church Statues 数据集上用 prompt "person" 找人,SAM 3 的 F1 只能拿到 19.5%,而同一个任务上 ENEAS-4B 的 F1 是 87.6%。SAM 3 之所以会打成 19.5,不是因为它没找到人,而是它把每一座雕得栩栩如生的石像也都标成了 person;召回率 83.7% 看着还行,精度却被压到 11.1%,每检测对一个真人就顺带幻觉出大约八个石像 ENEAS。这就是 ENEAS 想拦下的事:不是再做一个更大的视觉 backbone,而是把"看起来像"和"本体上是不是"这两件事分开打分。

三种错法,连 SAM 3 都躲不过

文本可提示视频分割(text-promptable video segmentation)听起来是个已经解决的任务。给一段视频和一句 "the blue painting",模型应该把每一帧里那块蓝色画作都切出来,再稳定地跟踪下去。SAM 3 在 LVIS zero-shot mask AP 48.8 SAM 3,听起来是当前最强文本分割底座;但真把它放到视频里、放到真实场景里,三种错误会接连冒出来。ENEAS 把它们叫出名字:时序幻觉、空间碎片化、本体论误分类。

先看前两种。prompt 是 "blue painting",一段视频里那块画作先后出现在画面右侧、被窗帘半遮、再被一只手完全挡住、最后在极近景里贴满镜头。

时序与空间鲁棒性对比:blue painting 序列上 Grounded SAM、SAM 3、ENEAS 三家方法的结果

图注:三行对比同一段 "blue painting" 视频序列。Row 1 Grounded SAM 在目标被遮挡和缺席时漂移到窗帘和头发(红叉标记错误分割),且在最后一列极近景下没有覆盖到完整物体;Row 2 SAM 3 时序稳定了一些,但在极近景上只勾出画作内部的局部纹理而不是整张画;Row 3 ENEAS 在目标缺席时输出空掩码,并在极近景下保持整张画的完整轮廓 ENEAS。

这张图只展示三家方法的输出差异,机制层面 ENEAS 的设计将其解释为:Grounded SAM 的行为归因于它的检测器本质——每一帧重新检测 prompt,碰到长得像的就抓回来,所以目标一离开视野就漂到长得像的窗帘、头发上去。SAM 3 把这一段修好了,时序稳定许多;但代价是新毛病——镜头一推近到画作表面,它就开始只勾局部笔触。一张画的语义单位是整张画,可 SAM 3 在那个尺度上看到的是高频纹理,于是输出就碎成几块。ENEAS 的跟踪分支在目标缺席时直接给空掩码,在极近景下仍然坚持输出整张画的完整 mask——图中这层输出差异的具体机制留到后面架构章节展开。

第三种错更难,因为它不是检测或跟踪问题,是判断问题。同一个 Church Statues 数据集,prompt 是 "person"。

语义歧义 II:超写实雕像,SAM 3 把雕像都标成 person,ENEAS 只保留真人

图注:两行对比 Church Statues 数据集 prompt='person' 的结果。Row 1 SAM 3 把几乎所有雕塑都标成 person,因为它识别到的"对称人体结构、皮肤纹理、脸部特征"满足了视觉先验;Row 2 ENEAS 只保留活人,把雕像全部拒掉。两行都标了少量远端行人的 false negative(红叉),但 ENEAS 把 SAM 3 大量的 false positive 一并消除 ENEAS。

这张图也只展示输出差异,不展示内部机制。雕像和人穿着同样式样的衣袍,有着同样姿态的手臂,连脸部起伏都被雕得像真人。视觉特征上它和人的距离比两个活人之间的还小。SAM 3 这种"大 backbone + presence head"的思路在这里完全失效,论文据此把缺口定位为:它的语义判断只到"视觉上像不像",从来不到"本体上是不是"(具体怎么把这道缺口补上留待架构章节)。ENEAS 给出的解法听起来不性感:把这件事外包给一个会读本体论的视觉语言模型(VLM),让它在不确定的时候出来判一句"这是活人还是雕像"。

带着这三种具体的失败模式,下一步去看文本可提示分割是怎么一步步演化到 SAM 3 的;ENEAS 不是凭空出现,它是站在 SAM 1→SAM 2→SAM 3 三步之上,专门补 SAM 3 这一段留下的语义可靠性缺口。

SAM 1 到 SAM 3,文本可提示分割的演进谱系

把 SAM 谱系拉成一条时间线,每一步都把"prompt 能是什么"向前推一格。

2023 年 4 月,Meta AI 把 SAM 1 放到 arXiv SAM。它定义了一种全新的范式:任何 prompt 进来——一个点、一个框、一段掩码、一句文本——图像编码器(ViT,MAE 预训练)输出整张图的 embedding,prompt 编码器把这些信号编码成另一种 embedding,轻量的 mask 解码器把两者拼起来输出 mask。SAM 1 把"promptable"这个概念固化成了图像分割的标准接口。

SAM 1 总体架构:image encoder + prompt encoder + mask decoder 的 promptable paradigm 起源

图注:SAM 1 一图总览:左侧 image encoder 输出 image embedding,可被多种 prompt(point/box/mask/text)通过 prompt encoder 高效查询,右侧 lightweight mask decoder 输出多个有效 mask 和对应的 confidence score,标注浏览器端约 50 ms 推理速度 SAM。

2024 年 8 月,Meta FAIR 把这个范式推到视频 SAM 2。SAM 2 提出 Promptable Visual Segmentation(PVS)任务,把"图像=单帧视频",引入 Hiera 主干、streaming memory bank 和 mask decoder 间的 memory attention,并允许通过点、框、掩码在任意帧 refine 目标。视频分割从此有了"在每一帧流式处理 + 跨帧 memory 写回"这条主干。

SAM 2 架构:图像编码器 + memory attention + memory bank + mask decoder 的视频流式扩展

图注:SAM 2 单帧处理的横向架构:左侧输入帧和 prompt 送入 image encoder;中间 memory attention 与上方的 memory bank(prompt memory + unprompted memory)双向连接;右侧 mask decoder 输出当前帧 mask;底部 memory encoder 把当前预测写回 bank 给后续帧使用 SAM 2。

2025 年 11 月,Meta Superintelligence Labs 把 prompt 推到了"概念"层级——SAM 3 SAM 3。输入不再是"那个点"或"那块 mask",而是一个短名词短语(如 "yellow school bus")或一张正/负 exemplar 图,输出则是视频或图像里所有匹配实例的 mask 加唯一身份。这就是 Promptable Concept Segmentation(PCS)。架构上是共享单一视觉 backbone 的 detector(DETR 风格,受文本与图像 exemplar 条件化)和 memory-based video tracker,加上一个独立的 presence head 把"识别"和"定位"解耦开。

SAM 3 架构总览:共享视觉编码路径 + 图像检测路径 + 视频跟踪路径

图注:SAM 3 横向架构总览:左段共享视觉编码路径;中段并列两条路径——图像检测路径(DETR-based,受文本与图像 exemplar 条件化)与视频跟踪路径(继承 SAM 2 transformer encoder-decoder 思路);右段是独立的 presence head 输出 SAM 3。

SAM 3 的通用能力很强。LVIS 上 zero-shot mask AP 48.8,超过当时最强 baseline 的 38.5;它还发布了 SA-Co benchmark(Gold/Silver/Bronze/Bio 等子集加视频 SA-Co/VEval)。但 Church Statues 的 F1 19.5 把这条谱系的一个隐藏缺口暴露出来:通用 backbone 加上 presence head 这一档,仍然拦不下"视觉上像但本体上不是"那一类错误。SAM 3 的 presence head 衡量的是"目标概念在图里有没有",不是"这块像素是不是本体的目标"。

这就是 ENEAS 想补的那段。它不重做 backbone,也不重做检测或跟踪,它在 SAM 3 的下游加了一道独立的"语义校验层"——但只在跟踪分支借用 SeC 时才省一道,因为 SeC 的概念级记忆本来就已经把"缺席输出空 mask"和"完整物体 mask"这两件事做对了。带着这个坐标系,下一章看 ENEAS 的跟踪分支是怎么把 SeC 直接拿来用的。

跟踪分支:给 SeC 加一个文本入口

ENEAS 不是从零搭建跟踪器。它把 SeC(Segment Concept,ICLR 2026 接收)的双分支架构直接拿过来用,只在入口处做了一件事:把 SeC 原生只支持的点提示扩成文本/点二选一 SeC。知道 SeC 在做什么,就理解了 ENEAS 跟踪分支的全部前置。

SeC 双分支架构:上半 Pixel-Level Association + 下半 Concept Guidance,scene-adaptive 切换

图注:SeC 双分支架构图。上半是 SAM 2 风格的 memory-bank + mask-decoder(Pixel-Level Association),下半是 keyframes + <SEG> token → InternVL 2.5 → cross-attention → pointwise add → mask decoder(Concept Guidance)。两半之间的箭头展示 scene-adaptive routing:稳定场景只走上半,场景变化时才拉下半 SeC。

SeC 的核心是它把 SAM 2 的"外观逐帧匹配"换成了"概念级记忆"。具体做法:维护一个稀疏 keyframe bank,只在第一帧和场景显著变化的帧上调用一个大视觉语言模型(LVLM,论文里用 InternVL 2.5),让它从关键帧和当前帧中蒸馏出一个 <SEG> token 的隐藏状态作为目标概念向量。这个向量通过 cross-attention 注入到当前帧的空间特征里,再和 memory-enhanced features 逐点相加,一起送进 SAM 2.1 的 mask decoder。

这个设计的关键是 scene-adaptive activation:连续帧通常在视觉上高度一致,每帧都跑 LVLM 是浪费。SeC 监测前后帧之间是否有显著场景变化,没有就走上半分支(纯 memory 匹配,不调 LVLM),有才把下半打开。这样它在 SeCVOS 上比 SAM 2.1 大幅领先(J&F 从 58.2 拉到 70.0,提升 11.8 点),同时稳定场景的推理开销几乎不增加 SeC。

ENEAS 的跟踪分支做的事情就是:在参考帧上用一段文本 prompt 找到目标(这一步用 open-vocabulary grounding 模型,类似 Florence-2,给出第一帧的目标位置),再把这个位置作为 SeC 的初始化点送进 SeC 的跟踪管线。SeC 后续的所有事情——概念记忆、scene-adaptive 切换、SAM 2.1 mask decoder——原封不动被复用。

这件事直接对应到 ENEAS 在跟踪侧的核心能力:目标离开视野时输出空 mask(true negative),以及镜头推到极近景时坚持输出整张画而不是局部纹理。ENEAS 论文把这种行为差异归因于 SeC 的 memory-based tracker 机制:目标消失时它不重新检测 prompt,因此自然输出空 mask;遇到占据大面积或极近景的目标时,它仍按"目标是什么"来切,而不是按"哪些像素颜色相近"来切。对比图里看到的 Grounded SAM 漂移和 SAM 3 局部纹理碎裂,是这三家方法在同一段视频上的输出差异,论文据此提出是 SeC 的概念级记忆与 scene-adaptive routing 让 ENEAS 的跟踪分支获得了前两种鲁棒性;不过这一对比展示的是输出结果,并未对"是 SeC 的哪一具体设计直接导致了这一行为差异"给出消融式直接证明。

但这只能解决前两种失败模式。第三种——雕像不是人——跟踪分支无能为力,因为它本质上是问"目标在哪儿",不是问"目标是什么"。这一刀必须留给发现分支。

发现分支:用语义校验层把 doppelganger 拦下来

如果说跟踪分支是借来的,那发现分支才是 ENEAS 真正的新东西。它的目标叫 semantic discovery:给定一段视频和一段文本 prompt(比如 "person"),输出每一帧里所有匹配 prompt 的实例 mask——每一帧独立判断,不强求跨帧身份。它的反直觉设计只有一句话:置信度计算交给视觉嵌入,本体论判断交给按需触发的 VLM judge。

具体是一个四阶段漏斗。

ENEAS 语义发现决策流:四阶段漏斗 + τ_acc/τ_rej 不确定区间路由

图注:ENEAS 决策流从左到右四级:Region Proposal(Florence-2 给定 prompt 在每一帧上产出候选框)→ Embedding Verification(用 SigLIP 2 对每个候选框独立打分 s(r),并标出 τ_rej 和 τ_acc 两个阈值)→ Semantic Verification(仅接收落在不确定区间的候选,由 Qwen3-VL 给出 v(r) 判断)→ Mask Generation(把通过的候选交给 SAM 2.1 出 mask)。漏斗效应:每一阶段更贵,但候选更少 ENEAS。

第一阶段 Region Proposal 用 Florence-2 做开集 phrase grounding,把 prompt 文本变成每一帧的候选区域 Florence-2。这一阶段的成本很低,因为只是把"person"这种概念粗筛成几百个候选框,但召回的天花板也在这里被定下——Florence-2 漏掉的实例后续无法找回。

第二阶段 Embedding Verification 是 ENEAS 的关键设计之一。它用 SigLIP 2 对每个候选框独立打分,给出一个 sigmoid score s(r) SigLIP 2。为什么必须是 SigLIP 2 而不是 CLIP 家族?这一点 ENEAS 论文 §4.2 的 Phase 1→4 演进讲得最清楚。

Phase 1 试过用 LVLM 做 dense captioning:先把每一帧详细描述成文字,再从中挑出包含 prompt 的实体,最后让 VLM 在一张编码图里判哪些是目标。结果是 (a) captioning 本身会幻觉(给雕像起名 "Saint Christian"),(b) 多个相邻物体在空间聚合时被合并成同一框(椅子和桌子被圈成一个),(c) 每帧要跑一次大模型,单帧 15 秒以上。

Phase 2 改成 softmax 打分:把候选框按文本条件分类,引入 "background"/"other"/"microphone" 等动态类别做 softmax。问题出在 softmax 的相互归一上——一个人站在话筒前,"person" 的概率被 "microphone" 顶下来,τ_acc 阈值根本稳不住。

Phase 3 才换成 SigLIP 2 的 pairwise sigmoid:每个候选框和 prompt 独立打分,不参与全局归一。再加 NaFlex 让 SigLIP 2 处理不同尺寸的 crop,最后用 prompt ensemble 多个 prompt 模板平均。这个组合把召回和精度的张力解开了:每个候选单独看像不像,不需要担心别的东西"分走"它的概率。

但 SigLIP 2 解决不了雕像问题,因为它看的还是视觉特征。Phase 4 才是 ENEAS 把这件事钉死的最后一刀:把 VLM 隔离在不确定区间里当 judge。

第三阶段 Semantic Verification:落在 τ_rej < s(r) < τ_acc 这个不确定区间的候选,被送进 Qwen3-VL 让它判 v(r) ∈ {accept, reject} Qwen3-VL。这一步的工程取舍和训练时完全不同:它要求 VLM 关闭深度推理(enable_thinking=False 风格的强制结构化输出),用 constrained decoding 让模型只能吐 yes/no;它要求 prompt 把邻居候选像素全部 mask 掉,让 judge 只看到当前候选的视觉证据;它要求 VLM 只在不确定区间触发,而不是每一帧都跑。

回到 Church Statues 的例子。雕像视觉特征和人很像,SigLIP 2 的分数大概率落在"既不像明确拒绝,也不像明确接受"的不确定区间里。这一类样本被路由到 Qwen3-VL judge,VLM 看到的是被邻居隔离的候选框,看到 prompt 是 "person",它的本体论判断是 reject。活人同样落在不确定区间,VLM 给的是 accept。两类都被语义验证层拦下或确认。雕像视觉特征压过本体身份这一关就这样被过了。

第四阶段 Mask Generation 通过 SAM 2.1 把确认的接受集 A_t 转成每一实例一个 binary mask SAM 2。这是 ENEAS 唯一与发现分支有关的 SAM 2.1 接触面。

τ_acc 和 τ_rej 在 ENEAS 论文里被叫做"延迟与精度的两个旋钮" ENEAS。把区间收紧(更激进),更多样本走 VLM,精度上升、延迟上升;把区间放宽,VLM 触发变少、延迟下降,但精度的天花板也跟着下降。这种"按需花大钱"的模式是 ENEAS 和 SAM 3 的关键差别:SAM 3 把所有判断塞进同一个 backbone,ENEAS 显式区分了"快且便宜"和"慢但对"两件事。

回到 Church Statues 的视觉证据。这张图验证的是最终结果——雕像被拒绝、活人被保留;论文把这一区分归因于落在不确定区间的样本被路由到 VLM 复核,由 Qwen3-VL 在那里给出本体论判断。视觉先验 vs 本体论判断这一对区分,在 VLM 复核触发的那一批样本上被最终落实。

Church Statues F1 从 19.5 到 87.6,代价是 3 秒一帧

把数字摆出来。

方法PrecisionRecallF1
SAM 311.1%83.7%19.5%
ENEAS-2B94.7%73.5%82.8%
ENEAS-4B97.5%79.6%87.6%

SAM 3 的精度 11.1% 意味着每检测对一个真人就顺带幻觉出大约八个 artifact;ENEAS-4B 把精度从 11.1% 拉到 97.5%,代价是召回从 83.7% 降到 79.6%,相差 4.1 个百分点 ENEAS。这不是"碾压 SAM 3",是不同取舍:SAM 3 在 Church Statues 这一对比中召回更高(83.7% vs 79.6%),ENEAS 把精度从 11.1% 拉到 97.5%,在"视觉先验会骗人"的场景下更稳。

注意 SA-Co/VEval 的两个 split。Instance Tracking:ENEAS HOTA 26.70 vs SAM 3 26.51,差距来自 association 质量(AssA 90.77 vs 90.18);但 LocA 上 SAM 3 反而领先(89.22 vs 87.86)。Semantic Discovery:ENEAS HOTA 9.23 vs SAM 3 9.19,差距更小 ENEAS。换句话说,ENEAS 在 Church Statues 这种本体论混淆的极端场景上大幅领先,在 SA-Co 这种更接近通用视频分割的基准上优势非常小。把它想成"补 SAM 3 的缺口"比想成"取代 SAM 3"更准确。

uncertainty interval 消融给出一个反直觉的事实。

区间配置VLM 触发单帧延迟F1
Aggressive(0.40–0.60)16.2%1.04 s74.3
Balanced(0.15–0.75)59.4%2.48 s79.6
Robust(0.10–0.90,默认)78.1%3.29 s82.8
VLM-Only(0.00–1.00)100%5.05 s79.1

VLM-Only 把每一帧都丢给 VLM,反而比 Robust 模式低 3.7 个 F1。ENEAS 把这个现象归因于 over-reasoning:让一个 2B 模型在每一帧上都被迫做本体论判断,会引入随机错误,稳定场景下它把雕像和人搞混的次数比"信 SigLIP 2 的视觉判断"还要多 ENEAS。这是 ENEAS 给出的最贵的一条工程教训:让小模型什么都判,不如让它只在拿不准时判。

VLM 体量与场景适配有进一步数据。VLM-2B 默认 3.29 s/frame、F1 82.8;VLM-4B 5.02 s/frame、F1 87.6——质量更好但慢 1.5 倍。Moving Boxes 这种场景切换剧烈的场景,可以用 Fast Mode(τ=0.40)把 VLM 触发压到 27.0%、延迟 1.14 s/frame、F1 98.0% ENEAS。

整套数字拼出来的判断:ENEAS 的核心收益来源不是更大的 backbone,而是把 score suppression 和 ontological error 两类故障分别用 sigmoid independence 和 constrained VLM 解决。代价是 Robust 模式 3 秒/帧的单卡延迟和 recall 受限于 Florence-2 的硬天花板。

3D 重建逼出来的 precision-first,以及怎么把它跑起来

ENEAS 在论文 §4.1 给出的应用锚很具体:3D 重建 pipeline。它的输入正是 NeRF / 3D Gaussian Splatting pipeline 那种"低帧率、无序视角、严重视点变化"的捕获场景 ENEAS。

3D 重建对分割的错误代价极度不对称。一个 false positive 把 distractor 切进 mask,那块像素就可能把错误像素带入重建、因而提高人工清理或重建污染风险。把这尊被误判为活人的雕像排除在 mask 外,则有望降低该风险,避免出现一个"半人半石"的混合体。一个 false negative 仅仅留下一小块空洞,后面修补就行。这种不对称把 ENEAS 推向了 precision-first:高 τ_acc、低 τ_rej、不确定区间必走 VLM。

它与 RobustNeRF、WildGaussians、SpotlessSplats 这一类"重建内部用 robust loss 去噪"的方法是互补关系——那些方法在重建阶段处理异常值,ENEAS 在重建之前就用语义 mask 把真正的 distractor 切掉。它也和 Gaussian Grouping、LangSplat、SAGA 这一类"把 2D mask 提升到 3D 身份分离"的方法互补——那些方法假设 2D mask 是干净的,ENEAS 给出更干净的输入。

雕像的视觉证据在这里再次起作用。把雕像切掉,3D 资产里就不会出现一个长得像活人但本体是石头的混合体;Church Statues 的对比图就是 doppelganger 区分(doppelganger 是 ENEAS 自创术语,意思是"看起来像但不是同一个实例")的最强单一视觉证据。

工程交付在仓库里 speridlabs/eneas(Apache 2.0,48 stars,6 commits,2026-09-08 快照)。它提供两条调用路径:

  • CLI:eneas unique_instance(跟踪单个实例,支持点或文本初始化)和 eneas generic_category(每帧检测语义类别的所有实例,不做时序跟踪)。
  • Python API:UniqueInstanceSegmenter 和 GenericCategorySegmenter,调用 .segment(frames_path=..., text=..., annotation_frame=...) 返回 mask 字典与 metadata。

初始化时 HuggingFace Hub 自动拉取三件模型:OpenIXCLab/SeC-4B(主分割模型,复用 SeC 的概念级记忆)、microsoft/Florence-2-large(文本引导 grounding)、google/siglip2-base-patch16-naflex(NaFlex variant,处理原生宽高比的嵌入打分)。Qwen3-VL 通过本地 Ollama 服务运行,默认 tag 是 qwen3-vl:2b-instruct-q8_0(约 2.6 GB);显存充足时可换 qwen3-vl:4b-instruct-q8_0 提精度,代价是 1.5× 慢。

依赖栈(pyproject.toml 锁定)要求 Python 3.10–3.12、CUDA 12.x + Blackwell/Ada 之后(uv 索引指向 PyTorch cu130,指定 compute_capabilities=120)。仓库 README 推荐 uv sync(或 --extra ui 装 Gradio demo / --all-extras 装测试与 lint),pip 路径用 pip install -e .。不想要本地 GPU 也可以直接用 HuggingFace Spaces demo(huggingface.co/spaces/speridlabs/eneas)。

用之前先想清楚几件事。Recall 受限于 Florence-2 的提议能力——小、远、被严重遮挡的实例可能在 Region Proposal 阶段就漏了,后续找不回来。极近景在失去上下文时仍可能泄漏——论文图 4 Pop-Art 那一列就标注了 ENEAS 在近景无材质线索时的少量泄漏。密集场景(如拥挤街道)不在 ENEAS 的 regime 内——VLM 调用次数随候选数线性增长。Semantic Discovery 是逐帧独立判断,不分配跨帧持久 ID。模型不输出置信度分数,与依赖 score 的评估协议兼容性受限。硬件门槛:Robust 模式默认 3 s/frame,单卡 L4 GPU 24 GB(NVIDIA Ada Lovelace)+ Intel Xeon 12 vCPU;Fast Mode 在简单场景下能压到 1.14 s/frame,但 F1 受益取决于场景复杂度。

ENEAS 不是下一个开箱即用的 SAM 3。它是 SperidLabs 对 3D 重建、杂乱资产库、doppelganger 区分这类 precision-first 场景做出的工程方案:把"计算置信度"和"判断本体论"显式拆开,分别交给视觉嵌入和按需触发的 VLM judge。在 Church Statues 这种被设计来专门压视觉先验的数据集上,SAM 3 把每检测对一个真人都幻觉出大约八个 artifact 的局面被翻到 ENEAS-4B 几乎不幻觉。在 3D 重建里这意味着有望降低被一个误识别的雕像污染整张资产的风险;在视频资产管理里这意味着有望降低被镜像或画作污染身份索引的风险。

代价是显式的:3 秒/帧的非实时延迟、对本地 Ollama 服务的依赖、对跨帧 ID 的缺席。把它用起来之前,先想清楚这四件事自己能不能接受。


想深入可以读原文:ENEAS: Embedding-guided Neural Ensemble for Adaptive Segmentation — arXiv:2609.03756。

参考文献

ENEAS:文本提示视频分割,SAM 3 把雕像当真人时它怎么拦下来