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 Detector:YOLO-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 可以作为解决现实世界开放词汇检测的新基准。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/398473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新书速览|Django+Vue系统架构设计与实现

一线资深架构师 凝聚近十年大型系统开发经验与心得 倾力打造 从程序员进阶为架构师必读 本书特色: 以Django 4和Vue.js 3为主要框架,阐述其在大型网站系统开发中的技术要点。 详细介绍大型网站前后端架构设计与实现技术,包括高并发、分布…

Java集合框架-1

目录 List集合 常见方法 迭代器(Iterator) List集合特有方法 List 的特点 创建 List 遍历List Java集合框架是Java编程语言提供的各种数据结构和算法的实现。它提供了不同类型的集合类,如列表(List)、集(Set)、映射(Map)等&#xff0c…

使用 Next.js 构建简单后端接口及数据库数据请求

前言 本文主要为大家介绍,如何使用 Next 框架实现一个简单的后端接口,并且从数据库中请求数据返回给前端。 实现 创建api/getData文件夹 项目创建完成后在 app 文件下新建api文件夹,在 api 文件夹下新建 getData 文件夹,在 ge…

工业信息安全的神秘武器——德迅卫士(主机安全)

前言: 服务器作为承载公司业务及内部运转的底层平台,其稳定、安全地运行是公司的正常发展的前提保障。由于主机上运行着各种各样的业务,会存在着各类漏洞及安全问题。攻击者以此为目标,通过对服务器的攻击来获利,给公司…

wpf grid 列之间存在间隙

上图为grid的两列布局&#xff0c;中间的白线实际为两列的间隙&#xff0c;BorderThickness"0" 并不能消除 解决方法&#xff1a; <Grid RenderOptions.EdgeMode"Aliased"> # 在grid上添加属性

基于微信小程序的比赛赛程管理系统设计与实现

在全面健身的倡导下通过各级赛事的举办完成体育人才的选拔&#xff0c;当由于缺乏信息化的管理手段而只能通过人工完成比赛报名、赛程制定及成绩记录等流程的管理&#xff0c;因此常常因意外而导致比赛赛程管理不善、成绩不理想等问题出现。为了帮助比赛组织者优化赛程管理流程…

有趣的 Streamlit

先看一则新闻&#xff1a;「Snowflake」以8亿美元收购「Streamlit」&#xff0c;以帮助客户构建基于数据的应用程序 Streamlit 是什么&#xff1f;去年过年前好好研究学习了一番&#xff0c;的确是个很有意思的面向数据开发者的工具&#xff0c;让不懂前端&#xff0c;只懂一点…

雷池社区版WAF:开源护网,共筑网络安全长城

雷池社区版WAF&#xff08;Web Application Firewall&#xff09;是一款开源的网络应用防火墙&#xff0c;旨在为网站和网络应用提供安全防护&#xff0c;以抵御各种网络攻击&#xff0c;如SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、文件包含、以及其他常见的安全威胁…

攻防世界-web-Training-WWW-Robots

题目信息 In this little training challenge, you are going to learn about the Robots_exclusion_standard. The robots.txt file is used by web crawlers to check if they are allowed to crawl and index your website or only parts of it. Sometimes these files rev…

搭建SVN服务端和客户端

参考博客&#xff1a; https://zhuanlan.zhihu.com/p/428552058 先下载这两个文件&#xff1a; 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_1v_jKm3h7ZDSYEsgYyovA?pwd11ku 提取码&#xff1a;11ku –来自百度网盘超级会员V5的分享 第一个压缩包里有客户端…

【Spring】三级缓存

目录标题 触发所有未加载的实例a - 开始getBean&#xff08; doGetBean&#xff09; - 获取单例beangetSingleton() - 获取单例beancreateBean&#xff08;doCreateBean&#xff09; - 创建beancreateBeanInstance - 创建并返回beanaddSingletonFactory -放三级缓存populateBea…

CVE-2024-24565 CrateDB数据库任意文件读取漏洞

目录 前言 简介 ​编辑 环境搭建 漏洞复现 前言 本次介绍的漏洞不同与以往&#xff0c; 本次洞更多是适用于利用数据库提权。 利用数据库的导入导出数据的功能&#xff0c;我们往往可以将内部的一些敏感文件如/etc/passwd导入到数据库进行查看。也可以将数据导入到一些特…

Android 基础技术——Framework

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 Framework 简述 Android 系统启动流程 当按电源键触发开机&#xff0c;首先会从 ROM 中预定义的地方加载引导程序 BootLoader 到 RAM 中&#xff0c;并执行 BootLoader 程序启动 Linux Kernel&…

见微知著:数据可视化助力数字化时代决策智慧

在数字化时代的浪潮中&#xff0c;数据可视化显然是推动数字化进程不可或缺的利器。通过将复杂的数据转化为直观的图形和图表&#xff0c;数据可视化为企业和组织提供了更清晰、更有效的方式来理解和应用大量的数字信息。下面我就以可视化从业者的角度&#xff0c;来简单聊聊这…

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

一、前言 之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置&#xff08;读取时自动解密&#xff09;&#xff0c;对Spring Boot项目的属性读取时进行加解密&#xff0c;但是没有说明对System.setProperty(key, value)设…

高性能三防平板有哪几款推荐的|亿道三防onerugged

我非常荣幸地向大家推荐几款高性能的三防平板电脑&#xff0c;这些产品都来自亿道三防onerugged系列。它们以其卓越的性能和出色的工艺设计&#xff0c;成为行业中备受瞩目的产品。 首先&#xff0c;让我们关注这些高性能三防平板所搭载的处理器。这些产品采用了基于Intel Cor…

opencv之cvScalar

CV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0), double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0)) { CvScalar scalar; scalar.val[0] val0; scalar.val[1] val1; scalar.val[2] val2; scalar.val[3] val3; return scalar; } 该函数的…

【ArcGIS微课1000例】0104:二位面状数据转三维多面体(建筑物按高度拉伸)

文章目录 一、加载数据二、添加高度字段三、三维拉伸显示四、生成三维体数据五、注意事项一、加载数据 打开ArcScene,加载配套实验数据(0104.rar中的二维建筑物矢量数据,订阅专栏,获取专栏所有文章阅读权限及配套数据),如下图所示: 二、添加高度字段 本实验将二维数据…

k8s除了可以直接运行docker镜像之外,还可以运行什么? springboot项目打包成的压缩包可以直接运行在docker容器中吗?

Kubernetes&#xff08;k8s&#xff09;主要设计用于自动部署、扩展和管理容器化应用程序。虽然它与Docker容器最为密切相关&#xff0c;Kubernetes实际上是与容器运行时技术无关的&#xff0c;这意味着它不仅仅能够管理Docker容器。Kubernetes支持多种容器运行时&#xff0c;包…

潇洒郎:2024 IDEA、Pycharm获取最新激活码获取方式

IDEA获取最新激活码 https://idea.javatiku.cn/ 手机打开&#xff0c;看到验证码&#xff0c;30分钟有效&#xff0c;输入验证码 获取到最新激活码