Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

前言

相关介绍

  • Ultralytics 官方文档:https://docs.ultralytics.com/
  • Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git.
  • YOLO-World 源代码地址:https://github.com/AILab-CVC/YOLO-World.git.
  • YOLO-World 论文地址:https://arxiv.org/abs/2401.17270
  • YOLO-World 模型引入了一种基于 Ultralytics YOLOv8 的先进实时方法,用于开放词汇检测任务。这项创新可以根据描述性文本检测图像中的任何对象。通过显着降低计算需求,同时保持竞争性能,YOLO-World 成为众多基于视觉的应用程序的多功能工具。
    在这里插入图片描述
  • 概述
    YOLO-World 解决了传统开放词汇检测模型所面临的挑战,这些模型通常依赖于需要大量计算资源的繁琐 Transformer 模型。这些模型对预定义对象类别的依赖也限制了它们在动态场景中的实用性。 YOLO-World 通过开放词汇检测功能重振了 YOLOv8 框架,采用视觉语言建模和对广泛数据集的预训练,能够以无与伦比的效率擅长在零样本场景中识别各种对象。
  • 主要特点
    • 实时解决方案:利用 CNN 的计算速度,YOLO-World 提供快速的开放词汇检测解决方案,满足需要立即结果的行业。
    • 效率和性能:YOLO-World 在不牺牲性能的情况下大幅削减了计算和资源需求,为 SAM 等模型提供了强大的替代方案,但计算成本仅为其一小部分,从而支持实时应用程序。
    • 使用离线词汇进行推理:YOLO-World 引入了“先提示后检测”策略,采用离线词汇进一步提高效率。这种方法允许使用先验计算的自定义提示(包括标题或类别)进行编码并存储为离线词汇嵌入,从而简化检测过程。
    • 由 YOLOv8 提供支持:YOLO-World 基于 Ultralytics YOLOv8 构建,利用实时目标检测领域的最新进展,以无与伦比的准确性和速度促进开放词汇检测。
    • 卓越基准测试:YOLO-World 在标准基准测试的速度和效率方面优于现有的开放词汇检测器(包括 MDETR 和 GLIP 系列),展示了 YOLOv8 在单个 NVIDIA V100 GPU 上的卓越功能。
    • 多功能应用:YOLO-World 的创新方法为多种视觉任务带来了新的可能性,与现有方法相比,速度提高了几个数量级。
  • 可用型号、支持的任务和操作模式
    可用的模型及其特定的预训练权重、它们支持的任务以及它们与各种操作模式(例如推理、验证、训练和导出)的兼容性,用 ✅ 表示支持的模式,用 ❌ 表示不支持的模式。
    在这里插入图片描述

前提条件

实验环境

matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.6.0
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0
tensorboard>=2.4.1
pandas>=1.1.4
seaborn>=0.11.0

安装环境

pip install ultralytics
# 或者
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple # 国内清华源,下载速度更快

在这里插入图片描述

在这里插入图片描述

项目地址

Linux

git clone https://github.com/ultralytics/ultralytics.git
Cloning into 'ultralytics'...
remote: Enumerating objects: 4583, done.
remote: Counting objects: 100% (4583/4583), done.
remote: Compressing objects: 100% (1270/1270), done.
remote: Total 4583 (delta 2981), reused 4576 (delta 2979), pack-reused 0
Receiving objects: 100% (4583/4583), 23.95 MiB | 1.55 MiB/s, done.
Resolving deltas: 100% (2981/2981), done.

Windows

请到https://github.com/ultralytics/ultralytics.git网站下载源代码zip压缩包。

使用Ultralytics框架进行YOLO-World目标检测

进行训练

yolo train model=yolov8s-world.yaml data=coco8.yaml epochs=10 imgsz=640 batch=8 workers=1
from ultralytics import YOLOWorld


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

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

    # Run inference with the YOLOv8n model on the 'bus.jpg' image
    results = model("imgs/test.png", save=True)

