YOLO-World:实时开放词汇目标检测

paper:https://arxiv.org/pdf/2401.17270.pdf

Github:GitHub - AILab-CVC/YOLO-World: Real-Time Open-Vocabulary Object Detection

online demo:https://huggingface.co/spaces/stevengrove/YOLO-World 


目录

0. 摘要

1. 引言

2. 相关工作

2.1. 传统目标检测

2.2. 开放词汇目标检测

3. 方法

 3.1. 预训练范式:区域-文本对

3.2. 模型架构

3.3. 重参数化视觉-语言 PAN

3.4. 预训练方案

4. 实验

5. 结论


0. 摘要

        YOLO系列检测器以其高效、实用而著称。不过,其需要预定义目标类别,这大大限制了其在开放场景的适用性。为了解决这个问题,我们提出了YOLO-World——一个创新的、通过视觉-语言建模和大规模数据预训练的方法,其强化了YOLO开放词汇检测能力。具体的,提出了一个新的可重参数化的视觉-语言路径聚合网络(RepVL-PAN),以及一个能够促进视觉和语言信息之间交互的区域-文本对比损失。提出的方法能够以零样本方式,在宽范围目标检测方面表现优异,且十分高效。在LVIS挑战赛数据集上,YOLO-World使用V100可达到35.4 AP、52FPS的效果,这在速度和精度上都超过了很多SOTA。此外,微调后的YOLO-World在很多下游任务(如:目标检测开放词汇实例分割)上也能达到不错的效果。

1. 引言

        目标检测是一个长期研究的基础CV任务,在诸多领域,如图像理解、机器人、自动驾驶,都有涉及。已有大量相关研究[15, 26, 40, 42]使用深度神经网络在该领域取得了突破。尽管他们都取得了成功,但都是在有限的类别(如coco里面是80个类)上进行的,一旦类别定义好且标注完毕,训练的检测器就只能检测指定的类别,这大大限制了他们在开放场景中的能力和应用。

        最近的工作 [7, 12, 49, 54]。 ] 探索了流行的视觉语言模型 [18, 36],通过从语言编码器(例如 BERT [5])中提取词汇知识来解决开放词汇检测 [54]。然而,由于训练数据缺乏、词汇多样性有限,基于蒸馏的方法的使用大大受限了。部分方法[23,29,52,53,55]将目标检测训练重新定义为区域级视觉语言预训练,并大规模训练开放词汇对象检测器。然而,这些方法在现实场景中仍然难以应用,有两个方面的原因:(1)较高的计算负担;(2)边缘设备部署的复杂性。先前的一些工作[23,29,52,53,55]已经证实了预训练大检测器的性能,而为预训练小检测器赋予开发词汇检测能力方面尚未被证实。

        本文提出了YOLO-World来进行高效开放词汇对象检测,并探索大规模预训练方案,将传统的 YOLO 检测器升级为开放词汇检测方法。与以前的方法相比,所提出的 YOLO-World 推理速度高且易于部署到下游应用程序中,非常的有效。具体来说,YOLO-World 遵循标准的 YOLO 架构 [19],并利用预训练的 CLIP [36] 文本编码器对输入文本进行编码。我们进一步提出了可重新参数化的视觉语言路径聚合网络(RepVL-PAN)来连接文本特征和图像特征以获得更好的视觉语义表示。在推理过程中,可以去掉文本编码器,并将文本嵌入重新参数化为 RepVL-PAN 的权重以实现高效部署。我们通过大规模数据集上的区域-文本对比学习进一步研究了YOLO检测器的开放词汇预训练方案,将检测数据、标注数据和图像-文本数据统一为区域-文本对。具有丰富区域-文本对的预训练 YOLO-World 在大规模词汇检测和训练更多数据方面表现出强大的能力,可以显着提高开放词汇能力。

        此外,我们探索了一种“提示然后检测”(prompt-then-detect)的范式,以进一步提高现实场景中开放词汇对象检测的效率。如图 2 所示,传统的目标检测器 [15, 19, 22, 38-40, 48] 专注于具有预定义和训练类别的固定词汇表(闭集)检测。而以前的开放词汇检测器[23,29,52,55]则使用文本编码器对用户的提示进行编码,并检测对象进行在线词汇表。不过,这些方法倾向于使用大主干的大型检测器,例如 Swin-L [31],以增加开放词汇容量。相比之下,prompt-then-detect 范式(图 2 (c))首先对用户的提示进行编码以构建离线词汇表,词汇表因不同需求而异。然后,高效的检测器可以动态推断离线词汇表,而无需重新编码提示。对于实际应用,一旦我们训练好了检测器,就可以预先编码提示或类别以构建离线词汇表,然后将其无缝集成到检测器中。

        主要贡献有以下几点:

  • 介绍了YOLO-World,其属于一种高端的开放词汇目标检测器,在实际使用中比较高效;
  • 提出了可重参数化的视觉-语言PAN,将视觉和语言特征与YOLO-World的开放词汇区域-文本对比预训练方案结合了起来;
  • 所提出的在大规模数据集上训练的 YOLO-World 表现出强大的零样本性能,并在 LVIS 上以 52.0 FPS 实现了 35.4 AP。预训练的 YOLO-World 可以轻松适应下游任务,例如开放词汇实例分割和参考对象检测。

