跳至内容

YOLO-世界模式

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



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

YOLO-世界模型架构概述

概述

YOLO-传统的开放式词汇检测模型通常依赖于需要大量计算资源的繁琐的 Transformer 模型。这些模型对预定义对象类别的依赖也限制了它们在动态场景中的实用性。YOLO-World利用开放式词汇检测功能重振了YOLOv8 框架,采用了视觉语言建模和在大量数据集上进行预训练的方法,能够以无与伦比的效率在零拍摄场景中出色地识别大量物体。

主要功能

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

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

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

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

  5. Benchmark Excellence: YOLO-World outperforms existing open-vocabulary detectors, including MDETR and GLIP series, in terms of speed and efficiency on standard benchmarks, showcasing YOLOv8's superior capability on a single NVIDIA V100 GPU.

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

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

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

备注

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

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

COCO 数据集上的零点转移

型号 mAP mAP50 mAP75
yolov8s-世界 37.4 52.0 40.6
yolov8s-worldv2 37.7 52.2 41.0
yolov8m-世界 42.0 57.0 45.6
yolov8m-worldv2 43.0 58.4 46.8
yolov8l-世界 45.7 61.3 49.8
yolov8l-worldv2 45.8 61.3 49.8
yolov8x-世界 47.0 63.0 51.2
yolov8x-worldv2 47.1 62.8 51.4

使用示例

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

列车使用情况

提示

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

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

示例

PyTorch 训练有素 *.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-世界提示类名称概览

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("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()

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

  • 效率:通过关注相关对象、减少计算开销和加快推理速度,简化检测过程。
  • 灵活性:可使模型轻松适应新的或特殊的检测任务,而无需进行大量的再培训或数据收集。
  • 简单:无需在运行时重复指定自定义类,从而简化了部署,使模型可直接使用其嵌入式词汇。
  • 性能通过将模型的注意力和资源集中在识别定义的对象上,提高指定类别的检测精度。

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

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

准备数据集

  • 列车数据
数据集 类型 样品 箱子 注释文件
对象365v1 检测 609k 9621k objects365_train.json
GQA 接地 621k 3681k final_mixed_train_noo_coco.json
Flickr30k 接地 149k 641k final_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 支持 "先提示后检测 "策略,利用离线词汇提高效率。自定义提示(如标题或特定对象类别)被预先编码并存储为离线词汇嵌入。这种方法简化了检测过程,无需重新训练。您可以在模型中动态设置这些提示,使其适合特定的检测任务,如下图所示:

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-worldv2 yolov8s-worldv2.pt 物体检测
YOLOv8m-世界 yolov8m-world.pt 物体检测
YOLOv8m-worldv2 yolov8m-worldv2.pt 物体检测
YOLOv8l-世界 yolov8l-world.pt 物体检测
YOLOv8l-worldv2 yolov8l-worldv2.pt 物体检测
YOLOv8x-世界 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)


创建于 2024-02-14,更新于 2024-07-04
作者:glenn-jocher(9),RizwanMunawar(3),Burhan-Q(1),Laughing-q(4)

评论