Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测
Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测
- 前言
- 相关介绍
- 前提条件
- 实验环境
- 安装环境
- 项目地址
- Linux
- Windows
- 使用Ultralytics框架进行YOLO-World目标检测
- 进行训练
- 进行预测
- 进行验证
- 扩展
- 目标跟踪
- 设置提示
- 参考文献



前言
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
相关介绍
- Ultralytics 官方文档:https://docs.ultralytics.com/
- Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git.
- YOLO-World 源代码地址:https://github.com/AILab-CVC/YOLO-World.git.
- YOLO-World 论文地址:https://arxiv.org/abs/2401.17270
- YOLO-World 模型引入了一种基于 Ultralytics YOLOv8 的先进实时方法,用于开放词汇检测任务。这项创新可以根据描述性文本检测图像中的任何对象。通过显着降低计算需求,同时保持竞争性能,YOLO-World 成为众多基于视觉的应用程序的多功能工具。
- 概述
YOLO-World 解决了传统开放词汇检测模型所面临的挑战,这些模型通常依赖于需要大量计算资源的繁琐 Transformer 模型。这些模型对预定义对象类别的依赖也限制了它们在动态场景中的实用性。 YOLO-World 通过开放词汇检测功能重振了 YOLOv8 框架,采用视觉语言建模和对广泛数据集的预训练,能够以无与伦比的效率擅长在零样本场景中识别各种对象。- 主要特点
- 实时解决方案:利用 CNN 的计算速度,YOLO-World 提供快速的开放词汇检测解决方案,满足需要立即结果的行业。
- 效率和性能:YOLO-World 在不牺牲性能的情况下大幅削减了计算和资源需求,为 SAM 等模型提供了强大的替代方案,但计算成本仅为其一小部分,从而支持实时应用程序。
- 使用离线词汇进行推理:YOLO-World 引入了“先提示后检测”策略,采用离线词汇进一步提高效率。这种方法允许使用先验计算的自定义提示(包括标题或类别)进行编码并存储为离线词汇嵌入,从而简化检测过程。
- 由 YOLOv8 提供支持:YOLO-World 基于 Ultralytics YOLOv8 构建,利用实时目标检测领域的最新进展,以无与伦比的准确性和速度促进开放词汇检测。
- 卓越基准测试:YOLO-World 在标准基准测试的速度和效率方面优于现有的开放词汇检测器(包括 MDETR 和 GLIP 系列),展示了 YOLOv8 在单个 NVIDIA V100 GPU 上的卓越功能。
- 多功能应用:YOLO-World 的创新方法为多种视觉任务带来了新的可能性,与现有方法相比,速度提高了几个数量级。
- 可用型号、支持的任务和操作模式
可用的模型及其特定的预训练权重、它们支持的任务以及它们与各种操作模式(例如推理、验证、训练和导出)的兼容性,用 ✅ 表示支持的模式,用 ❌ 表示不支持的模式。
前提条件
- 熟悉Python
实验环境
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.6.0
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0
tensorboard>=2.4.1
pandas>=1.1.4
seaborn>=0.11.0
安装环境
pip install ultralytics
# 或者
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple # 国内清华源,下载速度更快


项目地址
- Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git
Linux
git clone https://github.com/ultralytics/ultralytics.git
Cloning into 'ultralytics'...
remote: Enumerating objects: 4583, done.
remote: Counting objects: 100% (4583/4583), done.
remote: Compressing objects: 100% (1270/1270), done.
remote: Total 4583 (delta 2981), reused 4576 (delta 2979), pack-reused 0
Receiving objects: 100% (4583/4583), 23.95 MiB | 1.55 MiB/s, done.
Resolving deltas: 100% (2981/2981), done.
Windows
请到
https://github.com/ultralytics/ultralytics.git网站下载源代码zip压缩包。
使用Ultralytics框架进行YOLO-World目标检测
进行训练
yolo train model=yolov8s-world.yaml data=coco8.yaml epochs=10 imgsz=640 batch=8 workers=1
from ultralytics import YOLOWorlddef train():# Load a pretrained YOLOv8s-worldv2 modelmodel = YOLOWorld("yolov8s-world.pt")# Train the model on the COCO8 example dataset for 100 epochsresults = model.train(data="coco8.yaml", epochs=10, imgsz=640, batch=1, workers=1)# Run inference with the YOLOv8n model on the 'bus.jpg' imageresults = model("imgs/test.png", save=True)if __name__=="__main__":train()




进行预测
yolo predict model=yolov8s-world.pt source=imgs/test.png imgsz=640
from ultralytics import YOLOWorld# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("imgs/test.png")# Show results
results[0].show()


进行验证
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640 batch=1 workers=1
from ultralytics import YOLOdef val():# Create a YOLO-World modelmodel = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes# Conduct model validation on the COCO8 example datasetmetrics = model.val(data="coco8.yaml", batch=1, imgsz=640, device=0,workers=1)if __name__=="__main__":val()

