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

参考:大佬

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Error】Uncaught TypeError: Cannot read properties of undefined (reading ‘get’)

报错原因: 返回值为undefined 解决: vue3可用?

贪心算法|45.跳跃游戏II

力扣题目链接 class Solution { public:int jump(vector<int>& nums) {if (nums.size() 1) return 0;int curDistance 0; // 当前覆盖最远距离下标int ans 0; // 记录走的最大步数int nextDistance 0; // 下一步覆盖最远距离下标for (int i 0;…

hot100 - 链表(上)

目录 &#x1f33c;相交链表 AC 哈希 AC 双指针 AC 截去较长 list &#x1f33c;反转链表 AC 迭代 AC 递归 &#x1f33c;回文链表 AC 数组 AC 递归 AC 快慢指针 &#x1f33c;环形链表 AC 哈希表 AC 快慢指针 &#x1f6a9;环形链表 II AC 哈希表 …

Redis从入门到精通(四)Redis实战(一)短信登录

文章目录 前言第4章 Redis实战4.1 短信登录4.1.1 基于session实现短信登录4.1.1.1 短信登录逻辑梳理4.1.1.2 创建测试项目4.1.1.3 实现发送短信验证码功能4.1.1.4 实现用户登录功能4.1.1.5 实现登录拦截功能4.1.1.6 session共享问题 4.1.2 基于Redis实现短信登录4.1.2.1 Key-Va…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

dm8 备份与恢复

dm8 备份与恢复 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…

【二分查找】Leetcode 在排序数组中查找元素的第一个和最后一个位置

题目解析 34. 在排序数组中查找元素的第一个和最后一个位置 我们使用暴力方法进行算法演化&#xff0c;寻找一个数字的区间&#xff0c;我们可以顺序查找&#xff0c;记录最终结果 首先数组是有序的&#xff0c;所以使用二分法很好上手&#xff0c;但是我们就仅仅使用上一道题…

【学习笔记】Elsevier的Latex模板文件(附网址)

注&#xff1a;这是一篇没有技术含量的水文&#xff0c;主要是看有人下载下来&#xff0c;居然当成资源需要积分才能下载。我觉得不行&#xff0c;故提供原始下载地址供查阅使用。 链接: 上述图片所示网址&#xff1a;链接直达

赛博炼丹师手记

文章目录 0. 丹炉安置1. 炼丹手法1.1 前置准备1.2 数据标注1.3 开始炼丹1.4 结果验收 2. 炼丹心法2.1 步数相关2.1 效率相关2.2 质量相关 3. 相关文献 0. 丹炉安置 个人推荐b站up主朱尼酱出品的道玄丹炉&#xff0c;新手易懂&#xff0c;老手易用。 丹炉下载地址如下&#xf…

NetSuite 自定义记录类型的权限控制

在近期的一个定制项目中&#xff0c;遭受了一次用户洗礼。有个好奇宝宝把我们的一个自定义类型的表记录进行了删除&#xff0c;导致一个重要功能失败。算是给我们扎实上了一课。自定义类型的权限也需要重视起来。所以&#xff0c;今朝我们记录下这个设置&#xff0c;同时写给未…

Linux 环境下 Redis基础配置及开机自启

Linux 环境下 Redis基础配置及开机自启 linux环境安装redis<redis-6.0.5.tar.gz> 1-redis基本安装配置 解压 获取到tar包后&#xff0c;解压到相关目录&#xff0c;一般是将redis目录放在usr/local/redis目录下&#xff0c;可以使用-C指定到解压下目录 tar -zvxf re…

Matlab|【防骗贴】【免费】基于主从博弈的主动配电网阻塞管理

目录 1 主要内容 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 《基于主从博弈的主动配电网阻塞管理》文献介绍&#xff1a;主要采用一种配电网节点边际电价统一出清的主从博弈双层调度框架。上层框架解决用户在负荷聚合商引导下的用电成本最小化问题&#xff0…