实战|YOLOv10 自定义目标检测

引言

YOLOv10^[1]^ 概述和使用自定义数据训练模型

概述

由清华大学的研究团队基于 Ultralytics Python 包研发的 YOLOv10,通过优化模型结构并去除非极大值抑制(NMS)环节,提出了一种创新的实时目标检测技术。这些改进不仅实现了行业领先的检测性能,还降低了对计算资源的需求。大量实验结果证明,YOLOv10 在不同规模的模型上都能提供卓越的准确率和延迟之间的平衡。

架构

  • Backbone:在 YOLOv10 中,主干网络负责提取特征,它采用了改进版的 CSPNet(跨阶段部分网络),这一改进有助于优化梯度传播,并降低计算过程中的重复性。
  • Neck:连接层的作用是整合不同尺度上的特征,并将它们传递给网络的输出部分。它内部集成了 PAN(路径聚合网络)层,以实现多尺度特征的有效融合。
  • One-to-Many Head:在训练过程中,对于每个目标对象生成多个预测结果,这样做可以提供更多的监督信号,从而提升模型的学习精度。
  • One-to-One Head:在推理过程中,对于每个目标对象生成单一的最佳预测结果,这样做可以省去 NMS(非极大值抑制)的步骤,减少处理时间,提高整体的效率。

模型变体和性能

YOLOv10 提供了六种不同规模的模型:

  1. YOLOv10-N:纳米版,专为资源极其有限的场合设计。
  2. YOLOv10-S:小型版,兼顾速度与准确性。
  3. YOLOv10-M:中型版,适用于一般用途。
  4. YOLOv10-B:平衡版,通过增加模型宽度来提升准确性。
  5. YOLOv10-L:大型版,牺牲一定的计算资源以换取更高的准确性。
  6. YOLOv10-X:超大型版,追求极致的准确性和性能表现。

性能比较

让我们看一下不同模型在延迟和准确性方面的比较,这些模型是在 COCO 等标准基准上进行测试的。
img

显然,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 射线图像中的可疑物品而设计好的数据集。

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

Reference [1]

Source: https://medium.com/@batuhansenerr/yolov10-custom-object-detection-bd7298ddbfd3

本文由mdnice多平台发布

相关推荐
行則独善其身1 小时前
计算机网络-BGP路由优选原则十
程序人生
潇潇说测试12 小时前
Python+requests+pytest+excel+allure 接口自动化测试实战
自动化测试·软件测试·python·功能测试·程序人生·excel·pytest
测试界柠檬16 小时前
JMeter接口自动化测试(数据驱动)
自动化测试·软件测试·功能测试·jmeter·程序人生·职场和发展
前端之虎陈随易17 小时前
Node.js全栈指南:浏览器显示一个网页
前端·javascript·程序人生·面试·职场和发展·node.js·编程
山水酒月2 天前
原来“山水博客“的分类也是可以拖动排序的
程序人生·考研·职场和发展·c#·学习方法·高考
WarghostWu2 天前
计算机人说学校-北京理工大学-计算机方向
程序人生·生活
WeiXiao_Hyy2 天前
从我邮毕业啦!!!
经验分享·笔记·程序人生
测试界吖吖2 天前
0基础学JMeter:如何开始简单的WEB压力测试(一)
自动化测试·软件测试·功能测试·jmeter·程序人生·职场和发展·压力测试
程序员曦曦3 天前
基于Jmeter的分布式压测环境搭建及简单压测实践
自动化测试·软件测试·分布式·功能测试·jmeter·程序人生·职场和发展
暮-夜染3 天前
志愿填报,院校优先还是专业优先?
经验分享·学习·程序人生·生活