YOLO Vision 2026:

YOLO-World 模型#

YOLO-World 模型引入了一种先进的、基于实时 Ultralytics YOLOv8 的开放词汇检测任务方法。这一创新能够根据描述性文本检测图像中的任意对象。通过在保持具有竞争力的性能的同时显着降低计算需求,YOLO-World 成为众多基于视觉的应用的多功能工具。



Watch: YOLO World training workflow on custom dataset

YOLO-World Model architecture overview

概述#

YOLO-World 解决了传统开放词汇检测模型所面临的挑战,这些模型通常依赖于需要大量计算资源的笨重 Transformer 模型。这些模型对预定义对象类别的依赖也限制了它们在动态场景中的实用性。YOLO-World 为 YOLOv8 框架注入了开放词汇检测能力,采用视觉语言建模并在庞大数据集上进行预训练,从而以无与伦比的效率在零样本场景中出色地识别各类对象。

主要特性#

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

  2. 效率与性能: YOLO-World 在不牺牲性能的前提下大幅削减了计算和资源需求,提供了一种比 SAM 等模型更强大且计算成本仅为一小部分的替代方案,从而实现了实时应用。

  3. 离线词汇推理: YOLO-World 引入了“提示-检测”策略,采用离线词汇表来进一步提高效率。这种方法允许使用预先计算好的自定义提示(包括标题或类别)进行编码并存储为离线词汇嵌入,从而简化了检测过程。

  4. **由 YOLOv8 提供支持:**构建于 Ultralytics YOLOv8 之上,YOLO-World 利用实时对象检测的最新进展,以无与伦比的准确度和速度促进开放词汇检测。

  5. 基准卓越: YOLO-World 在标准基准测试中的速度和效率均优于现有的开放词汇检测器(包括 MDETR 和 GLIP 系列),展示了 YOLOv8 在单块 NVIDIA V100 GPU 上的卓越能力。

  6. 多功能应用: YOLO-World 的创新方法为众多视觉任务解锁了新的可能性,其速度较现有方法提升了几个数量级。

可用模型、支持的任务和操作模式#

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

注意

所有的 YOLOv8-World 权重均已直接从官方 YOLO-World 仓库迁移,彰显了它们出色的贡献。

模型类型预训练权重支持的任务训练验证推理导出
YOLOv8s-worldyolov8s-world.pt目标检测
YOLOv8s-worldv2yolov8s-worldv2.pt目标检测
YOLOv8m-worldyolov8m-world.pt目标检测
YOLOv8m-worldv2yolov8m-worldv2.pt目标检测
YOLOv8l-worldyolov8l-world.pt目标检测
YOLOv8l-worldv2yolov8l-worldv2.pt目标检测
YOLOv8x-worldyolov8x-world.pt目标检测
YOLOv8x-worldv2yolov8x-worldv2.pt目标检测

COCO 数据集上的零样本迁移#

性能
模型类型mAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

使用示例#

YOLO-World 模型易于集成到你的 Python 应用中。Ultralytics 提供了用户友好的 Python APICLI 命令来简化开发。



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

训练使用#

提示

我们强烈建议使用 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 YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")

预测使用#

使用 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()

此代码片段演示了加载预训练模型并对图像进行预测的简单性。

验证使用#

数据集上的模型验证流程如下:

示例
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")

跟踪使用#

在视频/图像上使用 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")
注意

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

设置提示#

YOLO-World prompt class names overview

YOLO-World 框架允许通过自定义提示动态指定类别,使用户能够无需重新训练即可根据特定需求定制模型。此功能对于将模型调整为最初不属于训练数据的新领域或特定任务特别有用。通过设置自定义提示,用户基本上可以引导模型的焦点指向感兴趣的对象,从而提高检测结果的相关性和准确度

例如,如果你的应用只需要检测“人(person)”和“公交车(bus)”对象,你可以直接指定这些类别:

示例
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()
背景类别

一些用户发现,在某些场景下,追加一个空字符串 "" 作为背景类可以改善检测性能。这种行为似乎取决于具体场景,其确切机制尚未完全理解:

model.set_classes(["person", "bus", ""])

