Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测
前言
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
相关介绍
- 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 的创新方法为多种视觉任务带来了新的可能性,与现有方法相比,速度提高了几个数量级。
- 可用型号、支持的任务和操作模式
可用的模型及其特定的预训练权重、它们支持的任务以及它们与各种操作模式(例如推理、验证、训练和导出)的兼容性,用 ✅ 表示支持的模式,用 ❌ 表示不支持的模式。
前提条件
- 熟悉Python
实验环境
bash
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
安装环境
bash
pip install ultralytics
# 或者
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple # 国内清华源,下载速度更快
项目地址
Linux
bash
git clone https://github.com/ultralytics/ultralytics.git
bash
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目标检测
进行训练
bash
yolo train model=yolov8s-world.yaml data=coco8.yaml epochs=10 imgsz=640 batch=8 workers=1
python
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()
进行预测
bash
yolo predict model=yolov8s-world.pt source=imgs/test.png imgsz=640
python
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()
进行验证
bash
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640 batch=1 workers=1
python
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 模型对视频/图像进行对象跟踪简化如下:
bash
yolo track model=yolov8s-world.pt imgsz=640 source="video/test.mp4"
python
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 框架允许通过自定义提示动态指定类,使用户能够根据自己的特定需求定制模型,而无需重新训练。此功能对于使模型适应新领域或最初不属于训练数据的特定任务特别有用。通过设置自定义提示,用户基本上可以引导模型将注意力集中在感兴趣的对象上,从而增强检测结果的相关性和准确性。
例如,如果您的应用程序只需要检测"人"和"巴士"对象,则可以直接指定这些类:
python
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 模型:
- 首先加载 YOLO-World 模型,为其设置自定义类并保存:
python
# 首先加载 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")
- 保存后,custom_yolov8s.pt 模型的行为与任何其他预训练的 YOLOv8 模型类似,但有一个关键区别:它现在经过优化,仅检测您定义的类。这种定制可以显着提高您特定应用场景的检测性能和效率。
python
# 保存后,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/
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目