跳转至

CountEx: Fine-Grained Counting via Exemplars and Exclusion

会议: ECCV2026
论文: ECCV 原文
代码: https://github.com/bbvisual/CountEx
领域: 多模态 VLM / 目标检测
关键词: 细粒度计数、负提示、视觉样例、共享原型、开放词汇检测

一句话总结

CountEx 将“数什么、不要数什么”共同编码成检测查询,通过保留共享特征并抑制负类独有模式来消除细粒度歧义,在 CoCount 的新类别与已知类别测试中分别达到 26.61 和 12.72 MAE。

研究背景与动机

视觉计数不只是发现画面里有多少物体,还必须理解用户到底把哪些实例算作目标。 CountGD 等方法允许用文字和少量框选样例指定目标,但在红绿苹果、不同材质垫圈等共存场景中,仅有正提示不一定足以限定计数范围。 一个模型可以学会寻找“苹果”,却仍把用户不想数的绿色苹果算进去;也可以依赖训练集偏置,直接数画面中占主导的类别。 现有数据集中大量图像只有一个需要计数的类别,使这种不认真使用提示的策略也能获得不错的成绩。

负提示看似能直接解决问题,难点却在于“不要绿色苹果”并不等于“不要苹果”。 正负对象共享形状、纹理和类别语义,简单相减可能连目标识别所需的共性也一并消掉,让模型只关注颜色差异。 而场景中还可能有用户完全没有提及的第三类物体,它们既不是正目标,也不是显式负目标,不能因为“不像负类”就被计入。 因此,分别预测两张密度图再相减,或者分别检测后按位置剔除,都没有真正解决特征层面的语义边界问题。

作者把问题转化为:先找到正负对象共同依赖的视觉特征,再从负类查询中提取真正用于区分两者的残差。 为让这种区分可以被系统评估,论文还构建了两类物体大量共存的 CoCount,而不是只在单类别计数集上增加一句否定文本。 核心 idea:负提示应提供“需要排除的独有证据”,而不是被整体当作正提示的反向量;通过共享原型分解和选择性查询抑制,保留目标类别共性,同时减少相似负类造成的误计数。

方法详解

整体框架

输入包括图像和正类文字描述,还可加入正类样例框、负类文字描述与负类样例框;输出是属于正类的检测结果及其数量。 CountEx 采用 LLMDet 的开放词汇查询编码器,分别以正、负提示条件化同一张图像,得到两个候选查询集合。 文字经语言编码器变成 token;样例框对应裁剪区域的 patch 特征经平均池化和线性投影后,与文字嵌入拼接。 因此,样例不是额外的目标答案,而是告诉模型当前场景里“这个词指的对象长什么样”。 两组查询都含有图像上下文,并非仅把两段句子的全局嵌入拿来做差。

判别式查询细化模块(Discriminative Query Refinement,DQR)依次执行共享特征识别、负类独有特征提取和选择性查询细化。 最终检测头根据细化后的正查询预测框和置信度,统计超过阈值的预测作为计数结果。 密度分支只在训练时提供辅助监督,推理并不是把它预测的密度积分后再减去负类数量。 下图展示正负提示均可用时的主要数据流;论文也评估了缺少样例或负提示的输入配置。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
        Input["图像与正负提示<br/>可选视觉样例"] --> Encoder["LLMDet 查询编码<br/>正查询与负查询"]
        Encoder --> Shared["共享特征识别"]
        Shared --> Exclusive["负类独有特征提取"]
        Encoder -->|负查询| Exclusive
        Exclusive --> Refine["选择性查询细化"]
        Encoder -->|正查询| Refine
        Refine --> Output["检测头与阈值筛选<br/>正类计数"]
        Encoder -.->|仅训练| Density["密度分支与点标注监督"]

关键设计

1. 共享特征识别:先保护正负对象都需要的类别证据

这一阶段要回答的不是“哪个对象属于负类”,而是“正负两类为什么看起来像”。 模型引入可学习的原型向量,让它们对拼接后的正、负查询做交叉注意力,再经过线性映射和层归一化形成当前图像的共享原型。 原型由可学习参数提供起点,但会根据当前两组查询更新上下文表示,并不是固定的全局颜色或形状词典。 如果当前任务是区分两种咖啡糖,共享原型应保留糖果的形状和包装纹理,而不把某一种颜色直接等同于全部类别语义。 这些原型随后定义一个共享特征空间,使负查询能被拆成“双方都有的部分”和“更偏向负类的部分”。

