DivProto

论文标题:Entropy-based Active Learning for Object Detection with Progressive Diversity Constraint

中文标题:具有渐进多样性约束的基于熵的主动学习目标检测

作者团队State Key Laboratory of Software Development Environment, Beihang University Beijing, China & School of Computer Science and Engineering, Beihang University, Beijing, China

期刊会议:CVPR

时间:2022

代码:暂无


📚研究背景

这篇论文的核心问题在于如何在主动学习(Active Learning)场景下,为目标检测模型高效地挑选最有价值的未标注图像。具体而言,论文关心以下几个主要难点:

  1. 目标检测场景下的实例级冗余

    • 单张图像中往往存在许多候选框(bounding boxes),其中很多彼此相似,传统的 NMS(Non-Maximum Suppression)只能去除强重叠框,却难以消除“外观极为相似但位置并不重叠”的实例重复。
    • 如果过多地选入这些冗余实例,会浪费标注成本,降低主动学习的效率。
  2. 跨图像间的冗余与类不平衡

    • 不同图像之间也可能存在高度相似的视觉内容,如果仅依靠图像不确定性(熵)进行排序,容易在全局上选入大量相似图像,无法提升多样性。
    • 同时,数据集普遍存在“多数类”和“少数类”的不平衡现象,如果只根据熵高低选图,容易忽略少数类,导致类别分布更加偏斜。
  3. 在考虑不确定性的同时,如何兼顾多样性

    • 主动学习的目标不仅仅是找出“最难预测”的图像或实例,还要确保训练样本的分布具有足够多样性,涵盖更多类别和更广泛的场景,以提高模型的泛化能力。

🎯主要贡献

image.png

  1. 基于熵的实例级筛选(ENMS)

    • 提出 ENMS(Entropy-based Non-Maximum Suppression) 作为常规 NMS 的后续步骤,专门消除单张图像内的实例级冗余。
    • 通过实例熵(衡量检测框的不确定性)选择最有价值(最难预测)的实例并保留,而对同类别且外观特征相似度较高的其它检测框进行抑制,减轻单图像内部的重复信息。
  2. 引入“原型”来衡量跨图像相似度(Diverse Prototype, DivProto)

    • 为每个图像在各类别上定义一个**“原型特征”**(通过将高不确定性检测框的特征加权累加得到),用以度量图像之间在类别维度的相似性。
    • 通过比较图像与已选图集在相同类别原型向量上的相似度,筛掉与已选集过于相似的图像,进一步提升跨图像多样性
  3. 在类别层面实现平衡(Inter-class Balancing)

    • 对出现频次较低的“少数类”进行特殊照顾,给它们分配更大的标注配额(quota)。当模型预测某张未标注图含有少数类时,就会提高其被选中的优先级。
    • 这样在保证熵筛选机制的同时,也能兼顾类平衡,避免过度倾向多数类,从而增加类别多样性
  4. 全流程主动学习框架

    • 将上述方法整合进完整的主动学习管线:首先对候选图像做 ENMS 获得图像级熵,然后基于原型特征进行跨图像不冗余筛选,同时关注少数类配额分配,最终选出高不确定、高多样性、包含重要少数类的图像集进行标注。
    • 提高了标注效率,并能在有限标注预算下获得更优的检测性能。

🍍技术细节

🍓将“Core-set”引入目标检测任务时所面临的问题

1. Core-set 与主动学习问题的定义

文中首先引用了 Core-set 方法 :

在主动学习场景下,Core-set 方法的目标是最小化 core-set loss$$\sum\limits_{i\in[n]}l(I_i, y_i; D_S)$$其中 $I_i$ 表示第 ii 张图像,$y_i$ 是它的标签(在目标检测里则会包括目标边界框、类别等信息),$D_S$ 是现有的模型或特征提取器等。

  • 主动学习(Active Learning):核心思想是给定一个未标注的数据池,我们要在其中“挑选”最有价值的样本来标注,以尽量少的标注成本训练一个性能尽可能高的模型。

  • Core-set 的思路:大致是想在特征空间中挑出能代表整个数据分布的样本(或者说能“覆盖”所有数据的多样性)。这样选出来的样本,就能以尽可能小的规模取得较好的性能。


2. 将 Core-set 思路应用到目标检测

