跳至内容

YOLO-世界模式

YOLO 世界模型引入了先进的实时 UltralyticsYOLOv8-基于开放词汇检测任务的先进实时方法。这项创新可根据描述性文本检测图像中的任何物体。YOLO-World 可大幅降低计算要求,同时保持极具竞争力的性能,是众多视觉应用的多功能工具。



观看: YOLO 自定义数据集上的世界培训工作流程

YOLO-世界模型架构概述

概述

YOLO-World tackles the challenges faced by traditional Open-Vocabulary detection models, which often rely on cumbersome Transformer models requiring extensive computational resources. These models' dependence on pre-defined object categories also restricts their utility in dynamic scenarios. YOLO-World revitalizes the YOLOv8 framework with open-vocabulary detection capabilities, employing vision-language modeling and pre-training on expansive datasets to excel at identifying a broad array of objects in zero-shot scenarios with unmatched efficiency.

主要功能

  1. 实时解决方案:利用 CNN 的计算速度,YOLO-World 可提供快速的开放词汇检测解决方案,满足各行业对即时结果的需求。

  2. 效率和性能: YOLO-World 可在不牺牲性能的前提下降低计算和资源需求,提供了一种可替代SAM 等模型的强大功能,但计算成本仅为它们的一小部分,从而支持实时应用。

  3. 利用离线词汇进行推理: YOLO-World 引入了 "先提示后检测 "的策略,利用离线词汇进一步提高效率。这种方法可以使用预先计算的自定义提示,包括标题或类别,并将其编码和存储为离线词汇嵌入,从而简化检测过程。

  4. 由YOLOv8 支持:基于 Ultralytics YOLOv8YOLO-World 利用实时对象检测方面的最新进展,以无与伦比的准确性和速度促进开放词汇检测。

  5. 卓越的基准测试: YOLO在标准基准测试的速度和效率方面,World 超越了现有的开放词汇检测器,包括 MDETR 和 GLIP 系列,展示了YOLOv8 在单个NVIDIA V100GPU 上的卓越能力。

  6. 应用广泛: YOLO-World 的创新方法为众多视觉任务带来了新的可能性,与现有方法相比,速度提高了几个数量级。

可用型号、支持的任务和运行模式

本节详细介绍了可用的模型及其特定的预训练权重、支持的任务以及与各种运行模式(如推理验证训练导出)的兼容性,支持的模式用 ✅ 表示,不支持的模式用 ❌ 表示。

备注

YOLOv8-World 的所有权重都直接移植自YOLO-World 官方资源库,突出了他们的卓越贡献。

型号预训练重量支持的任务推论验证培训出口
YOLOv8s-世界yolov8s-world.pt物体检测
YOLOv8s-worldv2yolov8s-worldv2.pt物体检测
YOLOv8m-世界yolov8m-world.pt物体检测
YOLOv8m-worldv2yolov8m-worldv2.pt物体检测
YOLOv8l-世界yolov8l-world.pt物体检测
YOLOv8l-worldv2yolov8l-worldv2.pt物体检测
YOLOv8x-世界yolov8x-world.pt物体检测
YOLOv8x-worldv2yolov8x-worldv2.pt物体检测

COCO 数据集上的零点转移

型号mAPmAP50mAP75
yolov8s-世界37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-世界42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-世界45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-世界47.063.051.2
yolov8x-worldv247.162.851.4

使用示例

YOLO-World 模型可轻松集成到您的Python 应用程序中。Ultralytics 提供用户友好的Python API 和CLI 命令,以简化开发。

列车使用情况

提示

我们强烈建议使用 yolov8-worldv2 自定义训练模型,因为它支持确定性训练,而且易于导出其他格式,如onnx/tensorrt 。

Object detection is straightforward with the train 方法,如下图所示:

示例

PyTorch pretrained *.pt 模型以及配置 *.yaml 文件可以传递给 YOLOWorld() 类在python 中创建模型实例:

from ultralytics import YOLOWorld

# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")

# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

预测使用情况

使用 predict 方法,如下图所示:

示例

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("path/to/image.jpg")

# Show results
results[0].show()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

该代码段演示了加载预训练模型并在图像上运行预测的简便性。

阀门使用

数据集的模型验证简化如下:

示例

from ultralytics import YOLO

# Create a YOLO-World model
model = YOLO("yolov8s-world.pt")  # or select yolov8m/l-world.pt for different sizes

# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640

轨道使用情况

使用YOLO-World 模型在视频/图像上进行物体跟踪的流程如下:

示例

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="path/to/video.mp4")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video/file.mp4"

备注

Ultralytics 提供的YOLO-World 模型预先配置了COCO 数据集类别,作为其离线词汇的一部分,从而提高了直接应用的效率。这种整合使YOLOv8-World 模型能够直接识别和预测 COCO 数据集中定义的 80 个标准类别,而无需额外的设置或定制。

设置提示

YOLO-世界提示类名称概览