原型学习使用共享性与多样性两种约束。 共享性损失鼓励每个原型在正查询中和负查询中都至少找到一个高余弦相似度的对应项,避免原型只代表一侧。 多样性损失鼓励原型嵌入接近正交,防止所有原型收敛到同一种显著外观而遗漏其他共性。 这种共享性是通过优化目标学习的倾向,不是严格保证每个原型都只有纯粹的类别语义。 第 15 页的可视化提供了部分支持:某个原型对应的局部图像集中呈现细长杆状结构,跨越钉子、螺丝与工艺棒等类别。

2. 负类独有特征提取:只保留值得排除的差异残差

负查询本身还包含大量共享内容,所以不能直接拿整组负查询去抑制正查询。 模型先计算每个负查询与所有共享原型的余弦相似度,并取最大值作为筛选分数。 分数越低,表示该查询连最接近的共享原型都不太相似,因而更可能包含负类独有信息。 论文保留得分最小的 \(m\) 个负查询,默认 \(m=64\);这里选的是低相似度项,而不是高置信度检测框。

\[ \sigma_i=\max_j\operatorname{cos}(\mathbf{q}^{\mathrm{neg}}_i,\mathbf{c}_j),\qquad \mathcal{I}_{\mathrm{excl}}=\operatorname{SmallestK}(\{\sigma_i\},m). \]

上式按第 9 页正文表达筛选规则,其中 \(\mathbf{c}_j\) 是共享原型,\(\mathcal{I}_{\mathrm{excl}}\) 是被选查询的索引集合。 对被选中的负查询,再投影到共享原型张成的空间,并去掉投影对应的共享分量。 剩余残差组成负类独有参考集合,随后作为选择性抑制的依据。 筛选和投影并非重复:前者缩小候选集合、减少明显共享查询,后者进一步清除每个候选内部仍残留的共性。 缓存的式 (2) 丢失了部分运算符和维度排版,因此这里保留可靠的文字机制,不猜补作者的精确投影表达式。

3. 选择性查询细化:让正查询按相关程度吸收排除信号

有了负类独有参考,DQR 让正查询作为交叉注意力的 query,让负类残差作为 key 和 value。 注意力响应反映某个正候选与负类模式的关联强度,而不是简单地判定两个预测框是否重叠。 模型通过带可学习门控的残差抑制控制扣除强度,并结合层归一化和 dropout 处理更新。 与负类独有模式对齐很弱的正查询应大体保持原样;与这些模式高度对齐的查询则被更明显地抑制。 门控的作用是调节抑制幅度,避免所有候选都被同等强度地改写。

这一设计把负提示放在最终决策之前,而不是先各自计数、再对两个标量做算术。 保留下来的正查询仍携带共享类别证据,检测头因此可以继续判断它是否真的是目标类别,而不只是“不是负类”。 框回归与分类头输出候选位置和分数,最终只枚举置信度超过阈值的检测。 论文没有在所读正文中明确给出推理阈值数值,不能把它补成某个惯用默认值。 这种抑制减少误计数的能力还依赖前两步的分解质量,不能把“保留共享特征”理解成绝不会漏检的数学保证。

一个完整示例

原文图 5a 使用同一张黑色与棕色咖啡糖共存的图像,检查更换正负意图是否真的改变计数对象。 先指定黑色咖啡糖为正类、棕色咖啡糖为负类,并按可用配置提供视觉样例。 双路编码得到两组候选,共享特征识别保留两类糖共同的外观线索,负类独有特征提取则生成偏向棕色糖的差异参考。 选择性查询细化抑制正候选中的棕色糖模式,检测头最终给出 103,而真实黑色糖数量为 96。

交换正负提示后,排除对象也随之交换,模型给出棕色糖计数 79,对应真实数量 94。 这两个结果说明模型并不是始终返回同一个主导类别数量,也不是把整幅图的物体总数均分。 但两次预测都存在误差,因此该案例展示的是条件可控性,而不是完美识别每个实例。 具体共享与独有特征的语义解释用于帮助理解流程;图 5a 没有逐项标注该图内部的查询残差。

损失函数 / 训练策略

训练以点标注为核心,将匹配后的查询分类、预测框中心定位、密度预测和原型学习联合优化。 总目标在第 9–10 页给出,采用以下紧凑形式:

