DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024
论文分析了现有的新类别发现和定位(
NCDL
)方法并确定了核心问题:目标检测器往往偏向已知的目标,忽略未知的目标。为了解决这个问题,论文提出了去偏差区域挖掘(DRM
)方法,以互补的方式结合类无关RPN
和类感知RPN
进行目标定位,利用未标记数据的半监督对比学习来改进表征网络,以及采用简单高效的mini-batch K-means
聚类方法来进行新类发现来源:晓飞的算法工程笔记 公众号
论文: Debiased Novel Category Discovering and Localization
Introduction
现有的对象检测方法是在固定类别的封闭数据集上进行训练的和评估的,而在现实场景中,对象检测器需要面对已知对象和潜在未知对象。在训练后,模型就不会识别出训练期间没有看到的任何物体,要么将未知对象视为背景,要么将其错误分类为已知类别。相比之下,人类有感知、发现和识别未知新物体的能力。因此,新类别发现(Novel Category Discovery
,NCD
)问题引起了人们的广泛关注,在检测已知对象的同时还要无监督地发现新类别。
大多数NCD
方法都先对标记数据集进行预训练步骤,然后对未标记数据进行处理。虽然有效,但大多数方法仅利用已知的对象和类别进行预训练和定位,这会引入两种偏差。首先是使用封闭集训练的检测头引入的有偏差的特征表达,其次是仅在标记的封闭集上训练RPN
导致的定位偏差。
为了解决上述问题,论文提出了去偏差NCD
方法来减轻特征表达和对象定位中的偏差:
- 引入半监督对比学习方法使模型能够学习相似实例的相似特征,在将未知类对象与已知类对象区分开。
- 提出双
RPN
策略来同时检测图像中的目标对象。一个RPN
具有类感知能力,旨在获取已知类的准确定位信息。另一个RPN
则与类别无关,旨在定位未标记的目标对象。
论文的贡献可以总结如下:
- 重新审视开放世界中新类别发现的问题,研究现有方法中的偏差问题。
- 使用双对象检测器来获得良好的区域提案,可以有效地找到图像中的所有目标对象并更好地定位。
- 设计一种半监督实例级对比学习方法以获得比以前更好的特征表达,使模型依赖于无标记的图像信息来学习图像特征。
- 通过大量的实验的结果,表明论文的方法优于其他基线方法。
Framework Details
Overview
整体结构如图 2 所示:
- 通过半监督对比学习优化特征提取器,学习更通用的特征表达。
- 通过双
RPN
模块生成不同的框,再使用ROI pooling
来池化特征用作最终提案输入。 - 通过聚类将具有相似特征的实例被分在一起,从而可以发现不同的未知类别。
Debiased Region Mining
在实际任务中,论文观察到RPN
的两种场景:
- 当遇到未注释的图像时,模型倾向于将它们分类为背景而不定位任何对象。
- 当模型识别未知物体时,它会错误地将其分类为高置信度的已知物体。
在Faster R-CNN
中,目标定位器为上游任务的分类头,提取模型感兴趣的已知类。这导致偏向于识别已知目标,严重影响模型的通用性。
在图 3 中,展示了三种不同的RPN
的定位表现:
- 第一种为类感知
RPN
:此类提案对VOC
中的已知对象表现出更高的置信度,从而提高了提案质量。然而,置信度一般的提案往往是聚拢的,通常只包含目标对象的一部分。因此,检测到的对象的泛化能力有限。 - 第二种为类不可知
RPN
:通过删除分类头并仅在网络学习objectness
来生成提案。尽管与基线相比,提案泛化有所增强,但定位VOC
类别的准确性仍未达到最佳水平,并且许多提案仍然表现出聚拢现象。 - 第三种为论文提出的合并方法:通过从两个框中选择可靠的框,对每个框的置信度进行缩放后通过
NMS
统一提案。该方法显着提高了提案的质量,能够在不影响已知VOC
类别准确性的情况下提取更多目标对象。此外,它有效地解决了提案聚拢问题。
论文认为,现实场景中的NCDL
问题应该与开放世界中的对象检测场景更加一致,对象提取器不应受到分类头的限制。因此,论文在Faster-RCNN
中额外引入类无关的RPN
,可以生成更通用的对象分数并检索更多对象。该RPN
将与类相关的损失替换为与类无关的损失,仅通过以下方式估计提案的objectness
:
- 在
RPN
中使用centerness
回归而不是分类损失。 - 在
ROI
头中使用IoU
回归而不是的分类损失。
对不同RPN
获得的两组框进行可靠性分析,发现两组框在置信区间上的分布不同,表明各有不同优缺点。因此,论文提出了Debiased Region Mining
(DRM
)的方法,通过类感知RPN
和类无关RPN
获得两组不同的框。类感知RPN
获得的框在已知类上具有较高的准确率,但泛化性较差,在未知类上表现不佳。另一方面,由类无关的RPN
获得的框在已知类上的表现可能不如前者,但对未知类有更强的泛化能力。将这两组框结合起来,就能得到一套结合了两者优点的新框合集。
假设两组框及其置信度分数表示为 \(\lambda_{1}\) 和 $\lambda_{2} $,分别服从两个不同的分布 \(\Phi_{1}\) 和 \(\Phi_{2}\),需要将这两个分布映射到统一的 \({\Phi}\) 以去除不同框生成方法之间的差距。为了保留置信度较高的框并过滤掉置信度非常低的框,设置阈值 \(\alpha\_i,\beta\_i(i=1,2)\) 来过滤置信度。过滤后合并两组框,使用NMS
合并冗余框以获得融合后的结果。
Semi-supervised Contrastive Finetuning
在得到框后,采用实例级半监督对比学习方法来提取更通用和更具表现力的特征。
首先,根据GT
框将VOC
数据集中的图像裁剪成图像块,构成标记集 \(B_{\mathcal{L}}\)。随后,在__COCO
__验证集上生成提案并裁剪出图像块,构成未标记集 \(B_{\mathcal{U}}\)。之后,通过随机增强给每个图像块 \(\mathbf{x}\) 生成两个不同的视图 \(\mathbf{x}^{\prime}\),无监督对比损失计算为:
\mathcal{L}_{i}^{u}=-\left|\mathrm{log}\frac{\mathrm{exp}(\mathbf{z}_{i}\cdot\mathbf{z}_{i}^{\prime}/\tau)}{\sum_{n}\,1_{n\ne i\;\mathrm{exp}(\mathbf{z}_{i}\cdot\mathbf{z}\_{n}/\tau)}}\right|
\quad\quad(1)
\]
其中 \(\mathbf{z},\mathbf{z}^{\prime}\) 是对应的特征,\(\tau\) 是温度超参数。
对于有标签的图像块,可以利用标签来形成有监督对比损失:
{\mathcal{L}}_{i}^{s}=-{\frac{1}{|{\mathcal{N}}(i)|}}\sum_{q\in{\mathcal{N}}(i)}\frac{\exp(\mathbf{z}_{i}\cdot\mathbf{z}_{q}/\tau)}{\sum_{n}\,1_{n\neq i}\exp(\mathbf{z}_{i}\cdot\mathbf{z}_{n}/\tau)},
\quad\quad(2)
\]
其中 \(\mathcal{N}(i)\) 表示与 \(\mathbf{x}\_{i}\) 具有相同标签的索引。
最后,总损失构造如下:
\mathcal{L}^{t}=(1-\lambda)\sum_{i\in B}\mathcal{L}_{i}^{u}+\lambda\sum_{i\in B_\mathcal{L}}\mathcal{L}\_{i}^{s}.
\quad\quad(3)
\]
该损失将用于监督特征提取器的训练。
Clustering
在完成对未知类别对象的对比学习后,模型对获得的信息进行聚类分析,将具有相似特征的未知图像聚合成簇。
使用类似于K-means
的方法进行聚类,进行了两个修改:
- 采用
over-clustering
策略,通过强制生成另一个更细粒度的未标记数据分区并增加K
(估计的聚类数)来提高聚类纯度和特征质量。over-clustering
有利于减少监督的介入,允许神经网络决定如何划分数据。在存在噪声数据或中间类被随机分配给相邻类别时,这种切分是有效的。 - 在新类别发现任务中使用
K-means
非常耗时,采用Mini-batch K-means
(大规模数据中K-means
的优化算法)代替。在训练过程中随机采样数据子集来减少训练计算耗时,同时优化目标函数。
聚类算法的主要步骤如下:
- 提取训练数据的子集,并使用
K-means
构建K
个聚类中心。 - 从训练集中提取样本数据并添加到模型中,将其分配给最近的聚类中心。
- 更新每个簇的簇中心。
- 重复步骤2和3,直到聚类中心稳定或达到最大迭代次数。
Experiments
如果本文对你有帮助,麻烦点个赞或在看呗~undefined更多内容请关注 微信公众号【晓飞的算法工程笔记】
DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024的更多相关文章
- selenium中webdriver跳转新页面后定位置新页面的两种方式
刚刚在写Python爬虫的时候用到了selenium , 在跳转新页面时发现无法定位新页面 , 查找不到新页面的元素 一番查询后得到了解决方法 , 便记录下来备忘 , 也与大家分享 # 页面跳转代码. ...
- ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug
ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug 近日发现eWebEditor V2.8 asp 版本上传文件文件名不能包含中文双引号,发现eWebEditor使用ASP“无惧上 ...
- 有意思的RTL函数RegisterClass(在持久化中,你生成的一个新类的对象,系统并不知道他是如何来的,因此需要你注册)good
例子1:Delphi中使用纯正的面向对象方法(这个例子最直接) Delphi的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常 ...
- 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)
面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...
- Python 内编写类的各种技巧和方法
Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...
- 分析苹果代充产业链 汇率差+退款造就三线城市千万富翁_中新游戏研究_Joynews中新游戏
分析苹果代充产业链 汇率差+退款造就三线城市千万富翁_中新游戏研究_Joynews中新游戏 CNG:近日有媒体曝出8月22日这一天,有一家淘宝店卖出了351张面值4000南非南特的App Store ...
- Python中编写类的各种技巧和方法
简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...
- PHP 类与对象 全解析方法
1.类与对象 对象:实际存在该类事物中每个实物的个体.$a =new User(); 实例化后的$a 引用�php的别名,两个不同的变量名字指向相同的内容 封装: 把对象的属性和方法组织在一个类(逻辑 ...
- moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...
- 类(静态)变量和类(静态)static方法以及main方法、代码块,final方法的使用,单例设计模式
类的加载:时间 1.创建对象实例(new 一个新对象时) 2.创建子类对象实例,父类也会被加载 3.使用类的静态成员时(静态属性,静态方法) 一.static 静态变量:类变量,静态属性(会被该类的所 ...
随机推荐
- __int1024!
使用说明: 数据范围约为\(-2^{1024}\le N \le2^{1024}\),反映到十进制约为\(-10^{309}\le N \le10^{309}\),但不保证完全如此. 输入输出使用自带 ...
- 报错 ERR !npicode ELIFECYCLE dev: wue-cli-service serve
在系统变量 Path 里面加上:%SystemRoot%\system32,关掉终端,重新启动项目.
- Playbook条件语句
目录 Playbook条件语句 1. when的基本使用 1.1 when的基本示例 1.2比较运算符 1.3 比较运算符示例 1.4 逻辑运算符 1.5 逻辑运算符示例 2. 条件判断与block ...
- 交通规划四阶段法:基于 Python 的交通分布预测算法复现 - 附完整代码链接
目录 交通规划四阶段法:基于 Python 的交通分布预测算法复现 - 附完整代码链接 我只是想使用这些代码 下载代码文件 代码的使用方法 合作 部分代码内容的展示 交通规划四阶段法:基于 Pytho ...
- Nuxt3 的生命周期和钩子函数(五)
title: Nuxt3 的生命周期和钩子函数(五) date: 2024/6/29 updated: 2024/6/29 author: cmdragon excerpt: 摘要:本文详细介绍了Nu ...
- 详解Web应用安全系列(6)安全配置错误
Web攻击中的安全配置错误漏洞是一个重要的安全问题,它涉及到对应用程序.框架.应用程序服务器.Web服务器.数据库服务器等组件的安全配置不当.这类漏洞往往由于配置过程中的疏忽或错误,使得攻击者能够未经 ...
- 严格根号带修 RMQ
其实很简单,把之前随机数据的解法中维护块内数据的数据结构换成约束 RMQ,这样子复杂度 严格 单点修改 \(O(\sqrt n)\),区间查询 \(O(1)\),线性空间. 唯一的问题是常数太大了,有 ...
- 记一次 .NET某酒业业务系统 崩溃分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序每次关闭时就会自动崩溃,一直找不到原因让我帮忙看一下怎么回事,这位朋友应该是第二次找我了,分析了下 dump 还是挺经典的,拿出来给大家分享一下 ...
- 基于JQ使用原生js构造一个自动回复随机消息的机器人
某些业务会使用到页面里存在一个机器人,类似于假客服一样,可以回复游客的问题. 那么如何自己写一个自动回复消息的机器人呢? 源码献上 /** * 基于jq的自动对话机器人 * @param {Objec ...
- 什么情况下会使用array.reduce函数
当业务需要从一个数组里求出某项的和的时候. 1.for遍历 var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] var resulte = 0; for (let inde ...