YOLO-World 模型
YOLO-World 模型引入了一种先进的、实时的 Ultralytics YOLOv8 基础方法,用于开放词汇检测任务。这一创新使得基于描述性文本在图像中检测任何物体成为可能。通过显著降低计算需求的同时保持竞争性性能,YOLO-World 成为众多基于视觉应用的多功能工具。
观看: 在自定义数据集上的YOLO World训练工作流程
概述
YOLO-World 解决了传统开放词汇检测模型面临的挑战,这些模型通常依赖于需要大量计算资源的笨重 Transformer 模型。这些模型对预定义物体类别的依赖也限制了它们在动态场景中的实用性。YOLO-World 通过开放词汇检测能力重振了 YOLOv8 框架,采用视觉-语言建模 并在广泛的数据集上进行预训练,以在零样本场景中高效识别大量物体。
主要特点
-
实时解决方案: 利用CNN的计算速度,YOLO-World 提供了一个快速的开放词汇检测解决方案,适用于需要即时结果的行业。
-
效率与性能: YOLO-World 在不牺牲性能的情况下大幅降低了计算和资源需求,提供了一个比SAM等模型更强大的替代方案,但计算成本仅为一小部分,使得实时应用成为可能。
-
离线词汇推理: YOLO-World 引入了一种“提示后检测”策略,使用离线词汇进一步提高效率。这种方法允许使用预先计算的自定义提示(包括标题或类别)进行编码并存储为离线词汇嵌入,从而简化检测过程。
-
基于YOLOv8: 建立在 Ultralytics YOLOv8 之上,YOLO-World 利用最新的实时目标检测进展,以无与伦比的准确性和速度实现开放词汇检测。
-
基准测试卓越: YOLO-World 在标准基准测试中的速度和效率方面优于现有的开放词汇检测器,包括MDETR和GLIP系列,展示了YOLOv8在单个NVIDIA V100 GPU上的卓越能力。
-
多功能应用: YOLO-World 的创新方法为众多视觉任务解锁了新的可能性,与现有方法相比,速度提升了一个数量级。
可用模型、支持的任务和操作模式
本节详细介绍了可用的模型及其特定的预训练权重、支持的任务以及与各种操作模式的兼容性,如 推理、验证、训练 和 导出,用 ✅ 表示支持的模式,用 ❌ 表示不支持的模式。
Note
所有 YOLOv8-World 权重直接从官方 YOLO-World 仓库迁移,突显了他们的卓越贡献。
模型类型 | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
COCO数据集上的零样本迁移
模型类型 | mAP | mAP50 | mAP75 |
---|---|---|---|
yolov8s-world | 37.4 | 52.0 | 40.6 |
yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
yolov8m-world | 42.0 | 57.0 | 45.6 |
yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
yolov8l-world | 45.7 | 61.3 | 49.8 |
yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
yolov8x-world | 47.0 | 63.0 | 51.2 |
yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
使用示例
YOLO-World模型易于集成到您的Python应用程序中。Ultralytics提供了用户友好的Python API和CLI命令,以简化开发。
训练使用
Tip
我们强烈建议使用yolov8-worldv2
模型进行自定义训练,因为它支持确定性训练,并且易于导出其他格式,如onnx/tensorrt。
目标检测 使用train
方法非常简单,如下所示:
Example
PyTorch 预训练的*.pt
模型以及配置*.yaml
文件可以传递给YOLOWorld()
类,以在Python中创建模型实例:
预测使用
目标检测使用predict
方法非常简单,如下所示:
Example
此代码片段展示了加载预训练模型并在图像上运行预测的简单性。
验证使用
在数据集上进行模型验证如下所示:
Example
跟踪使用
使用YOLO-World模型在视频/图像上进行目标跟踪如下所示:
创建一个YOLO-World模型
model = YOLO("yolov8s-world.pt") # 或选择yolov8m/l-world.pt以获取不同大小
使用YOLO-World模型跟踪视频
results = model.track(source="path/to/video.mp4")
=== "CLI"
```bash
# 使用指定图像大小的YOLO-World模型跟踪视频
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video/file.mp4"
```
!!! note
Ultralytics提供的YOLO-World模型预先配置了[COCO数据集](../datasets/detect/coco.md)类别作为其离线词汇的一部分,增强了即时应用的效率。这种集成使得YOLOv8-World模型能够直接识别和预测COCO数据集中定义的80个标准类别,而无需额外的设置或定制。
### 设置提示
![YOLO-World提示类名概览](https://github.com/ultralytics/docs/releases/download/0/yolo-world-prompt-class-names-overview.avif)
YOLO-World框架允许通过自定义提示动态指定类别,使用户能够根据特定需求定制模型**而无需重新训练**。此功能对于将模型适应于新领域或特定任务特别有用,这些任务原本不属于[训练数据](https://www.ultralytics.com/glossary/training-data)的一部分。通过设置自定义提示,用户可以实质上引导模型关注感兴趣的对象,增强检测结果的相关性和准确性。
例如,如果您的应用只需要检测'person'和'bus'对象,您可以直接指定这些类别:
!!! example
=== "自定义推理提示"
```python
from ultralytics import YOLO
# 初始化一个YOLO-World模型
model = YOLO("yolov8s-world.pt") # 或选择yolov8m/l-world.pt
# 定义自定义类别
model.set_classes(["person", "bus"])
# 对指定类别的图像执行预测
results = model.predict("path/to/image.jpg")
# 显示结果
results[0].show()
```
您还可以在设置自定义类别后保存模型。通过这样做,您创建了一个专门用于特定用例的YOLO-World模型版本。此过程将您的自定义类别定义直接嵌入到模型文件中,使模型准备好使用您指定的类别而无需进一步调整。按照以下步骤保存和加载您的自定义YOLOv8模型:
!!! example
=== "使用自定义词汇持久化模型"
首先加载一个YOLO-World模型,为其设置自定义类别并保存:
```python
from ultralytics import YOLO
# 初始化一个YOLO-World模型
model = YOLO("yolov8s-world.pt") # 或选择yolov8m/l-world.pt
# 定义自定义类别
model.set_classes(["person", "bus"])
# 保存带有定义的离线词汇的模型
model.save("custom_yolov8s.pt")
```
保存后,custom_yolov8s.pt模型就像任何其他预训练的YOLOv8模型一样,但有一个关键区别:它现在优化为仅检测您定义的类别。这种定制可以显著提高特定应用场景的检测性能和效率。
```python
from ultralytics import YOLO
# 加载您的自定义模型
model = YOLO("custom_yolov8s.pt")
# 运行推理以检测您的自定义类别
results = model.predict("path/to/image.jpg")
# 显示结果
results[0].show()
```
### 使用自定义词汇保存的好处
- **效率**:通过专注于相关对象来简化检测过程,减少计算开销并加快推理速度。
- **灵活性**:允许轻松适应新或小众检测任务,而无需广泛的重新训练或数据收集。
- **简单性**:通过消除在运行时重复指定自定义类别的需要,简化了部署,使模型可以直接使用其嵌入的词汇。
- **性能**:通过将模型的注意力集中在定义的对象上,增强了指定类别的检测[准确性](https://www.ultralytics.com/glossary/accuracy)。
这种方法为定制最先进的对象检测模型以适应特定任务提供了强大的手段,使高级AI更易于访问并适用于更广泛的实际应用。
## 从头开始复现官方结果(实验性)
### 准备数据集
- 训练数据
| 数据集 | 类型 | 样本 | 框 | 注释文件 |
| ----------------------------------------------------------------- | --------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| [Objects365v1](https://opendatalab.com/OpenDataLab/Objects365_v1) | 检测 | 609k | 9621k | [objects365_train.json](https://opendatalab.com/OpenDataLab/Objects365_v1) |
| [GQA](https://downloads.cs.stanford.edu/nlp/data/gqa/images.zip) | 定位 | 621k | 3681k | [final_mixed_train_no_coco.json](https://huggingface.co/GLIPModel/GLIP/blob/main/mdetr_annotations/final_mixed_train_no_coco.json) |
| [Flickr30k](https://shannon.cs.illinois.edu/DenotationGraph/) | 定位 | 149k | 641k | [final_flickr_separateGT_train.json](https://huggingface.co/GLIPModel/GLIP/blob/main/mdetr_annotations/final_flickr_separateGT_train.json) |
- 验证数据
| 数据集 | 类型 | 标注文件 |
| ------------------------------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------ |
| [LVIS minival](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/lvis.yaml) | 检测 | [minival.txt](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/lvis.yaml) |
### 从头开始启动训练
!!! note
`WorldTrainerFromScratch` 高度定制化,允许同时在检测数据集和定位数据集上训练 yolo-world 模型。更多详情请查看 [ultralytics.model.yolo.world.train_world.py](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/models/yolo/world/train_world.py)。
!!! example
=== "Python"
```python
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="../datasets/flickr30k/images",
json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="../datasets/GQA/images",
json_file="../datasets/GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)
```
## 引用和致谢
我们感谢 [腾讯 AILab 计算机视觉中心](https://ai.tencent.com/) 在 YOLO-World 实时开放词汇对象检测方面的开创性工作:
!!! quote ""
=== "BibTeX"
```bibtex
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}
```
进一步阅读,原始的 YOLO-World 论文可在 [arXiv](https://arxiv.org/pdf/2401.17270v2.pdf) 上获取。项目的源代码和其他资源可通过他们的 [GitHub 仓库](https://github.com/AILab-CVC/YOLO-World) 访问。我们感谢他们对推动该领域发展并分享宝贵见解的承诺。
## 常见问题
### YOLO-World 模型是什么,它是如何工作的?
YOLO-World 模型是一种基于 [Ultralytics YOLOv8](yolov8.md) 框架的高级实时对象检测方法。它通过识别图像中的对象并基于描述性文本进行开放词汇检测任务。通过视觉语言建模和在大数据集上的预训练,YOLO-World 实现了高效率和性能,同时显著减少了计算需求,非常适合各种行业的实时应用。
### YOLO-World 如何处理带有自定义提示的推理?
YOLO-World 支持“先提示后检测”策略,利用离线词汇表来提高效率。自定义提示(如字幕或特定对象类别)会预先编码并存储为离线词汇表[嵌入](https://www.ultralytics.com/glossary/embeddings)。这种方法简化了检测过程,无需重新训练。您可以在模型中动态设置这些提示,以针对特定检测任务进行定制,如下所示:
```python
from ultralytics import YOLOWorld
# 初始化一个 YOLO-World 模型
model = YOLOWorld("yolov8s-world.pt")
# 定义自定义类别
model.set_classes(["person", "bus"])
# 对图像执行预测
results = model.predict("path/to/image.jpg")
# 显示结果
results[0].show()
为什么我应该选择 YOLO-World 而不是传统的开放词汇检测模型?
YOLO-World 相比传统的开放词汇检测模型提供了几个优势:
- 实时性能: 它利用 CNN 的计算速度,提供快速高效的检测。
- 高效且低资源需求: YOLO-World 在显著减少计算和资源需求的同时保持高性能。
- 可定制的提示: 该模型支持动态提示设置,允许用户在不重新训练的情况下指定自定义检测类别。
- 基准测试卓越: 在标准基准测试中,它在速度和效率方面优于其他开放词汇检测器,如 MDETR 和 GLIP。
如何在我的数据集上训练 YOLO-World 模型?
通过提供的 Python API 或 CLI 命令,可以轻松地在自己的数据集上训练 YOLO-World 模型。以下是如何使用 Python 开始训练:
from ultralytics import YOLOWorld
# 加载预训练的 YOLOv8s-worldv2 模型
model = YOLOWorld("yolov8s-worldv2.pt")
# 在 COCO8 数据集上训练模型 100 个周期
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
或者使用 CLI:
有哪些可用的预训练 YOLO-World 模型及其支持的任务?
Ultralytics 提供了多个支持各种任务和操作模式的预训练 YOLO-World 模型:
模型类型 | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | 目标检测 | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
如何从头开始复现 YOLO-World 的官方结果?
要从头开始复现官方结果,您需要准备数据集并使用提供的代码启动训练。训练过程包括创建数据字典并使用自定义训练器运行 train
方法:
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "../datasets/flickr30k/images",
"json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "../datasets/GQA/images",
"json_file": "../datasets/GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)
人工智能与机器学习
概述
人工智能(AI)和机器学习(ML)是当今科技领域最热门的话题之一。AI是指计算机系统能够执行通常需要人类智能的任务,如视觉识别、语音识别和决策制定。ML是AI的一个子集,专注于开发能够从数据中学习的算法。
关键技术
深度学习
深度学习是ML的一个分支,使用多层神经网络来处理复杂的数据模式。它在图像和语音识别方面表现出色。
自然语言处理(NLP)
NLP使计算机能够理解和生成人类语言。它在聊天机器人和翻译服务中广泛应用。
强化学习
强化学习涉及通过试错来训练模型,使其在特定环境中采取最佳行动。它在游戏和机器人技术中非常有用。
应用领域
医疗保健
AI和ML在诊断疾病、个性化治疗和药物发现方面具有巨大潜力。
金融
这些技术用于欺诈检测、投资分析和客户服务自动化。
自动驾驶
自动驾驶汽车依赖于AI和ML来感知环境并做出驾驶决策。
挑战与未来
数据隐私
随着AI和ML的发展,数据隐私成为一个重要问题。需要制定严格的法规来保护用户数据。
伦理问题
AI系统的决策过程可能不透明,引发伦理和公平性问题。
未来展望
AI和ML有望在各个行业中实现革命性的变革。持续的研究和创新将推动这些技术的发展。
通过理解和应用AI和ML,我们可以期待一个更加智能和自动化的未来。