当前位置: 首页 > news >正文

实战|YOLOv10 自定义目标检测

引言

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

alt

概述

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

架构

alt
  • 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:超大型版,追求极致的准确性和性能表现。

alt

性能比较

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

alt
img
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)
alt

让我们预测测试数据并在 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(25, figsize=(2010))

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()
alt
Reference
[1]

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

本文由 mdnice 多平台发布

相关文章:

  • 数学建模 —— 查找数据
  • Tomcat基础详解
  • 【MATLAB】语法
  • atcoder abc 358
  • 【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷一级真题(含答案)
  • CST初级教程 七
  • SQLite数据库(数据库和链表双向转换)
  • STM32之二:时钟树
  • 和琪宝的厦门之旅~
  • 尚品汇-(四)
  • 嵌入式web 服务器boa的编译和移植
  • 探索Linux的奇妙世界:第二关---Linux的基本指令1
  • React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路
  • IOS Swift : 从入门到精通结构、属性和方法 结构体,第一部分
  • 生产管理系统看板,在自动化设备领域的创新应用
  • CentOS 7 修改主机名
  • CSS相对定位
  • java中具有继承关系的类及其对象初始化顺序
  • node 版本过低
  • Python - 闭包Closure
  • python docx文档转html页面
  • ReactNative开发常用的三方模块
  • Webpack入门之遇到的那些坑,系列示例Demo
  • Zsh 开发指南(第十四篇 文件读写)
  • 番外篇1:在Windows环境下安装JDK
  • 计算机常识 - 收藏集 - 掘金
  • 坑!为什么View.startAnimation不起作用?
  • 爬虫模拟登陆 SegmentFault
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (52)只出现一次的数字III
  • (k8s)kubernetes 部署Promehteus学习之路
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (黑马点评)二、短信登录功能实现
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (推荐)叮当——中文语音对话机器人
  • (一)面试需要掌握的技巧
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)shell调试方法
  • (转)Sublime Text3配置Lua运行环境
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Framework .NET Core与 .NET 的区别
  • .NET Framework 3.5安装教程
  • .Net FrameWork总结
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net(C#)中String.Format如何使用
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net中的集合
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题
  • [AAuto]给百宝箱增加娱乐功能