YOLO-World:实时开放词汇对象检测(论文+代码)

目录

一、YOLO-World摘要以及主要贡献

1.1摘要       

1.2主要贡献

二、YOLO-World模型创新点总结

2.1YOLO Detector

2.2Text Encoder

2.3Re-parameterizable Vision-Language PAN

2.4核心创新点总结

三、如何应用

3.1推理预测

3.2自定义词汇推理

3.3自定义词汇类别保存模型

3.4使用自定义模型进行推理

四、总结

论文链接:yolo-world论文

代码链接:yolo-world代码

一、YOLO-World摘要以及主要贡献

1.1摘要       

                You Only Look Once (YOLO) 系列探测器已成为高效实用的工具。但是,它们对预定义和训练对象类别的依赖限制了它们在开放场景中的适用性。为了解决这一局限性,我们引入了 YOLO-World,这是一种创新方法,通过视觉语言建模和大规模数据集的预训练,增强了 YOLO 的开放词汇检测功能。具体而言,我们提出了一种新的可重新参数化的视觉-语言路径聚合网络(RepVL-PAN)和区域-文本对比损失,以促进视觉和语言信息之间的交互。我们的方法擅长以零射程、高效率检测各种物体。在具有挑战性的 LVIS 数据集上,YOLO-World 在 V100 上以 52.0 FPS 实现了 35.4 AP,在准确性和速度方面都优于许多最先进的方法。此外,经过微调的 YOLO-World 在多个下游任务上取得了出色的性能,包括对象检测和开放词汇实例分割。 

1.2主要贡献

        主要贡献可以概括为三个方面:

        1.介绍了YOLO-World,这是一种先进的开放词汇表对象检测器,具有高效的现实应用。

        2.提出了一种可重新参数化的视觉-语言PAN来连接视觉和语言特征,并提出了一种开放词汇区域-文本对比的YOLO-World预训练方案。

        3.在大规模数据集上预训练的YOLO-World显示出强大的零射击性能,在LVIS上达到35.4 AP和52.0 FPS。预训练的YOLO-World可以很容易地适应下游任务,例如开放词汇实例分割和引用对象检测。此外,YOLO-World的预训练权值和代码将被开源,以方便更多的实际应用。

二、YOLO-World模型创新点总结

 

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

2.1YOLO Detector

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

2.2Text Encoder

        给定文本,采用CLIP预训练的Transformer文本编码器提取相应的文本嵌入,与纯文本语言编码器相比,CLIP文本编码器提供了更好的视觉语义能力,可以将视觉对象与文本连接起来。当输入文本为标题或引用表达式时,我们采用简单的n-gram算法提取名词短语,然后将其输入文本编码器。

2.3Re-parameterizable Vision-Language PAN

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

2.4核心创新点总结

        实时解决方案:利用 CNN 的计算速度,YOLO-World 可提供快速的开放词汇检测解决方案,满足各行业对即时结果的需求。
        效率和性能:YOLO-World 可在不牺牲性能的前提下降低计算和资源需求,提供了一种可替代SAM 等模型的强大功能,但计算成本仅为它们的一小部分,从而支持实时应用。
        利用离线词汇进行推理:YOLO-World 引入了 "先提示后检测 "的策略,利用离线词汇进一步提高效率。这种方法可以使用预先计算的自定义提示,包括标题或类别,并将其编码和存储为离线词汇嵌入,从而简化检测过程。
        由YOLOv8 支持:基于 Ultralytics YOLOv8的YOLO-World 利用实时对象检测方面的最新进展,以无与伦比的准确性和速度促进开放词汇检测。
        卓越的基准测试:YOLO在标准基准测试中,World 的速度和效率超过了现有的开放词汇检测器,包括 MDETR 和 GLIP 系列,展示了YOLOv8 在单个 NVIDIA V100 GPU 上的卓越性能。
        应用广泛:YOLO-World 的创新方法为众多视觉任务带来了新的可能性,与现有方法相比,速度提高了几个数量级。

三、如何应用

        下载好工程文件后,先构建环境,构建环境可参考我之前yolov8的博文:yolov8

3.1推理预测

使用预训练模型进行推理预测,默认检测所有类别。

from ultralytics import YOLOWorld

# 加载模型
model = YOLOWorld('yolov8s-world.pt')

# 推理预测
results = model.predict('data/images/bus.jpg')

# 显示结果
results[0].show()