\[ \mathcal{L}=\lambda_{\mathrm{cls}}\mathcal{L}_{\mathrm{cls}}+\mathcal{L}_{\mathrm{loc}}+\lambda_{\mathrm{den}}\mathcal{L}_{\mathrm{den}}+\mathcal{L}_{\mathrm{proto}}. \]

分类项对匹配预测使用 focal loss,让正实例与非目标候选具有可分的置信度。 定位项比较预测框中心与真实点坐标,使用 \(L_1\) 距离;这并不意味着训练集提供了所有实例的完整框尺寸监督。 密度分支从查询解码之前的文本融合视觉 token 出发,经过 FPN 密度头预测空间分布。 点标注通过二维高斯核形成密度监督,再用均方误差训练该分支,从而给编码器补充稠密的位置学习信号。 原型项由共享性损失和多样性损失加权组成,分别促进跨正负集合的共有响应以及原型间的差异。 模型整体需要端到端训练;“推理时使用负提示”不等于整个方法无需训练。 与按目标类别生成合成数据并做测试时适配的方法不同,CountEx 把负提示作为一次前向推理的条件,不需要针对每个测试类别重新优化。 所读正文未明确列出全部损失权重、优化器与训练轮数,本笔记不推测这些复现参数。

实验关键数据

主实验

CoCount 包含 1,780 段视频和 10,086 张标注帧,覆盖 55 个类别以及 97 个类别对,其中 50 对为跨类别、47 对为类别内变体。 训练、验证、测试分别使用 7,417、1,335、1,334 张标注帧;另有 Train2 子集未做稠密标注,不参与本文实验。 训练点标注和每类 3 个样例框从人工标注帧借助 CoTracker3 传播,再进行采样与质量过滤。 NC 设置按五个超类别轮流留出一个进行测试;KC 设置训练时覆盖全部超类别,但训练和测试视频严格分离。 MAE 是预测数量与真实数量之差的绝对值均值,RMSE 是计数误差平方均值的平方根,两者均越低越好。

下表摘自第 11 页表 1,所有方法按相同的数据划分训练;但 CountEx 使用正负提示,常规基线只使用正提示,因此不是等提示信息量比较。

方法 NC MAE NC RMSE KC MAE KC RMSE
CAD-GD 34.08 50.39 16.00 27.52
GroundingREC 29.29 42.43 17.54 27.41
CountGD 33.78 48.29 15.55 28.32
LLMDet 33.22 47.66 16.82 29.23
LLMDet + Detection-Suppression 28.93 42.17 16.94 29.71
LLMDet + Density-Subtraction 47.71 74.05 24.19 38.93
LLMDet + Count-All-then-Halve 31.51 46.80 19.77 31.66
CountEx 26.61 38.86 12.72 23.99

相对 LLMDet,NC MAE 从 33.22 降至 26.61,论文报告相对下降 19.9%;KC MAE 从 16.82 降至 12.72,报告下降 24.4%。 密度相减反而明显恶化,说明“能接收负提示”与“正确利用负提示”是两个问题,负信息并不天然带来收益。

消融实验

下表选取第 14 页表 3a–3c 的 KC 结果,分别考察提示组合、DQR 组件和训练监督;不同分组并非同一条逐步加模块的实验链。

分组 配置 MAE RMSE
提示,表 3b 仅正类文字 15.96 28.76
提示,表 3b 正类文字与正类样例 15.75 27.59
提示,表 3b 正类文字与负类文字 13.22 26.23
提示,表 3b 正负文字与正负样例 12.72 23.99
架构,表 3c 去掉共享特征识别 14.18 26.48
架构,表 3c 去掉负类独有特征提取 13.40 25.30
架构,表 3c 去掉选择性查询细化 16.10 30.49
损失,表 3a 去掉密度损失和原型损失 15.20 28.33
损失,表 3a 去掉原型损失,保留密度损失 13.00 25.22
损失,表 3a 去掉共享性损失 13.64 25.07
损失,表 3a 去掉多样性损失 14.05 26.28
完整模型,表 3a–3c 全部组件与监督 12.72 23.99

