实时开放词汇目标检测(论文复现)
实时开放词汇目标检测(论文复现)
本文所涉及所有资源均在传知代码平台可获取
文章目录
- 实时开放词汇目标检测(论文复现)
- 概述
- 模型框架
- 使用方式
- 配置环境
- 训练和评估
- 训练
- 评估
- 演示效果
- Gradio Demo
概述
YOLO-World是由腾讯人工智能实验室于2024年1月31日发布的实时开放词汇目标检测模型,能够在实时环境中跨越开放词汇表识别对象,无需先前的训练。传统的目标检测模型如YOLO由于依赖于预定义和训练过的目标类别(闭集检测),它在开放场景中的适用性受到了限制,例如,使用COCO数据集训练的模型仅能识别80个不同的类别。为了应对固定词汇检测器的限制,开放词汇目标检测(OVD)的概念应运而生,旨在识别超出预先建立类别范围之外的对象。
YOLO-World利用大量的图像-文本对和基础图像进行训练,以理解和响应各种提示,例如“穿着黑色裤子的人”。通过引入“提示-然后检测”的方法论,YOLO-World避开了即时文本编码的需要,而是利用用户提示生成的离线词汇来进行检测。这种方法显著降低了计算需求,允许灵活调整检测词汇,以满足各种需求,而不会影响性能,从而拓展了模型在实际场景中的适用性。在LVIS这个具有挑战性的数据集上,YOLO-World在V100上达到了35.4的AP和52的FPS,无论是精度和速度上都超越了以前SOTA的方法,如下图所示

模型框架

上图所示为YOLO-World的整体框架,主要包括了YOLO检测器,Text Encoder,和RepVL-PAN(Re-parameterizable Vision-Language Path Aggregation NetWork)。与传统检测器不同的是,YOLO-World作为开集检测器,需要使用文本作为输入,Text Encoder首先会编码输入的文本,然后输出Vocabulary embedding;之后Image Encoder(backbone)会编码输入图像,或者说提取图像特征,以获得多尺度特征图;RepVL-PAN(Vision-Language PAN)会利用图像和文本特征的多层次跨模态进行融合;最后,YOLO-World会预测出回归框和目标embedding,去匹配在输入文本中的出现的类别或者名词。
YOLO检测器
YOLO-World 是基于YOLOv8开发出来的,它包含了Darknet的backbone作为图像encoder,一个路径聚合网络(PAN)构建多尺度特征金字塔,以及一个输出回归边界框和目标embedding的预测头。
文本encoder
给定文本T,我们使用预训练CLIP的Transformer text encoder抽取相关的文本embedding。CLIP的text encoder能够提供更好的视觉-语义能力,使得视觉目标和文本相互连接。
文本对比头(Text Contrastive Head)
使用了yolov8的解耦头和俩个3×3卷积。因为要计算目标-文本的相似度,所以提出文本对比头。为了稳定区域-文本训练,目标编码e和文本编码t使用L2-Norm。
在线词汇表
在训练过程中,为每个包含4幅图像的马赛克样本构建一个在线词汇表 。
离线词汇表
提出了一种以“提示后检测”的策略,使用离线词汇以进一步提高效率。离线词汇表,特指的是经过encoder的embedding,也就是类别名,名词短语和目标描述构成的特征矩阵。与之对应的是,在线词汇则表示的不是embedding,在线词汇指的是没有经过encoder编码后的词汇
RepVL-PAN