3.2自定义词汇推理

        YOLO-World 框架允许通过自定义提示指定类别,通过设置自定义提示词汇,用户基本上可以引导模型关注感兴趣的对象,从而提高检测结果的相关性和准确性。       

         (a)传统的对象检测器:这些对象检测器只能检测训练数据集预定义的固定词汇表内的对象,例如COCO数据集的80个类别。固定的词汇限制了开放场景的扩展。

        (b)以前的开放词汇检测器:以前的方法倾向于开发大而重的检测器用于开放词汇检测,直观上具有很强的能力。此外,这些检测器同时编码图像和文本作为预测的输入,这在实际应用中是耗时的。

        (c) YOLO- world:我们展示了轻量级检测器的强大开放词汇性能,例如YOLO检测器,这对于实际应用具有重要意义。与使用在线词汇表不同,我们提出了一种高效推理的提示-检测范式,用户根据需要生成一系列提示,这些提示将被编码到离线词汇表中。然后可以将其重新参数化为模型权重,用于部署和进一步加速。

        例如,如果在之前的图片中只检测人的话,那么自定义person即可,如下:

from ultralytics import YOLO

# Initialize a YOLO-World model
model = YOLO('yolov8s-world.pt')  # or choose yolov8m/l-world.pt

# Define custom classes
model.set_classes(["person"])

# Execute prediction for specified categories on an image
results = model.predict('data/images/bus.jpg')

# Show results
results[0].show()

3.3自定义词汇类别保存模型

        用于专门特定的目标检测。先加载YOLO-World 模型,然后设置自定义类并保存:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8s-world.pt')

# 定义检测类别
model.set_classes(["person", "bus"])

# 保存模型
model.save("custom_yolov8s.pt")

3.4使用自定义模型进行推理

from ultralytics import YOLO

# 加载保存的模型
model = YOLO('custom_yolov8s.pt')

# 使用模型进行推理
results = model.predict('data/images/bus.jpg')

# 显示结果
results[0].show()

        因为我们刚刚自定义的词汇是bus和person,所以检测出来的结果只能检测定义的类别,也就是bus和person。

使用自定义词汇保存的优点包括:

        专业性:通过使用领域特定的术语或者行业内的常用词汇,可以增强系统对于特定领域的理解和表达能力。这样可以提高系统的专业性和准确性。
        精确性:自定义词汇可以帮助系统更精确地理解用户的意图或者内容。相比于通用词汇,自定义词汇更能够准确地表达特定概念或者领域内的内容。
        定制化:根据用户需求和特定场景,可以定制化地添加、修改或者删除自定义词汇,以满足不同的需求。这样可以使系统更好地适应特定的应用场景。
        避免歧义:某些术语在特定领域中可能有不同的含义,在这种情况下,使用自定义词汇可以帮助避免歧义,确保系统对用户意图的理解正确。
        提高效率:使用自定义词汇可以减少系统对于处理文本时的不必要计算和分析,从而提高处理效率。

四、总结

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

参考:大佬

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

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

相关文章

Struts2的入门:新建项目——》导入jar包——》jsp,action,struts.xml,web.xml——》在项目运行

文章目录 配置环境tomcat 新建项目导入jar包新建jsp界面新建action类新建struts.xml,用来配置action文件配置Struts2的核心过滤器:web.xml 启动测试给一个返回界面在struts.xml中配置以实现页面的跳转:result再写个success.jsp最后在项目运行 配置环境 …

C++从入门到精通——类的定义及类的访问限定符和封装

类的定义及类的访问限定符和封装 前言一、类的定义类的两种定义方式成员变量命名规则的建议示例 二、类的访问限定符和封装访问限定符访问限定符说明C为什么要出现访问限定符例题 封装例题 前言 类的定义是面向对象编程中的基本概念,它描述了一类具有相同属性和方法…

Atlas 200 DK开发者套件的网络连接

一、参考资料 Atlas 200 DK官方文档 二、常用操作 1. Micro SD制卡 在windows系统上,一键制卡的步骤与Atlas 200I DK类似,但步骤更简单,详细步骤请参考:Windows系统制卡 2. Atlas 200 DK与PC机通信 2.1 准备工作 准备一根安…

一些好玩的东西

