YOLO 自定义目标检测 | 理论+实践

开发
实时目标检测由于依赖非极大值抑制(NMS)和架构效率低下而面临挑战。YOLOv10 通过消除 NMS 并采用专注于效率和准确性的设计策略解决了这些问题。

概述

YOLOv10 是由清华大学研究人员利用 Ultralytics Python 软件包开发的,它通过改进模型架构并消除非极大值抑制(NMS)提供了一种新颖的实时目标检测方法。这些优化使得模型在保持先进性能的同时,降低了计算需求。大量实验表明,YOLOv10 在各种模型规模上提供了更优的准确率-延迟权衡。

正如读过我之前文章的朋友所知道的,我分享了使用 YOLO 模型的各种项目,因为在预训练模型中,YOLO 模型在性能和效率方面明显优于其他模型。然而,实时目标检测由于依赖非极大值抑制(NMS)和架构效率低下而面临挑战。YOLOv10 通过消除 NMS 并采用专注于效率和准确性的设计策略解决了这些问题。

架构

来自 Ultralytics 的图示

  • 骨干网络:负责特征提取,YOLOv10 的骨干网络使用增强版的 CSPNet(交叉阶段部分网络)来改善梯度流动并减少计算冗余。
  • 颈部网络:设计用于聚合不同尺度的特征并将其传递到头部网络。它包含用于有效多尺度特征融合的 PAN(路径聚合网络)层。
  • 一对多头:在训练过程中为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  • 一对一头:在推理过程中为每个对象生成一个最佳预测,消除 NMS 的需要,从而减少延迟并提高效率。

模型变体及性能YOLOv10 提供六种模型:

  • YOLOv10-N:用于极其资源受限环境的纳米版。
  • YOLOv10-S:平衡速度和准确性的小型版。
  • YOLOv10-M:用于通用的中型版。
  • YOLOv10-B:增加宽度以提高准确性的平衡版。
  • YOLOv10-L:在增加计算资源成本的情况下提高准确性的高级版。
  • YOLOv10-X:用于最大化准确性的超大型版。

来自 Ultralytics 的图示

比较

让我们看看在标准基准(如 COCO)上测试的不同模型在延迟和准确性方面的比较。

很明显,YOLOv10 是实时目标检测应用的前沿技术,以更少的参数提供更高的准确性和速度性能。

训练 YOLOv10 进行自定义目标检测

首先,克隆官方 YOLOv10 GitHub 仓库以下载必要的 yolov10n 模型。

!pip install -q git+https://github.com/THU-MIG/yolov10.git

!wget -P -q https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10n.pt

您可以在 Roboflow Universe 上尝试任何自定义项目,创建自己的数据集,甚至使用由 Intel 赞助的 RF100 数据集。对于本文,我将使用一个预先准备好的数据集,用于检测 X 射线图像中的危险物品。数据集链接:https://universe.roboflow.com/vladutc/x-ray-baggage

使用 Roboflow API 以 YOLOv8 格式下载您的模型。

!pip install -q roboflow
from roboflow import Roboflow
rf = Roboflow(api_key="your-api-key")
project = rf.workspace("vladutc").project("x-ray-baggage")
version = project.version(3)
dataset = version.download("yolov8")

配置参数,开始训练:

!yolo task=detect mode=train epochs=25 batch=32 plots=True \
model='/content/-q/yolov10n.pt' \
data='/content/X-Ray-Baggage-3/data.yaml'

示例 data.yaml 文件:

names:
- Gun
- Knife
- Pliers
- Scissors
- Wrench

nc: 5

roboflow:
  license: CC BY 4.0
  project: x-ray-baggage
  url: https://universe.roboflow.com/vladutc/x-ray-baggage/dataset/3
  version: 3
  workspace: vladutc

test: /content/X-Ray-Baggage-3/test/images
train: /content/X-Ray-Baggage-3/train/images
val: /content/X-Ray-Baggage-3/valid/images

让我们看看结果。

Image(filename='/content/runs/detect/train/results.png', width=1000)

让我们预测测试数据并在 5x2 网格中显示结果。

from ultralytics import YOLOv10

model_path = '/content/runs/detect/train/weights/best.pt'
model = YOLOv10(model_path)
results = model(source='/content/X-Ray-Baggage-3/test/images', conf=0.25,save=True)
import glob
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

images = glob.glob('/content/runs/detect/predict/*.jpg')

images_to_display = images[:10]

fig, axes = plt.subplots(2, 5, figsize=(20, 10))

for i, ax in enumerate(axes.flat):
    if i < len(images_to_display):
        img = mpimg.imread(images_to_display[i])
        ax.imshow(img)
        ax.axis('off')  
    else:
        ax.axis('off')  

plt.tight_layout()
plt.show()

参考资料

官方仓库:https://github.com/THU-MIG/yolov10Ultralytics

责任编辑:赵宁宁 来源: 小白玩转Python
相关推荐

2024-07-09 08:50:23

2024-10-07 11:12:55

2024-10-09 17:02:34

2017-05-18 12:36:16

android万能适配器列表视图

2017-05-19 10:03:31

AndroidBaseAdapter实践

2023-12-21 09:00:21

函数React 组件useEffect

2024-11-29 16:10:31

2021-08-25 10:14:51

鸿蒙HarmonyOS应用

2023-07-28 09:26:43

GolangZap

2010-08-12 09:45:33

jQuery自定义事件

2024-06-21 10:40:00

计算机视觉

2025-01-14 08:30:00

YOLO目标检测YOLOv8

2023-06-27 15:02:47

2023-06-28 08:05:46

场景vue3自定义

2015-02-12 15:33:43

微信SDK

2024-08-20 09:30:00

2024-11-06 16:56:51

2015-02-12 15:38:26

微信SDK

2016-11-16 21:55:55

源码分析自定义view androi

2015-05-18 10:24:28

点赞
收藏

51CTO技术栈公众号