RepVL-PAN的内部结构如上图所示。其中,文本引导的CSPLayer(T-CSPLayer),负责将语言信息注入图像特征中;而图像池化注意力Image Pooling Attention(I-Pooling Attention)则是负责强化具备图像意识的text embedding,以进一步增强图像特征与文本特征之间的交互,这可以提高开集能力的视觉语义表示。RepVL-PAN使用的和YOLOv8相似的特征融合结构,包括了自上而下和自下而上的路径,使用了多尺度的图像特征 {C3,C4,C5}搭建了特征金字塔 {P3,P4,P5}
使用方式
配置环境
创建python虚拟环境并激活虚拟环境
conda create -n yolov_world python=3.10
conda activate yolov_world
安装依赖包
# 安装pytorch
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
# 安装其他依赖,这一步会比较久
pip install -e .
# 如果一直卡在Building wheel for mmcv就尝试下面的两个命令然后再重试
pip install -U openmim
mim install mmcv
训练和评估
训练
使用mmyolo默认的训练脚本,位于configs/pretrain目录下。注意:YOLO-World是在4个节点(每个节点配有8个GPU,总计32个GPU)上训练的。
# 给脚本增加可执行权限
chmod +x tools/dist_train.sh
# 训练的示例命令,使用8个GPU,开启AMP混合精度训练
./tools/dist_train.sh configs/pretrain/yolo_world_l_t2i_bn_2e-4_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py 8 --amp
评估
使用mmyolo默认的评估脚本,位于configs/finetune_coco目录下。主要在LVIS-minival数据集上评估预训练模型的性能
# # 给脚本增加可执行权限
chmod +x tools/dist_test.sh
# 评估的命令
./tools/dist_test.sh path/to/config path/to/weights 8
演示效果
python image_demo.py path/to/config path/to/weights image/path/directory 'person,dog,cat' --topk 100 --threshold 0.005 --output-dir demo_outputs
# 将path/to/config替换成配置文件的路径,path/to/weights换成模型权重路径,模型权重可以在https://huggingface.co/wondervictor/YOLO-World/tree/main中下载,注意配置文件和模型权重需要对应,image/path/directory换成自己要检测图像的路径,'person,dog,cat' 换成自己感兴趣的类别,运行成功后结果在demo_outputs下查看。
# python image_demo.py configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py ./yolo_world_v2_m_obj365v1_goldg_pretrain-c6237d5b.pth data/images 'person,dog,cat' --topk 100 --threshold 0.005 --output-dir demo_outputs

YOLO-World 框架允许通过自定义提示动态指定类别,使用户能够根据自己的特定需求定制模型,而无需重新训练。通过设置自定义提示,用户可以引导模型关注感兴趣的对象,从而提高检测结果的相关性和准确性。如将上面的’person,dog,cat’ 换成自己感兴趣的类别。
(注:如果运行报错:Incorrect path_or_model_id: ‘…/pretrained_models/clip-vit-base-patch32-projection’.将configs目录下对应的配置文件(如上面的configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py )中第一个text_model_name注释掉,第二个text_model_name取消注释,从而自动从huggingface下载clip模型。)
Gradio Demo
在本地机器上运行web界面
pip install gradio==4.16.0 onnx onnxsim # 安装依赖
python demo.py path/to/config path/to/weights
# python demo.py configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py ./yolo_world_v2_m_obj365v1_goldg_pretrain-c6237d5b.pth
运行成功然后在浏览器访问http://127.0.0.1:8080可以看到下面的界面,左上方输入检测的图片,下方的文本框输入想检测的类别,然后点击submit就能在右边生成检测结果。下面可以调节一些参数,如NMS Threshold等。还支持导出onnx模型