2. 相关工作

2.1. 传统目标检测

        流行的对象检测研究集中于固定词汇表(闭集)检测,其中对象检测器在具有预定义类别的数据集上进行训练,例如COCO数据集[25]和Objects365数据集[43],然后检测固定类别集合中的对象。在过去的几十年里,传统的目标检测方法可以简单地分为三组,即基于区域的方法、基于像素的方法和基于查询的方法。基于区域的方法 [10, 11, 15, 26, 41],例如 Faster R-CNN [41],采用两阶段框架进行提案生成 [41] 和 RoI-wise(感兴趣区域)分类和回归。基于像素的方法[27,30,39,45,57]往往是一级检测器,它对预定义的锚点或像素进行分类和回归。DETR[1]首先通过transformer[46]探索目标检测,并启发了广泛的基于查询的方法[60]。在推理速度方面,Redmon等人提出了YOLOs[37-39],它利用简单的卷积架构进行实时目标检测。一些工作[9,22,32,48,51]提出了YOLO的各种架构或设计,包括路径聚合网络[28]、跨阶段部分网络[47]和重新参数化[6],进一步提高了速度和准确性。与之前的 YOLO 相比,本文中的 YOLOWorld 旨在以强大的泛化能力检测固定词汇表之外的对象。

2.2. 开放词汇目标检测

        开放词汇对象检测 (OVD) [54] 已成为现代目标检测的新趋势,旨在检测预定义类别之外的对象。早期的工作[12]通过在基类上训练检测器并评估新的(未知)类,遵循标准的OVD设置[54]。然而,这种开放词汇设置可以评估检测器检测和识别新对象的能力,对于开放场景仍然受到限制,并且由于在有限的数据集和词汇上进行训练,缺乏对其他领域的泛化能力。

        受视觉语言预训练[18,36]的启发,最近的研究[7,21,49,58,59]将开放词汇对象检测表述为图像-文本匹配,并利用大规模图像-文本数据大规模增加训练词汇。GLIP [23] 提出了一种基于短语接地的开放词汇检测预训练框架,并在零样本设置中进行评估。接地DINO[29]将接地的预训练[23]合并到具有跨模态融合的检测transformer[56]中。

        几种方法[24,52,53,55]通过区域-文本匹配和大规模图像-文本对的预训练检测器统一检测数据集和图像-文本数据集,取得了良好的性能和泛化能力。然而,这些方法通常使用 ATSS [57] 或 DINO [56] 等重检测器和 Swin-L [31] 作为主干,导致高计算需求和部署挑战。相比之下,我们提出了 YOLO-World,旨在通过实时推理和更容易的下游应用程序部署进行有效的开放词汇对象检测。我们的方法与 ZSD-YOLO [50] 不同,ZSD-YOLO [50] 还通过语言模型对齐探索了 YOLO开放词汇检测 [54],而YOLO-World 引入了一种新颖的 YOLO 框架,具有有效的预训练策略,提高了开放词汇性能和泛化能力。

3. 方法

 3.1. 预训练范式:区域-文本对

        传统的目标检测方法,包括YOLO系列[19],使用实例注释\Omega = \{B_i, c_i \}^{N}_{i=1},由边界框{Bi}和类别标签{ci}组成。在本文中,我们将实例注释重新表述为区域-文本对\Omega = \{B_i, t_i \}^{N}_{i=1},其中 ti 是区域 Bi 的相应文本。具体来说,文本 ti 可以是类别名称、名词短语或对象描述。此外,YOLO-World 采用图像 I 和文本 T(一组名词)作为输入并输出预测框 \{​{\widehat{B}_k}\}和对应的目标嵌入 \{e_k\}(e_k \in \mathbb{R}^D)