你也可以在设置自定义类别后保存模型。通过这样做,你可以创建一个专门针对你特定用例的 YOLO-World 模型版本。此过程将你的自定义类别定义直接嵌入到模型文件中,使得模型无需进一步调整即可使用你指定的类别。请按照以下步骤保存并加载你的自定义 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(["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()

使用自定义词汇保存的优势#

  • 效率:通过专注于相关对象来简化检测过程,减少计算开销并加快推理速度。
  • 灵活性:允许模型轻松适应新的或小众的检测任务,无需进行大量的重新训练或数据收集。
  • 简便性:消除了在运行时重复指定自定义类别的需要,简化了部署流程,使模型能够直接使用其嵌入的词汇表。
  • 性能:通过将模型的注意力和资源集中在识别定义的物体上,从而增强特定类别的检测准确性。

此方法为针对特定任务定制最先进的对象检测模型提供了强大的途径,使先进的 AI 更易于访问,并适用于更广泛的实际应用。

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

准备数据集#

  • 训练数据
  • 验证数据
数据集类型标注文件
LVIS minival检测minival.txt

从零开始启动训练#

注意

WorldTrainerFromScratch 经过高度定制,允许同时在检测数据集和 grounding 数据集上训练 yolo-world 模型。有关更多详细信息,请参阅 ultralytics.models.yolo.world.train_world.py

示例
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Option 1: Use Python dictionary
data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "flickr30k/images",
                "json_file": "flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "GQA/images",
                "json_file": "GQA/final_mixed_train_no_coco.json",
            },
        ],
    },
    "val": {"yolo_data": ["lvis.yaml"]},
}

# Option 2: Use YAML file (yolo_world_data.yaml)
# train:
#   yolo_data:
#     - Objects365.yaml
#   grounding_data:
#     - img_path: flickr/full_images/
#       json_file: flickr/annotations/final_flickr_separateGT_train_segm.json
#     - img_path: mixed_grounding/gqa/images
#       json_file: mixed_grounding/annotations/final_mixed_train_no_coco_segm.json
# val:
#   yolo_data:
#     - lvis.yaml

model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
    data=data,  # or data="yolo_world_data.yaml" if using YAML file
    batch=128,
    epochs=100,
    trainer=WorldTrainerFromScratch,
)

引用与致谢#

我们向腾讯优图实验室计算机视觉中心在 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}
}

如需进一步阅读,可以在 arXiv 上找到最初的 YOLO-World 论文。可以通过他们的 GitHub 仓库访问该项目的源代码和其他资源。我们感谢他们为推进该领域发展并与社区分享宝贵见解所做出的承诺。

常见问题解答#

  • YOLO-World 模型是一种基于 Ultralytics YOLOv8 框架的先进实时对象检测方法。它擅长通过根据描述性文本识别图像中的对象来执行开放词汇检测任务。利用视觉语言建模和在大数据集上的预训练,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 具有以下几个优势:

    • 实时性能: 它利用 CNN 的计算速度来提供快速、高效的检测。
    • 效率和低资源需求: YOLO-World 在保持高性能的同时,显著降低了计算和资源需求。
    • 可定制的提示词: 该模型支持动态提示词设置,允许用户指定自定义检测类别而无需重新训练。
    • 基准测试表现出色: 在标准基准测试中,其速度和效率均优于 MDETR 和 GLIP 等其他开放词汇检测器。
  • 通过提供的 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
  • Ultralytics 提供了多个预训练的 YOLO-World 模型,支持各种任务和操作模式:

    模型类型预训练权重支持的任务训练验证推理导出
    YOLOv8s-worldyolov8s-world.pt目标检测
    YOLOv8s-worldv2yolov8s-worldv2.pt目标检测
    YOLOv8m-worldyolov8m-world.pt目标检测
    YOLOv8m-worldv2yolov8m-worldv2.pt目标检测
    YOLOv8l-worldyolov8l-world.pt目标检测
    YOLOv8l-worldv2yolov8l-worldv2.pt目标检测
    YOLOv8x-worldyolov8x-world.pt目标检测
    YOLOv8x-worldv2yolov8x-worldv2.pt目标检测
  • 要从头开始复现官方结果,你需要准备数据集并使用提供的代码启动训练。训练过程包括创建一个数据字典并运行带有自定义训练器的 train 方法:

    from ultralytics import YOLOWorld
    from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
    
    data = {
        "train": {
            "yolo_data": ["Objects365.yaml"],
            "grounding_data": [
                {
                    "img_path": "flickr30k/images",
                    "json_file": "flickr30k/final_flickr_separateGT_train.json",
                },
                {
                    "img_path": "GQA/images",
                    "json_file": "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)

评论