在目标检测(而非图像分类)环境下,作者把检测器 $D_S$ 拆成两部分:

  1. 编码器(encoder) $P_S$:把图像 $I_i$ 的一系列空间位置(比如特征图上的各个位置)映射为特征向量,记作$$P_S(I_i) = {P_S(I_i, k)}_{k \in [t]}.$$其中 $k \in [t]$ 表示特征图上的位置索引(或 anchor 索引等),也可以理解成对图像的所有“候选位置”或“感受野”做的特征提取。
  2. 预测器(predictor) $A_S$:在得到的特征基础上,预测每个位置 kk 的检测结果,记作
    $$A_S(P_S(I_i)) = { \hat{y}{i,k}, c{i,k}, p_{i,k} }_{k \in [t]}$$
    • $\hat{y}_{i,k}$ 表示第 $k$ 个位置的边界框(bounding box)。
    • $c_{i,k}$ 表示预测到的目标类别。
    • $p_{i,k}$ 表示预测到的置信度(confidence score)。

随后,图像级的 loss 可以看作所有实例(即 k 个位置)损失的和。例如:

$$l(I_i; \cdot) = \sum_{k \in [t]} l_D\bigl(P_S(I_i,k), y_{i,k}; A_S\bigr)$$

其中 $l_D$ 是针对单个实例(一个候选框)的损失函数。理想情况下,若要直接用 Core-set 思路,就要求这个图像级损失函数具有“Lipschitz 连续”之类的良好性质。但文中指出,因为

  1. $P_S(I_i)$ 本身是无序的(一张图里不同位置特征的排列可以是任意顺序),
  2. 对目标检测来说,定义这样的连续度并不容易,

所以导致原本的 Core-set 方法并不容易直接在目标检测场景“无缝”应用。


3. 不确定性度量:用熵替换原本的检测损失

为了解决上述难题,作者参考了一些基于“不确定性(uncertainty)”的主动学习研究 ,提出了一种熵(Entropy)度量做替换。这里给出了对第 $k$ 个实例(检测框)的不确定性度量:

$$H(I_i, k) = -p_{i,k} \log p_{i,k} ;-; (1-p_{i,k}) \log (1-p_{i,k})$$

其中

  • $p_{i,k}$ 是把第 k 个位置当作“前景目标”的置信度;
  • $1 - p_{i,k}$ 则是当作“背景”的置信度。

这个式子类似于二分类场景下的熵,刻画了预测结果不确定性的大小:当 $p_{i,k}$ 越接近 0 或 1 时,熵就越小;而当 $p_{i,k}$ 在 0.5 附近时,熵就会比较大,代表预测不确定性较高。

图像级的“基础检测熵”(basic detection entropy) 则是把该图像上所有位置(实例)的熵累加:

$$\mathcal{H}(I_i \mid D_S) = \sum_{k \in [t]} H(I_i, k).$$

然后按照这个值来对未标注图像做排序,选出熵值最高的前 K 张图像(“top-K images”)进行标注。因为熵越高通常代表模型越“不确定”,这些样本对模型的提升往往也更显著。


4. 图像级 vs. 实例级,及其冗余问题

在目标检测中,如果一个图像里出现了多个“几乎相同或非常相似的边界框”,这些冗余的 box 并不会给模型提供多少新信息,反而使标注成本更高。因此,在做主动学习时,不仅要在图像级别进行选取(比如选熵最高的图像),也要考虑到实例级别(具体的框是否冗余、信息量大不大),从而兼顾两者才能达到更好的效果。

文中说他们的方法与以往单纯的图像级或单纯的实例级方法相比,还在探索一个兼顾“实例级评估 + 图像级选取”的混合方案,希望能更好地既保持多样性,又不浪费标注时间,实现一个更高效的主动学习策略。


5. 总结
  • Core-set 思路:希望选出最具代表性的一批样本,让模型学到更通用的特征。
  • 目标检测的难点:一张图像里包含多个待检测目标(多个位置),如果直接把所有位置的预测视作有序或可被度量距离,就会面临“无序、复杂度高、不易保持连续特性”等问题。
  • 用熵来衡量不确定性:给每个候选位置打分,把整个图像的“熵值”作为衡量该图像是否值得标注的指标。
  • 信息冗余问题:即使一张图整体熵很高,也可能有许多重复或相似的目标框,因此有必要进一步考虑实例级的冗余度,减少不必要的标注。

