热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OWOD:开放世界目标检测,更贴近现实的检测场景

不同于以往在固定数据集上测试性能,论文提出了一个更符合实际的全新检测场景OpenWorldObjectDetection,需要同时识别出未知类别和已知类别,并不断地进行增量学

不同于以往在固定数据集上测试性能,论文提出了一个更符合实际的全新检测场景Open World Object Detection,需要同时识别出未知类别和已知类别,并不断地进行增量学习。论文还给出了ORE解决方案,通过对比聚类和基于能量的分类器来进行开放开放世界的检测训练

来源:晓飞的算法工程笔记 公众号

论文: Towards Open World Object Detection


  • 论文地址:https://arxiv.org/abs/2103.02603

  • 论文代码:https://github.com/JosephKJ/OWOD


Introduction

  常见的目标检测算法都针对特定的数据集进行训练,学习固定数量的类别,用于特定的场景。而论文则讨论一个更现实的场景,开放世界目标检测(Open World Object Detection)。在这个场景中,算法需要解决非目标误识别问题以及具备增量学习的能力。

  将检测模型应用到开放世界中,除了识别指定类别的目标,还要将非目标类别区别为Unknow,称为Open Set Learning,这需要很强的泛化能力。而Open World Object Detection场景的要求会比Open Set Learning更进一步,当Unknow样本足够时,可随时将Unknow样本打上标签加入到目标类别中,即增量学习。这样的场景设定更为现实,更有助于算法落地,比如机器人、自动驾驶以及监控等需要在运行中不断进行优化的应用。
  论文的主要贡献如下:


  • 定义了Open World Object Detection问题,更贴近现实生活。

  • 提出ORE算法,基于对比聚类(contrastive clustering)、可框出未知类别的检测网络(unknown-aware proposal network)、能量分类器(energy based unknown identification)来解决Open World Object Detection上的问题。

  • 设计了完备的实验,用于衡量算法在Open World Object Detection上的性能。

  • 作为论文的副产品,ORE在增量学习任务上达到了SOTA,而且还有很大的提升空间。


Open World Object Detection

  首先定义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的设定中,模型\(M_C\)用于检测所有的\(C\)个已知类别,同时可以将为未知的目标标记为未知(0),未知的实例集合\(U_t\)经过专人筛选后得出\(n\)个样本足够的新类别,然后通过增量学习地获取模型\(M_{C+n}\),已知类别更新为\(\mathcal{K}_{t+1}=\mathcal{K}_t+\{C+1,\cdots,C+n\}\)。不停地循环执行上述的步骤,模型就可以不停地迭代其类别。

ORE: Open World Object Detector

  Open World Object Detection的关键在于能够无监督地识别未知类别,以及加入新类别时不会遗忘先前的类别。为了解决上述问题,论文提出了ORE解决方案。

  图2为ORE的高层抽象,以两阶段检测器Faster R-CNN作为基础检测器。在第一阶段,检测器可通过类不可知的RPN给出可能存在物体的所有区域,而在第二阶段,将上述的每个区域进行分类和位置调整。为了更好的适应Open World Object Detection,ORE对RPN和分类器都进行了相应的改进,适应自动打标签和识别未知类的需求。

Contrastive Clustering

  将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}=\{p_0,\cdots,p_C\}\),一般取该类别的特征向量的均值。但由于整个网络是端到端训练的,特征向量也在不断地变化,原型向量也会跟着不断变化。为了适应这个特性,ORE为每个类维护了一个固定大小的特征队列\(\mathcal{F}_{store}=\{q_0,\cdots,q_C\}\),用来存储最新的特征向量。

  对比损失的计算过程如算法1所示,为了保证原型向量有相对的准确性,仅当超过一定迭代次数\(I_b\)之后才开始计算损失值,之后每\(I_b*n\)次迭代就以动量的形式更新一次原型向量。这样可以避免原型向量变化过大的问题,得到的损失值添加到检测损失值中进行端到端的学习。

Auto-labelling Unknowns with RPN

  在对比聚类中,未知类别也有其对应的原型向量\(p_0\),按正常的流程,需要对图片中的所有未知类别进行标注,以便归类特征,显然这是不现实的。所以论文采用RPN的预测框输出作为一个未知目标标注的折衷选择,将预测框中objectness分数高且与GT无重叠的top-K部分直接归类为未知目标,将其特征加入到未知列表的特征队列\(q_0\)中。

Energy Based Unknown Identifier

  由于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)\)时,可认为该目标属于未知类别。

Alleviating Forgetting

  在对识别出来的未知目标进行标注后,得到了新的数据集,如果将所有数据集混合重新训练会很耗时且不够灵活,所以只能使用新数据集进行增量学习,这就需要解决新类别训练对旧类别识别效果的影响。
  论文参照了增量学习的SOTA方法,使用简单的样本回放策略来保证旧类别的效果,先构造一个小的样本集(exemplar set),包含每个类别的\(N_{ex}\)个样本,每次使用全量新数据集进行增量学习后,都使用小样本集进行一次finetune训练,这样就能很好地保证旧类别的效果而且不耗时。

Experiment


Open World Evaluation Protocol

  由于是一个全新的任务场景,论文也对实验进行了一些描述。

Data split

  将所有类别分成多个任务\(\mathcal{T}=\{T_1, \cdots, T_t, \cdots\}\),具体的类别来源如表1所示。在特定的时间\(t\)将特定的任务\(T_t\)投放到场景中,类别\(\{T_{\tau}: \tau 作为已知类别,而类别\(\{T_{\tau}: \tau > t\}\)则作为未知类别。

Evaluation metrics

  由于未知目标容易识别成已知类别,使用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 Results

  上述是一个主要的实验结果,论文还有很多对比实验,有兴趣的可以去看看。

Conclusion

  不同于以往在固定数据集上测试性能,论文提出了一个更符合实际的全新检测场景Open World Object Detection,需要同时识别出未知类别和已知类别,并不断地进行增量学习。论文还给出了ORE解决方案,通过对比聚类和基于能量的分类器来进行开放开放世界的检测训练。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】


推荐阅读
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • steps/train_mono.sh
    定义拓扑结构、参数初始化$gmm-init-mono--shared-phones$langphonessets.int--train-feats$featssubset-fe ... [详细]
  • 集合set集合是可变的容器集合内的数据对象都是唯一的(不能重复多次的)集合是无序的存储结构,集合中的数据没有先后关系集合内的元素必须是不可 ... [详细]
author-avatar
浮夸诗人_219
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有