YOLO-World——S

news2024/11/15 11:48:51


文章目录

  • Abstract
    • 成果
  • Method
    • Pre-training Formulation: Region-Text Pairs
    • Model Architecture
      • YOLO Detector
      • Text Encoder
      • Text Contrastive Head
      • Training with Online Vocabulary
      • Inference with Offline Vocabulary
    • Re-parameterizable Vision-Language PAN
      • Text-guided CSPLayer
      • Image-Pooling Attention
    • Pre-training Schemes
      • Learning from Region-Text Contrastive Loss
      • Pseudo Labeling with Image-Text Data
  • Experiment

原文
代码

Abstract

YOLO系列检测器对预定义和训练对象类别的依赖限制了它们在开放场景中的适用性。(简单来说就是一旦对象类别被定义和标记,经过训练的检测器只能检测到那些特定的类别)为了解决这个限制,作者提出了YOLO-World——通过视觉语言建模和大规模数据集的预训练,增强了YOLO的开放词汇检测能力
具体来说,作者提出了一种新的可重参数化视觉-语言路径聚合网络(RepVL-PAN)和区域-文本对比损失,以促进视觉和语言信息之间的交互。

成果

在具有挑战性的LVIS数据集上,YOLO-World在V100上实现了35.4 AP和52.0 FPS,在精度和速度方面都优于许多最先进的方法。此外,微调YOLO-World在目标检测和开放词汇实例分割等几个下游任务上取得了显著的性能

Method

Pre-training Formulation: Region-Text Pairs

以往的目标检测方法实例注释是Ω={Bi,ci},由边界框{Bi}和类别标签{ci}组成。本文中,作者将实例注释重新表述为区域-文本对Ω= {Bi,ti},ti是区域Bi的对应文本,可以是类别名称、名词短语或对象描述。此外,YOLO-World同时采用图像I和文本T作为输入,输出预测框{bk}和对应的目标嵌入{ek} (ek∈RD)

Model Architecture


它由一个YOLO检测器、一个文本编码器和一个可重新参数化的视觉语言路径聚合网络(RepVL-PAN)组成。
文本编码器将输入文本转换为文本嵌入,图像编码器(也就是YOLO Backbone)从输入图像中提取多尺度特征,然后利用RepVL-PAN通过利用图像特征和文本嵌入之间的跨模态融合来增强文本和图像的表示,最后YOLO-World预测回归的边界框和目标嵌入,以匹配输入文本中出现的类别或名词

YOLO Detector

主要是基于YOLOv8开发的,它包含了一个Darknet骨架作为图像编码器,一个用于多尺度特征金字塔的路径聚合网络(PAN),以及一个用于边界盒回归和对象嵌入的头部

Text Encoder

给定文本T,采用CLIP预训练的Trans- former文本编码器提取相应的文本嵌入W = TextEncoder(T)∈RC×D,其中C是名词的数量,D是嵌入维度。
当输入文本为标题或引用表达式时,采用简单的n-gram算法提取名词短语,然后将其输入文本编码器。

Text Contrastive Head

作者采用解耦头部和两个3×3卷积来回归边界框{bk}Kk=1和对象嵌入{ek}K k =1,其中K表示对象的数量,提出了一个文本对比头来获得对象-文本相似度sk,j
将文本嵌入ek与分类器权重wj之间的相似度定义为它们的L2范数的乘积,并加入了具有可学习缩放因子α和移位因子β的仿射变换
(L2范数和仿射变换对于稳定区域文本训练都很重要)

Training with Online Vocabulary

在训练过程中,作者为每个包含4张图像的Mosaic样本构建一个在线词汇T。具体来说,对拼接图像中涉及的所有正面名词进行抽样,并从相应的数据集中随机抽样一些负面名词,每个Mosaic样本的词汇表最多包含M个名词,M被默认设置为80

Inference with Offline Vocabulary

在推理阶段,作者提出了一种基于离线词汇的“提示-然后检测”策略,以提高推理效率。如图3所示,用户可以定义一系列自定义提示,其中可能包括标题或类别。然后,利用文本编码器对这些提示进行编码,并获得离线词汇嵌入。离线词汇表允许避免对每个输入进行计算,并提供根据需要调整词汇表的灵活性。