文章代码资源点击附件获取
相关文章:
实时开放词汇目标检测(论文复现)
实时开放词汇目标检测(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 实时开放词汇目标检测(论文复现)概述模型框架使用方式配置环境训练和评估训练评估 演示效果Gradio Demo 概述 YOLO-World是由腾讯人工智能实验…...
陪诊小程序搭建:打造便利的陪诊环境
陪诊行业作为一个新兴行业,随着老龄化的严重,在近几年中需求量日益旺盛。陪诊师为大众的就医提供了极大的便利性,在看病难、医疗资源紧张方面发挥了积极作用。 在陪诊行业的快速发展下,陪诊小程序为行业带来了便捷的模式…...
Qt5.15.2静态编译 MinGW with static OpenSSL
如果想用VS2017编译,可参考:Qt5.15.2静态编译 VS2017 with static OpenSSL 一.环境 系统:Windows 10 专业版 64位 编译器:MinGW 8.1.0 第三方工具:perl,ruby和python PS:经验证,用MinGW 12.1.0来编译Qt5.15.2会报错 我用Phthon 2.7.18虽然可以编过,但是强烈建议Pyth…...
Linux Ubuntu dbus CAPI ---- #include<dbus.h>出现“无法打开源文件dbus/xxx.h“的问题
一、确保已安装dbus库和CAPI sudo apt-get install libdbus-1-dev 二、在c_cpp_properties.json的includePath中是否配置了dbus库依赖文件所在的路径 三、编译一个简单的dbus代码,在编译过程中只要出现.h文件找不到的情况,就使用下列命令找到.h文件路径…...
React01 开发环境搭建
React 开发环境搭建 一、创建 React 项目二、项目精简 一、创建 React 项目 执行下述命令创建 react 项目 blu-react-basis npx create-react-app blu-react-basis项目目录结构如下: 执行下述命令启动项目 npm run start启动效果如下: 二、项目精简 …...
数据结构之旅(顺序表)
前言: Hello,各位小伙伴们我们在过去的60天里学完了C语言基本语法,由于小编在准备数学竞赛,最近没有给大家更新,并且没有及时回复大家的私信,小编在这里和大家说一声对不起!,小编这几天会及时给大家更新初阶数据结构的内容,然后我们来学习今天的内容吧! 一. 顺序表的概念和结…...
掌握 C# 内存管理与垃圾回收机制
内存管理是每个开发者需要了解的关键部分,特别是在构建高性能应用时。在 C# 中,垃圾回收(Garbage Collection, GC) 机制自动管理内存分配和释放,大大简化了内存管理的复杂性。然而,理解值类型与引用类型的区…...
【JavaEE】——初始网络原理
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:局域网 1:概念 二:局域网的连接方式 1:网线直连 …...
Nginx和Lua配合使用
在NGINX中使用Lua进行开发时,可以通过不同的配置块来指定Lua脚本的执行位置。这些配置块被称为“phase hooks”,即阶段挂钩。每个阶段挂钩都有其特定的作用时间和目的。以下是NGINX Lua模块中常见的配置指令及其用途: 常见的Phase Hooks 1.a…...
程序化交易是什么,它有哪些优势,需要注意什么?
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
水库抽样算法(大数据算法作业)
时隔一个多月,终于想起来写大数据算法基础的实验报告,主要是快截止了,hh 这两天加急把这个报告写完了~ 接下来,写一写证明过程(参考书籍:高等教育出版社《数据科学与工程算法基础》)主要代码以…...
SHCTF-2024-week1-wp
文章目录 SHCTF 2024 week1 wpMisc[Week1]真真假假?遮遮掩掩![Week1]拜师之旅①[Week1]Rasterizing Traffic[Week1]有WiFi干嘛不用呢? web[Week1] 单身十八年的手速[Week1] MD5 Master[Week1] ez_gittt[Week1] jvav[Week1] poppopop[Week1] 蛐蛐?蛐蛐! SHCTF 2024…...
docker-comapose安装部署mysql
docker-comapose安装部署mysql version: "3.4" services:mysql:image: docker.das-security.cn/middleware/mysql:8.4.1container_name: mysqlenvironment:- MYSQL_ROOT_PASSWORD密码volumes:- /etc/localtime:/etc/localtime- ./configs/mysql/initdb:/docker-entr…...
C语言初阶-数据类型和变量【下】
紧接上期------------------------->>>C语言初阶-数据类型和变量【上】 全局变量和局部变量在内存中存储在哪⾥呢? ⼀般我们在学习C/C语⾔的时候,我们会关注内存中的三个区域: 栈区 、 堆区 、 静态区 。 内存的分配情况 局部变量是…...
C++:命名空间(namespace)详细介绍与案例
命名空间(namespace)是C中的一个重要概念,用于组织代码和避免名称冲突。它们允许程序员将标识符(如变量、函数、类等)组织在一起,以便在较大的程序中防止命名冲突。 1. 基本概念 命名空间的基本定义方式如…...
专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结
目录 1. 找出所有⼦集的异或总和再求和(easy) 解析: 方法一: 解法二: 总结: 2. 全排列 Ⅱ(medium) 解析: 解法一:只关心“不合法”的分支 解法二&…...
java中Runnable接口是什么?基本概念、工作原理、优点、`Runnable`与`Thread`的对比、与`Callable`接口的对比、实际场景
Runnable接口是Java提供的一种用于实现多线程的接口,通常用来定义任务的具体逻辑。与Thread类不同,Runnable接口只提供一种抽象方法run(),没有任何与线程的生命周期、管理相关的功能。它的主要作用是与Thread类或线程池(如Executo…...
Mybatis Plus连接使用ClickHouse也如此简单
通过阅读列式数据库ClickHouse官网,不难看出它有支持JDBC规范的驱动jar包,可以直接集成到Object Relational Mapping框架等,下面我用SpringBootMybatisPlus环境连接ClickHouse来演示一下 集成步骤 1.Maven引入ClickHouse提供的JDBC依赖 <…...
什么社交平台可以找到搭子?分享多款找搭子必备的人气软件
在这个丰富多彩的世界里,我们常常渴望有一个志同道合的搭子,一起分享生活的点滴,共同探索未知的领域。无论是追寻美食的舌尖之旅,还是踏上充满惊喜的旅途;无论是在健身房挥洒汗水…… 找到一个合适的搭子,都…...
STM32 RTC实时时钟 F407 寄存器
RTC介绍 STM32F1: RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。 即在F1系列,RTC的日历部分只有一个32位的寄存器 该寄存器直接存放 时间戳 的值,即࿱…...
Nextra:基于Next.js的现代化文档站构建利器
1. 项目概述:为什么Nextra能成为文档站构建的“瑞士军刀”?如果你最近在寻找一个构建技术文档、博客或个人知识库的工具,大概率会听到“Nextra”这个名字。它不是一个独立框架,而是一个基于Next.js的静态站点生成器,专…...
Noto Emoji:专业解决跨平台表情符号渲染难题的终极方案
Noto Emoji:专业解决跨平台表情符号渲染难题的终极方案 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 在现代数字通信中,表情符号已成为不可或缺的语言元素,然而跨平台表情符…...
微服务架构实战:从DDD设计到K8s部署的完整指南
1. 项目概述与核心价值最近几年,微服务架构的热度一直居高不下,从互联网大厂到初创团队,几乎人人都在谈微服务。但说实话,真正能把微服务玩转、落地,并且能稳定支撑业务发展的团队,其实并不多。很多项目要么…...
技能即代码:用自动化工具构建个人技能维护系统
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“skill-guardian”,作者是0xtresser。乍一看这个名字,可能有点摸不着头脑,但点进去研究了一下,发现这其实是一个关于“技能守护”或者说“技能管理”的…...
Logseq Full House Templates 终极指南:如何用智能模板提升知识管理效率
Logseq Full House Templates 终极指南:如何用智能模板提升知识管理效率 【免费下载链接】logseq13-full-house-plugin Logseq Templates you will really love ❤️ 🏛️ 项目地址: https://gitcode.com/gh_mirrors/lo/logseq13-full-house-plugin …...
WarcraftHelper:魔兽争霸3现代化增强插件,解锁经典游戏新体验
WarcraftHelper:魔兽争霸3现代化增强插件,解锁经典游戏新体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是…...
锂电池安全使用指南:从原理到实践,避免常见风险
1. 项目概述:从“能用”到“用好”的锂电安全课如果你玩过任何需要脱离电源线工作的电子项目,无论是给一个Arduino小车供电,还是驱动一架四轴飞行器,最终都绕不开一个核心问题:电源。从最基础的碱性电池,到…...
解放你的文档下载焦虑:一键保存30+平台内容的神器
解放你的文档下载焦虑:一键保存30平台内容的神器 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您…...
Win11 VMware 报错“未能启动虚拟机”?深入解析 Hyper-V 与注册表冲突的修复指南
1. 为什么Win11下VMware会报错"未能启动虚拟机"? 最近帮朋友调试Win11上的VMware Workstation时,遇到了经典的"未能启动虚拟机"错误。这个报错背后其实是Windows 11的虚拟化安全机制与第三方虚拟化软件的兼容性问题。微软在Windows …...
从CTF解题到IoT固件分析:我是如何把‘水土不服’的binwalk调教成Windows主力工具的
从CTF解题到IoT固件分析:我是如何把‘水土不服’的binwalk调教成Windows主力工具的 第一次参加CTF比赛时,我遇到了一个奇怪的压缩包。解压后是一堆看似随机的二进制数据,队友在Linux下轻车熟路地敲下binwalk -e命令,瞬间提取出了…...