3.2. 模型架构

        所提出的 YOLO-World 的整体架构如图 3 所示,它由一个 YOLO 检测器、一个文本编码器和一个可重新参数化的视觉语言路径聚合网络 (RepVL-PAN) 组成。给定输入文本,YOLO-World 中的文本编码器将文本编码为文本嵌入。YOLO检测器中的图像编码器从输入图像中提取多尺度特征。然后我们使用 RepVL-PAN 通过利用图像特征和文本嵌入之间的跨模态融合来增强文本和图像表示。

        YOLO DetectorYOLO-World主要基于YOLOv8[19]开发,YOLOv8[19]包含一个Darknet骨干[19,40]作为图像编码器,一个用于多尺度特征金字塔的路径聚合网络(PAN),一个用于边界框回归和对象嵌入的head。

        Text Encoder:给定文本 T,我们采用 CLIP [36] 预训练的 Transformer 文本编码器来提取相应的文本嵌入W = TextEncoder(T ) \in \mathbb{R}^{C\times D},其中 C 是名词的数量,D 是嵌入维度。与纯文本语言编码器 [5] 相比,CLIP 文本编码器为将视觉对象与文本连接起来提供了更好的视觉语义能力。当输入文本是一个标题或引用表达式时,我们采用简单的 n-gram 算法来提取名词短语,然后将它们输入文本编码器。

        Text Contrastive Head:继之前的工作 [19] 之后,我们采用具有两个 3×3 convs 的解耦头来回归边界框 \{b_k \}^{K}_{k=1}和对象嵌入\{e_k \}^{K}_{k=1},其中 K 表示对象的数量。我们提出了一个文本对比头来获得对象-文本相似度s_{k,j}:

 其中 L2-Norm(·) 是 L2 归一化,w_j \in W是第 j 个文本嵌入。此外,我们添加了具有可学习比例因子α和移位因子β的仿射变换。L2 范数和仿射变换对于稳定区域文本训练都很重要。

        Training with Online Vocabulary:在训练期间,我们为每个包含 4 张图像的马赛克样本构建了一个在线词汇表 T。具体来说,我们对马赛克图像中涉及的所有正名词进行采样,并从相应的数据集中随机采样一些负名词。每个马赛克样本的词汇表最多包含 M个,M 默认设置为 80。

        Inference with Offline Vocabulary:在推理阶段,我们提出了一种带有离线词汇表的prompt-then-detect 策略,以提高效率。如图3所示,用户可以定义一系列自定义提示,可能包括标题或类别。然后,我们利用文本编码器对这些提示进行编码并获得离线词汇嵌入。离线词汇表避免了每个输入都计算一遍,并能根据需要灵活调整词汇表。

3.3. 重参数化视觉-语言 PAN

        图 4 显示了所提出的 RepVL-PAN 的结构,它遵循 [19, 28] 中的自上而下和自下而上的路径,以使用多尺度图像特征 {C3, C4, C5} 建立特征金字塔 {P3, P4, P5}。此外,我们提出了文本引导的CSPLayer (T-CSPLayer)和图像池注意(I-Pooling Attention),进一步增强了图像特征和文本特征之间的交互,提高了开放词汇能力的视觉语义表示。在推理过程中,离线词汇嵌入可以重新参数化为卷积或线性层的权重以进行部署。

        Text-guided CSPLayer:如图4所示,自顶向下或自底向上融合后利用跨阶段部分层(CSPLayer)。我们通过将文本引导合并到多尺度图像特征中来扩展[19]的CSPLayer(也称为C2f),以形成文本引导的CSPLayer。具体来说,给定文本嵌入 W 和图像特征X_l \in \mathbb{R} ^{H\times W \times D }(l\in \{3, 4, 5\}),我们在最后一个dark bottleneck块之后采用 max-sigmoid attention 将文本特征聚合为图像特征:

