不同于以往在固定数据集上测试性能,论文提出了一个更符合实际的全新检测场景Open World Object Detection,需要同时识别出未知类别和已知类别,并不断地进行增量学习。论文还给出了ORE解决方案,通过对比聚类和基于能量的分类器来进行开放开放世界的检测训练undefined undefined来源:晓飞的算法工程笔记 公众号
论文: Towards Open World Object Detection
常见的目标检测算法都针对特定的数据集进行训练,学习固定数量的类别,用于特定的场景。而论文则讨论一个更现实的场景,开放世界目标检测(Open World Object Detection)。在这个场景中,算法需要解决非目标误识别问题以及具备增量学习的能力。
将检测模型应用到开放世界中,除了识别指定类别的目标,还要将非目标类别区别为Unknow,称为Open Set Learning,这需要很强的泛化能力。而Open World Object Detection场景的要求会比Open Set Learning更进一步,当Unknow样本足够时,可随时将Unknow样本打上标签加入到目标类别中,即增量学习。这样的场景设定更为现实,更有助于算法落地,比如机器人、自动驾驶以及监控等需要在运行中不断进行优化的应用。
论文的主要贡献如下:
首先定义Open World Object Detection的环境,在$t$时刻,已知的目标类别为$\mathcal{K}^t={1,2,\cdots,C} \subset{\mathbb{N}^{+}}$,其中$\mathbb{N}^{+}$为所有正整数,未知的类别为$\mathcal{U}={C+1,\cdots}$。$\mathcal{K}$的训练集为$\mathcal{D}^t={X^t,Y^t}$,$X={I_1,\cdots,I_M}$和$Y={Y_1,\cdots,Y_M}$分别为图片和标注信息,其中每张图片的$Y_i={y_1,y_2,\cdots,y_K}$包含了多个目标实例,每个实例都有其标签和位置信息。
在Open World Object Detection的设定中,模型$MC$用于检测所有的$C$个已知类别,同时可以将为未知的目标标记为未知(0),未知的实例集合$U_t$经过专人筛选后得出$n$个样本足够的新类别,然后通过增量学习地获取模型$M{C+n}$,已知类别更新为$\mathcal{K}_{t+1}=\mathcal{K}_t+{C+1,\cdots,C+n}$。不停地循环执行上述的步骤,模型就可以不停地迭代其类别。
Open World Object Detection的关键在于能够无监督地识别未知类别,以及加入新类别时不会遗忘先前的类别。为了解决上述问题,论文提出了ORE解决方案。
图2为ORE的高层抽象,以两阶段检测器Faster R-CNN作为基础检测器。在第一阶段,检测器可通过类不可知的RPN给出可能存在物体的所有区域,而在第二阶段,将上述的每个区域进行分类和位置调整。为了更好的适应Open World Object Detection,ORE对RPN和分类器都进行了相应的改进,适应自动打标签和识别未知类的需求。
将Open World中区分未知类问题转化为对比聚类问题是个不错的选择,在特征空间上进行类别分割,同类别的实例会尽量的靠近,而不相似的类别则会尽量的远离。对于每个已知类$i \in \mathcal{K}^t$,维护一个原型向量$p_i$,假设$f_c\in \mathbb{R}^d$为类别$c$的中间层特征,对应图2的ROI Head中的蓝色2048维特征,定义对比损失为:
$\mathcal{D}$为距离函数,$\Delta$为相似阈值,不同类别实例间的距离要大于该阈值。在训练时,通过最小化对比损失来保证特征空间上的类别分割。需要注意的是,对比聚类的关键步骤是维护各类别的原型向量集合$\mathcal{P}={p0,\cdots,p_C}$,一般取该类别的特征向量的均值。但由于整个网络是端到端训练的,特征向量也在不断地变化,原型向量也会跟着不断变化。为了适应这个特性,ORE为每个类维护了一个固定大小的特征队列$\mathcal{F}{store}={q_0,\cdots,q_C}$,用来存储最新的特征向量。
对比损失的计算过程如算法1所示,为了保证原型向量有相对的准确性,仅当超过一定迭代次数$I_b$之后才开始计算损失值,之后每$I_b*n$次迭代就以动量的形式更新一次原型向量。这样可以避免原型向量变化过大的问题,得到的损失值添加到检测损失值中进行端到端的学习。
在对比聚类中,未知类别也有其对应的原型向量$p_0$,按正常的流程,需要对图片中的所有未知类别进行标注,以便归类特征,显然这是不现实的。所以论文采用RPN的预测框输出作为一个未知目标标注的折衷选择,将预测框中objectness分数高且与GT无重叠的top-K部分直接归类为未知目标,将其特征加入到未知列表的特征队列$q_0$中。
由于Opern World Detection场景包含未知类别的特性,传统的softmax分类器可能会给出不可控的结果,所以论文采用了基于能量的分类器(EBM),能够学习输入特征与标签之间的匹配程度,用来识别未知目标。给定特征$f \in F$与标签$l\in L$,学习一个能量函数$E(F,L)$,能够通过$E(f):\mathbb{R}^d\to\mathbb{R}$得到一个能用于描述特征与标签之间的匹配程度的标量(即能量)。这里,论文采用了Helmholtz free energy公式计算所有标签的结果之和:
$T$是温度参数。通过Gibbs分布,可以将各标签的能量转化成类似softmax那样的效果:
$p(l|f)$为标签$l$的概率密度函数,$g_l(f)$为分类头$g(\cdot)$的第$l^{th}$个分类单元。根据公式3的对应关系,论文得到了用于分类模型的free energy公式:
由于ORE用了对比聚类对特征进行分割,已知类别的能量值和未知类别的能量值也有明显的差别。对已知类别和未知类别的能量值分布进行shifted Weibull distributions建模,得到$\xi{kn}(f)$和$\xi{unk}(f)$,如图3所示。当$\xi{kn}(f) < \xi{unk}(f)$时,可认为该目标属于未知类别。
在对识别出来的未知目标进行标注后,得到了新的数据集,如果将所有数据集混合重新训练会很耗时且不够灵活,所以只能使用新数据集进行增量学习,这就需要解决新类别训练对旧类别识别效果的影响。
论文参照了增量学习的SOTA方法,使用简单的样本回放策略来保证旧类别的效果,先构造一个小的样本集(exemplar set),包含每个类别的$N_{ex}$个样本,每次使用全量新数据集进行增量学习后,都使用小样本集进行一次finetune训练,这样就能很好地保证旧类别的效果而且不耗时。
由于是一个全新的任务场景,论文也对实验进行了一些描述。
将所有类别分成多个任务$\mathcal{T}={T1, \cdots, T_t, \cdots}$,具体的类别来源如表1所示。在特定的时间$t$将特定的任务$T_t$投放到场景中,类别${T{\tau}: \tau < t}$作为已知类别,而类别${T_{\tau}: \tau > t}$则作为未知类别。
由于未知目标容易识别成已知类别,使用Wilderness Impact(WI)指标来衡量这种表现:
$P{\mathcal{K}}$为在已知类别的验证集上的准确率,$P{\mathcal{K}\cup \mathcal{U}}$为在已知类别和未知类别的验证集上的准确率,上述的准确率都是在0.8召回率下对应的值。理想情况下,WI的值越小越好,表明未知类别对准确率的干扰很少。此外,还使用Absolute Open-Set Error(A-OSE)来表示未知类别识别成已知类别的绝对数量,再加上目标检测常用的map指标。
上述是一个主要的实验结果,论文还有很多对比实验,有兴趣的可以去看看。
不同于以往在固定数据集上测试性能,论文提出了一个更符合实际的全新检测场景Open World Object Detection,需要同时识别出未知类别和已知类别,并不断地进行增量学习。论文还给出了ORE解决方案,通过对比聚类和基于能量的分类器来进行开放开放世界的检测训练。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。