实战|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多平台发布

相关推荐
CIb0la9 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
爱笑的眼睛112 天前
浅谈 前端验证码那些事
前端·程序人生
GPT01233 天前
大模型日报 2024-12-20
程序人生
十二测试录3 天前
Python基础——字符串
开发语言·经验分享·python·程序人生·职场发展
测试老哥3 天前
Python自动化测试图片比对算法
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
杰哥就是杰哥4 天前
坚持奋斗到底
程序人生
大鱼前端6 天前
React 19新特性探索:提升性能与开发者体验
程序人生
测试19986 天前
什么是自动化测试?
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
python_知世6 天前
基于LLaMA-Factory微调Llama3
人工智能·深度学习·程序人生·自然语言处理·大语言模型·llama·大模型微调
赵大仁7 天前
从零开始掌握Vue.js组件开发:详解原理与实践
前端·javascript·vue.js·经验分享·vscode·程序人生·前端框架