Ascend-SACT/Yolo_world
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

概述

YOLO-World 模型引入了一种先进的、基于 UltralyticsYOLOv8 的实时开放词汇目标检测方法。这项创新使得能够根据描述性文本检测图像中的任何物体。通过显著降低计算需求同时保持有竞争力的性能,YOLO-World 成为众多基于视觉的应用的多功能工具。

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

主要功能:

  • 实时解决方案: YOLO-World 利用 CNN 的计算速度,提供快速的开放词汇检测解决方案,满足需要即时结果的行业需求。
  • 效率和性能: YOLO-World 大幅削减了计算和资源需求,同时又不牺牲性能,为像 SAM 这样的模型提供了一个强大的替代方案,但计算成本仅为其一小部分,从而实现了实时应用。
  • 离线词汇推理:YOLO-World引入了“提示-然后-detect”策略,采用离线词汇进一步提高效率。这种方法使得可以使用预先计算的自定义提示,包括标题或类别,将其编码并存储为离线词汇嵌入,从而简化了检测过程。
  • 由 YOLOv8 提供支持:YOLO-World 构建于 Ultralytics YOLOv8 之上,利用实时对象检测的最新进展,以无与伦比的准确性和速度促进开放词汇检测。
  • 卓越的基准性能: 在标准基准测试中,YOLO-World 在速度和效率方面优于现有的开放词汇检测器,包括 MDETR 和 GLIP 系列,展示了 YOLOv8 在单个 NVIDIA V100 GPU 上的卓越性能。
  • 多功能应用: YOLO-World 的创新方法为众多视觉任务开启了新的可能性,与现有方法相比,速度提高了几个数量级。

YOLO-World 的架构由三部分组成:

  • (1) YOLOv8 检测器

基于 Darknet 主干网络,提取多尺度图像特征。 采用 Path Aggregation Network (PAN) 增强特征融合。

  • (2) 文本编码器

使用 CLIP 文本编码器 将类别名称(如“背包”)转换为语义向量。 文本嵌入可离线缓存,避免实时计算开销。

  • (3) RepVL-PAN 网络

Re-parameterizable Vision-Language Path Aggregation Network:动态融合图像特征与文本嵌入,通过区域-文本对比损失优化检测。 实现跨模态对齐,提升对未知物体的泛化能力。

推理环境准备

Ultralytics 提供了多种安装方法,包括 pip、conda 和 Docker。您可以通过以下方式安装 YOLO: ultralytics pip 软件包(用于最新的稳定版本),或通过克隆 Ultralytics GitHub 仓库 对于最新版本。Docker 也是一种在隔离容器中运行软件包的选项,这样可以避免本地安装。

pip安装

pip install -U ultralytics

也可以安装 ultralytics 直接从 Ultralytics GitHub 仓库。如果想要最新的开发版本,这将非常有用。确保您已安装 Git 命令行工具,然后运行:

# Install the ultralytics package from GitHub
pip install git+https://github.com/ultralytics/ultralytics.git@main

Conda安装

Conda 可以用作 pip 的替代包管理器:

# Install the ultralytics package using conda
conda install -c conda-forge ultralytics

Git克隆

# Clone the ultralytics repository
git clone https://github.com/ultralytics/ultralytics

# Navigate to the cloned directory
cd ultralytics

# Install the package in editable mode for development
pip install -e .

快速上手

训练

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 YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")

预测

使用以下方法可以轻松实现对象检测 predict method,如下所示:

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

高级用法

自定义推理提示

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

设置自定义类别后,您还可以保存模型。通过此操作,您将创建一个专为特定应用场景YOLO版本。该过程会将自定义类别定义直接嵌入模型文件,使模型无需额外调整即可直接使用指定类别。请按以下步骤保存并YOLO:

首先加载一个 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 模型,但有一个关键区别:它现在已优化为仅 detect 您定义的类别。这种定制可以显著提高您特定应用场景的 detect 性能和效率。

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 更易于访问并适用于更广泛的实际应用。