论文标题: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)场景下,为目标检测模型高效地挑选最有价值的未标注图像。具体而言,论文关心以下几个主要难点:
目标检测场景下的实例级冗余
- 单张图像中往往存在许多候选框(bounding boxes),其中很多彼此相似,传统的 NMS(Non-Maximum Suppression)只能去除强重叠框,却难以消除“外观极为相似但位置并不重叠”的实例重复。
- 如果过多地选入这些冗余实例,会浪费标注成本,降低主动学习的效率。
跨图像间的冗余与类不平衡
- 不同图像之间也可能存在高度相似的视觉内容,如果仅依靠图像不确定性(熵)进行排序,容易在全局上选入大量相似图像,无法提升多样性。
- 同时,数据集普遍存在“多数类”和“少数类”的不平衡现象,如果只根据熵高低选图,容易忽略少数类,导致类别分布更加偏斜。
在考虑不确定性的同时,如何兼顾多样性
- 主动学习的目标不仅仅是找出“最难预测”的图像或实例,还要确保训练样本的分布具有足够多样性,涵盖更多类别和更广泛的场景,以提高模型的泛化能力。
🎯主要贡献

基于熵的实例级筛选(ENMS)
- 提出 ENMS(Entropy-based Non-Maximum Suppression) 作为常规 NMS 的后续步骤,专门消除单张图像内的实例级冗余。
- 通过实例熵(衡量检测框的不确定性)选择最有价值(最难预测)的实例并保留,而对同类别且外观特征相似度较高的其它检测框进行抑制,减轻单图像内部的重复信息。
引入“原型”来衡量跨图像相似度(Diverse Prototype, DivProto)
- 为每个图像在各类别上定义一个**“原型特征”**(通过将高不确定性检测框的特征加权累加得到),用以度量图像之间在类别维度的相似性。
- 通过比较图像与已选图集在相同类别原型向量上的相似度,筛掉与已选集过于相似的图像,进一步提升跨图像多样性。
在类别层面实现平衡(Inter-class Balancing)
- 对出现频次较低的“少数类”进行特殊照顾,给它们分配更大的标注配额(quota)。当模型预测某张未标注图含有少数类时,就会提高其被选中的优先级。
- 这样在保证熵筛选机制的同时,也能兼顾类平衡,避免过度倾向多数类,从而增加类别多样性。
全流程主动学习框架
- 将上述方法整合进完整的主动学习管线:首先对候选图像做 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$ 拆成两部分:
- 编码器(encoder) $P_S$:把图像 $I_i$ 的一系列空间位置(比如特征图上的各个位置)映射为特征向量,记作$$P_S(I_i) = {P_S(I_i, k)}_{k \in [t]}.$$其中 $k \in [t]$ 表示特征图上的位置索引(或 anchor 索引等),也可以理解成对图像的所有“候选位置”或“感受野”做的特征提取。
- 预测器(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 连续”之类的良好性质。但文中指出,因为
- $P_S(I_i)$ 本身是无序的(一张图里不同位置特征的排列可以是任意顺序),
- 对目标检测来说,定义这样的连续度并不容易,
所以导致原本的 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?
常规 NMS 的局限
- 常规 NMS 主要根据重叠面积和置信度来抑制重复边界框:如果两个框高度重叠,往往只保留置信度更高的框,将另一个删除。
- 但如果两个检测实例并不重叠(或者重叠度不大),却外观非常相似,NMS 并不会把它们合并。结果就会出现实例级冗余:同一张图里有多个“极度相似的”目标(比如一堆长得几乎一样的对象),它们为模型提供的增益有限,却消耗了额外的标注/计算资源。
主动学习的需求
- 在主动学习中,我们希望挑选出信息量最大、最具不确定性的实例进行标注。
- 如果出现大量“外观几乎相同”的实例,标注它们并不会带来更多信息,反而浪费标注成本。
- 所以需要对“相似实例”进行额外抑制,留下最有价值的那几个。
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 之后再做一次“基于熵”的筛选,专门解决“同类、外观相似”的问题。
- 核心指标:
- 实例熵 $\mathrm{H}(I_i, k)$
- 表示该 bounding box(第 k 个实例)的“不确定性”大小,熵越大说明该实例越“难预测”(更值得关注)。
- 特征相似度 $\mathrm{Sim}(f_{i,k}, f_{i,j})$
- 使用余弦相似度来衡量两个实例(bounding box)的外观特征是否相似。
- 如果相似度大于给定阈值 $T_{\mathrm{enms}}$,则视为“冗余”,只保留其中更具信息量的一个。
- 实例熵 $\mathrm{H}(I_i, k)$
3. ENMS算法流程概括
ENMS主要流程见下图可以概括为:

- 计算所有实例熵
- 对图像内所有目标实例$k\in[t]$逐个计算熵$\mathrm{H}(I_i, k)$
- 初始化集合 $S_{\mathrm{ins}}$
- 包含当前图像中所有实例的索引,例如 ${1,2,\dots,t}$
- 循环选取最具信息的实例
- 从剩余集合 $S_{\mathrm{ins}}$ 中,找出熵最大的实例 $k_{\mathrm{pick}}$。这是当前“最有价值”的实例。
- 把这个实例的熵累加到图像的总熵 $\mathrm{E}i$ 中,并把它从 $S{\mathrm{ins}}$ 移除。
- 在同一类别内删除相似实例
- 对集合$S_{\mathrm{ins}}$ 中剩下的实例 j,如果它和 $k_{\mathrm{pick}}$ 是同一个类别,且相似度 $\mathrm{Sim}(f_{i,j}, f_{i,k_{\mathrm{pick}}})$ 大于设定阈值 $T_{\mathrm{enms}}$,就判定它与 $k_{\mathrm{pick}}$ 重复,予以移除。
- 这样做可以避免在同一类别中出现大量外观几乎一样的实例。
- 迭代进行,直到 $S_{\mathrm{ins}}$为空
- 也就是说,会不断选出当前最不确定(熵最高)的实例,保留它并清除同类的相似实例。最终得到一个去除冗余后的实例集合,同时得到新的图像级熵值$\mathrm{E}_i$。
4. 为什么这样做有效?
- 选出最具信息的实例:优先保留熵最高(不确定性最高)的那个实例,因为它最能帮助模型学习。
- 去除同类相似实例:那些与已选实例外观“高度雷同”的目标,对模型的学习增益很有限,保留会产生冗余。
- 减少实例失衡:避免某张图片含有极多同类、相似的目标,导致不平衡数据增多、计算量上升,而信息增益却不成比例。
5. 其它补充要点
- 只比较同一类别
- 只有在类别相同的前提下才去判断外观相似度,这样可以节省计算量,也符合语义逻辑。
- 特征“on-the-fly”提取
- 当在做 ENMS 时,需要用到每个实例的特征 $f_{i,k}$。文中提到可以“on-the-fly”抽取,也就是直接从编码器 $P_S$ 的输出中取出,不必额外加重太多负担。
- 解决实例不平衡
- 在一些场景中,一张图可能有很多相同或相似的物体(比如一张图里有一堆类似的车辆),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]$$
简而言之:
- 先固定一个类别 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$ 当中“最相似”的那个原型的相似度。
- 在所有类别 $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}$
作者还注意到一个问题:假如大部分图片都包含“多数类”(例如狗、猫这样的常见类别),它们的熵可能也挺高,结果可能集中选取了含“狗猫”目标的图,却把那些“少数类”的图片漏掉。为了平衡各个类别(特别是少数类),文中设计了一个过程:
- 统计少数类(minority classes)
- 根据训练集中每个类别出现的次数,找出出现次数最少的一些类,记为 $C_\text{minor}$。
- 给这些少数类预留更多的标注配额(budget),保证它们不会被埋没。
- 对图像进行判定:
- 如果某张未标注图含有这些少数类(即对其中某个少数类的置信度较高),就有更大的机会被选中。
- 这里会设置一个阈值 $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$),直到少数类都满足一定量后再停止该过程。
- 最终补足:
- 如果还没用完总的标注预算 b,就从剩余图像中继续按熵高低顺序往下补齐。
这样做的好处是:
- 既能保证整体上挑选熵高、不确定性大的图片
- 又会对那些包含少数类的图片开“绿色通道”,平衡类别分布,提升“类别间的多样性”
6. Diverse Prototype 算法流程概括

