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

news/2024/7/10 23:53:15 标签: YOLO

目录

YOLO-World%E6%91%98%E8%A6%81%E4%BB%A5%E5%8F%8A%E4%B8%BB%E8%A6%81%E8%B4%A1%E7%8C%AE-toc" style="margin-left:0px;">一、YOLO-World摘要以及主要贡献

1.1摘要       

1.2主要贡献

YOLO-World%E6%A8%A1%E5%9E%8B%E5%88%9B%E6%96%B0%E7%82%B9%E6%80%BB%E7%BB%93-toc" style="margin-left:0px;">二、YOLO-World模型创新点总结

YOLO%20Detector-toc" style="margin-left:40px;">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%E6%91%98%E8%A6%81%E4%BB%A5%E5%8F%8A%E4%B8%BB%E8%A6%81%E8%B4%A1%E7%8C%AE">一、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%E6%A8%A1%E5%9E%8B%E5%88%9B%E6%96%B0%E7%82%B9%E6%80%BB%E7%BB%93">二、YOLO-World模型创新点总结

 

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

YOLO%20Detector">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.niftyadmin.cn/n/5474251.html

相关文章

爬虫 新闻网站 并存储到CSV文件 以红网为例 V2.0 (控制台版)升级自定义查询关键词、时间段,详细注释

爬虫:红网网站, 获取指定关键词与指定时间范围内的新闻,并存储到CSV文件 V2.0(控制台版) 爬取目的:为了获取某一地区更全面的在红网已发布的宣传新闻稿,同时也让自己的工作更便捷 对比V1.0升级的…

MySQL 进阶-----索引使用规则

目录 前言 一、验证索引效率 二、最左前缀法则 三、范围查询 四、索引失效情况 1.索引列运算 2.字符串不加引号 3 .模糊查询 4.or连接条件 5 .数据分布影响 前言 本期我们学习MySQL索引的使用方法,在讲解索引的使用原则之前,先通过一个简单的…

第一章:CSS基础入门

1. CSS简介 CSS,全称为Cascading Style Sheets(层叠样式表),是一种样式表语言,专门用于描述HTML或其他XML文档(例如SVG、MathML)的展示和格式化。CSS负责定义网页元素的布局、颜色、字体、尺寸、…

【基于HTML5的网页设计及应用】——全选和取消全选

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2,它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权: -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Java synchronized(详细)

​ synchronized 一,介绍 在Java中,synchronized关键字用于解决多线程并发访问共享资源时可能出现的线程安全问题。当多个线程同时访问共享资源时,如果没有合适的同步机制,可能会导致以下问题: 竞态条件&#xff08…

什么是智慧公厕?智慧城市下的智慧公厕有什么功能和特点?

随着科技的不断进步和城市化的加快发展,智慧城市已经成为我们生活中的一部分。而在智慧城市的建设中,智慧公厕作为城市基础设施的重要组成部分发挥着重要的作用。那么什么是智慧公厕?智慧公厕是针对公共厕所的日常使用、运行、管理、运营等过…

sqlite在非主键创建一个自增字段

sqlite 自增比较奇葩,自增字段必须建在主键上,但主键很重要。不是每种情况都是给自增去做。比如要实现replace into 时, 要主键作为更新标识。用自增很难实现。 开工: 1、建立一个主表,主表的ID是自增ID,…