扩展
目标跟踪
使用 YOLO-World 模型对视频/图像进行对象跟踪简化如下:
yolo track model=yolov8s-world.pt imgsz=640 source="video/test.mp4"
from ultralytics import YOLO# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes# Track with a YOLO-World model on a video
results = model.track(source="video/test.mp4",save=True)



设置提示

YOLO-World 框架允许通过自定义提示动态指定类,使用户能够根据自己的特定需求定制模型,而无需重新训练。此功能对于使模型适应新领域或最初不属于训练数据的特定任务特别有用。通过设置自定义提示,用户基本上可以引导模型将注意力集中在感兴趣的对象上,从而增强检测结果的相关性和准确性。
例如,如果您的应用程序只需要检测“人”和“巴士”对象,则可以直接指定这些类:
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", "bus"])# Execute prediction for specified categories on an image
results = model.predict("imgs/test.png")# Show results
results[0].show()

还可以在设置自定义类后保存模型。通过这样做,可以创建专门针对您的特定用例的 YOLO-World 模型版本。此过程将您的自定义类定义直接嵌入到模型文件中,使模型可以与您指定的类一起使用,而无需进一步调整。请按照以下步骤保存和加载自定义 YOLOv8 模型:
- 首先加载 YOLO-World 模型,为其设置自定义类并保存:
# 首先加载 YOLO-World 模型,为其设置自定义类并保存:
from ultralytics import YOLO# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt# Define custom classes
model.set_classes(["teddy bears", "bus"])# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")
- 保存后,custom_yolov8s.pt 模型的行为与任何其他预训练的 YOLOv8 模型类似,但有一个关键区别:它现在经过优化,仅检测您定义的类。这种定制可以显着提高您特定应用场景的检测性能和效率。
# 保存后,custom_yolov8s.pt 模型的行为与任何其他预训练的 YOLOv8 模型类似,但有一个关键区别:它现在经过优化,仅检测您定义的类。这种定制可以显着提高您特定应用场景的检测性能和效率。from ultralytics import YOLO# Load your custom model
model = YOLO("custom_yolov8s.pt")# Run inference to detect your custom classes
results = model.predict("imgs/test.png")# Show results
results[0].show()