作者提出了在图像级别先筛选,再兼顾实例级别细节的思路(或者融合图像与实例级策略),这样既能挑选高不确定性的图像,又能去除重复或价值不大的实例框,旨在实现更高效、更精细的主动学习。


🍓如何在单张图片里去除冗余检测实例

1. 为什么需要 ENMS?
  1. 常规 NMS 的局限

    • 常规 NMS 主要根据重叠面积置信度来抑制重复边界框:如果两个框高度重叠,往往只保留置信度更高的框,将另一个删除。
    • 但如果两个检测实例并不重叠(或者重叠度不大),却外观非常相似,NMS 并不会把它们合并。结果就会出现实例级冗余:同一张图里有多个“极度相似的”目标(比如一堆长得几乎一样的对象),它们为模型提供的增益有限,却消耗了额外的标注/计算资源。
  2. 主动学习的需求

    • 在主动学习中,我们希望挑选出信息量最大、最具不确定性的实例进行标注。
    • 如果出现大量“外观几乎相同”的实例,标注它们并不会带来更多信息,反而浪费标注成本。
    • 所以需要对“相似实例”进行额外抑制,留下最有价值的那几个。

2. ENMS 的思想

“We propose a simple yet effective Entropy-based Non-Maximum Suppression (ENMS) as a successive step of NMS for instance-level redundancy removal.”

  • 在普通 NMS 之后再做一次“基于熵”的筛选,专门解决“同类、外观相似”的问题。
  • 核心指标
    1. 实例熵 $\mathrm{H}(I_i, k)$
      • 表示该 bounding box(第 k 个实例)的“不确定性”大小,熵越大说明该实例越“难预测”(更值得关注)。
    2. 特征相似度 $\mathrm{Sim}(f_{i,k}, f_{i,j})$
      • 使用余弦相似度来衡量两个实例(bounding box)的外观特征是否相似。
      • 如果相似度大于给定阈值 $T_{\mathrm{enms}}$,则视为“冗余”,只保留其中更具信息量的一个。

3. ENMS算法流程概括

ENMS主要流程见下图可以概括为:

  1. 计算所有实例熵
    • 对图像内所有目标实例$k\in[t]$逐个计算熵$\mathrm{H}(I_i, k)$
  2. 初始化集合 $S_{\mathrm{ins}}$
    • 包含当前图像中所有实例的索引,例如 ${1,2,\dots,t}$
  3. 循环选取最具信息的实例
    • 从剩余集合 $S_{\mathrm{ins}}$ 中,找出熵最大的实例 $k_{\mathrm{pick}}$。这是当前“最有价值”的实例。
    • 把这个实例的熵累加到图像的总熵 $\mathrm{E}i$ 中,并把它从 $S{\mathrm{ins}}$ 移除。
  4. 在同一类别内删除相似实例
    • 对集合$S_{\mathrm{ins}}$ 中剩下的实例 j,如果它和 $k_{\mathrm{pick}}$ 是同一个类别,且相似度 $\mathrm{Sim}(f_{i,j}, f_{i,k_{\mathrm{pick}}})$ 大于设定阈值 $T_{\mathrm{enms}}$,就判定它与 $k_{\mathrm{pick}}$ 重复,予以移除。
    • 这样做可以避免在同一类别中出现大量外观几乎一样的实例。
  5. 迭代进行,直到 $S_{\mathrm{ins}}$为空
    • 也就是说,会不断选出当前最不确定(熵最高)的实例,保留它并清除同类的相似实例。最终得到一个去除冗余后的实例集合,同时得到新的图像级熵值$\mathrm{E}_i$。

4. 为什么这样做有效?
  • 选出最具信息的实例:优先保留熵最高(不确定性最高)的那个实例,因为它最能帮助模型学习。
  • 去除同类相似实例:那些与已选实例外观“高度雷同”的目标,对模型的学习增益很有限,保留会产生冗余。
  • 减少实例失衡:避免某张图片含有极多同类、相似的目标,导致不平衡数据增多、计算量上升,而信息增益却不成比例。

5. 其它补充要点
  1. 只比较同一类别
    • 只有在类别相同的前提下才去判断外观相似度,这样可以节省计算量,也符合语义逻辑。
  2. 特征“on-the-fly”提取
    • 当在做 ENMS 时,需要用到每个实例的特征 $f_{i,k}$。文中提到可以“on-the-fly”抽取,也就是直接从编码器 $P_S$ 的输出中取出,不必额外加重太多负担。
  3. 解决实例不平衡
    • 在一些场景中,一张图可能有很多相同或相似的物体(比如一张图里有一堆类似的车辆),ENMS 可以有效降低这种“单类爆炸式”实例数目的情况。

