U版YOLO-World来了,YOLOv8再度升级,三行代码上手YOLO-World!

2024-02-25 15:20

本文主要是介绍U版YOLO-World来了,YOLOv8再度升级,三行代码上手YOLO-World!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文首发:AIWalker
欢迎关注AIWalker,近距离接触底层视觉与基础AI

https://arxiv.org/abs/2401.17270
https://github.com/AILab-CVC/YOLO-World
https://github.com/ultralytics/ultralytics
https://www.yoloworld.cc/

YOLO-World亮点

  • YOLO-World是下一代YOLO检测器,旨在实时开放词汇对象检测。
  • YOLO-World在大规模视觉语言数据集上进行了预训练,包括Objects 365,GQA,Flickr 30 K和CC 3 M,这使得YOLO-World具有强大的zero-shot开集Capbility与Grounding能力
  • YOLO-World实现了快速的推理速度;可以对用户给定词汇,所提重新参数化技术进一步加速推理和部署;

YOLO-World方案

上图为YOLO-World整体架构示意图,它包含一个YOLO检测器、一个文本编码器以及RepVL-PAN。文本编码器首先将输入文本编码为文本嵌入信息;图像编码器对基于输入图像提取多尺度特征信息;RepVL-PAN通过跨模态融合增强文本与图像表征。

  • YOLO Detector:编码器基于YOLOv8演变而来,YOLOv8由DarkNet骨干、PAN多尺度特征融合以及检测头构成;
  • Text Encoder:采用CLIP预训练文本编码器对输入文本T提取对应的文本嵌入 W = TextEncoder ( T ) ∈ R C × D W = \text{TextEncoder}(T) \in \mathbb{R}^{C \times D} W=TextEncoder(T)RC×D,这里C表示名词数目,D表示嵌入维度。相比于Text语言编码器,CLIP文本编码器可以提供更好的视觉-语义能力。当输入文本是句子时,我们采用n-gram算法提取名词短词并送入本文编码器
  • Text Contrastive Head:延续YOLOv8,我们采用解耦头对边框 { b k } k = 1 K \{b_k\}_{k=1}^K {bk}k=1K与目标嵌入 { e k } k = 1 K \{e_k\}_{k=1}^K {ek}k=1K进行回归。作者提出文本对比头(Text Contrastive Head)计算目标-文本相似度 s k , j s_{k,j} sk,j,定义如下:

s k , j = α ⋅ L2-Norm ( e k ) ⋅ L2-Norm ( w j ) T + β s_{k,j} = \alpha \cdot \text{L2-Norm}(e_k) \cdot \text{L2-Norm}(w_j)^{T} + \beta sk,j=αL2-Norm(ek)L2-Norm(wj)T+β

注:这里的L2-Norm与仿生变换参数对于稳定区域-本文训练非常重要。

  • Training with Online Vocabulary:在训练过策划肝囊肿,我们为每个Mosaic图像构建一个在线词汇集合T。具体来说,我们采样所有包含在Mosaic图像中的正名词短语,然后从对应数据集中随机采样一些负名词短语。每个Mosaic图像最多包含M个词汇,默认M=80。
  • Inference with Offline Vocabulary:在推理阶段,我们提出了一种基于离线词汇集合的prompt-then-detect策略以进一步提升效率。用户也可以自定义一些客制化提示信息[可选],然后采用文本编码器对这些提示信息进行编码得到离线嵌入包。离线词汇可以避免对每个输入都进行文本编码计算,为词汇调整提供了更灵活的调控机制。

更详细介绍请参考:YOLO-World | 赋能YOLOv8开集检测能力,构建新一代YOLO新标杆

上手测试

官方YOLO-World是基于mmyolo, mmdetection实现的,但U1S1,mm系列对于入门确实不错,但对于新开源算法上手测试真心难用,毒瘤啊[mmcv的ops这个鬼东西啊]~

好消息来了!ultralytics支持YOLO-World了,可以直接通过ultralytics库来玩YOLO-world了

使用方式简单到了极致,几行命令即可,还不需要安装一大堆的mm包,不需要编译各种无关op,牛逼克拉斯~

from ultralytics import YOLOWorld# Initialize a YOLO-World model
model = YOLOWorld('yolov8s-world.pt')  # Execute inference with the YOLOv8s-world on the specified image
results = model.predict('bus.jpg')# Show results
results[0].show()

就是这么的简单好用,三行代码完成测试!

那么,YOLO-World的Prompts功能该如何测试呢?同样非常简单,新增一行代码即可,代码如下:

from ultralytics import YOLOWorld# Initialize a YOLO-World model
model = YOLOWorld('yolov8s-world.pt')  # Define custom classes
model.set_classes(["person"])# Execute inference with the YOLOv8s-world on the specified image
results = model.predict('bus.jpg')# Show results
results[0].show()

就这么一行代码改动,YOLO-World就变成了行人检测器,

当然,你还可以把它变成bus检测器,效果如下

不得不说,YOLO-World进一步释放了检测器的可玩性,不仅可以搞通用检测,还可以玩限定场景检测,关键速度还贼快,还等什么呢,速速试玩咯

推荐阅读

  • YOLO-World | 赋能YOLOv8开集检测能力,构建新一代YOLO新标杆
  • YOLOv8重磅升级,新增旋转目标检测,又该学习了~
  • YOLO-NAS | YOLO新高度,引入NAS,出于YOLOv8而优于YOLOv8
  • YOLOv6 v3.0 | 重磅升级!性能超越V8!
  • DAMO-YOLO | 超越所有YOLO,魔搭社区开源至强YOLO,5行代码即可体验!
  • 南开大学提出YOLO-MS | 超越YOLOv8与RTMDet,即插即用打破性能瓶颈

这篇关于U版YOLO-World来了,YOLOv8再度升级,三行代码上手YOLO-World!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745894

相关文章

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.