实时开放词汇目标检测(论文复现)

news2024/11/27 17:59:14

实时开放词汇目标检测(论文复现)

本文所涉及所有资源均在传知代码平台可获取

文章目录

    • 实时开放词汇目标检测(论文复现)
      • 概述
      • 模型框架
      • 使用方式
      • 配置环境
      • 训练和评估
        • 训练
        • 评估
      • 演示效果
      • 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模型

在这里插入图片描述

文章代码资源点击附件获取

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Comfyui 学习笔记5

1.图像处理小工具,沿某个轴反转Image Flip 2. reactor换脸 3. 通过某人的多张照片进行训练 训练的模型会保存在 models/reactor/face/下面,使用时直接load就好 4. 为一个mask 更加模糊 羽化 5. 指定位置替换,个人感觉这种方式进行换脸的融…

评职称需要讲究方法

评职称需要讲究方法 评职称不要太老实 你评三年没下来 你同事走“野路子” 一年就下来了 所以别吃亏了 不走的弯路别走 不该吃的苦别吃 大家如果对于职称评审业绩材料整理还有什么不懂的,可以在评论区留言,甘建二告诉你们怎么报职称,少…

4.C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏

C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏 C语言往期系列文章目录 往期回顾: C语言是什么?编程界的‘常青树’,它的辉煌你不可不知VS 2022 社区版…

Java | Leetcode Java题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; class Solution {public String validIPAddress(String queryIP) {if (queryIP.indexOf(.) > 0) {// IPv4int last -1;for (int i 0; i < 4; i) {int cur (i 3 ? queryIP.length() : queryIP.indexOf(., last 1));if (cur <…

优雅的实现服务调用 -- OpenFeign

文章目录 1. RestTemplate存在问题2. OpenFeign介绍3. 快速上手引入依赖添加注解编写OpenFeign的客户端远程调用 4. OpenFeign参数传递从URL中获取参数传递单个参数传递多个参数传递对象传递JSON 5. 最佳实践Feign继承方式创建一个新的模块引入依赖编写接口打jar包服务实现方实…

锐龙7 7800X3D与i7-14700K到底怎么选!其实很简单

从2022年的锐龙7 5800X3D到后来的锐龙7 7800X3D&#xff0c;笔者使用X3D处理器已有2年多的时间。站在自己的立场&#xff0c;我是非常希望游戏老鸟购买这类处理器的&#xff0c;并且也推荐了不少。 这里说的是老鸟&#xff0c;也就是比较懂电脑的玩家。 但是对于新手玩家而言&a…

Canal 扩展篇(阿里开源用于数据同步备份,监控表和表字段(日志))

1.Canal介绍 Canal把自己伪装成从数据库&#xff0c;获取mysql主数据库的日志&#xff08;binlog&#xff09;信息&#xff0c;所以要想使用canal就得先开启数据库日志 https://github.com/alibaba/canal Canal 主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量…

刷题 链表

面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…

maven加载依赖成功但是引入import不了包,注解报错

突然就复现不出来了&#xff0c;奇了怪了&#xff0c;简单说一下吧&#xff0c;就是模块里引入了SpringBoot Test那个依赖然后&#xff0c; 这个地方是显示引入成功的&#xff0c;但是 这个包下没有&#xff0c;导致我SpringBootTest一直出不来&#xff0c;就找不到这个包下的注…

【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?

引言 受小程序camera组件预览和抽帧图像不一致的特性影响&#xff0c;一直未全功能支持全屏模式&#xff0c;详见本系列文件第四节[小程序如何抽帧]https://blog.csdn.net/alphaair/article/details/133981787 “小程序如何抽帧”)&#xff1b;随着插件在云上赛事、健身锻炼、A…

一个神奇的 Python 库:flanker-next

文章目录 一个神奇的 Python 库&#xff1a;flanker-next背景介绍库简介安装指南函数使用示例解析邮箱地址验证邮箱地址解析 MIME 消息 应用场景自动化邮件处理邮件内容分析客户支持自动化 常见问题及解决方案问题1&#xff1a;解析无效的电子邮件地址问题2&#xff1a;无法找到…

1992-2022年各省夜间灯光数据(excel+shp格式)

1992-2022年各省夜间灯光数据&#xff08;excelshp格式&#xff09; 1、时间&#xff1a;1992-2022年 2、来源&#xff1a; DMSP-OLS、NPP-VIIRS 3、指标&#xff1a;均值、总和、最小值、最大值、标准差 4、范围&#xff1a;34省市&#xff08;含港澳台&#xff09; 5、说…

(25)QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真

文章目录 前言一、MATLAB仿真代码二、仿真结果 前言 QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真MATLAB代码。 一、MATLAB仿真代码 代码如下&#xff1a; nSamp 8; % 矩形脉冲的采样点数 nSymbol 1000000; % 传输的符号…

GPT-SOVIT模型部署指南

一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征&#xff1a; 零样本 TTS&#xff1a; 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&#xff1a; 仅使用 1 分钟的训练数据对模型进行微调&#xff0c;以提高语音相似度和真实感。跨语…

QD1-P11 HTML常用标签:图片标签

本节学习 HTML 常用标签&#xff1a;图片标签 img ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p11 ‍ 知识点 1&#xff1a;img 是行内标签 img 是一个行内标签&#xff0c;不会自动换行。 知识点 2&#xff1a;img 标签使用格式 <img src"图片URL" a…

Leetcode 删除链表倒数第 N 个节点

算法思想&#xff1a; 使用了双指针法。下面是详细的算法思想&#xff1a; 1. 引入虚拟头节点&#xff08;dummy node&#xff09; 为了处理链表的一些边界情况&#xff08;比如删除头节点&#xff09;&#xff0c;我们在链表的头部引入了一个虚拟节点 dummy&#xff0c;并让…

点评项目-5-商户查询缓存,从 2s 优化到 12ms

业务需求&#xff1a;当前端发送 shop/id 的请求时&#xff0c;我们需要向前端响应对应 id 的详细数据给前端 直接查询 mysql 效率比较低&#xff0c;我们可以使用 redis 作为中间件进行数据的缓存&#xff0c;先查询 redis &#xff0c;若redis 中未查询到&#xff0c;则在 m…

24.3 基于文件的服务发现模式

本节重点介绍 : 基于文件的服务发现提供了一种配置静态目标的更通用的方法可以摆脱对特定服务发现源的依赖通常的做法是调用内部CMDB的接口获取target数据&#xff0c;打上标签&#xff0c;生成json文件发给prometheus采集 基于文件的服务发现模式 解决的问题 之前手动配置…

视频声音怎么去除?高效的视频声音去除方法

视频声音怎么去除&#xff1f;在多媒体创作与编辑的过程中&#xff0c;我们时常会遇到这样一个需求&#xff1a;为了使用视频素材&#xff0c;需要去除视频里的声音。这一步骤看似简单&#xff0c;实则对于提升作品的整体质量和专业度至关重要。很多时候&#xff0c;我们收集到…

人工智能风险预警以及区块链解决方案探索

​​发表时间&#xff1a;2024年9月26日 一个专家小组在为世界经济论坛撰写的报告中警示道&#xff0c;人工智能&#xff08;以下均简称为AI&#xff09;技术增加了各类组织遭受攻击的风险&#xff0c;并带来了训练数据污染和提示词注入攻击等新威胁。由于训练和测试数据库的庞…