其中更新后的 X^{'}_{l}与跨阶段特征连接作为输出。δ 表示 sigmoid 函数。 

        Image-Pooling Attention:为了用图像感知信息增强文本嵌入,我们提出 Image-Pooling Attention来聚合图像特征以更新文本嵌入。我们没有直接在图像特征上使用交叉注意,而是利用多尺度特征上的最大池化来获得3 × 3区域,总共有27个patch tokensX\in \mathbb{R}^{24\times D}。然后文本嵌入通过以下方式更新:

3.4. 预训练方案

        在本节中,我们将介绍在大规模检测、grounding和图像文本数据集上进行YOLO-World 预训练的方案。

        Learning from Region-Text Contrastive Loss:给定马赛克样本 I 和文本 T,YOLO-World 输出 K 个对象预测 \{B_k, s_k\}^{K}_{k=1}以及注释\Omega = \{B_i, t_i \}^{N}_{i=1}。我们遵循 [19] 并利用任务对齐的标签分配 [8] 将预测与基本事实注释进行匹配,并将每个正预测与文本索引分配为分类标签。基于这个词汇表,我们通过对象-文本(区域-文本)相似性和对象-文本分配之间的交叉熵构建区域-文本对比损失 Lcon。此外,我们采用 IoU 损失和分布式焦点损失进行边界框回归,总训练损失定义为:,其中 λI 是一个指标因子,当输入图像 I 来自检测或grounding数据时设置为 1,当它来自图像文本数据时设置为 0。考虑到图像-文本数据集有噪声框,我们只计算具有精确边界框的样本的回归损失。

        Pseudo Labeling with Image-Text Data:我们提出了一种自动标记方法来生成区域-文本对,而不是直接使用图像-文本对进行预训练。具体来说,标记方法包括三个步骤:(1)提取名词短语:我们首先利用 n-gram 算法从文本中提取名词短语; (2) 伪标记:我们采用预训练的开放词汇检测器,例如 GLIP [23],为每个图像生成给定名词短语的伪框,从而提供粗略的区域-文本对。(3)过滤:我们使用预训练的 CLIP [36] 来评估图像-文本对和区域-文本对的相关性,并过滤低相关性的伪注释和图像。我们通过结合非最大抑制 (NMS) 等方法进一步过滤冗余边界框。我们建议读者参阅附录以获得详细的方法。通过上述方法,我们使用 821k 伪注释从 CC3M [44] 中采样和标记 246k 图像。

4. 实验

5. 结论

        我们提出了 YOLO-World,这是一种尖端的实时开放词汇检测器,旨在提高实际应用中的效率和开放词汇能力。在本文中,我们将流行的 YOLO 重塑为视觉语言 YOLO 架构,用于开放词汇预训练和检测,并提出了 RepVL-PAN,它将视觉和语言信息与网络连接起来,并且可以重新参数化以实现高效的部署。我们进一步提出了检测、接地和图像文本数据的有效预训练方案,使YOLOWorld具有较强的开放词汇检测能力。实验证明了 YOLO-World 在速度和开放词汇性能方面的优越性,并表明视觉语言预训练在小模型的有效性,这对未来的研究有见地。我们希望 YOLO-World 可以作为解决现实世界开放词汇检测的新基准。


http://www.niftyadmin.cn/n/5384257.html

相关文章

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-WatchDog

目录 一、 WATCHDOG 概述功能简介基本概念 二、WATCHDOG 模块相关API三、WATCHDOG HDF驱动开发3.1、开发步骤(待续...) 坚持就有收获 一、 WATCHDOG 概述 功能简介 看门狗(Watchdog),又称看门狗计时器(Watchdog timer&#xff0…

搜索中关于稀疏检索和稠密向量检索的召回效果比较

不同检索方式说明 最近在做搜索召回提升相关的研究工作。对比了稀疏检索和稠密向量检索的效果。其中使用的搜索引擎为elasticsearch8.x版本。稀疏检索包括BM25的检索方式,以及es官方在8.8之后版本提供的稀疏向量模型的方式。稠密向量检索,是指借助机器学…

Vue 使用 v-bind 动态绑定 CSS 样式

在 Vue3 中&#xff0c;可以通过 v-bind 动态绑定 CSS 样式。 语法格式&#xff1a; color: v-bind(数据); 基础使用&#xff1a; <template><h3 class"title">我是父组件</h3><button click"state !state">按钮</button&…

IDEA的版本控制Local Changes和settings按钮显示问题

经常用idea的小伙伴应该对标题的这两个功能不陌生&#xff0c;特别是Local Changes 周日刚开工&#xff0c;我的idea就过期了&#xff0c;索性就下载了一个2023.3.3版本的&#xff0c;安装好打开一看&#xff0c;发现Local Changes 和 settings的按钮消失了&#xff0c;虽然说…

新建一个flask项目

在Flask中创建一个新的项目&#xff0c;您可以遵循以下步骤&#xff1a; 确保您已经安装了Python环境。如果还未安装Flask&#xff0c;可以通过pip来安装&#xff1a; pip install flask创建一个新的文件夹作为您的项目文件夹&#xff0c;例如myflaskapp&#xff1a; mkdir …

爬虫基本库的使用(urllib库的详细解析)

学习爬虫&#xff0c;其基本的操作便是模拟浏览器向服务器发出请求&#xff0c;那么我们需要从哪个地方做起呢?请求需要我们自己构造吗? 我们需要关心请求这个数据结构怎么实现吗? 需要了解 HTTP、TCP、IP层的网络传输通信吗? 需要知道服务器如何响应以及响应的原理吗? 可…

基于Java+SpringBoot的旅游路线规划系统(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1.1 前端首页模块的实现 1.2 景点新闻 1.3 景点在线预订 1.4 酒店在线预订 1.5 管理员景点管理 1.6 管理员旅游线路管理 1.7 酒店信息管理 三、库表设计 前言 随着我国的经济的不断发展&#xff0c;现在的一些热门的景…

python在flask中的请求数据“无限流”

文章目录 一、问题描述二、解决方案 一、问题描述 在flask请求中&#xff0c;有个需求是让调用方一直调接口&#xff0c;并立马返回&#xff0c;而接口方缓存请求&#xff0c;依次执行。 二、解决方案 from flask import Flask, request, jsonify from queue import Queue i…