if __name__=="__main__":
    train()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

进行预测

yolo predict model=yolov8s-world.pt source=imgs/test.png imgsz=640
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("imgs/test.png")

# Show results
results[0].show()

在这里插入图片描述
在这里插入图片描述

进行验证

yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640 batch=1 workers=1
from ultralytics import YOLO

def val():

    # 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", batch=1, imgsz=640, device=0,workers=1)

if __name__=="__main__":
    val()

在这里插入图片描述

扩展

目标跟踪

使用 YOLO-World 模型对视频/图像进行对象跟踪简化如下:

yolo track model=yolov8s-world.pt imgsz=640 source="video/test.mp4"
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="video/test.mp4",save=True)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置提示

在这里插入图片描述
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("imgs/test.png")

# Show results
results[0].show()

在这里插入图片描述
还可以在设置自定义类后保存模型。通过这样做,可以创建专门针对您的特定用例的 YOLO-World 模型版本。此过程将您的自定义类定义直接嵌入到模型文件中,使模型可以与您指定的类一起使用,而无需进一步调整。请按照以下步骤保存和加载自定义 YOLOv8 模型:

  1. 首先加载 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(["teddy bears", "bus"])

# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")
  1. 保存后,custom_yolov8s.pt 模型的行为与任何其他预训练的 YOLOv8 模型类似,但有一个关键区别:它现在经过优化,仅检测您定义的类。这种定制可以显着提高您特定应用场景的检测性能和效率。
# 保存后,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("imgs/test.png")

# Show results
results[0].show()

在这里插入图片描述

  • 使用自定义词汇表进行保存的好处:
    • 效率:通过关注相关对象来简化检测过程,减少计算开销并加快推理速度。
    • 灵活性:允许模型轻松适应新的或利基检测任务,无需进行大量的再训练或数据收集。
    • 简单性:无需在运行时重复指定自定义类,从而简化部署,使模型可以直接使用其嵌入的词汇表。
    • 性能:通过将模型的注意力和资源集中在识别定义的对象上,提高指定类别的检测准确性。
  • 这种方法提供了一种强大的方法,可以为特定任务定制最先进的对象检测模型,使高级人工智能更容易访问并适用于更广泛的实际应用。

参考文献

[1] Ultralytics 源代码地址:https://github.com/ultralytics/ultralytics.git.
[2] Ultralytics Docs:https://docs.ultralytics.com/

YOLO-Segment是基于YOLOv3目标检测的语义分割模型。通过训练自己的数据集,我们可以让模型具有特定的目标检测和语义分割能力。 首先,需要准备自己的数据集。数据集应包括训练集、验证集和测试集。训练集应包括足够多的样本,以覆盖我们感兴趣的目标。每个样本应包含标注的图像,即我们需要标注方框来框出目标,并用分割掩码圈出目标区域。验证集和测试集应该包括各种场景和角度,用于评估模型的泛化能力。 其次,需要修改YOLO-Segment的代码来适应自己的数据集。我们需要修改数据预处理、模型配置、损失函数和反向传播等步骤,以适应我们的数据集。还需要修改加载自己数据集的操作,并修改自己数据集的类别数量和名称。 接下来,使用修改后的代码进行训练。训练过程应该包括多次迭代,每次迭代应该包括前向传播、损失计算和反向传播等步骤。在训练时,我们应该监控模型的训练损失和验证损失,以确定模型是否过拟合或欠拟合。 最后,使用训练好的模型来进行预测。我们可以用训练好的模型在自己的数据集上进行测试,以验证模型准确度。预测的结果应该是目标检测的框和分割掩码,用于表征目标的形状和大小。 总之,训练自己的数据集需要准备数据、修改代码、进行训练和进行预测等步骤。需要持久耐心和技术,才能让模型具有准确可靠的分割和检测能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FriendshipT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值