0%

Towards Open World Object Detection 简述

Towards Open World Object Detection 简述

OWOD定义

Towards Open World Object Detection (CVPR 2021 Oral) 提出了一个新的领域:开放世界目标检测(OWOD),该任务具体来说如下: 1. 测试集图像中可能包含来自未知类别的目标,需要把这些目标分类为unknown 2. 当某些未知类别的目标变得已知后,模型可以逐渐学习到这些类别

在某个时间,考虑已知类别集合,和未知类别集合,有数据集标记了已知类别,分别表示图像和标注。

OWOD设计了一个模型,该模型可以检测所有遇到过的已知类别,同时还能将未标注的未知类别识别为unknown,然后将一组包含未知类别的实例集合发给一个人类,人类再从实例集合中挑选出几个新的类,并向模型提供下一个时间的训练集。需要注意的是,模型无需从头开始训练。

ORE: Open World Object Detector

针对OWOD的要求: 1. 模型能够在无监督的情况下识别未知实例 2. 当未知实例变得已知后,模型无需从头开始训练

作者提出了ORE模型。ORE基于Faster-RCNN,在其上作出了如下改进: 1. 对比聚类 强迫同一类的实例特征更接近,不同类的实例特征差距更大 2. 自动标注潜在的未知类 基于RPN,挑选topk个背景区域的候选框 3. 基于能量的未知类矫正 设计能量函数来计算每个预测框的能量,之后拟合出已知类和未知类的能量分布,对于每个预测框,计算其在能量分布中的已知和未知概率,从而进一步挑选未知类 4. 缓解遗忘问题 通过回放实现

下面将详细介绍这几个改进方法。

对比聚类 CC

要将已知类别和未知类别区分开,一种显而易见的方法是,让已知类别的目标和未知类别的目标具有截然不同的特征。为此作者设计了如下损失 其中表示某种距离函数,表示不同类别目标的接近度(越大,不同类别的目标就需要达到更大的距离才能让损失最小)。

表示第类目标的原型矢量,其由该类目标的所有特征计算而来。具体来说,每一个类别维护一个定长队列,训练过程中每类目标的特征会被放入队列中。在进行若干次迭代后,会被第一次确定,此时即为队列中所有特征的均值;在之后每进行若干次迭代后,会以动量的形式更新,具体来说,计算当前队列中所有特征的均值,之后以的形式更新。

作者将对比聚类损失的计算放在cls head和reg head的最后一层特征层,与cls loss、reg loss一起计算损失。

自动标注潜在的未知类 ALU

实际使用中,我们不可能提前在训练集中标注未知类别的目标,作为替代,作者希望在训练过程中找出潜在的未知类。

作者提出了一种简单的方法,即在RPN中具有高分数,但不与任一真值框重叠的候选框中,挑选分数最大的topk个候选框作为潜在的未知类别。

个人认为作者这样做的依据是:Faster-RCNN的第一阶段学习到了一种区分前景和背景的总体方法,该方法不是区分某个特定类别的,而是提取到了所有前景目标的固定特征;而在第二阶段中,不是所有前景目标都属于某个类别,可能存在未知的类别。通过将这些不属于任一已知类别的前景目标挑选出来,就可以得到未知类别的目标。

基于能量的未知类矫正 EBUI

这一部分推理我看的比较懵,用了什么自由能公式和Gibbs分布,不过最终得到的结果是,设计了一个能量函数来衡量某个预测框的能量,该函数使得已知类的能量比未知类的能量低。

具体来说,函数表示如下 其中表示特征通过分类头得到的在第类上的logit,表示温度。通过该函数,logit集中在某一类别的预测框的能量更低,分散在不同类别的预测框的能量更高。

在训练结束后,模型可以得到若干个已知类和若干个潜在未知类的预测框,通过计算这些预测框的能量,就可以得到一个分布直方图(如下图柱状部分所示)。作者认为这样的分布比较适合用韦伯分布表示,进而可以在已知类和未知类的能量分布上拟合韦伯分布,用分别表示已知和未知类上分布的概率密度函数。

之后对于每个已知类的预测框,如果其,就将其修正为未知。

个人认为作者这样做的依据是:一些研究发现许多未知类别的目标同样具有很高的置信度,这使得单个类别的置信度不能作为判断目标是否未知的有力依据。于是作者通过预测框在所有类别上置信度的分布来计算能量,再拟合出之前挑选出的未知类别目标和已知类别目标能量的概率分布,进而通过比较每个样本在已知和未知上的概率来区分。

缓解遗忘

作者使用重放的方法,具体来说,对于每个出现过的类别,仅保留其若干个实例,在之后的训练过程中加入这些实例即可,无需加入原先完整的数据集。