Re-parameterizable Vision-Language PAN

提出的RepVL-PAN采用文本引导CSPLayer(T-CSPLayer)将语言信息注入图像特征,并采用图像池化注意力(I-Pooling Attention)增强图像感知文本嵌入

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

Text-guided CSPLayer

扩展了CSPLayer,将文本引导纳入多尺度图像特征,形成文本引导CSPLayer
具体来说,给定文本嵌入W和图像特征Xl∈RH×W×D (l∈{3,4,5}),作者采用最后一个黑瓶颈块后的max-sigmoid关注将文本特征聚合为图像特征:
Xl '与跨阶段特征连接作为输出, δ表示sigmoid函数

Image-Pooling Attention

为了利用图像感知信息增强文本嵌入,作者通过提出图像池关注聚合图像特征来更新文本嵌入
作者不是直接在图像特征上使用交叉关注,而是利用多尺度特征上的最大池化来获得3 × 3区域,从而得到总共27个tokenX ~ ∈R27×D

Pre-training Schemes

Learning from Region-Text Contrastive Loss

给定马赛克样本I和文本T,YOLO-World输出K个对象预测{ Bk,sk} Kk=1,以及注释Ω= { Bi,ti} Ni=1。遵循YOLOv8,并利用任务对齐标签分配将预测与地面真实性注释匹配,并为每个正预测分配一个文本索引作为分类标签基于这个词汇表,我们通过对象-文本(区域-文本)相似性和对象-文本分配之间的交叉熵,构建了区域-文本对的区域-文本对比损失Lcon。此外,我们采用IoU损失和分布式焦点损失进行边界盒回归,并将总训练损失定义为

λI为指示因子,当输入图像I来自检测或接地数据时设为1,当输入图像I来自图像-文本数据时设为0

Pseudo Labeling with Image-Text Data

作者提出了一种自动标记方法来生成区域文本对,而不是直接使用图像文本对进行预训练
包含三个步骤:
(1)名词短语提取:首先利用n-gram算法从文本中提取名词短语
(2)伪标注:采用预训练的开放词汇检测器,为每张图像的给定名词短语生成伪框,从而提供粗糙的区域-文本对
(3)过滤:使用预训练的CLIP来评估图像-文本对和区域-文本对的相关性,并过滤低相关性的伪注释和图像

Experiment

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

string类——常用函数模拟(C++)

本篇中,将会详细的介绍 Cpp 中 string 的使用,以及 string 类常用函数的模拟实现。对于 string 的内置函数来说,存在很多很冗余的用法,很多函数都有很多种用法,本篇将会讲解常用内置函数的常用用法,模拟函数…

Pytest小技巧:高效获取自动化测试结果

自动化测试用例在执行完成后,我们想要很清楚的查看到测试用例的执行结果,我们可以通过Pytest中的Hooks来进行获取吗? 其中Pytest中存在多个Hooks的函数,小编今天先简单介绍其中一种,通过pytest_runtest_makereport 获…

若依vue中关于字典的使用

文章目录 字典管理页面列表点击某个字典类型展示具体字典数据修改某一条字典数据 字典的应用一般用于select多选框中代码实现根据字典Dict的value获取Label,类似于通过key获得value 源码解析 字典管理页面 列表 点击某个字典类型展示具体字典数据 修改某一条字典数…

04_UART串口发送数据