- 使用自定义词汇表进行保存的好处:
- 效率:通过关注相关对象来简化检测过程,减少计算开销并加快推理速度。
- 灵活性:允许模型轻松适应新的或利基检测任务,无需进行大量的再训练或数据收集。
- 简单性:无需在运行时重复指定自定义类,从而简化部署,使模型可以直接使用其嵌入的词汇表。
- 性能:通过将模型的注意力和资源集中在识别定义的对象上,提高指定类别的检测准确性。
- 这种方法提供了一种强大的方法,可以为特定任务定制最先进的对象检测模型,使高级人工智能更容易访问并适用于更广泛的实际应用。
参考文献
[1] Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git.
[2] Ultralytics Docs:https://docs.ultralytics.com/
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
相关文章:
Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测
Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行YOLO-World目标检测进行训练进行预测进行验证 扩展目标跟踪设置提示 参考文献 前言 由…...
区块链用什么编程语言实现?
. 主流区块链的开发语言主要有:C、Go、Java、Rust、C#。 C使用率最高,其次是Go,很少有人用python开发区块链。...
【网络编程】UDP通信基础模型实现
udpSer.c #include<myhead.h> #define SER_IP "192.168.119.143" #define SER_PORT 7777 int main(int argc, const char *argv[]) {//1.创建int sfd socket(AF_INET,SOCK_DGRAM,0);if(sfd -1){perror("socket error");return -1;}//2.连接struct…...
Docker Compose 常用命令详解
Docker Compose 常用命令详解 Docker Compose 是 Docker 官方编排工具之一,用于定义和运行多容器 Docker 应用程序。通过 docker-compose.yml 文件,开发者可以轻松管理服务、网络、卷以及各服务之间的依赖关系。以下将介绍一些常用的 Docker Compose 命…...
超级外链工具,可发9600条优质外链
超级外链工具,是一款在线全自动化发外链的推广工具。使用本工具可免费为网站在线批量增加外链,大大提高外链发布工作效率,是广大草根站长们必备的站长工具。 外链工具只是网站推广的辅助工具,一般适用于短时间内无法建设大量外链…...
VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互
该程序演示了如何使用CogToolBlock进行图像交互. 从vpp文件中加载一个ToolBlock。 用户可以通过应用程序窗体上的数字增减控件修改ToolBlock输入端子的值。 用户还可以从coins.idb或采集FIFO中选择图像。 “运行一次”按钮执行以下操作: 获取下一个图像或读取下一…...
比特币价格分析:市场重置完成,下一个目标:70,000 美元
比特币再次处于关键支撑位,面临可能影响其短期前景的关键考验。分析师们正密切关注比特币是否重复熟悉的模式,暗示可能出现重大走势。 OKNews分析师Josh表示,比特币一直处于看跌趋势,正如 4 日图上的超级趋势指标所示。这种趋势的…...
大模型笔记5 Extractive QA任务评估
目录 Extractive QA任务评估 Extractive QA评测指标 precision, recall, f1 ROUGE 划分训练与评估数据集 token位置评估 单个token位置评估 输入label的token位置 预测token位置 评估 Wandb 共享机器同时登录 样本类别平衡 标记token label时对窗口进行筛选 训练…...
RCE绕过方式
目录 小于8个字符突破限制 无字母数字执行 php7的做法 php5的思考 PHP5shell 深入理解glob通配符 构造POC,执行任意命令 无参数读文件和RCE总结 代码解读 构造. 另一种构造方法 小于8个字符突破限制 但也只能执行一些非常短的命令,没有什么意义…...
Flutter 电视投屏模块
前言 村里的老人说:“珍爱生命,远离低头族。“ 之前开发的一个 DIM 项目 Tarsier,里面有一个分享视频的功能,同时包含在线视频播放、电视直播等。 考虑到用户在手机上看视频的体验问题,需要增加一个投屏功能,以便用户可以电影、电视直播等投到电视上用大屏幕观看。 用…...
【机器学习】卷积神经网络简介
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 卷积神经网络简介1. 引言2. CNN的基本概念2.1 什么是卷积神经网络2.2 CNN与传统…...
时间函数链接函数等
1. 2.top相当于windows任务管理器 3.命令模式下不加冒号20G直接跳转行数 4. 相当于strcat 5.:13,15y 13行到15行复制 6. Ctrl 右 】是追踪命令 7. vi off_t -t看类型 8. qa关闭所有 9.gg 移动最前面 GG移动到最后面 10.终端中的全选命令1. 使用快捷键&…...
Android控件(示例)
在Android应用程序中,界面由布局和组件组成。布局相当于框架,而控件则是框架里面的内容。了解过Android布局后,如果要设计ui界面,还需要了解和掌握各个控件的应用。 一个界面的设计,先从创建容器开始,再向…...
图论------贝尔曼-福德(Bellman-Ford)算法
算法概述: Bellman-Ford算法核心代码如下 for(int i 1;i<n-1;i) for(int j 1;j<m;j) if(dic[v[j]]> dic[u[j]] w[j]] dic[v[j]] dic[u[j]] w[j]; 首先我们要了解一个点就是我们这次不再使用邻接矩阵来存储图的信息,而是定义三个一维数组来…...
带你彻底搞懂useLayoutEffect的使用场景
开篇第一句: useLayoutEffect 可能会影响性能。尽可能使用 useEffect。 useLayoutEffect 是 useEffect 的一个版本,在浏览器重新绘制屏幕之前触发。 使用方法 useLayoutEffect(setup, dependencies?)调用 useLayoutEffect 在浏览器重新绘制屏幕之前进行布局测量&…...
大厂进阶之二:React高级用法HOC、Hooks对比、异步组件
本文分文三部分: HOC高阶组件 higher order componentHooks 16.8版本后新增的钩子API异步组件使用lazy和suspense两个api实现组件代码打包分割和异步加载 一、HOC高阶组件 1、定义 高阶组件不是组件而是函数,是react中用于复用组件逻辑的高级技巧&am…...
【扒代码】ope.py
文件目录: 引用方式 if not self.zero_shot: # 非零样本情况下,计算边界框的宽度和高度 box_hw torch.zeros(bboxes.size(0), bboxes.size(1), 2).to(bboxes.device) box_hw[:, :, 0] bboxes[:, :, 2] - bboxes[:, :, 0] # 宽度 box_hw[:, :, 1] bbox…...
【Rust光年纪】探索Rust终端编程:从跨平台操作到用户界面设计
构建跨平台终端应用的完美选择:Rust 库综述 前言 随着终端应用程序的发展,越来越多的开发者开始寻找跨平台的、易于使用的库来构建终端用户界面和执行终端操作。本文将介绍几个流行的 Rust 库,它们提供了丰富的功能和灵活的 API 来满足不同…...
67、ceph
一、ceph 1.1、ceph概念 ceph是一个开源的,用c语言写的分布式的存储系统。存储文件数据。 /dev/sdb fdisk /dev/sdb gdisk /dev/sdb lvm 逻辑卷 可以扩容 raid 磁盘阵列 高可用 基于物理意义上的单机的存储系统。 分布式有多台物理磁盘组成一个集群&…...
最大正方形[中等]
优质博文:IT-BLOG-CN 一、题目 在一个由0和1组成的二维矩阵内,找到只包含1的最大正方形,并返回其面积。 示例 1: 输入:matrix [["1","0","1","0","0"],[&quo…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...