小结
  • 为什么要做 ENMS?
    因为普通 NMS 仅能合并重叠框,无法去掉“不同位置但外观几乎相同”的实例,造成实例级冗余。
  • ENMS 怎么做?
    基于实例熵选出最“难以预测、最具价值”的实例后,将与其同类别且余弦相似度高的实例视作冗余,依次删除。
  • 好处是什么?
    保留了每张图里最有价值的“高不确定性”实例,又去除了大量相似冗余目标,能让主动学习或后续训练的效率更高,数据更精简、更具多样性。

🍓如何保持图像级的多样性

这部分内容主要解决“跨图像的多样性(inter‐image diversity)”问题,简单说就是:

如何在所有未标注图里挑选出那些“尽量不相似、并且包含更多少数类目标”的图像,以便标注后带来最大的增益?

前面提到的 ENMS 解决了“单张图像内(intra‐image)”的冗余问题,但如果要在所有图像间也保持多样性,还需要进一步的策略。文中提出 Diverse Prototype (DivProto) 方法,下面逐步解释:


1. 为什么要考虑“跨图像多样性”?
  • 跨图像冗余:如果我们只根据图像熵高低来选图片,可能选出许多情形相似、对象类别相似的图像;这样并不能增大整体的训练覆盖面。
  • 类不平衡:在很多数据集里,“多数类”(比如常见的物体)往往出现频率高,而**“少数类”**容易被忽视。如果只依据熵高低选图,很可能继续偏向出现频率高的对象,从而让少数类在标注中被忽略。
  • 主动学习的核心:要想让模型泛化更好,需要同时兼顾信息丰富度和样本多样性。

2. Prototype(原型)的概念:如何刻画一张图像对某个类别的代表性?

文中给每个图像 $I_i$ 在每个类别 c 上定义了一个 prototype,用来概括“该图像里与类别 c 相关的、不确定度较高的特征”。公式 (3) 大致是:

$$\mathrm{proto}{c,i} = \sum{k \in [t]} \underbrace{1(c_{i,k} = c)}{\text{是否预测成类别 }c} ;\cdot; \underbrace{\mathrm{H}(I_i, k)}{\text{实例熵}} ;\cdot; \underbrace{f_{i,k}}_{\text{实例特征}}$$

含义可以拆解为:

  • $1(c_{i,k} = c)$:如果第 k 个检测框预测为类别 c,则取值为 1,否则为 0。这样只会累加与类别 c 相关的特征。
  • $\mathrm{H}(I_i, k)$:该检测框的不确定性熵。熵越高,说明这个框模型“拿不准”,它在这个类别上的信息量更大,于是对原型贡献更大。
  • $f_{i,k}$:该检测框对应的特征向量(由编码器 $P_S$ 输出)。
  • $\text{proto}_{c,i}$:把所有预测为 c 的实例按其熵加权后累加,得到一个向量,代表“图像 $I_i$ 对类别 c 的综合特征描述”,重点关注高不确定度实例。

这样,每张图对每个类别 c 都有一个 prototype,可视作“图像在类别 c 上最关键的那部分特征”。


3. 跨图像多样性度量:$M_g(I_i, C)$

为衡量“图像 $I_i$”与已选集合 $\Delta S$ 在某些类别上的相似度,文中用到公式 (4) 定义了一个度量 $M_g(I_i, C)$:

$$M_g(I_i, C) = \min_{c \in C} \Bigl[ \max_{j \in \Delta S} \mathrm{Sim}\bigl(\mathrm{proto}{c,i}, \mathrm{proto}{c,j}\bigr) \Bigr]$$

简而言之:

  1. 先固定一个类别 c,看图像 $I_i$ 在这个类别上的原型 $\mathrm{proto}{c,i}$,与已选出来的那些图 $\Delta S$ 在同类别的原型 $\mathrm{proto}{c,j}$ 是否“很像”。用 $\max_{j \in \Delta S}\mathrm{Sim}(\cdot)$ 表示“$I_i$”跟 $\Delta S$ 当中“最相似”的那个原型的相似度。
  2. 在所有类别 $c\in C$里,取一个最小值($\min_{c \in C}$),表示如果有一个类别维度上很相似,那么整体就算相似度高。