1.配置芯片,如果PA9,PA10的UART引脚被占用,会自动进行重映射 2.代码 int main(void) {uint8_t temp[]"test";/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

windows的jar包开机自启动【搬代码】

感觉最方便的就是放到启动项目里操作步骤 winR 输入:shell:startup回车或点击确定 3.将自己jar包右键创建快捷方式 4.然后放进去 5.重启电脑,浏览器输入网址,就可以看到重启成功了 另外一个就是放入.exe文件的快捷方式 首先,…

C语言洛谷题目分享(9)奇怪的电梯

目录 1.前言 2.题目:奇怪的电梯 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.说明 6.题解 3.小结 1.前言 哈喽大家好啊,前一段时间小编去备战蓝桥杯所以博客的更新就暂停了几天,今天继续为大家带来题解分享,希望大…

网络管理实验二、SNMP服务与常用的网管命令

1 常用的网管命令 1.1 网络状态监视命令 包括以下命令:Ipconfig、ping、nslookup、dig、host ipconfig 作用:用来显示本机所有网卡的基本信息(IP、掩码、网关、工作状态);用法:ipconfig展示:…

Python的国际化和本地化【第162篇—国际化和本地化】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展,多语言支持在软件开发中变得越来越重要。Python作为一种流行的…

软件架构静态演化

1.静态演化需求 软件架构静态演化的需求是广泛存在的,可以归结为两个方面。 (1)设计时演化需求。在架构开发和实现过程中对原有架构进行调整,保证软件实现与架构的一致性以及软件开发过程的顺利进行。 (2)运…

二期 1.3 Spring Cloud Alibaba微服务组件Nacos注册中心介绍

文章目录 一、注册中心有什么用?二、注册中心对比三、Nacos是什么?3.1 Nacos 基本概念3.2 Nacos 主要功能3.3 Nacos 优势一、注册中心有什么用? 谈起微服务架构,总会提到注册中心,它是微服务架构必不可少的组件之一,那么注册中心作用到底是什么? 话说微服务架构下 服务…

Qt---控件的基本属性

文章目录 enabled(控件可用状态)geometry(位置和尺寸)简单恶搞程序 windowIcon(顶层 widget 窗口图标)使用 qrc 机制 windowOpacity(窗口的不透明值)cursor(当鼠标悬停空间上的形状)自定义鼠标图标 toolTip(鼠标悬停时的提示)focusPolicy(控件获取焦点的策略)styleSheet(通过CS…

Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序(0)

问题 解决方法 一 找到Navicat的安装路径,然后找到sqlncli_x64.msi文件并安装,安装成功后重启Navicat重新进行连接,看是否成功。 解决方法 二 如果方法一没有找到找到sqlncli_x64.msi 还是Navicat的安装路径,然后找到msodbcsql_64…

【网络编程】Linux网络内核结构以及分布剖析

hello !大家好呀! 欢迎大家来到我的网络编程系列之Linux网络内核结构以及分布剖析,在这篇文章中,你将会学习到在Linux内核中如何实现网络数据的输入和输出的,并且我会给出源码进行剖析,以及手绘UML图来帮助…

实现iOS App代码混淆

简介 在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

Cosmopolitan Libc 工作原理与多平台使用方法教程(x64 Linux / WSL2 / Windows)

⚠️阅读前请注意 本博客适用于Cosmopolitan Libc 3.X版本,不适用于Cosmopolitan Libc 2.X版本。Cosmopolitan Libc 是一个非常年轻的项目,可能存在各种问题。Cosmopolitan Libc 仍处于快速迭代开发之中,本文内容在一定时期内会持续更新。 Co…

xhci 数据结构

xhci 数据结构 xhci 数据结构主要在手册上有详细的定义,本文根据手册进行归纳总结: 重点关注的包括: device contexttrb ringtrb device context设备上下文 设备上下文数据结构由xHC管理,用于向系统软件报告设备配置和状态信息。…

Java反序列化基础-类的动态加载

类加载器&双亲委派 什么是类加载器 类加载器是一个负责加载器类的对象,用于实现类加载的过程中的加载这一步。每个Java类都有一个引用指向加载它的ClassLoader。而数组类是由JVM直接生成的(数组类没有对应的二进制字节流) 类加载器有哪…

Qt 3 QVariant类的使用和实例

QVariant, 类本质为 C联合(Union)数据类型,它可以保存很多Qt 类型的值,包括 QBrush、QColor、QString 等等。也能够存放Qt的容器类型的值。QVariant::StringList 是 Qt定义的一个 QVariant::type 枚举类型的变量,其他常用的枚举类型变量如下表…

《QT实用小工具·二十五》日志重定向输出

1、概述 源码放在文章末尾 日志重定向输出,包含如下功能: 支持动态启动和停止。支持日志存储的目录。支持网络发出打印日志。支持输出日志上下文信息比如所在代码文件、行号、函数名等。支持设置日志文件大小限制,超过则自动分文件&#xf…