这里写目录标题 递归1.递归打印数组和链表?代码实现原理讲解二叉树的 前 中 后 序位置 参考文章 递归 1.递归打印数组和链表? 平常我们打印数组和链表都是 迭代 就好了今天学到一个新思路–>不仅可以轻松正着打印数组和链表 , 还能轻松倒着打印(用的是二叉树的前中后序遍…

vue事件代理

数据代理 Object.defineProperty 常见属性值 get和set函数 理解数据代理 Vue中的数据代理 Vue中的数据代理小结 事件处理 v-bind 事件处理小结 数据代理 Object.defineProperty 常见属性值 <body> <script type"text/javascript"> let person{n…

C++:逻辑运算符-非与或(19)

!非!a如果a为假&#xff0c;那么当前他就是真&#xff0c;如果a是真&#xff0c;那么他直接就是假&&与a&&ba与b都为真&#xff0c;那么就是真&#xff0c;如果两个里面有一个为假那么就是假||或a||ba或b有一个为真&#xff0c;那么就是真 非&#xff08;!&…

(学习日记)2024.03.31:UCOSIII第二十八节:消息队列常用函数

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Golang并发模型-Pipeline模型、Fan-in Fan-out模型

这段时间由于项目的需要&#xff0c;本人正在研究关于如何优雅的进行go的并发&#xff0c;以下是结合资料和视频的结果&#xff0c;文末会给出参考资料 Go语言的并发模型主要通过goroutine和channel实现&#xff0c;通过这个我们可以更有效地使用IO和CPU 这里我们围绕生成一个…

LRU的原理与实现(java)

介绍 LRU的英文全称为Least Recently Used&#xff0c;即最近最少使用。它是一种内存数据淘汰算法&#xff0c;当添加想要添加数据而内存不足时&#xff0c;它会优先将最近一段时间内使用最少的数据淘汰掉&#xff0c;再将数据添加进来。 原理 LRU的原理在介绍中就已经基本说…

linux基础篇:Linux操作系统vi编辑器讲解与常用操作

Linux操作系统vi编辑器讲解与常用操作 一、vi编辑器介绍 vi编辑器是一款功能强大的文本编辑器&#xff0c;广泛应用于Unix和类Unix系统。它是由Bill Joy在1976年开发的&#xff0c;后来演变成vim&#xff08;vi improved&#xff0c;即“改进版的vi”&#xff09;编辑器。vi编…

敏感信息泄露漏洞

法律声明 参与培训需要遵守国家法律法规&#xff0c;相关知识只做技术研究&#xff0c;请勿用于违法用途&#xff0c;造成任何后果自负与本人无关。 中华人民共和国网络安全法&#xff08;2017年6月1日起施行&#xff09; 第二十二条 任何个人和组织不得从事入侵他人网络、干扰…

【JAVASE】带你了解面向对象三大特性之一(继承)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1.继承 1.1 为什么需要继承 Java 中使用类对现实世界中实体来…

ubuntu-server部署hive-part2-安装hadoop

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本&#xff1a;ubuntu-server-22.04.3 虚拟机&#xff1a;virtualbox7.0 安装hadoop ​​​​​​下载上传 下载地址 https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/ 以root用…

JDK 17 新特性实战,答案整理,最新面试题

JDK 17中的Pattern类增强了哪些功能&#xff1f; 1、新增asMatchPredicate方法&#xff1a; JDK 17的Pattern类新增了asMatchPredicate方法&#xff0c;可以将正则表达式编译为Predicate&#xff0c;方便用于过滤集合中的字符串。 2、增强了Unicode属性支持&#xff1a; JDK …

LLM推理参数(top_k,top_p, temperature, num_beams)

正常LLM做 next token predicate 时&#xff0c;对输出的 logits 做 softmax&#xff0c;选择概率最大的token。 num_beams &#xff1a;当我们设置 num_beams2 后&#xff0c;就使用了 beam search 的方法&#xff0c;每次不是只直接选择概率最大的 token&#xff0c;而是保留…

0基础确定要?进入it行业?

0基础如何进入IT行业&#xff1f; &#x1f31f;想进入IT行业&#xff1f;以下是一些对于0基础的人来说可行的步骤和建议&#xff01;&#x1f31f; "IT"是信息技术(Information Technology)的缩写&#xff0c;它指的是使用计算机、网络、软件和其他设备或系统来存…

数据安全之认识数据库审计系统

随着企业业务数据量的不断增长和数据存储的集中化&#xff0c;数据库成为企业的核心资产之一。然而&#xff0c;数据库面临着各种安全威胁&#xff0c;如SQL注入、权限滥用、数据泄露等。为了保障数据库的安全性和完整性&#xff0c;企业需要采取有效的审计措施来监控和记录数据…

spring源码解析-默认标签解析

spring 默认标签解析 parseDefaultElement处理流程 processBeanDefinition方法解析 processBeanDefinition时序图 元素解析 parseBeanDefinitionElement parseBeanDefinitionElement方法核心源码解析 创建GenericBeanDefinition实例对象 parseMetaElements parseConstructorAr…

平衡二叉树,红黑树,B树和B+树的区别及其应用场景

平衡二叉树 基础数据结构左右平衡高度差大于1会自旋每个节点记录一个数据 平衡二叉树&#xff08;AVL&#xff09; AVL树全称G.M. Adelson-Velsky和E.M. Landis&#xff0c;这是两个人的人名。 平衡二叉树也叫平衡二叉搜索树&#xff08;Self-balancing binary search tree…

通义灵码-ai编码

https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recordIdb1ef3ba27250a5818b1b6ffe418af658#/?utm_contentm_fission_1 「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」