关键发现

  • 仅加入负类文字就使 KC MAE 从 15.96 降到 13.22;全部提示进一步达到 12.72,表明收益不全来自额外样例框。
  • DQR 中去掉选择性查询细化的退化最大,MAE 达 16.10;仅发现差异而不把差异用于更新正查询并不够。
  • 表 3c 中负查询数从 16 增至默认 64 时,MAE 从 13.87 降至 12.72;128 个查询为 12.99 MAE,但 RMSE 23.70 略低于默认的 23.99,不能说 64 对所有指标都最优。
  • 第 12 页表 2a 中,CoCount 训练后的 CountEx 零样本迁移至 LOOKALIKES 得到 18.53 MAE、30.46 RMSE;逐类别合成数据并适配的方法为 10.00 MAE,不能忽略适配条件宣称绝对最优。
  • 第 12 页表 2b 中,PairTally 的 inter-scene 与 intra-scene MAE 分别为 15.61、12.57;同样在 CoCount 训练的 CountGD 对应为 19.67、15.67。
  • 第 12 页正文报告在 FSC-147 上微调、仅使用正提示后为 8.63 MAE,仍落后于 CountGD 的 5.74;这不是未经训练的跨数据集测试。
  • 第 12–13 页的效率测试在单张 NVIDIA A5000、batch size 1 上平均 1000 张图像:有无 DQR 分别为 194.0 和 190.2 ms,增加 3.8 ms,约 2%。

亮点与洞察

  • 否定信息需要条件化解释。 先保护“同属糖果”的证据,再消除“不想数的那种糖”的证据,比直接把负类特征整体扣除更符合细粒度语义。
  • 数据设计迫使模型认真使用提示。 两类物体都大量出现,并允许交换正负意图,使只数主导类别的捷径更容易被暴露。
  • 计算发生在查询层。 负类参考经过筛选后参与交叉注意力,论文测得的额外延迟很小;这一结果只覆盖其所用硬件与推理设置。

局限与展望

  • 排除提示的相关性仍然重要。 第 14 页报告 NC 下无关负提示为 28.43 MAE、42.29 RMSE,差于正确负提示的 26.61 MAE;错误提示不是无成本的辅助信息。
  • 极相似与高密度场景仍难。 图 4 报告 KC 下计数超过 200 时 MAE 为 43.1,某些困难类别对的误差更高,不能把整体均值理解成所有细粒度对象均已解决。
  • 数据覆盖存在边界。 CoCount 以人工摆放的两类共存物体为主;更多类别同时被排除、复杂背景和更广泛拍摄条件下的可靠性仍需专门评估,这是读者对实验覆盖的判断。
  • 文本提取限制了复现细节。 第 8–9 页部分公式和图 2 的密集标签损坏,但方法正文及表 1、表 3 可读;笔记未猜补投影算子、门控精确表达式或未给出的超参数。
  • 值得补充的实验。 可进一步固定正负提示信息量,对比不同排除机制,并报告负提示错误时的漏检率与误检率,而不仅是汇总计数误差。

相关工作与启发

  • 与 LLMDet 的关系: CountEx 复用其开放词汇查询编码能力,主要增量是面向计数的正负查询联合建模和 DQR,不是另行训练一个通用大语言模型。
  • 与 CountGD 的关系: 两者都利用文字及视觉样例,但 CountEx 显式建模不应计入的对象;单类别 FSC-147 上的结果也说明该优势有明确的任务条件。
  • 与 FiGO 的关系: 原文引用的 D’Alessandro 等人的工作通过合成混淆类别与测试时适配提升细粒度计数,CountEx 则使用轻量推理时排除信号,二者的测试预算不同。
  • 与 T-Rex-Omni 的关系: 负视觉提示也已用于通用目标检测;CountEx 的特定贡献在于先分离共享与负类独有特征,再将其用于少样本计数查询细化。
  • 可迁移启发: 对需要“找 A、排除相似 B”的检索或定位任务,可以研究先保留共同语义再压制差异的表示分解,但这属于研究方向,并非本文已经验证的跨任务结论。

评分

以下为笔记作者的主观评价,采用 5 分制。 - 新颖性: 4/5。负提示本身已有先例,但共享原型、独有残差与计数查询抑制形成了明确的任务化设计。 - 实验充分度: 4/5。包含新旧类别、外部数据集与多组消融,但等提示信息量比较和更复杂排除条件仍可加强。 - 写作质量: 4/5。核心动机与实验对应清晰;缓存公式损坏属于提取限制,不据此判定原论文排版质量。 - 价值: 4/5。为可控细粒度计数提供了模型和数据集,价值主要集中在相似类别共存且排除意图明确的场景。