The YOLO-World framework allows for the dynamic specification of classes through custom prompts, empowering users to tailor the model to their specific needs without retraining. This feature is particularly useful for adapting the model to new domains or specific tasks that were not originally part of the training data. By setting custom prompts, users can essentially guide the model's focus towards objects of interest, enhancing the relevance and accuracy of the detection results.

例如,如果您的应用程序只需要检测 "人 "和 "公共汽车 "对象,您可以直接指定这些类:

示例

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("path/to/image.jpg")

# Show results
results[0].show()

您还可以在设置自定义类后保存模型。这样您就可以创建一个YOLO-World 模型版本,专门用于您的特定用例。此过程将您的自定义类定义直接嵌入模型文件,使模型无需进一步调整即可与您指定的类一起使用。请按照以下步骤保存和加载您的自定义YOLOv8 模型:

示例

首先加载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(["person", "bus"])

# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")

保存后,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("path/to/image.jpg")

# Show results
results[0].show()

使用自定义词汇保存的好处

  • 效率:通过关注相关对象、减少计算开销和加快推理速度,简化检测过程。
  • 灵活性:可使模型轻松适应新的或特殊的检测任务,而无需进行大量的再培训或数据收集。
  • 简单:无需在运行时重复指定自定义类,从而简化了部署,使模型可直接使用其嵌入式词汇。
  • Performance: Enhances detection accuracy for specified classes by focusing the model's attention and resources on recognizing the defined objects.

这种方法为特定任务定制最先进的物体检测模型提供了强有力的手段,使高级人工智能更容易获得并适用于更广泛的实际应用。

从零开始重现官方结果(实验性)

准备数据集

  • 列车数据
数据集类型样品箱子注释文件
对象365v1检测609k9621kobjects365_train.json
GQA接地621k3681kfinal_mixed_train_noo_coco.json
Flickr30k接地149k641kfinal_flickr_separateGT_train.json
  • Val 数据
数据集类型注释文件
LVIS minival检测minival.txt

从零开始启动培训

备注

WorldTrainerFromScratch 经过高度定制,可同时在检测数据集和接地数据集上训练yolo-world 模型。更多详情请查看 ultralytics.model.yolo.world.train_world.py.

示例

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 计算机视觉中心表示感谢,感谢他们利用YOLO-World 在实时开放词汇对象检测方面所做的开创性工作:

@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 上获取。该项目的源代码和其他资源可通过GitHub 存储库访问。我们感谢他们致力于推动这一领域的发展,并与社区分享他们的宝贵见解。

常见问题

YOLO-World 模式是什么,如何运作?

YOLO-World 模型是一种先进的实时物体检测方法,它以该框架为基础。 Ultralytics YOLOv8框架的先进实时物体检测方法。它能根据描述性文本识别图像中的物体,在开放词汇检测任务中表现出色。YOLO-World 利用视觉语言建模和在大型数据集上的预训练,实现了高效率和高性能,同时大大降低了计算需求,是各行业实时应用的理想选择。

YOLO-World 如何处理自定义提示的推理?

YOLO-World supports a "prompt-then-detect" strategy, which utilizes an offline vocabulary to enhance efficiency. Custom prompts like captions or specific object categories are pre-encoded and stored as offline vocabulary embeddings. This approach streamlines the detection process without the need for retraining. You can dynamically set these prompts within the model to tailor it to specific detection tasks, as shown below:

from ultralytics import YOLOWorld

# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt")

# Define custom classes
model.set_classes(["person", "bus"])

# Execute prediction on an image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

为什么要选择YOLO-World 而不是传统的开放词汇检测模型?

YOLO-与传统的开放词汇检测模型相比,-World 具有多项优势:

  • 实时性能:它利用 CNN 的计算速度提供快速、高效的检测。
  • 高效率和低资源需求: YOLO-World 在保持高性能的同时,大幅降低了计算和资源需求。
  • 自定义提示:该模型支持动态提示设置,允许用户指定自定义检测类别,而无需重新培训。
  • 卓越的基准测试:在标准基准测试中,它的速度和效率均优于 MDETR 和 GLIP 等其他开放词汇检测器。

如何在数据集上训练YOLO-World 模型?

通过提供的Python API 或CLI 命令,在数据集上训练YOLO-World 模型非常简单。以下是如何使用Python 开始训练:

from ultralytics import YOLOWorld

# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")

# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

或使用CLI :

yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

YOLO-World 模型及其支持的任务有哪些?

Ultralytics 提供多种预训练的YOLO-World 模型,支持各种任务和运行模式:

型号预训练重量支持的任务推论验证培训出口
YOLOv8s-世界yolov8s-world.pt物体检测
YOLOv8s-worldv2yolov8s-worldv2.pt物体检测
YOLOv8m-世界yolov8m-world.pt物体检测
YOLOv8m-worldv2yolov8m-worldv2.pt物体检测
YOLOv8l-世界yolov8l-world.pt物体检测
YOLOv8l-worldv2yolov8l-worldv2.pt物体检测
YOLOv8x-世界yolov8x-world.pt物体检测
YOLOv8x-worldv2yolov8x-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)
📅 Created 8 months ago ✏️ Updated 5 days ago

评论