大体上看,Algorithm 2 做了两件事:
- 先做 ENMS 得到每张图的熵 $\mathrm{E}i$;再算出它们在每个类别上的原型 $\mathrm{proto}{c,i}$。
- 对未标注图按熵从大到小排序,并依次进行判断:
- 若该图和已选集 $\Delta S$ 在类别特征上相似度过高($M_g(I_i, [C])>T_\text{intra})$,则跳过。
- 否则检查它是否包含少数类($M_p(I_i, C_\text{minor})>T_\text{inter}$),如果是,就选进来并更新相关配额;
- 如果不是(或少数类配额已经用完),则可以从熵排序里继续往下看,最后把剩余预算填满。
简而言之,“既要在同类里不相似(提高跨图像多样性),也要对少数类做特殊照顾(提高类别平衡)”。
7. 总结
- 为何需要 DivProto?
- 仅靠熵选图,会出现跨图像冗余、忽视少数类的问题。
- 主要策略:
- Prototype:把每张图在每个类别上的“高熵实例特征”累加,得到一个原型向量,用来度量跨图像的相似度。
- Intra‐class diversity:对“太像已选图片”的候选图加以拒绝,避免相同类别的重复信息。
- Inter‐class balancing:给少数类更多选取机会,以保证类别分布的均衡。
- 好处:
- 最终选出的图集既多样,又兼顾罕见类别,让主动学习的效率更高、覆盖面更广。
用更直白的话说,这一节主要就是为了在“所有未标注图”中选择一个高质量、兼顾多类的子集:
- 先排除那些跟已选图“太雷同”的,
- 优先包含某些少数类,
- 最后保证总体选到的图都“信息量大、差异性好”。