所以 $M_g(I_i, C)$ 越大,意味着 $I_i$ 在类别 $c\in C$ 中都有某些特征向量与 $\Delta S$ 中的相应类别非常相似,表示“冗余性较高”;而越小则表示与已选图集合更“不同”,多样性更好。


4. Intra‐class Diversity(图像内部类的多样性)与阈值 $T_\text{intra}$
  • 目的:不希望选进来的新图,和已选集合 $\Delta S$ 在同样的类别上特别相似(那会浪费标注预算)。
  • 方法:当 $M_g(I_i, [C])$(即图 $I_i$ 与 $\Delta S$ 在所有类别上的相似度)大于某阈值 $T_\text{intra}$ 时,就认为它和已选集合太相似,于是拒绝它,以保持多样性。

换句话说:
如果图像 $I_i$ 在已标注类别上“跟已经选的图很像”,那就不选它,给别的更多样的图机会。


5. Inter‐class Diversity(类别间的平衡)与阈值 $T_\text{inter}$

作者还注意到一个问题:假如大部分图片都包含“多数类”(例如狗、猫这样的常见类别),它们的熵可能也挺高,结果可能集中选取了含“狗猫”目标的图,却把那些“少数类”的图片漏掉。为了平衡各个类别(特别是少数类),文中设计了一个过程:

  1. 统计少数类(minority classes)
    • 根据训练集中每个类别出现的次数,找出出现次数最少的一些类,记为 $C_\text{minor}$。
    • 给这些少数类预留更多的标注配额(budget),保证它们不会被埋没。
  2. 对图像进行判定
    • 如果某张未标注图含有这些少数类(即对其中某个少数类的置信度较高),就有更大的机会被选中。
    • 这里会设置一个阈值 $T_\text{inter}$,如果图像里针对某少数类 $c\in C_\text{minor}$ 的最大置信度$M_p(I_i, [C_\text{minor}])$ 超过 $T_\text{inter}$,则更倾向于接受它。
    • 每次接受一个包含某少数类的图,就减少该少数类的 quota(即 $C_\text{minor} := C_\text{minor} - 1$),直到少数类都满足一定量后再停止该过程。
  3. 最终补足
    • 如果还没用完总的标注预算 b,就从剩余图像中继续按熵高低顺序往下补齐。

这样做的好处是:

  • 既能保证整体上挑选熵高、不确定性大的图片
  • 又会对那些包含少数类的图片开“绿色通道”,平衡类别分布,提升“类别间的多样性

6. Diverse Prototype 算法流程概括

image.png

大体上看,Algorithm 2 做了两件事:

  1. 先做 ENMS 得到每张图的熵 $\mathrm{E}i$;再算出它们在每个类别上的原型 $\mathrm{proto}{c,i}$。
  2. 对未标注图按熵从大到小排序,并依次进行判断:
    • 若该图和已选集 $\Delta S$ 在类别特征上相似度过高($M_g(I_i, [C])>T_\text{intra})$,则跳过。
    • 否则检查它是否包含少数类($M_p(I_i, C_\text{minor})>T_\text{inter}$),如果是,就选进来并更新相关配额;
    • 如果不是(或少数类配额已经用完),则可以从熵排序里继续往下看,最后把剩余预算填满。

简而言之,“既要在同类里不相似(提高跨图像多样性),也要对少数类做特殊照顾(提高类别平衡)”。


7. 总结
  1. 为何需要 DivProto?
    • 仅靠熵选图,会出现跨图像冗余、忽视少数类的问题。
  2. 主要策略
    • Prototype:把每张图在每个类别上的“高熵实例特征”累加,得到一个原型向量,用来度量跨图像的相似度。
    • Intra‐class diversity:对“太像已选图片”的候选图加以拒绝,避免相同类别的重复信息。
    • Inter‐class balancing:给少数类更多选取机会,以保证类别分布的均衡。
  3. 好处
    • 最终选出的图集既多样,又兼顾罕见类别,让主动学习的效率更高、覆盖面更广。

用更直白的话说,这一节主要就是为了在“所有未标注图”中选择一个高质量、兼顾多类的子集:

  • 先排除那些跟已选图“太雷同”的,
  • 优先包含某些少数类,
  • 最后保证总体选到的图都“信息量大、差异性好”。